OpenAI官方提示工程指南

OpenAI官方提示工程指南 #

原文链接

本指南分享了从大语言模型(有时称为GPT模型,如 GPT-4)中获得更好结果的策略和方法。文中描述的方法有时可以结合使用以产生更好的效果。我们鼓励进行实验,找到最适合你的方法。

你还可以探索示例提示,展示我们的模型能够实现的效果:

提示词示例,浏览这些示例,发现GPT模型的潜能

1.获得更好结果的六个策略 #

1.1 编写清晰的指令 #

这些模型并不会读心术。如果输出太长,请要求简短的回复;如果输出太简单,你可以要求使用更专业的水平写作;如果你对输出格式不满意,请示范你期望的格式。模型猜测你需求的次数越少,得到正确结果的可能性就越大。

技巧:

在查询中包含详细信息,以获得更相关的答案 #

为了得到更准确的回答,确保你的提问中包含了所有重要的细节和背景信息。否则你就是在让模型猜测你的意图。

较差的提问 较好的提问
我该如何在 Excel 中进行加法计算? 我该如何在 Excel 中自动计算一行中的美元总额?我想要的是自动为整张表格的每行进行计算,最终所有的总计数都显示在右侧名为“总计”的列中。
当前的总统是谁? 2021 年,谁是墨西哥的总统?墨西哥的选举是多久举行一次的?
编写一个计算斐波那契序列的代码。 编写一个 TypeScript 函数,用以高效计算斐波那契序列。请详细注释代码,解释每部分代码的作用以及为何这样编写。
总结一下会议记录。 请用一个段落总结会议记录。接着,用 markdown 列表的形式列出所有发言者及其关键观点。最后,如果有的话,列出发言者提出的下一步计划或建议的行动项。

要求模型扮演特定角色 #

“系统消息”(system)可用于指定模型在回复时所使用的角色或身份。

1SYSTEM  当我请求帮助写作时,你的回答中每个段落至少应包含一个幽默的笑话或俏皮的评论。
2
3USER    写一封感谢信给我的钢螺栓供应商,感谢他们在短时间内准时交货。
4        这使我们能够按时交付一份重要订单。

使用分隔符清晰标记输入的不同部分 #

使用三重引号、XML 标签、章节标题等作为分隔符,能够有效地区别并处理不同的文本内容。

1USER    请使用三重引号中的文本进行总结,并用俳句的形式表达。
2        """输入文本"""
1SYSTEM  你将会接收到两篇关于相同主题的文章(用XML标签分隔)。
2        首先分别总结这两篇文章的主要论点。接着评价哪篇文章的论据更具说服力,并说明理由。
3
4USER    <article> 输入第一篇文章 </article>
5
6        <article> 输入第二篇文章 </article>
1SYSTEM  你将获得一篇论文的摘要和一个建议的标题。
2        论文标题应该能让读者对论文的主题有个清晰的认识,同时也要足够吸引人。
3        如果现有的标题不够吸引人或不够明确,那么请提出五个备选标题。
4
5USER    摘要:输入摘要
6
7        标题:输入标题

对于像这些简单的任务,使用分隔符可能对输出质量没有明显影响。然而,任务越复杂,明确任务细节就越重要。不要让模型费力去理解你到底在要求什么。

指定完成任务所需的步骤 #

对于某些任务,最好将其分解成一系列明确的步骤。将步骤清晰地写出来,可以帮助模型更有效地遵循指令。

1SYSTEM  请按照以下步骤来回应用户的输入。
2
3        第1步 - 用户会给你提供带有三重引号的文本。请将这段文本总结为一句话,并以"摘要:"作为前缀。
4        第2步 - 将第1步中的摘要翻译成西班牙语,并以"翻译:"作为前缀。
5
6USER	"""输入文本"""

提供示例 #

通常,给出适用于所有情况的通用指导比展示各种任务示例更高效。但在某些情况下,通过提供具体示例来说明可能更直观。例如,当你希望模型模仿一种特定的回答风格,而这种风格难以用明确的语言描述时。这种方法被称为“少样本”提示(few-shot prompting)。

1SYSTEM          保持一致的回答风格。
2
3USER            什么是耐心?
4
5ASSISTANT       那条雕刻最深峡谷的河流源自一个不起眼的泉眼;最宏伟的交响乐始于一个音符;
6                最复杂的织锦始于一根孤独的线。
7
8USER            什么是大海?

指定期望的输出长度 #

