网上有很多的Prompt模板,这次OpenAI发布了写好Prompt的六个策略,很实用

技术

写好 Prompt,俗称 Prompt Engineering(提示工程)已经是 AI 时代必备的技能之一了吧。

大模型训练、微调这些事情需要专业的人去做,大多数的普通人都接触不到,能接触到的就是应用层。

每一个任务,每个人的问法不一样,出来的结果也不一样。

有的问完,直接说 gpt 垃圾、文心一言什么玩意、kimi 满足不了我的需求等等

大模型的底层训练确实有所不同,侧重点也有所不同,但是掌握一个好的 prompt 指令写法,也许上面 👆🏻 的言论不攻自破,黑转粉。

网上有很多写 Prompt 的教程、模板。

包括之前吴恩达老师专门写过一个 Prompt 的课程。

picture.image

现在,ChatGPT 的创始团队,OpenAI 也发布了一个针对 GPT-4 的 Prompt Guides

picture.image

提出写好 Prompt 的六个策略。

看完这个,清晰的指令、提供参考背景信息、复杂任务简单化,一步步求解这些都是很常用的技巧手法。

整理好的思维导图。

picture.image

一、Write clear instructions 写出清晰的指令

这些模型无法读懂你的心思。如果输出太长,请要求简短回复。如果输出太简单,请要求专家级写作。如果您不喜欢该格式,请展示您希望看到的格式。模型越少猜测你想要什么,你就越有可能得到它。

策略 1:在查询中包含详细信息以获得更相关的答案

为了获得高度相关的响应,请确保请求提供任何重要的详细信息或上下文。否则,你就要让模型来猜测你的意思。

picture.image

策略 2:要求模型采用角色

系统消息可用于指定模型在其回复中使用的角色。

picture.image

策略 3:使用分隔符清楚地指示输入的不同部分

三引号、XML 标记、章节标题等分隔符可以帮助划分要区别对待的文本部分。

对于此类简单任务,使用分隔符可能不会对输出质量产生影响。但是,任务越复杂,消除任务细节的歧义就越重要。不要让模型确切地理解你对他们的要求。

picture.image

picture.image

策略 4:指定完成任务所需的步骤

某些任务最好指定为一系列步骤。显式写出这些步骤可以使模型更容易遵循它们。

picture.image

策略 5:举例说明

提供适用于所有示例的一般说明通常比通过示例演示任务的所有排列更有效,但在某些情况下,提供示例可能更容易。例如,如果您打算让模型复制响应用户查询的特定样式,这很难显式描述。这被称为“小镜头”提示。

picture.image

策略 6:指定所需的输出长度

您可以要求模型生成具有给定目标长度的输出。目标输出长度可以根据单词、句子、段落、项目符号等的数量来指定。但请注意,指示模型生成特定数量的单词并不能高精度地工作。该模型可以更可靠地生成具有特定数量的段落或项目符号的输出。

picture.image

二、Strategy: Provide reference text 策略:提供参考文本

语言模型可以自信地发明虚假答案,尤其是在被问及深奥的主题或引文和 URL 时。就像一张笔记可以帮助学生在考试中取得更好的成绩一样,为这些模型提供参考文本可以帮助以更少的捏造来回答。

策略:指示模型使用参考文本回答

如果我们能够为模型提供与当前查询相关的可信信息,那么我们可以指示模型使用提供的信息来撰写其答案。

鉴于所有模型的上下文窗口都有限,我们需要某种方法来动态查找与所问问题相关的信息。嵌入可用于实现高效的知识检索。有关如何实现此策略的更多详细信息,请参阅策略“使用基于嵌入的搜索实现高效的知识检索”。

picture.image

策略:指示模型使用参考文本中的引用来回答

如果输入已补充相关知识,则直接要求模型通过引用所提供文档中的段落来为其答案添加引文。请注意,输出中的引文可以通过提供的文档中的字符串匹配以编程方式进行验证。

picture.image

三、Split complex tasks into simpler subtasks 将复杂的任务拆分为更简单的子任务

正如在软件工程中将复杂系统分解为一组模块化组件是很好的做法一样,提交给语言模型的任务也是如此。复杂任务往往比简单任务具有更高的错误率。此外,复杂任务通常可以重新定义为更简单任务的工作流,其中早期任务的输出用于构建后续任务的输入。

