提示词工程[1]
该指南分享了获取更好结果的策略和战术,适用于像GPT-4这样的大型措辞模型(有时也称为GPT模型)。这里描述的方法有时可以组合利用以得到更好的效果。我们鼓励进行试验,找到最适宜您的方法。 这里演示的一些示例目前仅适用于我们最强大的模型“gpt-4”。一样平常来说,如果你创造一个模型在某个任务上失落败,而另一个更强大的模型可用,再次考试测验利用更强大的模型每每是值得的。
你也可以探索示例提示,展示我们的模型有什么能力:
提示示例 探索提示示例以理解GPT模型的能力[2]
这些模型无法读取您的思想。如果输出过长,请哀求简洁回答。如果输出太大略,请哀求专业水平的写作。如果您不喜好的格式,请展示您希望看到的格式。模型须要预测的越少,您就越有可能得到您想要的结果。
策略:
•在查询中包含详细信息以得到更干系的答案[3]
•哀求模型扮演一个人设[4]
•利用分隔符清楚地指示输入的不同部分[5]
•指定完成任务所需的步骤[6]
•供应示例[7]
•指定所需的输出长度[8]
供应参考文本措辞模型可以自傲地编造虚假答案,尤其是在被问及晦涩主题、引用和URL时。就像给学生一张条记纸可以帮助他们在考试中表现更好一样,为这些模型供应参考文本可以帮助它们在回答问题时减少虚构的程度。
策略:
•辅导模型利用参考文本回答问题[9]
•辅导模型利用参考文本中的引用来回答问题[10]
将繁芜任务拆分为较大略的子任务[11]就像在软件工程中将一个繁芜系统分解为一组模块化组件一样,将任务提交给措辞模型也是一个好的实践。繁芜任务每每比大略任务有更高的缺点率。此外,繁芜任务常日可以重新定义为一系列较大略任务的事情流,个中前一任务的输出被用来构建后一任务的输入。
策略:
•利用意图分类来识别与用户查询最干系的解释[12]
•对付须要非常长对话的对话运用程序,进行对先前对话的择要或过滤[13]
•将长文档分段进行择要并递归构建完全择要[14]
给模型一些韶光来“思考”[15]如果让你打算17乘以28,你可能不会急速知道答案,但是可以通过一些韶光来打算出来。类似地,模型在考试测验即时回答时会产生更多的推理缺点,而不是花韶光来打算答案。在回答之前哀求“思考过程”可以帮助模型更可靠地推理出精确答案。
策略:
•在贸然下结论之前,辅导模型自己办理问题[16]
•利用内心独白或一系列问题隐蔽模型的推理过程[17]
•讯问模型在之前的处理中是否有遗漏[18]
利用外部工具[19]通过将其他工具的输出馈送给模型来填补模型的弱点。例如,一个文本检索系统(有时称为RAG或检索增强天生)可以见告模型干系的文档信息。像OpenAI的Code Interpreter这样的代码实行引擎可以帮助模型进行数学打算和代码运行。如果一个任务可以通过工具而不是措辞模型来更可靠或更高效地完成,则将其卸载以得到双赢的效果。
策略:
•利用基于嵌入的搜索实现高效知识检索[20]
•利用代码实行进行更精确的打算或调用外部 API[21]
•为模型供应访问特定函数的能力[22]
系统地测试变革[23]如果能够对改进效果进行衡量,提高性能就会变得更随意马虎。在某些情形下,对提示进行修正可能会在少数几个伶仃的示例上实现更好的性能,但在更具代表性的示例组上导致性能变差。因此,为了确保变革对性能的净影响是正面的,可能须要定义一个全面的测试套件(也称为“评估”)。
策略:
•参考标准答案评估模型输出[24]
策略详细解释[25]上述列出的每种策略都可以用具体的策略来实例化。这些策略旨在供应考试测验的思路。它们远非全面,您可以随时考试测验并利用自己的创意思路。
策略一:编写清晰的解释请确保在要求中供应任何主要的细节或背景,以获取高度干系的回答。否则,您将让模型去预测您的意思。
Worse
Better
How do I add numbers in Excel?
How do I add up a row of dollar amounts in Excel? I want to do this automatically for a whole sheet of rows with all the totals ending up on the right in a column called "Total".
Who’s president?
Who was the president of Mexico in 2021, and how frequently are elections held?
Write code to calculate the Fibonacci sequence.
Write a TypeScript function to efficiently calculate the Fibonacci sequence. Comment the code liberally to explain what each piece does and why it's written that way.
Summarize the meeting notes.
Summarize the meeting notes in a single paragraph. Then write a markdown list of the speakers and each of their key points. Finally, list the next steps or action items suggested by the speakers, if any.
策略二: 哀求模型拟人化下面的系统指的是prompt中的system部分,用户是指user部分。
系统可以用于指定模型在回答中采取的角色。
系统
当我哀求帮助写作时,你将回答一份包含至少一个笑话或调侃评论的文档。
用户
写一封感谢信给我的螺栓供应商,感谢他们按时并在短韶光内交付货色。这使我们能够交付一份主要的订单。
在Playground中打开[26]
策略三:利用分隔符清楚地标示输入的不同部分[27]像三个引号、XML标签、章节标题平分隔符可以帮助标示不同的文本部分,以便进行不同的处理。
用户
用一个俳句总结被三个引号分隔的文本。 """在这里插入文本""""
Open in Playground[28]
系统
你将收到一对关于同一主题的文章(由XML标签分隔)。首先总结每篇文章的论点。然后指出哪篇文章提出了更好的论点,并阐明缘故原由。
用户
在此插入第一篇文章
在此插入第二篇文章
在 Playground 中打开[29]
系统
您将得到一篇论文择要以及一个建议的标题。论文标题该当给读者一个很好的关于论文主题的观点,同时也该当引人瞩目。如果标题不符合这些标准,请提出5个备选方案。
用户
择要:在这里插入择要 \r\n 标题:在这里插入标题
在playground中打开[30]
对付这样的大略任务,利用分隔符可能不会对输出质量产生影响。然而,任务越繁芜,澄清任务细节的主要性就越大。不要让模型费力理解你准确哀求什么。
策略四:明确指定完成任务所需的步骤有些任务最好指定为一系列步骤。将这些步骤明确写出可以让模型更随意马虎跟随。
系统
按照以下逐步解释来回运用户的输入。第一步 - 用户将会用三引号供应给你一段文本。用一个前缀为"Summary: "的句子来总结这段文本。第二步 - 将第一步中的总结翻译成西班牙语,用一个前缀为"Translation: "的句子。
用户
"""在这里插入文本"""
在playground中打开[31]
策略五:供应例子[32]常日来说,供应适用于所有示例的通用辅导要比通过示例演示任务的所有排列组合更高效,但在某些情形下,供应示例可能更随意马虎。例如,如果您打算让模型复制一种难以明确描述的用户查询相应风格。这便是所谓的'few-shot'提示。
系统
以一种同等的风格回答。
用户
教我如何耐心。
助手
刻出最深峡谷的河流源于一处普通的泉眼;最华美的交响乐从一个音符产生;最繁芜的织锦以一根孤单的线开始。
用户
教我关于海洋的知识。
在playground中打开[33]
策略六:给定输出的目标长度你可以哀求模型天生给定目标长度的输出。目标输出长度可以根据词语、句子、段落、列表项等进行指定。但请把稳,指示模型天生特天命量的词语不具有高精度。模型可以更可靠地天生具有特天命量的段落或列表项的输出。
用户
请用大约50个字总结三引号限定的文本。 """在这里插入文本"""
在Playground中打开[34]
用户
将用三重引号分隔的文本进行2段落择要。"""在这里插入文本"""
在Playground中打开[35]
用户
将用三重引号分隔的文本进行3个要点择要。"""在这里插入文本"""
在Playground中打开[36]
策略七:供应参考文本策略7.1:指示模型利用参考文本来回答如果我们能够为模型供应与当前查询干系的可信信息,那么我们可以指示模型利用供应的信息来组成其回答。
系统
利用由三重引号分隔的供应的文章来回答问题。如果答案在文章中找不到,请写上"I could not find an answer."
用户
<插入由三重引号分隔的文章>问题: <插入问题>
在Playground中打开[37] 鉴于所有模型都有有限的高下文窗口,我们须要一种在被问问题干系的情形下动态查找信息的方法。嵌入[38]可以用于实现高效的知识检索。请参考策略"利用基于嵌入的搜索实现高效的知识检索"[39]以理解更多关于如何履行这一点的详细信息。
策略7.2:辅导模型在回答中引用参考文献如果输入已经通过干系知识进行补充,可以直接哀求模型通过引用所供应的文档中的段落来添加引用到其回答中。请把稳,可以通过在所供应的文档中进行字符串匹配来编程验证输出中的引用。
系统
您将得到一个由三个引号分隔的文档,并供应一个问题。您的任务是仅利用供应的文档回答问题,并引用用于回答问题的文段。如果文档中不包含回答该问题所需的信息,则大略写上:"信息不敷"。如果供应了问题的答案,必须注明引用。请利用以下格式引用干系文段({"citation": ...})。
用户
"""<在此处插入文档>"""问题:<在此处插入问题>
在Playground中打开[40]
策略八:将繁芜任务分解为大略子任务[41]策略8.1:利用意图分类来识别与用户查询最干系的指令[42]对付须要处理不同情形下的大量独立指令集的任务,首先对查询的类型进行分类,并利用该分类确定须要利用哪些指令可能是有益的。这可以通过定义固定的种别并对相应种别中的任务处理干系指令进行硬编码来实现。这个过程也可以递归地运用于将任务分解为一系列阶段。这种方法的上风在于每个查询只包含实行任务的下一个阶段所需的那些指令,与利用一个查询实行全体任务比较,这可以降落缺点率。这也可以降落本钱,由于更大的提示会导致更高的运行用度(详见定价信息[43])。 假设例如对付客户做事运用程序,查询可以有用地分类如下:
系统
您将得到客户做事查询。将每个查询分类为紧张种别和次要种别。利用键primary和secondary,以json格式供应输出。紧张种别:账单、技能支持、账户管理或一样平常查询。账单的次要种别:- 取消订阅或升级- 添加付款办法- 阐明用度- 对用度提出异议技能支持次要种别:- 故障打消- 设备兼容性- 软件更新帐户管理次要种别:- 重置密码- 更新个人信息- 关闭帐户- 帐户安全一样平常查询次要种别:- 产品信息- 定价- 反馈- 联系人工客服
用户
我须要让我的互联网重新事情起来。
在playground中打开[44]
根据客户查询的分类,可以为模型供应一组更详细的指令,以便它处理下一步。例如,假设客户须要“故障打消”方面的帮助。
系统
您将收到须要在技能支持环境中进行故障打消的客户做事查询。通过以下办法帮助用户:- 请他们检讨路由器与所有电缆的连接情形。请把稳,电缆随韶光可能会松动。- 如果所有电缆都连接好但问题仍旧存在,请讯问他们所利用的路由器型号。- 现在您将辅导他们如何重新启动设备:-- 如果型号是MTD-327J,请建议他们按下赤色按钮并按住5秒钟,然后等待5分钟后测试连接。-- 如果型号是MTD-327S,请建议他们拔掉电源插头,然后重新插上,然后等待5分钟后测试连接。- 如果客户在重新启动设备并等待5分钟后问题仍旧存在,请输出{"IT support requested"},将他们接入IT支持部门。- 如果用户开始讯问与此主题无关的问题,请确认他们是否希望结束当前的故障打消谈天并根据以下方案对他们的要求进行分类:<在此处插入上述的一级/二级分类方案>
用户
我须要让我的互联网重新事情起来。
在playground中打开[45] 请把稳,模型已被指示发出分外字符串,以指示对话状态何时发生变革。这使我们能够将我们的系统转变为状态机,个中状态决定了要注入的指令。通过跟踪状态、确定在该状态下哪些指令是干系的,以及可选地确定从该状态许可的状态转换,我们可以为用户体验设置防护栏,这在较少构造化的方法中很难实现。
策略8.2:对付须要非常长对话的运用,对先前的对话进行总结或过滤由于模型有固定的高下文长度,用户和助手之间的对话,如果全体对话都包含在高下文窗口中,是无法无限连续下去的。 有多种办理这个问题的方法,个中之一是总结前面对话的内容。一旦输入的长度达到一个预定的阈值,就可以触发一个查询来总结对话的一部分,并将之前的对话总结作为系统的一部分包含进来。其余,可以在全体对话过程中异步地在后台进行对之前对话的总结。 一种替代方案是动态选择与当前查询最干系的先前对话部分。请参阅策略"利用基于嵌入式搜索实现高效知识检索"[46]。
策略8.3:逐段概括长文档并递归构建完全择要[47]由于模型的高下文长度是固定的,因此它们无法在单个查询中用于总结比高下文长度减去天生择要长度更长的文本。 要总结一本非常长的文档,例如一本书,我们可以利用一系列查询来总结文档的每个部分。将各个部分的择要连接起来,再进行总结,可以得到总结的总结。这个过程可以递归进行,直到全体文档被总结出来。如果在理解后面的部分时须要利用前面部分的信息,那么一个有用的技巧是在总结特定位置的内容时,包括一份在该位置之前的文本的连续择要。OpenAI之前的研究[48]利用GPT-3的变体来研究利用这种方法总结书本的有效性。
策略九:给模型思考的韶光策略9.1:辅导模型在匆忙得出结论之前自行办理问题有时候,当我们明确哀求模型在得出结论之前从基本事理出发时,我们能够取得更好的结果。例如,假设我们希望模型评估学生对数学问题的办理方案。最直接的方法是大略地讯问模型学生的办理方案是否精确。
系统
确定学生的办理方案是否精确。
用户
问题陈述:我正在培植一个太阳能发电装置,我须要帮助打算财务数据。- 地皮本钱为每平方英尺100美元- 我可以以每平方英尺250美元的价格购买太阳能电池板- 我会谈得到了一份掩护条约,每年的用度是固定的10万美元,再加上每平方英尺10美元第一年运营的总用度是一个关于平方英尺数量的函数。学生的解答:设x为安装面积(平方英尺)。1. 地皮本钱:100x2. 太阳能电池板本钱:250x3. 掩护用度:100,000 + 100x总用度:100x + 250x + 100,000 + 100x = 450x + 100,000
助理
学生的解答是精确的。
在playground中打开[49]
但学生的办理方案实际上是缺点的!
我们可以通过提示模型首先天生它自己的办理方案,让模型成功地把稳到这一点。
系统
首先自己办理问题。然后将你的办理方案与学生的办理方案进行比较,评估学生的办理方案是否精确。在你自己办理问题之前,不要决定学生的办理方案是否精确。
用户
问题陈述:我正在建立一座太阳能发电装置,须要帮助打算财务情形。- 地皮本钱为每平方英尺100美元- 我可以以每平方英尺250美元购买太阳能电池板- 我协商了一份掩护条约,每年将花费我固定的10万美元,并额外支付每平方英尺10美元第一年运营的总本钱是多少,这是一个关于平方英尺数量的函数。学生的解答:令x为太阳能发电装置的面积(以平方英尺为单位)。1. 地皮本钱:100x2. 太阳能电池板本钱:250x3. 掩护本钱:100,000 + 100x总本钱:100x + 250x + 100,000 + 100x = 450x + 100,000
助理
设 x 为安装的面积(平方英尺)。1. 地皮本钱:100x2. 太阳能电池板本钱:250x3. 掩护本钱:100,000 + 10x总本钱:100x + 250x + 100,000 + 10x = 360x + 100,000学生的解答是禁绝确的。他们在打算掩护本钱时犯了一个缺点,利用了100x而不是10x。第一年运营的精确总本钱是360x + 100,000。
在 Playground 中打开[50]
策略9.2:利用内心独白或查询序列来隐蔽模型的推理过程[51]之前的策略表明,在回答详细问题之前,模型有时须要对问题进行详细推理是很主要的。对付某些运用程序来说,模型用来得出终极答案的推理过程可能不适宜与用户共享。例如,在辅导运用程序中,我们可能希望鼓励学生自己办理问题,但模型对学生办理方案的推理过程可能会向学生透露答案。 内心独白是一种可以用来减轻这个问题的策略。内心独白的理念是指令模型将原来须要对用户隐蔽的部分输出转化为构造化格式,从而使解析变得随意马虎。然后,在呈现给用户之前,对输出进行解析,并只让个中一部分变得可见。
系统
按照以下步骤回答用户的问题。步骤1 - 首先办理你自己的问题。不要依赖于学生的办理方案,由于它可能是缺点的。在这一步中,将所有的工浸染三重引号(""")括起来。步骤2 - 将你的办理方案与学生的办理方案进行比较并评估学生的办理方案是否精确。在这一步中,将所有的工浸染三重引号(""")括起来。步骤3 - 如果学生犯了一个缺点,请确定你可以给予学生什么样的提示,而不是给出答案。在这一步中,将所有的工浸染三重引号(""")括起来。步骤4 - 如果学生犯了一个缺点,请将上一步的提示供应给学生(块状引用之外)。将“步骤4 - ...”改成“提示:”。"
用户
问题陈述:《插入问题陈述》学生办理方案:《插入学生办理方案》
在playground中打开[52]
其余,可以通过一系列查询来实现,个中除了末了一个查询,别的查询的输出对终端用户隐蔽。 首先,我们可以哀求模型自行办理问题。由于这个初始查询不须要学生的办理方案,因此可以省略。这样做的额外好处是,模型的办理方案不会受到学生考试测验的办理方案的偏见的影响。
用户
<插入问题陈述>
在Playground中打开[53]
接下来,我们可以让模型利用所有可用信息来评估学生的办理方案的精确性。
系统
将您的办理方案与学生的办理方案进行比较,并评估学生的办理方案是否精确。
用户
问题解释:"""<插入问题解释>"""您的办理方案:"""<插入模型天生的办理方案>"""学生的办理方案:"""<插入学生的办理方案>"""
在Playground中打开[54]
末了,我们可以让模型利用自己的剖析来构建一个以有帮助的导师形象回答的回答。
系统
你是一个数学辅导员。如果学生犯了缺点,请以一种不透露答案的办法向学生供应提示。如果学生没有犯缺点,只需给他们一个鼓励的评论。
用户
问题陈述:"""<插入问题陈述>"""你的办理方案:"""<插入天生的模型办理方案>"""学生的办理方案:"""<插入学生的办理方案>"""剖析:"""<插入先前步骤天生的剖析>"""
在 Playground 中打开[55]
策略9.3:讯问模型是否在之前的迭代中遗漏了任何内容[56]假设我们正在利用一个模型来从一个源中列出与特定问题干系的摘录。在列出每个摘录后,模型须要确定是否该当开始写另一个摘录,还是该当停滞。如果源文件很大,模型常常会过早停滞而未能列出所有干系的摘录。在这种情形下,通过提示模型用后续查询找到任何它在之前遗漏的摘录,常日可以得到更好的性能。
系统
您将得到一个由三引号分隔的文档。您的任务是选择与以下问题干系的摘录:“人工智能的历史中发生了哪些重大的范式转变”。确保摘录包含阐明所需的所有干系高下文 - 换句话说,不要提取短缺主要高下文的小片段。以以下形式以JSON格式供应输出:[{"excerpt": "..."},...{"excerpt": "..."}]
用户
"""<在此处插入文档>"""
助理
[{"excerpt": "模型在此处编写摘录"},...{"excerpt": "模型在此处编写另一个摘录"}]
用户
有更多干系的摘录吗?把稳不要重复摘录。还要确保摘录包含阐明所需的所有干系高下文-换句话说,不要提取短缺主要高下文的小片段。
在 Playground 中打开[57]
策略十:利用外部工具[58]策略10.1:利用基于嵌入的搜索实现高效知识检索[59]如果外部信息是作为其输入的一部分供应的,模型可以利用外部信息。这可以帮助模型天生更多理解和最新的相应。例如,如果用户提问关于一部特定电影的问题,将关于电影的高质量信息(例如演员、导演等)添加到模型的输入中可能非常有用。
嵌入可以用来实现高效的知识检索,以便在运行时动态地将干系信息添加到模型输入中。 文本嵌入是可以衡量文本字符串之间干系性的向量。相似或干系的字符串会比不干系的字符串更靠近。这个事实以及快速向量搜索算法的存在,意味着可以利用嵌入来实现高效的知识检索。详细来说,可以将文本语料库分割成片段,并对每个片段进行嵌入和存储。然后,可以对给定的查询进行嵌入,并进行向量搜索,以找到与查询最干系的嵌入片段(即在嵌入空间中最靠近的片段)。
示例实现可以在OpenAI Cookbook[60]中找到。查看策略“辅导模型利用检索到的知识来回答查询”的示例,以理解如何利用知识检索来最小化模型编造禁绝确事实的可能性。
策略10.2:利用代码实行进行更准确的打算或调用外部API[61]措辞模型不能单独依赖于实行算术或永劫光打算的准确性。在须要这样的情形下,可以指示模型编写和运行代码,而不是进行自己的打算。特殊是,可以指示模型将要运行的代码放入指定的格式,例如三个反引号。在天生输出后,可以提取和运行代码。末了,如果须要,可以将代码实行引擎(即Python阐明器)的输出作为下一个查询的输入供应给模型。
系统
您可以通过三个反引号将Python代码括起来,并实行它,例如code goes here。可以利用此方法进行打算。
用户
找出以下多项式的所有实根:3x5 - 5x4 - 3x3 - 7
在 Playground 中打开[62] 另一个代码实行的好用例是调用外部API。如果模型在精确利用API方面受到辅导,它可以编写利用该API的代码。通过供应文档和/或代码示例来奉告模型如何利用API。
系统
您可以利用三个反引号将Python代码括起来并实行。还请把稳,您可以访问以下模块,以帮助用户向朋友发送:import message message.write(to="John", message="嘿,放工后想一起见面吗?")
在 Playground 中打开[63]
警告:实行模型天生的代码并不绝对安全,应在任何利用此功能的运用程序中采纳预防方法。特殊是须要利用沙箱代码实行环境来限定不受信赖的代码可能造成的侵害。
策略10.3:给模型访问特定的函数Chat Completions API许可在要求中通报一个函数描述列表。这使模型能够根据供应的模式天生函数参数。天生的函数参数以JSON格式由API返回,并可用于实行函数调用。函数调用供应的输出可以在以下要求中反馈给模型,以闭合循环。这是利用OpenAI模型调用外部函数的推举行法。要理解更多信息,请参阅我们的文本天生指南中的'函数调用'章节,并在OpenAI Cookbook中查看更多'函数调用示例'。
策略十一:系统地测试变更有时候,很难确定一项变更(例如新的指令或设计)是否使系统变得更好还是更差。查看几个示例可能会暗示哪一个更好,但利用小样本量很难区分真正的改进还是随机运气。大概这项变更在某些输入上有助于性能,但对其他输入却有负面影响。 评估程序(或“评估”)对付优化系统设计非常有用。好的评估应知足以下哀求:
•代表真实天下的利用情形(或至少是多样的)
•包含许多测试用例以得到更大的统计能力(请参考下表的指南)
•易于自动化或重复
须要检测的差异
95%置信度所需样本数量
30%
~10
10%
~100
3%
~1,000
1%
~10,000
输出可以通过打算机、人类或两者稠浊进行评估。打算机可以利用客不雅观标准(例如,只有一个精确答案的问题)自动评估以及一些主不雅观或模糊标准,在这些标准下,模型输出会被其他模型查询评估。OpenAI Evals[64]是一个开源的软件框架,供应创建自动化评估的工具。 基于模型的评估在存在一系列可能的输出被认为具有相同高质量性的情形下是有用的(例如对付回答较长问题的情形)。用模型进行评估和须要人工评估的界线是模糊的,并且随着模型变得更加有能力而不断变革。我们鼓励通过实验来确定基于模型的评估在您的用例中能够起到多大浸染。
策略11.1:将模型输出与黄金标准答案比拟进行评估假设已知一个问题的精确答案应参考一组特定的已知事实。那么我们可以利用模型查询来打算答案中包含了多少个所需事实。
例如,利用以下系统:
系统
您将得到由三个引号分隔的文本,这被认为是对一个问题的答案。请检讨以下信息是否直接包含在答案中:- 尼尔·阿姆斯特朗是第一个在月球上行走的人。- 尼尔·阿姆斯特朗首次登上月球的日期是1969年7月21日。对付每个要点,请实行以下步骤:1 - 重述这个要点。2 - 供应一个最靠近这个要点的答案引用。3 - 考虑一下,如果一个不理解这个主题的人阅读引文,是否能够直接推断出该要点。在做出决定之前阐明缘故原由。4 - 如果问题3的答案是“是”,则写下“是”,否则写下“否”。末了,打算有多少个“是”的答案。以 {"count": <插入数量>} 的格式供应此计数。
在playground中打开[65]
这里是一个知足两个条件的示例输入:
系统
insert system message above
用户
"""尼尔·阿姆斯特朗由于成为第一个登上月球的人而有名。这一历史性事宜发生在1969年7月21日,是阿波罗11号任务期间发生的。"""
在 Playground 中打开[66]
这里是一个只知足一个条件的示例输入:
系统
insert system message above
用户
"Neil Armstrong在他走下登月舱时创造了历史,成为第一个在月球上行走的人。""
这是一个例子输入,个中没有一个知足:
系统
insert system message above
用户
"""在69年的夏天,一次伟大的航行,阿波罗11号,像传奇一样大胆。阿姆斯特朗迈出了一步,历史展开了,“一小步”,他说,为了一个新天下。"""
这种基于模型的评估方法有很多可能的变种。考虑一下下面这个变种,它跟踪候选答案与黄金标准答案之间的重叠程度,并且还跟踪候选答案是否与黄金标准答案的任何部分相抵牾。
系统
利用以下步骤来回运用户输入。在进行下一步之前,完全重述每一步。例如,"第一步:情由..."。第一步:逐步推断提交答案中的信息与专家答案比较是如下办法之一:不相交、相等、子集、超集或交集(即相交但不是子集/超集)。第二步:逐步推理提交答案是否与专家答案的任何方面相互抵牾。第三步:输出构造化的JSON工具,形式为:{"type_of_overlap":"disjoint"或"equal"或"subset"或"superset"或"overlapping", "contradiction": true或false}。
在 Playground 中打开[67]
以下是一个示例输入,个中包含一个次标准回答,但并未与专家答案相抵牾:
系统
<在此处插入系统>
用户
问题:“尼尔·阿姆斯特朗最著名的事宜是什么?它发生在哪个日期?假设是天下折衷韶光。”提交的回答:“他不是在月球上行走吗?”专家回答:“尼尔·阿姆斯特朗最著名的事宜是成为第一个在月球上行走的人。这一历史事宜发生于1969年7月21日。”问题:「尼尔·阿姆斯特朗最著名的事宜是什么,它发生在什么日期?假设利用折衷天下时(UTC)韶光。」提交的答案:「1969年7月21日,尼尔·阿姆斯特朗成为第二个登上月球的人,位于巴兹·奥尔德林之后。」专家的答案:「尼尔·阿姆斯特朗最著名的是成为第一个登上月球的人。这一历史事宜发生在1969年7月21日。」
这是一个带有精确答案的示例输入,它还供应了比必要的更多细节:
系统
<在此处插入系统>
用户
问题:「尼尔·阿姆斯特朗最出名的事宜是什么,它发生在哪个日期?假设利用的是UTC韶光。」提交的回答:「大约在1969年7月21日02:56 UTC,尼尔·阿姆斯特朗成为第一位登上月球表面的人类,标志着人类历史上的一个重大造诣。」专家的回答:「尼尔·阿姆斯特朗最出名的事宜是成为第一个在月球上行走的人。这一历史性事宜发生于1969年7月21日。」
在Playground中打开[68]
其他资源访问OpenAI Cookbook[69]以获取更多灵感,个中包含示例代码和第三方资源的链接。
•勾引库和工具[70]
•勾引指南[71]
•视频课程[72]
•关于提高推理能力的高等勾引论文[73]
实战如何进行提示工程由于指令跟随型模型[74]的演习办法或其演习数据,有些特定的提示格式特殊有效,更能与手头的任务保持同等。以下我们展示了一些我们认为可靠有效的提示格式,但请随意探索不同的格式,这些可能更适宜您的任务。
履历法则及示例把稳:“{在此输入文本}”是实际文本/高下文的占位符
1. 利用最新的模型为了得到最佳效果,我们常日建议利用最新、最强大的模型。截至2022年11月,最好的选择是文本天生的“text-davinci-003”模型[75]和代码天生的“code-davinci-002”模型。
2. 将指令放在提示的开始部分,并利用 ### 或 """ 来分隔指令和高下文效果不佳:
将下面的文本总结为最主要点的项目符号列表。{text input here}
效果更佳:
将下面的文本总结为最主要点的项目符号列表。文本:"""{text input here}"""
3. 尽可能详细、描述性和详细地解释所需的高下文、结果、长度、格式、风格等
详细解释高下文、结果、长度、格式、风格等
效果不佳:
写一首关于OpenAI的诗。
效果更佳:
写一首简短而鼓舞民气的关于OpenAI的诗,重点描述最近的DALL-E产品发布(DALL-E是一个文本到图像的ML模型),采取{著名墨客}的风格
4. 通过示例表达期望的输出格式(示例1[76],示例2[77])
效果不佳:
从下面的文本中提取提到的实体。提取以下4种实体类型:公司名称、人名、特定主题和主旨。文本:{text}
展示息争释 - 当模型被详细的格式哀求所示范时,回应效果更好。这也使得程序化地可靠提取多个输出变得更随意马虎。
效果更佳:
从下面的文本中提取主要实体。首先提取所有公司名称,然后提取所有人名,接着提取符合内容的特定主题,末了提取总体主旨。期望格式:公司名称:<逗号分隔的公司名称列表>人名:-||-特定主题:-||-总体主旨:-||-文本:{text}
5. 先考试测验zero-shot,然后是few-shot(示例[78]),如果都弗成,再微调zero-shot
从下面的文本中提取关键词。文本:{text}关键词:
few-shot - 供应几个示例
从下面的文本中提取关键词。文本1:Stripe供应API,网页开拓职员可以利用这些API将支付处理集成到他们的网站和移动运用中。关键词1:Stripe、支付处理、API、网页开拓职员、网站、移动运用文本2:OpenAI演习了尖真个措辞模型,这些模型非常善于理解和天生文本。我们的API供应对这些模型的访问,并可用于办理险些所有涉及处理措辞的任务。关键词2:OpenAI、措辞模型、文本处理、API。文本3:{text}关键词3:
微调:请参阅此处[79]的微调最佳实践。
6. 减少“冗长”和禁绝确的描述效果不佳 :
这个产品的描述该当相称简短,只有几句话,不要太多。
效果更佳:
利用3到5句话的段落来描述这个产品。
7. 不仅仅说不要做什么,还要说要做什么
效果不佳:
以下是一名代理与一名客户之间的对话。不要讯问用户名或密码。不要重复。客户:我无法登录我的账户。代理:
效果更佳:
以下是一名代理与一名客户之间的对话。代理将考试测验诊断问题并建议办理方案,同时避免讯问任何与个人身份信息(PII)干系的问题。不要讯问用户名或密码之类的PII,而是将用户勾引至帮助文章www.samplewebsite.com/help/faq客户:我无法登录我的账户。代理:
8. 代码天生特定 - 利用“勾引词”匆匆使模型朝特定模式倾斜
效果不佳:
# 编写一个大略的python函数# 1. 向我讯问一个以英里为单位的数字# 2. 将英里转换为公里
不才面的代码示例中,添加"import"提示模型该当开始用Python编写。(类似地,“SELECT”是SQL语句开始的好提示。)
效果更佳:
# 编写一个大略的python函数# 1. 向我讯问一个以英里为单位的数字# 2. 将英里转换为公里import
参数
一样平常来说,我们创造model 和 temperature 是用于改变模型输出的最常用参数。
1.model - 性能更高的模型[80]更昂贵且延迟更高。2.temperature - 是模型输出较不可能的令牌的频率的度量。temperature越高,输出常日越随机(并且常日更有创意)。然而,这并不等同于“真实性”。对付大多数事实性用例,如数据提取和真实的问答,最佳的temperature是0。3.max_tokens(最大长度)- 并不掌握输出的长度,而是令牌天生的硬性截止限定。空想情形下,您不会常常触及此限定,由于您的模型会在认为已完成时停滞,或在达到您定义的停滞序列时停滞。4.stop(停滞序列) - 一组字符(令牌),在天生时,会导致文本天生停滞。
有关其他参数的描述,请参阅API参考[81]。
本文为之前整理的官方教程的改动版,如果本文对您有帮助,请帮忙点赞、关注、收藏。更多内容参考:https://platform.openai.com/docs/guides/prompt-engineering和https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api
附加资源如果您对额外资源感兴趣,我们推举:
•指南
•文本补全[82] - 学习如何利用我们的模型天生或编辑文本
•代码补全[83] - 探索Codex的提示工程
•微调[84] - 学习如何为您的用例演习自定义模型
•嵌入[85] - 学习如何搜索、分类和比较文本
•内容审核[86]
•OpenAI Cookbook 仓库[87] - 包含利用 API 完成常见任务的示例代码和提示,包括利用嵌入进行问答
•社区论坛[88]
References
[1] 提示词工程: https://platform.openai.com/docs/guides/prompt-engineering/prompt-engineering
[2] 提示示例 探索提示示例以理解GPT模型的能力: https://platform.openai.com/examples
[3] 在查询中包含详细信息以得到更干系的答案: https://platform.openai.com/docs/guides/prompt-engineering/tactic-include-details-in-your-query-to-get-more-relevant-answers
[4] 哀求模型扮演一个人设: https://platform.openai.com/docs/guides/prompt-engineering/tactic-ask-the-model-to-adopt-a-persona
[5] 利用分隔符清楚地指示输入的不同部分: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-delimiters-to-clearly-indicate-distinct-parts-of-the-input
[6] 指定完成任务所需的步骤: https://platform.openai.com/docs/guides/prompt-engineering/tactic-specify-the-steps-required-to-complete-a-task
[7] 供应示例: https://platform.openai.com/docs/guides/prompt-engineering/tactic-provide-examples
[8] 指定所需的输出长度: https://platform.openai.com/docs/guides/prompt-engineering/tactic-specify-the-desired-length-of-the-output
[9] 辅导模型利用参考文本回答问题: https://platform.openai.com/docs/guides/prompt-engineering/tactic-instruct-the-model-to-answer-using-a-reference-text
[10] 辅导模型利用参考文本中的引用来回答问题: https://platform.openai.com/docs/guides/prompt-engineering/tactic-instruct-the-model-to-answer-with-citations-from-a-reference-text
[11] 将繁芜任务拆分为较大略的子任务: https://platform.openai.com/docs/guides/prompt-engineering/split-complex-tasks-into-simpler-subtasks
[12] 利用意图分类来识别与用户查询最干系的解释: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-intent-classification-to-identify-the-most-relevant-instructions-for-a-user-query
[13] 对付须要非常长对话的对话运用程序,进行对先前对话的择要或过滤: https://platform.openai.com/docs/guides/prompt-engineering/tactic-for-dialogue-applications-that-require-very-long-conversations-summarize-or-filter-previous-dialogue
[14] 将长文档分段进行择要并递归构建完全择要: https://platform.openai.com/docs/guides/prompt-engineering/tactic-summarize-long-documents-piecewise-and-construct-a-full-summary-recursively
[15] 给模型一些韶光来“思考”: https://platform.openai.com/docs/guides/prompt-engineering/give-the-model-time-to-think
[16] 在贸然下结论之前,辅导模型自己办理问题: https://platform.openai.com/docs/guides/prompt-engineering/tactic-instruct-the-model-to-work-out-its-own-solution-before-rushing-to-a-conclusion
[17] 利用内心独白或一系列问题隐蔽模型的推理过程: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-inner-monologue-or-a-sequence-of-queries-to-hide-the-model-s-reasoning-process
[18] 讯问模型在之前的处理中是否有遗漏: https://platform.openai.com/docs/guides/prompt-engineering/tactic-ask-the-model-if-it-missed-anything-on-previous-passes
[19] 利用外部工具: https://platform.openai.com/docs/guides/prompt-engineering/use-external-tools
[20] 利用基于嵌入的搜索实现高效知识检索: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-embeddings-based-search-to-implement-efficient-knowledge-retrieval
[21] 利用代码实行进行更精确的打算或调用外部 API: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-code-execution-to-perform-more-accurate-calculations-or-call-external-apis
[22] 为模型供应访问特定函数的能力: https://platform.openai.com/docs/guides/prompt-engineering/tactic-give-the-model-access-to-specific-functions
[23] 系统地测试变革: https://platform.openai.com/docs/guides/prompt-engineering/test-changes-systematically
[24] 参考标准答案评估模型输出: https://platform.openai.com/docs/guides/prompt-engineering/tactic-evaluate-model-outputs-with-reference-to-gold-standard-answers
[25] 策略详细解释: https://platform.openai.com/docs/guides/prompt-engineering/tactics
[26] 在Playground中打开: https://platform.openai.com/playground/p/default-playful-thank-you-note?mode=chat
[27] 策略三:利用分隔符清楚地标示输入的不同部分: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-delimiters-to-clearly-indicate-distinct-parts-of-the-input
[28] Open in Playground: https://platform.openai.com/playground/p/default-delimiters-1?mode=chat
[29] 在 Playground 中打开: https://platform.openai.com/playground/p/default-delimiters-2?mode=chat
[30] 在playground中打开: https://platform.openai.com/playground/p/default-delimiters-3?mode=chat
[31] 在playground中打开: https://platform.openai.com/playground/p/default-step-by-step-summarize-and-translate?mode=chat
[32] 供应例子: https://platform.openai.com/docs/guides/prompt-engineering/tactic-provide-examples
[33] 在playground中打开: https://platform.openai.com/playground/p/default-chat-few-shot?mode=chat
[34] 在Playground中打开: https://platform.openai.com/playground/p/default-summarize-text-50-words?mode=chat
[35] 在Playground中打开: https://platform.openai.com/playground/p/default-summarize-text-2-paragraphs?mode=chat
[36] 在Playground中打开: https://platform.openai.com/playground/p/default-summarize-text-3-bullet-points?mode=chat
[37] 在Playground中打开: https://platform.openai.com/playground/p/default-answer-from-retrieved-documents?mode=chat
[38] 嵌入: https://platform.openai.com/docs/guides/embeddings/what-are-embeddings
[39] "利用基于嵌入的搜索实现高效的知识检索": https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-embeddings-based-search-to-implement-efficient-knowledge-retrieval
[40] 在Playground中打开: https://platform.openai.com/playground/p/default-answer-with-citation?mode=chat
[41] 策略八:将繁芜任务分解为大略子任务: https://platform.openai.com/docs/guides/prompt-engineering/strategy-split-complex-tasks-into-simpler-subtasks
[42] 策略8.1:利用意图分类来识别与用户查询最干系的指令: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-intent-classification-to-identify-the-most-relevant-instructions-for-a-user-query
[43] 定价信息: https://openai.com/pricing
[44] 在playground中打开: https://platform.openai.com/playground/p/default-decomposition-by-intent-classification-1?mode=chat
[45] 在playground中打开: https://platform.openai.com/playground/p/default-decomposition-by-intent-classification-2?mode=chat
[46] "利用基于嵌入式搜索实现高效知识检索": https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-embeddings-based-search-to-implement-efficient-knowledge-retrieval
[47] 策略8.3:逐段概括长文档并递归构建完全择要: https://platform.openai.com/docs/guides/prompt-engineering/tactic-summarize-long-documents-piecewise-and-construct-a-full-summary-recursively
[48] 研究: https://openai.com/research/summarizing-books
[49] 在playground中打开: https://platform.openai.com/playground/p/default-rushing-to-a-conclusion?mode=chat
[50] 在 Playground 中打开: https://platform.openai.com/playground/p/default-avoid-rushing-to-a-conclusion?mode=chat
[51] 利用内心独白或查询序列来隐蔽模型的推理过程: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-inner-monologue-or-a-sequence-of-queries-to-hide-the-model-s-reasoning-process
[52] 在playground中打开: https://platform.openai.com/playground/p/default-inner-monologue?mode=chat
[53] 在Playground中打开: https://platform.openai.com/playground/p/default-query-sequence-1?mode=chat
[54] 在Playground中打开: https://platform.openai.com/playground/p/default-query-sequence-2?mode=chat
[55] 在 Playground 中打开: https://platform.openai.com/playground/p/default-query-sequence-3?mode=chat
[56] 策略9.3:讯问模型是否在之前的迭代中遗漏了任何内容: https://platform.openai.com/docs/guides/prompt-engineering/tactic-ask-the-model-if-it-missed-anything-on-previous-passes
[57] 在 Playground 中打开: https://platform.openai.com/playground/p/default-2nd-pass?mode=chat
[58] 策略十:利用外部工具: https://platform.openai.com/docs/guides/prompt-engineering/strategy-use-external-tools
[59] 策略10.1:利用基于嵌入的搜索实现高效知识检索: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-embeddings-based-search-to-implement-efficient-knowledge-retrieval
[60] OpenAI Cookbook: https://cookbook.openai.com/examples/vector_databases/readme
[61] 利用代码实行进行更准确的打算或调用外部API: https://platform.openai.com/docs/guides/prompt-engineering/tactic-use-code-execution-to-perform-more-accurate-calculations-or-call-external-apis
[62] 在 Playground 中打开: https://platform.openai.com/playground/p/default-code-execution?mode=chat
[63] 在 Playground 中打开: https://platform.openai.com/playground/p/default-code-api?mode=chat
[64] OpenAI Evals: https://github.com/openai/evals
[65] 在playground中打开: https://platform.openai.com/docs/guides/prompt-engineering/strategy-test-changes-systematically?mode=chat
[66] 在 Playground 中打开: https://platform.openai.com/playground/p/default-model-based-eval-1?mode=chat
[67] 在 Playground 中打开: https://platform.openai.com/docs/guides/prompt-engineering/strategy-test-changes-systematically?mode=chat
[68] 在Playground中打开: https://platform.openai.com/playground/p/default-model-based-eval-6?mode=chat
[69] OpenAI Cookbook: https://cookbook.openai.com/
[70] 勾引库和工具: https://cookbook.openai.com/related_resources#prompting-libraries--tools
[71] 勾引指南: https://cookbook.openai.com/related_resources#prompting-guides
[72] 视频课程: https://cookbook.openai.com/related_resources#video-courses
[73] 关于提高推理能力的高等勾引论文: https://cookbook.openai.com/related_resources#papers-on-advanced-prompting-to-improve-reasoning
[74] 模型: https://beta.openai.com/docs/models
[75] 模型: https://beta.openai.com/docs/models
[76] 示例1: https://beta.openai.com/playground/p/DoMbgEMmkXJ5xOyunwFZDHdg
[77] 示例2: https://beta.openai.com/playground/p/3U5Wx7RTIdNNC9Fg8fc44omi
[78] 示例: https://beta.openai.com/playground/p/Ts5kvNWlp7wtdgWEkIAbP1hJ
[79] 此处: https://docs.google.com/document/d/1h-GTjNDDKPKU_Rsd0t1lXCAnHltaXTAzQ8K2HRhQf9U/edit#
[80] 模型: https://beta.openai.com/docs/models
[81] API参考: https://beta.openai.com/docs/api-reference/completions/create
[82] 文本补全: https://beta.openai.com/docs/guides/completion/text-completion
[83] 代码补全: https://beta.openai.com/docs/guides/code/code-completion-private-beta
[84] 微调: https://beta.openai.com/docs/guides/fine-tuning/fine-tuning
[85] 嵌入: https://beta.openai.com/docs/guides/embeddings/embeddings
[86] 内容审核: https://beta.openai.com/docs/guides/moderation/moderation
[87] OpenAI Cookbook 仓库: https://github.com/openai/openai-cookbook/tree/main/examples
[88] 社区论坛: https://community.openai.com/