你可以要求模型生成指定长度的输出。目标输出长度可以通过字数、句子数、段落数、要点数等来指定。然而,请注意,要求模型生成特定字数的输出并不十分精确。模型更擅长按照指定的段落数或要点数来构建输出。

1USER    请用大约 50 个词概括三引号内的文本。
2
3        """输入文本"""
1USER    请用两段话概括三引号内的文本。
2
3        """输入文本"""
1USER    请用三个要点概括三引号内的文本。
2
3        """输入文本"""

1.2 提供参考文本 #

语言模型在处理深奥话题或要求提供引用和URL时,可能会自信地生成虚假答案。就像学生在考试中借助笔记能够帮助其取得更好的成绩一样,向这些模型提供参考文本也可以减少其生成错误答案和制造虚假信息的几率。

技巧:

引导模型使用参考文本回答 #

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

1SYSTEM  请根据提供的这些由三重引号括起来的文章来回答问题。
2        如果这些文章中没有包含答案,你只需回答“无法找到答案”。
3
4USER    <插入每篇用三重引号括起来的文章>
5
6        <插入问题>

鉴于所有模型都有有限的上下文窗口,我们需要某种方式动态地查找与问题相关的信息。嵌入(Embeddings)技术可以用于实现高效的知识检索。有关如何实现这一点的更多细节,请参考 “使用基于嵌入的搜索实现高效的知识检索”。

引导模型根据参考文本中的引用信息回答问题 #

1SYSTEM  您将获得由三重引号括起来的文档和一个问题。
2        您的任务是仅使用提供的文档回答问题,并引用文档中用于回答问题的部分。
3        如果文档不包含回答该问题所需的信息,则只需回复:"信息不足"。
4        如果提供了问题的答案,则必须附带引用。请使用以下格式引用相关段落({"citation": …})。
5
6USER    """<插入文档>"""
7
8        问题:<插入问题>

1.3 将复杂任务拆解为更简单子任务 #

就像在软件工程中将复杂系统分解为一组模块化的组件一样,将提交给语言模型的任务进行拆解也是一种良好的实践。复杂任务往往比简单任务有更高的错误率。此外,复杂任务通常可以重新定义为一系列简单任务的工作流程,其中前面任务的输出用于构建后面任务的输入。

技巧:

使用意图分类来识别用户查询中最相关的指令 #

对于需要多组独立指令来处理不同情况的任务,首先对查询进行分类,并根据分类确定所需的指令可能会带来好处。这可以通过定义固定的类别并硬编码相关指令来实现,用于处理给定类别中的任务。这个过程还可以递归地应用,将任务分解为一系列阶段。这样做的优势在于,每个查询只包含执行任务下一阶段所需的指令,相比使用单个查询执行整个任务,错误率可能会更低。此外,这种方法还可以降低成本,因为较大的提示词运行成本更高(请参阅定价信息)。

例如在客户服务应用中,查询可以按如下方式进行分类:

 1
 2SYSTEM  您将收到客户服务查询。将每个查询分类为一个主类别和一个次类别。
 3        请使用json格式提供您的输出,键为:primary和secondary。
 4
 5        主类别包括:账单、技术支持、账户管理、一般查询。
 6
 7        账单的次类别包括:  
 8        - 取消订阅或升级  
 9        - 添加支付方式  
10        - 解释收费
11        - 收费争议
12
13        技术支持的次类别包括:  
14        - 故障排除  
15        - 设备兼容性  
16        - 软件更新
17
18        账户管理的次类别包括:  
19        - 重置密码  
20        - 更新个人信息  
21        - 关闭账户  
22        - 账户安全
23
24        一般查询的次类别包括:  
25        - 产品信息  
26        - 定价  
27        - 反馈  
28        - 与人工客服对话
29
30
31USER    我的网络需要恢复工作。

根据客户查询的分类,可以为模型提供一组更具体的指令以处理下一步。例如,如果客户需要帮助进行“故障排除”的帮助。

 1 
 2SYSTEM  您将收到需要在技术支持环境中进行故障排除的客户服务请求。帮助用户通过以下步骤:
 3
 4        - 请他们检查路由器的所有电缆是否连接好。请注意,电缆随着时间可能会松动。
 5        - 如果所有电缆都已连接且问题仍然存在,询问他们使用的路由器型号。
 6        - 然后根据路由器型号给出设备重启建议:
 7        - 如果型号为MTD-327J,建议他们按住红色按钮5秒钟,然后等待5分钟后测试连接。
 8        - 如果型号为MTD-327S,建议他们拔掉电源插头并重新插上,然后等待5分钟后测试连接。
 9        - 如果重启设备并等待5分钟后问题依然存在,请将他们转接至IT支持,并显示{"IT支持请求"}的信息。