策略:使用意向分类来识别与用户查询最相关的说明

对于需要大量独立指令集来处理不同情况的任务,首先对查询类型进行分类,然后使用该分类来确定需要哪些指令,这可能是有益的。这可以通过定义与处理给定类别中的任务相关的固定类别和硬编码指令来实现。此过程也可以递归应用,以将任务分解为一系列阶段。这种方法的优点是,每个查询将仅包含执行任务下一阶段所需的指令,与使用单个查询执行整个任务相比,这可能会导致更低的错误率。这也可以降低成本,因为较大的提示符的运行成本更高(请参阅定价信息)。

例如,假设对于客户服务应用程序,查询可以按如下方式进行有用的分类:

picture.image

picture.image

picture.image

根据客户查询的分类,可以向模型提供一组更具体的指令,以便其处理后续步骤。例如,假设客户需要“故障排除”方面的帮助。

picture.image

请注意,已指示模型发出特殊字符串,以指示会话状态何时更改。这使我们能够将系统变成一个状态机,其中状态决定了注入哪些指令。通过跟踪状态、在该状态下哪些指令是相关的,以及可以选择允许从该状态进行哪些状态转换,我们可以围绕用户体验设置护栏,而这些保护措施很难通过不太结构化的方法实现。

策略:对于需要很长对话的对话应用程序,总结或筛选之前的对话

由于模型具有固定的上下文长度,因此用户和助手之间的对话(其中整个对话包含在上下文窗口中)不能无限期地继续。

此问题有多种解决方法,其中之一是总结对话中的前轮次。一旦输入的大小达到预定的阈值长度,这可能会触发一个查询,该查询汇总了部分会话,并且先前会话的摘要可以作为系统消息的一部分包含在内。或者,可以在整个对话中在后台异步总结先前的对话。

另一种解决方案是动态选择与当前查询最相关的对话的先前部分。请参阅策略“使用基于嵌入的搜索实现高效的知识检索”。

策略:分段总结长文档,递归构建完整摘要

由于模型具有固定的上下文长度,因此它们不能用于汇总长度超过上下文长度减去单个查询中生成的摘要长度的文本。

为了总结一个很长的文档,比如一本书,我们可以使用一系列查询来总结文档的每个部分。章节摘要可以串联和汇总,从而产生摘要的摘要。此过程可以递归方式进行,直到对整个文档进行汇总。如果有必要使用有关前面部分的信息来理解后面的部分,那么另一个有用的技巧是包括书中任何给定点之前的文本的连续摘要,同时总结该点的内容。OpenAI 之前使用 GPT-3 变体的研究中已经研究了这种总结书籍程序的有效性。

四、Strategy: Give models time to "think" 策略:给模型“思考”的时间

如果要求将 17 乘以 28,您可能不会立即知道,但随着时间的推移仍然可以计算出来。同样,模型在试图立即回答时会犯更多的推理错误,而不是花时间找出答案。在回答之前询问“思维链”可以帮助模型更可靠地推理出正确答案。

策略:在匆忙得出结论之前,指示模型制定自己的解决方案

有时,当我们明确指示模型在得出结论之前从第一性原理进行推理时,我们会得到更好的结果。例如,假设我们想要一个模型来评估学生对数学问题的解决方案。最明显的方法是简单地询问模型学生的解决方案是否正确。

picture.image

picture.image

但学生的解法其实是不对的!我们可以通过提示模型首先生成自己的解决方案来让模型成功注意到这一点。

picture.image

picture.image

策略:使用内心独白或一系列查询来隐藏模型的推理过程

前面的策略表明,模型在回答特定问题之前详细推理问题有时很重要。对于某些应用程序,模型用于得出最终答案的推理过程不适合与用户共享。例如,在辅导应用程序中,我们可能希望鼓励学生制定自己的答案,但模型对学生解决方案的推理过程可能会向学生揭示答案。

内心独白是一种可以用来缓解这种情况的策略。内心独白的思想是指示模型将输出中对用户隐藏的部分转换为结构化格式,以便轻松解析它们。然后,在将输出呈现给用户之前,将解析输出,并且仅显示部分输出。

picture.image

策略:询问模型在之前的传递中是否遗漏了任何内容

