文章目录
- 每日一句正能量
- 前言
- 基础介绍
- 什么是Prompt?
- 什么是 Prompt Engineering?
- 为什么需要 Prompt Engineering?
- 如何进行 Prompt Engineering?
- Prompt的基本原则
- Prompt的编写模式
- AI 可以帮助程序员做什么?
- AI可以帮助其他人做什么?
- Prompt Engineering 的前景和挑战
- 后记
每日一句正能量
既然降生到这世上,我就要好好看看它,找到属于自己的世界第一。
前言
人工智能(AI)是当今科技领域的热门话题,尤其是自然语言处理(NLP)技术,它可以让机器理解和生成自然语言。随着大型语言模型(LLM)的发展,如 GPT-3、DALL-E 等,我们可以利用这些模型来完成各种有趣和有用的任务,如写诗、画画、编程等。但是,要让这些模型按照我们的意愿工作,并不是一件容易的事情。这就需要用到一种叫做 Prompt Engineering 的技术。
当你还在错误使用对话 AI 工具如 GPT,可能会觉得其作用不过是知识平移总结或简单问答。实际上,当了解先进的用法、知悉如何做到 better prompt,你会发现:AI 不是来替代你的,是来帮助你更好工作。如果还用搜索引擎的“关键词匹配”、“关键词命中”思路去思考人工智能的使用,已然有些落后。本篇在详细介绍几个GPT帮助程序员工作(干货满满)的应用场景之后,将为你分享AI的正确打开方式——better prompt。
基础介绍
- AIGC提示词通常由多个单词、词组或短句构成,以,分割组成;
- 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt)。正向确定生成方向,反向排除生成方向;
- 总数量建议不超过75个;
- AI程序会依照概率来选择性执行,如果提示词之间有冲突,AI会根据权重确定的概率来随机选择执行哪个提示词;
- 生成图片的尺寸越大,需要的提示词就越多,否则提示词之间会相互污染;
- 提示词支持使用emoji : call_me_hand:,且表现力较好。
什么是Prompt?
prompt顾名思义就是“提示”的意思。prompt简单来说就是你给AI的指令。prompt可以是一段文字,比如你和ChatGPT等对话的,也可以是按照一定的格式的参数描述,比如AI绘图的软件,使用参数的情况比较多。
提示词(Prompt)是与AI模型交流的语言,用以告诉AI模型想要生成的图像的特征。提示词的准确性、精准度直接决定了生成的图像是否符合我们的预期。
和Prompt对应的一个专业词汇是Prompt Engineering(PE)。PE是人工智能(AI)领域中的一个概念,尤其是自然语言处理(NLP)领域。PE通常通过将问题转换为特定格式的输入,并使用预定义的模板、规则和算法来处理,让AI能够更好地理解任务并给出相应的回答。PE的优点是可以使AI更加灵活和精确地理解任务,并且能够减少因为语言表达不清晰而导致的误解和错误,使其能够准确、可靠地执行特定任务。
通俗来说,就是你要掌握和AI对话的技巧,让AI真正的懂你,特别是现在很多的AI产品的智能化水平都还有待进一步的提升,因此,学一点Prompt Engineering的知识是很有必要的。
什么是 Prompt Engineering?
Prompt Engineering 是一种在人工智能领域,特别是自然语言处理领域的概念。它指的是如何设计输入数据,使其能够清楚地描述任务,并引导模型给出正确和合理的输出。换句话说,它就是给 AI 模型的指令。
Prompt 可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本或图片。
为什么需要 Prompt Engineering?
你可能用过不少 AI 相关的产品,你或许会觉得好像只需要会说话、会打字,就能让 AI 输出答案。好像不需要什么技术。
但实际上,并不是所有的 prompt 都能得到满意或精确的答案。因为人类的语言从根本上说是不精确的2,目前机器还没法很好地理解人类说的话3。所以才会出现 Prompt Engineering 这个技术。另外,受制于目前大语言模型 AI 的实现原理4,部分逻辑运算问题、格式问题等等都需要额外对 AI 进行提示。
举个例子,在 ChatGPT 里输入这样一个简单数学题:
What is 100*100/400*56?
ChatGPT 会返回一个错误答案:
0.4464
但如果我们稍微改变一下 prompt 的格式:
Calculate: (100*100)/(400*56)
ChatGPT 就会返回正确答案:
0.04464
可见 prompt 的设计对于结果有很大影响。
如何进行 Prompt Engineering?
Prompt Engineering 是一门艺术也是一门科学。它需要结合创造力和逻辑思维来设计出最优化的 prompt 。目前还没有统一标准或规则来指导 prompt 的设计 ,但有一些基本原则和建议可以参考:
包含完整且相关的信息:prompt 应该尽可能地提供足够多和具体化的信息来描述任务,并避免无关或冗余信息。
简洁易懂并减少歧义:prompt 应该使用简单明了且无歧义性质词汇表达任务,并避免使用复杂或模棱两可词汇。
明确标签空间:prompt 应该清楚地定义输出结果所属范围,并在示例中按照真实分布采样标签。
统一格式:prompt 应该保持输入和输出数据格式统一,并在示例中展示格式的要求。
下面是一些 prompt 的实例,可以看出不同的 prompt 对于结果有不同的影响:
Less effective prompt:
Write a poem about OpenAI.
Output:
OpenAI is a visionOf a future that is brightWhere machines can learn and createAnd help us do what's rightOpenAI is a missionTo make AI accessibleTo everyone who wants to use itAnd make it beneficialOpenAI is a challengeTo push the boundaries of AIAnd explore the possibilitiesThat lie beyond the sky
Better prompt:
Write a short inspiring poem about OpenAI, focusing on the recent DALL-E product launch (DALL-E is a text to image ML model) in the style of William Blake.Output:To see the world in a grain of sand,And a heaven in a wild flower,Hold infinity in the palm of your hand,And eternity in an hour.This is the power of DALL-E,The latest wonder from OpenAI,A model that can generate images,From any text that you supply.With DALL-E you can create,A new world of imagination,Where anything you can think of,Becomes a visual sensation.DALL-E is not just a tool,But a source of inspiration,A glimpse of what AI can do,To enrich our human nation.
Prompt的基本原则
和AI交互时,Prompt的基本原则是十分重要的。提交Prompt时,应该遵循以下原则,以确保机器能够更好地理解用户的意图并给出相应的回答:
明确任务描述:在提交Prompt时,应该尽可能清晰明确地描述任务的具体信息,包括任务目标、所需操作、相关条件等。
例如,在与AI聊天机器人交互时,可以通过简单的问题来引导机器理解用户需求。如:“你需要我帮你做什么?” “你需要查询什么信息?” 能够尽量明确任务描述,让机器能够更好地理解用户需求并给出相应建议。使用常用词汇:在提交Prompt时,应使用常见的词汇和语言表达方式,避免使用生僻单词和复杂的句式,以便机器更容易理解。
考虑语境和上下文:在提交Prompt时,应该考虑到所处的语境和上下文环境,以便机器能够从语言环境中获取更多的信息来理解用户的意图。
提供多样化信息:在提交Prompt时,应该尝试提供多样化的信息,包括文字、图像、语音等,以促进机器更全面地理解用户需求。
确定回答形式:在提交Prompt时,应该确定回答的形式,例如文字、语音等,并确保机器可以合理地解析和输出回答信息。
更进一步的原则包括,向机器提供足够的上下文信息、结构清晰地组织Prompt以使机器更容易进行处理,使用简单明了的问题引导用户去表述建议,从而更好地理解需求。此外,在交互中,用户还应该尽量用简短的句子提出问题,以便AI机器人更快速和准确地回答问题。
Prompt的编写模式
这里介绍4种常用的Prompt模式,平时遇到的可能是这几种的变种或是组合。
- 特定指令(By specific)
在这种模式下,我们给模型提供一些特定信息,例如问题或关键词,模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词,具体取决于任务的要求。
如以 翻译、告诉我,等关键字开头:
翻译一下:Prompt Engineering?
告诉我“Prompt Engineering”的定义?
在这种模式下,AI可以帮我完成:补全句子,文字翻译,文本摘要,问答和对话等任务,这是最常用的Prompt模式。
- 指令模板(Instruction Template)
在这种模式下,我们给模型提供一些明确的指令,模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落,具体取决于任务的要求。
这种模式下,可以让AI具体地了解你想要的内容:
例如,让AI推荐三本中文科幻小说,可以这样写
给我推荐三中文的科幻小说,
推荐格式:1、书名:2、作者:3、主要内容:4、推荐理由:
在这种模式下,你还可以将一段话按照你给的模板,让AI帮你总结。也可以是你给AI一些答案的例子,AI通过学习,给出他的答案。
- 代理模式(By proxy)
Proxy 模式是指用户可以要求 ChatGPT 以特定的身份、角色或者身份扮演某个特定的人、角色或对象来生成回答。这种模式通常用于模拟某个特定人物的语言风格和语境,生成特定情境下的对话、回答或其他形式的文本。
这个模式也是比较的常用的,前段时间大家让chatGPT写申论就是代理模式。例如,描述秋天,小学生、大学生、老年人的不同身份,内容是有很大的不同,AI的身份和角色的把握还是很准确的。因此,在提问前告诉你的身份很重要。
- 示例模式(By demonstration)
在这种模式下,我们给模型提供一些示例文本,模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本,例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落,具体取决于任务的要求。
AI 可以帮助程序员做什么?
技术知识总结
刚开始接触学习一门技术的时候,难免需要去查看文档。现在的手册非常丰富。往往对于一个初学者来说,需要接触的信息太多、排版五花八门,学起来云里雾里。
这时候就可以借助 ChatGPT 的总结能力,例如我想学习一下 K8S 的相关知识,我发给它一个文档的地址,让它帮我总结。
prompt: https://kubernetes.io/zh-cn/docs/concepts/overview/ 总结这篇文档。
可以看到,它很好地总结了这篇中文的文档,并且对每一个关键点进行了概括。用最少的语言让你能够搞懂你想要的知识点。
因为 ChatGPT 是有上下文的,它知道你需要的内容是中文的总结,所以在这里你继续发一篇英文的文档给它,它也会用中文帮你总结。
prompt: 总结这篇文档https://kubernetes.io/docs/concepts/overview/components/ 。
目前 chatgpt 的免费版本数据库的截止时间是 2021 年,也就是说如果问它比较新的内容,它是无法总结的,甚至是会随意编撰。例如这里询问一个关于电影《流浪地球 2》的问题,让它总结一下 wikipedia 里的介绍。
prompt: 总结:https://zh.wikipedia.org/zh/%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%832
因为这时候电影还没有上映,所以之前的内容还都是错误的,它的总结是不准确的。
当我们将整个网站的内容复制进来,让 chatgpt 进行总结。但是这时候会发现,文章太长了,会收到报错。
这时候,就要运用自己的想象力,使用 prompt 来进行突破了。我们需要把文章进行段落拆分,每一段都符合它的标准。
将内容拆分成 7 段,发送完成之后,它就会自动总结了。
这样,才能得到了一篇文档的正确总结。
拆解任务
上文所描述的内容,可以算是借助 AI 让程序猿日常生活效率提升。那么在工作当中,AI 如何帮助我们提效?
我们从需求端获取一个需求以后,很多情况下我们的任务并不能够非常准确的估计时,原因就是我们并没有将任务拆分清楚,所以并不能够对每一项任务进行估计,导致风险的发生。
这时候可以简要描述一下我们这次的需求点,让 ChatGPT 帮我们进行任务拆解。
可以看到任务整体被拆成了一个个细小的任务。它可以很快的让我们将任务转换为 task,或者是需求跟踪单。这既方便和产品经理进行沟通,也便于我们自身排期。转换成 KANBAN 模式也便于了解当前进度。
如果对方仍有疑问,可以继续询问拆解。比如我们想要询问第三步应该如何进一步实现。可以看到它甚至给了我们具体的 UI 交互。我们可以利用这样的提示对我们的交互以及实现提供一定的参考。
阅读代码/优化代码
开发者经常接手别人的代码。质量参差不齐,还会夹在很多奇怪的命名。当我们阅读整体逻辑或者修改逻辑,可能会因为自身阅读的问题造成理解偏差,进一步引发 bug。
如果将这个方法交给 AI 去阅读呢?可以看看效果。
prompt: 逐行解释下面的代码 + 代码内容, (在这里使用了一段在 github上面的开源代码进行展示, 这段代码是一段定时器相关的内容)。
可以看到 ChatGPT 正确的理解了我们的代码,对代码进行了解释和说明。
但是这时候只是生成了一个整体的说明,并没有对每一行分别进行解释。这时候继续和它对话:
prompt: 可以在每一行代码上面加上注释,便于我理解吗?
这时候它会逐行的进行代码标注,便于你对每一行进行理解。如果你接着对它提出一个粗浅的优化需求,它也会照做。
prompt: 这段代码可以进行重构和优化吗?逻辑有些繁琐。
你可以对某一个部分提出更细节的要求,为它提出更好的优化方向。在这里我们提出了关于参数顺序耦合的问题,可以看到 GPT 也理解到了我们的需求,并且做出了对应的优化,如下:
prompt: children: (isCounting: boolean, durationTime: number, startCount: () => void) => React.ReactNode // 子组件,接收三个参数,返回一个React节点这里面的参数太多了,而且对顺序有强依赖,该怎么优化这里?
代码生成
开发者在工作中还有一种场景的工作量比较大,需要复杂的逻辑思考。但是实际上最终的代码可能只需要几行就可以搞定。你在思考过程中觉得很痛苦,想和身边的同事去沟通。也许你给他解释完这个逻辑以后,他非但不能帮你思考,反而将一人份痛苦变成两人份。
例如,我们要进行数据转换,是否也可以交给AI来做?我们发送给 GPT 这样的 prompt,将数据结构进行转换。数据源为:
[ { "candidates": null, "candidatesX": null, "description": "role---用户角色", "label": "角色", "name": "role", "optional": true, "schema": null, "type": "String" }, { "candidates": null, "candidatesX": null, "description": "Topics of the pulsar server to create---需要创建的主题", "items": { "schema": [ { "candidates": null, "candidatesX": null, "description": "topic name---主题名称", "label": "主题名称", "name": "name", "schema": null, "type": "String" }, { "candidates": null, "candidatesX": null, "default": 1, "description": "partition number---分区数", "label": "分区数", "name": "partitions", "schema": null, "type": "Integer", "validator": ">0" } ], "type": "Object" }, "label": "主题列表", "name": "topics", "optional": true, "schema": null, "type": "List" }] 我想要得到的数据是 type 为 List 的数据,并且数据结构为: [ {type:List, name:"topics", needValidates:[{ name:"name", type:"String" },{name:"partitions", type:"Integer"}] }]
GPT 会为我们得到正确的结果:
我们只需要输入目标数据结构,转换后的数据结构,无需指定语言。因为它会从你的上下文里理解到你是想要问什么实现方式。
还有执行脚本,我们只需要描述清楚我们的需求,它也会帮助我们进行完善。
此外,它还可以进行进行解释说明:
上面可以看到,我们在这里使用了一次“自然语言编程”的操作流程。不论你是否会使用 python、bash 你都可以正常的描述你的需求。进行生成。
我们还可以进行代码转换,例如你写了一段 js 代码,你希望将这段代码转化为python,以前我们会通过 Google 搜索看看有没有对应的转换器,现在就只需要交给 gpt 来执行。提出你的诉求,它会在 10s 内为你生成一段没有 bug,包含异常处理的代码。这里我们不展开举例。
生成单测
我们刚刚那段数据转化的代码,如果我们想要进行测试。以前我们可能会苦思冥想很多场景进行补充。现在只需要告诉 AI 帮我生成单测即可。
prompt: (代码内容) 为这段代码生成 unit test。
如果你觉得测试条件不够,那就再问它,让它再生成。
prompt: 数据源不够丰富,多测试集中边界条件,比如数据不存在,数据类型无法转换,数据类型不对等。
它还会给你解释这里都做了什么操作,这些测试用例覆盖了不同的场景,包括:
当数据源中没有类型为 List 的字段时,应该返回空数组;当数据源中有类型为 List 的字段时,应该返回正确的字段数组,包括需要的验证。
更多 AI 应用/插件
AI 就像是一个基础应用, 在它上面还有着很多的可能。随着你用的越多,解锁的技能也就越丰富。例如现在 GPT 系列甚至推出了自己的应用市场。下面我们来为各位简单介绍几款热门插件:
- AIPRM
它是 ChatGPT3.5 时代的应用商店。用户通过不同的 prompt,对它进行训练,达到自己的目的。
例如我们在文章最开始介绍的“长文总结”能力:我们普通的和它进行交流,那么字数限制就会成为瓶颈。但是如果我们转化了沟通技巧,那么就可以突破这一限制。AIPRM 就是一个充满了奇思妙想的插件系统,你可以在里面查找/发布各种你想要的 prompt。
- Voice Control for ChatGPT
依托于这样的系统,我们可以使用它锻炼英文(伪需求)。或者是直接用语音和它进行对话,让它替自己写代码,例如我们刚刚所有的脚本说明都可以让它直接语音转文字发出去。
它也很好的服务了一些视障人士,因为它还会读出每一次 GPT 生成的内容。让每个人都拥有平等接触 AI的机会。
- ChatGPT Sidebar
随着使用的人越来越多,ChatGPT 的响应速度越来越慢。有时候只不过想问一个简单的问题,却要等上很久。这时候,就可以使用 ChatGPT Sidebar 插件。
它内置了 ChatGPT 的 API,可以直接集成在你的搜索引擎里,你的每一次搜索都会触发(也可以设置为手动),免注册,使用方便。还可以让它提示你如何搜索相关的关键词。
在它的侧边栏里,我们还可以进行其它的操作。
- 著名应用工具使用体验:Bing Copilot、ChatGPT、Google Bard
那我们再回头看看几个影响力比较高的AI工具。笔者个人现常用的基础 AI 工具大概有 3 种,分别是 Bing Copilot、ChatGPT、Google Bard。最被广泛使用的 ChatGPT(GPT3-5),我们先来看看它的自我介绍是什么。
ChatGPT:使用频率最高的 AI。它有强大的上下文,还可以拆分成为不同的 conversation,便于它处理不同的对话。
例如一个控制台的项目,可以单独做一个对话,这样它聊的上下文都是围绕这个主题进行,每次新的问答也无需补充上下文信息。
Bing :Bing 在很早就使用了 GPT-4,可是因为对话数实在是太少了(从 5 次扩充到了 15 次),每一次对话的内容长度也很有限(截止目前仍只有 2000 字) 而且不能保存对话上下文,导致使用起来实在很不方便。好处是它是实时联网的,所以作者主要用于搜索最新的资讯以及总结一些文章和文档的摘要,以及辅助 ChatGPT 使用,对比一下两遍生成的逻辑是否一致。优点就是,搜索结果会给出详细的出处以及引用地址。
Google Bard (LaMDA):Google 近期发布的AI工具目前只支持英文。特点是能够给出多个回答,而且响应速度很快。集成了 Google it,点击之后会帮你生成一个最适合你的问题的 google 搜索关键词。这算是和 Bing Copilot 反其道而行之,一个是将 chat 集成到搜索里,一个是将搜索集成到了 chat 中。
AI可以帮助其他人做什么?
就笔者身边的情况来看,电脑的的初级应用会多一点,比如Excel、Word文档、PPT等的自动化办公应用,帮助人们进行考勤、薪酬等的自动化管理和优化等。
办公自动化(Office Automation,简称OA)是将现代化办公和计算机技术结合起来的一种新型的办公方式。办公自动化没有统一的定义,凡是在传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。 通过实现办公自动化,或者说实现数字化办公,可以优化现有的管理组织结构,调整管理体制,在提高效率的基础上,增加协同办公能力,强化决策的一致性 。
从使用场景来说,有文案修改、数据收集、数据协作、数据保存、数据处理、数据可视化、统计分析、图表制作、审批流程、应用制作等;从种类来说也比较多样,比如传统的 Excel、WPS、Word、PPT、Photoshop、Seafile等就是比较基础的办公软件或办公自动化软件,甚至可以再进行细分;比如企业微信、钉钉就是比较主流的企业通讯与办公工具,可以助力企业高效办公和管理,属于生态型办公平台。但无论是哪种软件,目的都是为了有效解决工作中的问题,节约资源,提高工作效率和管理效益。甚至它还可以和一个企业的业务结合的非常紧密,比如定制化软件、个性化应用,只需点击按钮就可以得到想要的结果。话说回来,软件只是一个工具,关键靠人去用,企业应用深度与否取决于企业的重视程度,以及配套的管理制度保证和供应商的服务能力,两者缺一不可。总体上,一般具备以下特点的办公自动化软件更受企业和使用者青睐:
- 灵活的自定义
- 傻瓜式的操作
- 性能要求
- 便于维护
- 性价比高
能在表格中规范便捷地记录多元数据
SeaTable 表格支持多达24种数据类型,不仅能记录文本、数字、日期这类基础数据,还可以记录文件、图片、长文本、单选、多选、勾选、地理位置、评分、邮箱、URL、创建者、创建时间、修改者、修改时间等,还能用按钮、公式、链接其他记录、链接计算实现交互办公、同表计算、跨表关联及计算等。要比 Excel 更简单方便。
数据的收集、填报、协同功能灵活,可满足多种场景
数据的可视化和统计分析简单实用
支持自动化提醒、自动化规则,办公自动化轻松高效
可自定义各种审批流程、任务流转流程,实现对工作流程管理的自动化和整合化
Prompt Engineering 的前景和挑战
Prompt Engineering 是一个新兴且有趣的领域,它为人工智能的应用提供了更多可能性和灵活性。随着大语言模型的不断进步,我们可以期待更多惊喜和创新。
但 Prompt Engineering 也面临着一些挑战和限制,比如:
如何评估 prompt 的质量和效果?
如何自动化或半自动化 prompt 的生成和优化?
如何保证 prompt 的安全性和道德性?
如何适应不同语言、领域、场景、用户等因素?
这些问题需要我们持续地探索和研究,以提高 Prompt Engineering 的水平和价值。
后记
Prompt Engineering 是一种在人工智能领域,特别是自然语言处理领域的技术。它指的是如何设计输入数据,使其能够清楚地描述任务,并引导模型给出正确和合理的输出。Prompt Engineering 需要结合创造力和逻辑思维来设计出最优化的 prompt,这也就是 Prompt Engineer 存在的价值所在。
几乎对于所有入门计算机课程的人来说,题图中的两个单词 “hello world” 就是大家最开始使用计算机语言与机器沟通的第一句话,不过随着 AI 及时的发展和普及,大家都可以直接用最简单最自然的话语让 AI 告诉你怎么让机器来执行和输出 “hello world” 。
转载自:https://blog.csdn.net/u014727709/article/details/133977517
欢迎start,欢迎评论,欢迎指正