10        - 如果用户开始提出与该主题无关的问题,请确认他们是否愿意结束当前的故障排查话题,并根据以下方案对其请求进行分类:
11
12        <在此处插入上面的主要/次要分类方案>
13
14
15USER    我的网络需要恢复工作。

请注意,模型被设定为在对话状态发生变化时发出特殊指令。这使我们的系统能够转变为一个状态机,根据当前的状态来决定注入哪些指令,以及从该状态出发可以转换到哪些状态。通过监控对话状态、相关指令以及状态转换,我们能更好地控制用户体验,这在非结构化的交流方式中难以实现。

对需要进行长时间对话的应用,汇总或筛选之前的对话内容 #

由于模型具有固定的上下文长度,用户与助手(ASSISTANT)的对话不能无限延续,尤其是当整个对话内容都包含在上下文窗口中时。

对此问题有多种解决方法,其中之一是对之前的对话内容进行总结。一旦输入达到预定的阈值长度,就可以触发一个查询,来总结部分对话内容,并将之前对话的总结作为系统消息的一部分包含进去。另一种方法是在整个对话过程中,异步地在后台对之前的对话进行总结。

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

分段归纳总结长文档,并递归构建完整的摘要 #

由于模型具有固定的上下文长度,因此它们无法在单次查询中总结长度超过上下文长度减去生成摘要长度的文本。

要总结像书籍这样非常长的文档,我们可以使用一系列查询来分别总结文档的每个部分。各部分的摘要可以连接起来,再进行总结,生成“摘要的摘要”。这一过程可以递归进行,直到整篇文档被总结完。如果在理解后续部分时需要参考前面的部分信息,那么一种有用的技巧是在总结当前部分时,包含前面内容的实时摘要。OpenAI 之前利用 GPT-3 的变种对这种总结书籍的方法进行了研究

1.4 给模型时间“思考” #

如果被要求计算17乘以28,你可能不会立即知道结果,但可以通过时间推算出来。同样,模型在尝试立即回答时更容易犯推理错误,而不是花时间推导答案。在回答之前要求一个“思维链”(chain of thought)可以帮助模型更可靠地推理出正确的答案。

技巧:

在模型急于得出结论之前,指导模型自己寻找解决方案 #

有时当我们明确指示模型在得出结论之前先从基本原理进行推理时,我们会得到更好的结果。例如,假设我们想要让模型评估学生对数学问题的解答。最显而易见的方法是简单地询问模型学生的解答是否正确。

 1SYSTEM          判断学生的解答是否正确。
 2
 3USER            问题陈述:我正在建设一个太阳能发电装置,需要帮忙计算财务相关的事项。
 4                - 土地价格为每平方英尺100美元
 5                - 我可以以每平方英尺250美元的价格购买太阳能电池板
 6                - 我谈判了一份维护合同,每年固定费用为10万美元,另外每平方英尺10美元
 7                求第一年运营的总成本作为平方英尺数的函数。
 8
 9                学生的解答:假设安装面积为x平方英尺。
10                1. 土地成本:100x
11                2. 太阳能电池板成本:250x
12                3. 维护成本:100,000 + 100x
13                总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
14
15ASSISTANT       学生的解答正确。

但学生的解决方案实际上不正确!我们可以通过引导模型首先产生它自己的解答,从而让它成功地发现这个问题。

 1SYSTEM          首先自己解答问题。然后将你的解答与学生的解答进行比较,评估学生的解答是否正确。
 2                在你自己解答完问题之前,不要判断学生的解答是否正确。
 3
 4
 5USER            问题陈述:我正在建设一个太阳能发电装置,需要帮忙计算财务相关的事项。
 6                - 土地价格为每平方英尺100美元
 7                - 我可以以每平方英尺250美元的价格购买太阳能电池板
 8                - 我谈判了一份维护合同,每年固定费用为10万美元,另外每平方英尺10美元
 9                求第一年运营的总成本作为平方英尺数的函数。
10
11                学生的解答:假设安装面积为x平方英尺。
12                1. 土地成本:100x
13                2. 太阳能电池板成本:250x
14                3. 维护成本:100,000 + 100x
15                总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
16
17ASSISTANT       假设安装面积为x平方英尺。
18                
19                1. 土地成本:100x
20                2. 太阳能电池板成本:250x
21                3. 维护成本:100,000 + 10x
22                总成本:100x + 250x + 100,000 + 10x = 360x + 100,000