假设我们正在使用一个模型来列出与特定问题相关的来源摘录。列出每个摘录后,模型需要确定是否应该开始编写另一个摘录,或者是否应该停止。如果源文档很大,模型通常会过早停止并且无法列出所有相关的摘录。在这种情况下,通常可以通过提示模型进行后续查询来查找它在以前的传递中遗漏的任何摘录,从而获得更好的性能。

五、Strategy: Use external tools 策略:使用外部工具

通过向模型提供其他工具的输出来弥补模型的弱点。例如,文本检索系统(有时称为 RAG 或检索增强生成)可以告诉模型相关文档。像 OpenAI 的 Code Interpreter 这样的代码执行引擎可以帮助模型进行数学运算和运行代码。如果一项任务可以通过工具而不是语言模型更可靠或更高效地完成,请卸载它以充分利用两者。

策略:使用基于嵌入的搜索实现高效的知识检索

如果模型作为其输入的一部分提供,则可以利用外部信息源。这可以帮助模型生成更明智和最新的响应。例如,如果用户询问有关特定电影的问题,则将有关电影的高质量信息(例如演员、导演等)添加到模型的输入中可能很有用。嵌入可用于实现高效的知识检索,从而可以在运行时将相关信息动态添加到模型输入中。

文本嵌入是一种向量,可以测量文本字符串之间的相关性。相似或相关的字符串将比不相关的字符串更紧密地联系在一起。这一事实,加上快速向量搜索算法的存在,意味着嵌入可用于实现有效的知识检索。特别是,文本语料库可以拆分为多个块,每个块都可以嵌入和存储。然后,可以嵌入给定的查询,并执行向量搜索,以从语料库中查找与查询最相关的嵌入文本块(即在嵌入空间中最接近的文本块)。

策略:使用代码执行来执行更准确的计算或调用外部 API

不能依赖语言模型自行准确地执行算术或长计算。如果需要,可以指示模型编写和运行代码,而不是进行自己的计算。特别是,可以指示模型将要运行的代码放入指定格式,例如三重反引号。生成输出后,可以提取并运行代码。最后,如有必要,可以将代码执行引擎(即 Python 解释器)的输出作为下一个查询的模型输入。

策略:授予模型对特定函数的访问权限

聊天完成 API 允许在请求中传递函数描述列表。这使模型能够根据提供的架构生成函数参数。生成的函数参数由 API 以 JSON 格式返回,可用于执行函数调用。然后,可以在以下请求中将函数调用提供的输出反馈到模型中以关闭循环。这是使用 OpenAI 模型调用外部函数的推荐方式。要了解更多信息,请参阅我们介绍性文本生成指南中的函数调用部分,以及 OpenAI Cookbook 中的更多函数调用示例。

六、Strategy: Test changes systematically 策略:系统地测试更改

有时很难判断更改(例如,新指令或新设计)是使您的系统变得更好还是更糟。看几个例子可能会暗示哪个更好,但是在样本量较小的情况下,很难区分真正的改进还是随机的运气。也许这种变化有助于某些输入的性能,但会损害其他输入的性能。

策略:参考黄金标准答案评估模型输出

假设已知问题的正确答案应参考一组特定的已知事实。然后,我们可以使用模型查询来计算答案中包含多少必需的事实。

链接🔗:https://platform.openai.com/docs/guides/prompt-engineering


我是大林,坐标北京

NLP 高级算法工程师,主要从事自然语言处理(NLP)、知识图谱、大模型领域的实际业务落地。持续关注 AIGC 趋势发展、AI 开源项目 3.7k+ stars,AIGC 知识库浏览 2w 次,维护 AIGC 社群 4k+人,All IN AI。

加我微信(dalinvip2023),备注【公众号 AIGC】,进 AIGC 交流群一起交流(还有数字人、绘画、技术、AI 变现多方向。)

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
基于火山引擎 EMR 构建企业级数据湖仓
火山引擎 EMR 是一款云原生开源大数据平台,提供主流的开源大数据引擎,加持了字节跳动内部的优化、海量数据处理的最佳实践。本次演讲将为大家介绍火山引擎 EMR 的架构及核心特性,如何基于开源架构构建企业级数据湖仓,同时向大家介绍火山 EMR 产品的未来规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论