使用内心独白或连续提问来隐藏模型的推理过程 #

前述策略表明,有时让模型在回答特定问题之前详细推理问题是很重要的。在某些应用场景中,模型得出最终答案的推理过程并不适合与用户分享。例如,在辅导应用中,我们可能希望鼓励学生自己解答问题,而模型对学生解答的推理过程可能会无意中将答案透露给学生。

内在独白是一种可以缓解这种问题的策略。内在独白的思路是指示模型将那些不应展示给用户的输出部分放入一种便于解析的结构化格式中。然后在展示输出给用户之前,解析输出,并只向用户展示部分内容。

1SYSTEM  按照以下步骤回答用户的提问。
2        步骤1 - 首先自己解答问题。不要依赖学生的解答,因为可能存在错误。用三引号(""")将你在这一步的所有工作包围起来。
3        步骤2 - 将你的解答与学生的解答进行比较,并评估学生的解答是否正确。用三引号(""")将你在这一步的所有工作包围起来。
4        步骤3 - 如果学生有错误,确定你可以给学生的提示,但不能直接告诉答案。用三引号(""")将你在这一步的所有工作包围起来。
5        步骤4 - 如果学生有错误,向学生提供上一步骤中的提示(不使用三引号)。代替写"步骤4 - ...",使用"提示:"。
6
7USER    问题陈述:<插入问题陈述>
8
9        学生解答:<插入学生解答>

另一种方式是通过一系列查询实现,除了最后一个查询外,所有查询的输出都对最终用户隐藏。

首先,我们可以要求模型独立解答问题。由于这个初始查询不需要学生的解答,它可以被省略。这还有一个额外的好处,即模型的解答不会被学生的尝试答案所影响。

1USER    <插入问题陈述>

接下来,我们可以让模型使用所有可用信息来评估学生解答的正确性。

1SYSTEM  将你的解答与学生的解答进行比较,并评估学生的解答是否正确。
2
3USER    问题陈述:"""<插入问题陈述>"""  
4        你的解答:"""<插入模型生成的解答>"""  
5        学生解答:"""<插入学生的解答>"""

最后,我们可以让模型利用其分析结果,模拟一位乐于助人的导师的回复。

1SYSTEM  你是一位数学导师。如果学生犯了错误,请以不透露答案的方式向学生提供提示。如果学生没有犯错,只需给他们一个鼓励性的评论。
2
3USER
4        问题陈述:"""<插入问题陈述>"""  
5        你的解答:"""<插入模型生成的解答>"""  
6        学生解答:"""<插入学生的解答>"""  
7        分析:"""<插入模型从前一步生成的分析>"""

询问模型在之前的过程中是否遗漏了什么 #

假设我们使用模型从某个来源中列出与特定问题相关的摘录。在列出每个摘录之后,模型需要确定是否应该开始撰写下一个摘录或是否应该停止。如果来源文档较大,模型通常会过早停止,未能列出所有相关的摘录。在这种情况下,通过提示模型进行后续查询,以查找在之前遍历中遗漏的摘录,通常可以获得更好的表现。

 1  
 2SYSTEM          你将被提供一个用三引号包围的文档。你的任务是选择与以下问题相关的摘录:
 3                “在人工智能历史上发生了哪些重要的范式转变?”
 4
 5                确保摘录包含所有必要的上下文以便理解它们——换句话说,不要提取缺少重要上下文的小片段。以JSON格式提供输出,如下所示:
 6
 7
 8                [{"excerpt": "..."},
 9                ...
10                {"excerpt": "..."}]
11
12
13USER            """\<插入文档\>"""
14
15
16ASSISTANT       [{"excerpt": "模型在这里写一个摘录"},
17                ...
18                {"excerpt": "模型在这里写另一个摘录"}]
19
20
21USER            还有其他相关的摘录吗?请注意不要重复摘录。
22                也请确保摘录包含所有必要的上下文,以便理解它们——换句话说,不要提取缺少重要上下文的小片段。

1.5 使用外部工具 #

通过向模型提供其他工具的输出来弥补模型的不足。例如,文本检索系统(有时称为RAG或检索增强生成)可以告诉模型与问题相关的文档。像OpenAI的Code Interpreter这样的代码执行引擎可以帮助模型进行数学运算或运行代码。如果某项任务通过工具而不是语言模型来完成更加可靠或高效,就可以将其交给工具处理,以获得最佳效果。

技巧:

使用基于嵌入的搜索来实现高效的知识检索 #

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

文本嵌入是一种向量,可以用来衡量文本字符串之间的相关性。相似或相关的字符串在向量空间中距离更近,而不相关的字符串则距离较远。基于此事实,加上快速向量搜索算法的存在,嵌入可以用于实现高效的知识检索。具体来说,文本语料库可以被分成多个块,每个块都可以嵌入并存储。然后,给定的查询可以嵌入,并执行向量搜索,以找到语料库中与查询最相关的嵌入文本块(即在嵌入空间中彼此最接近的块)。

示例实现可以在OpenAI Cookbook中找到。请参阅策略“指导模型使用检索到的知识回答查询”,以了解如何使用知识检索来减少模型编造错误事实的可能性。

使用代码执行来进行更准确的计算或调用外部API #

仅凭语言模型自身,我们不能指望它准确完成算术或复杂计算。在需要这些功能的情况下,可以指示模型编写需要运行代码,而不是依靠其自身进行计算。特别地,可以指示模型将需要运行的代码放入指定的格式中,如三重反引号```。生成输出后,可以提取并运行代码。最后,如有必要,可以将代码执行引擎(例如Python解释器)的输出作为输入,提供给模型用于下一个查询。

1SYSTEM  你可以通过将Python代码包裹在三重反引号中来编写和执行代码,例如```代码写在这里```。使用此方法进行计算。
2
3USER    找到以下多项式的所有实数根:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.。  

另一个代码执行的好例子是调用外部API。如果模型被正确指导如何使用API,它可以编写使用该API的代码。可以通过提供文档和或代码示例,向指导模型如何使用API。

1SYSTEM  你可以通过将Python代码包裹在三重反引号中来编写和执行代码。还请注意,你可以使用以下模块来帮助用户给他们的朋友发送消息:
2        ```
3        import message
4        message.write(to="John", message="嘿,下班后要见面吗?") 
5        ```

警告

执行模型生成的代码可能存在安全风险,任何应用程序在执行此类操作时都应采取预防措施。特别是,需要一个沙盒化(隔离)的代码执行环境,以降低不可信代码可能造成的危害。

为模型提供访问特定功能的能力(function calling) #

Chat Completions API允许在请求中传递函数描述列表。这使得模型能够根据提供的模式生成函数参数。生成的函数参数以JSON格式由API返回,并可用于执行函数调用。函数调用提供的输出可以在接下来的请求中反馈给模型,形成闭环。这是使用OpenAI模型调用外部函数的推荐方法。要了解更多信息,请参阅我们入门级文本生成指南中的函数调用部分,以及OpenAI Cookbook中的更多函数调用示例

1.6 系统性的对变更测试 #

如果你能够测量性能,改善性能会更加容易。在某些情况下,修改提示可能会在几个孤立的示例中取得更好的表现,但在更具代表性的示例集中却导致整体表现变差。因此,为了确保某一变更对性能有正面影响,可能有必要定义一个全面的测试套件(也称为“评估”)。

有时很难判断一个更改(例如新的指令或设计)是否使系统变得更好或更差。查看一些示例可能会暗示哪个更好,但样本量较小的情况下,很难区分是真正的改进还是随机的运气。也许更改在某些输入上提高了性能,但在其他输入上降低了性能。

评估程序(或称“评估”)对于优化系统设计非常有用。好的评估应具有以下特征:

  • 具有代表性(与实际使用相符,或至少具备多样性)
  • 包含大量测试用例以增强统计效力(见下表)
  • 易于自动化或重复执行
可检测差异 所需样本量(95% 置信度)
30% ~10
10% ~100
3% ~1,000
1% ~10,000

输出评估可以由计算机、人类或两者结合进行。计算机可以通过客观标准(例如,只有一个正确答案的问题)以及一些主观或模糊的标准自动执行评估,在这些情况下,模型的输出由其他模型查询进行评估。OpenAI Evals 是一个开源软件框架,提供创建自动评估的工具。

当存在多个同样高质量的输出时,基于模型的评估可能很有用(例如,对于有长答案的问题)。基于模型的评估与需要人类评估的界限较为模糊,随着模型能力的提升,这一界限也在不断变化。我们鼓励进行实验,以了解基于模型的评估在您的用例中能发挥多大作用。

技巧:

通过参考标准答案来评估模型输出 #

假设已知问题的正确答案应参考一组特定的已知事实。那么,我们可以通过查询模型来统计答案中包含了多少个必要的事实。

例如,使用以下系统消息:

 1SYSTEM  你将收到用三重引号分隔的文本,该文本应该是一个问题的答案。检查以下信息是否直接包含在答案中:
 2
 3        - 尼尔·阿姆斯特朗是第一个在月球上行走的人。
 4        - 尼尔·阿姆斯特朗首次登上月球的日期是1969年7月21日。
 5
 6        对于每一点,请执行以下步骤:
 7
 8        1 - 重述该点。
 9        2 - 从答案中引用与该点最接近的部分。
10        3 - 考虑如果读者对该话题不了解,是否可以通过该引用直接推断出该点。解释为什么或为什么不能,然后再做决定。
11        4 - 如果答案是肯定的,请写"yes",否则写"no"。
12
13        最后,计算"yes"的数量。提供该数量为{"count": <插入数量>}。

以下是一个满足两点的输入示例:

1SYSTEM  <插入上述系统消息>  
2
3USER    """尼尔·阿姆斯特朗因成为第一个登上月球的人而闻名。这一历史事件发生在1969年7月21日,阿波罗11号任务期间。"""

以下是仅满足一点的输入示例:

1SYSTEM  <插入上述系统消息>  
2
3USER    """尼尔·阿姆斯特朗创造了历史,当他从登月舱走下来,成为第一个在月球上行走的人。"""

以下是未满足任何一点的输入示例:

1SYSTEM  <插入上述系统消息>  
2
3USER    """在69年夏天,一场伟大的航行,  
4        阿波罗11号,勇敢如传奇之手。  
5        阿姆斯特朗迈出一步,历史展开,  
6        "一小步",他说,为新世界。"""

关于这种基于模型的评估有多种变体。以下是一个变体,它跟踪候选答案与标准答案之间的重叠类型,并跟踪候选答案是否与标准答案中的任何部分相矛盾。

1SYSTEM  使用以下步骤响应用户输入。在继续之前,完整地重述每一步。例如:“步骤 1:推理...”。
2
3        **步骤 1:** 逐步推理提交的答案与专家答案相比,信息是否属于:不相交、相等、子集、超集,或者重叠(即部分交集但不是子集或超集)。
4
5        **步骤 2:** 逐步推理提交的答案是否与专家答案中的任何部分相矛盾。
6
7        **步骤 3:** 输出一个 JSON 对象,格式如下:{"type_of_overlap": "disjoint" 或 "equal" 或 "subset" 或 "superset" 或 "overlapping", "contradiction": true 或 false}

这是一个次标准答案的示例,尽管没有与专家答案相矛盾:

1SYSTEM  <插入上述系统消息>  
2
3USER    问题:"""尼尔·阿姆斯特朗最著名的事件是什么?它发生在什么时候?假设使用协调世界时 (UTC)。"""  
4        提交的答案:"""他是不是在月球上走了一步之类的?"""  
5        专家答案:"""尼尔·阿姆斯特朗因成为第一个在月球上行走的人而闻名。这一历史事件发生在1969年7月21日。"""

以下是一个直接与专家答案相矛盾的示例:

1SYSTEM  <插入上述系统消息>  
2
3USER    问题:"""尼尔·阿姆斯特朗最著名的事件是什么?它发生在什么时候?假设使用协调世界时 (UTC)。"""  
4        提交的答案:"""在1969年7月21日,尼尔·阿姆斯特朗成为第二个登上月球的人,紧随巴兹·奥尔德林之后。"""  
5        专家答案:"""尼尔·阿姆斯特朗因成为第一个在月球上行走的人而闻名。这一历史事件发生在1969年7月21日。"""

这是一个正确答案,但提供了比必要更多的细节:

1SYSTEM  <插入上述系统消息>  
2USER    问题:"""尼尔·阿姆斯特朗最著名的事件是什么?它发生在什么时候?假设使用协调世界时 (UTC)。"""  
3        提交的答案:"""在1969年7月21日大约02:56 UTC时,尼尔·阿姆斯特朗成为第一个踏上月球表面的人,标志着人类历史的重大成就。"""  
4        专家答案:"""尼尔·阿姆斯特朗因成为第一个在月球上行走的人而闻名。这一历史事件发生在1969年7月21日。"""

2.其他资源 #

若需要更多灵感,请访问OpenAI Cookbook,其中包含示例代码,并提供第三方资源的链接,例如:

© 2024 青蛙小白
comments powered by Disqus