一架梯子,一头程序猿,仰望星空!

OpenAI官方提示工程

本指南分享了从大型语言模型(有时称为GPT模型)如GPT-4中获得更好结果的策略和战术。这里描述的方法有时可以结合使用以获得更大的效果。我们鼓励尝试实验以找到最适合自己的方法。

GPT提示词工程

本教程翻译了OpenAI官方的提示词工程指南,教程讲解编写提示词的策略/战术,怎么通过题词指示LLM返回我们想要的结果。

下面是获取更好结果的六种策略:

撰写清晰的指令

这些模型无法读取你的思想。如果输出太长,请要求简洁回复。如果输出过于简单,请要求专业水平的写作。如果返回格式不对,请给出你想要的格式。指令写的越清晰,得到的结果越准确。

战术:

  • 在查询中包含细节以获得相关答案
  • 要求模型扮演某种角色
  • 使用定界符清楚地表示输入的不同部分
  • 指定完成任务所需的步骤
  • 提供示例
  • 指定输出的期望长度

提供参考文本

语言模型可以自信地虚构答案,特别是在涉及深奥话题、引用和网址时,因为模型更新成本比较高,互联网上的新内容更新太快了,模型不知道就会胡说八道。

战术:

  • 指示模型使用参考文本回答问题
  • 指示模型使用参考文本中的引用

将复杂任务拆分为简单子任务

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

战术:

  • 使用意图分类来识别用户查询的最相关指令
  • 对于需要非常长对话的对话应用,总结或过滤先前的对话
  • 递归地对长文档进行逐段摘要和构建完整摘要

给模型思考的时间

如果被要求计算17乘以28,你可能不会立刻知道答案,但是可以通过时间算出来。同样地,模型在试图立即回答问题时容易出现更多推理错误,而不是花时间思考出一个答案。在得出答案之前要求进行“思维链”有助于模型更可靠地推理出正确答案。

战术:

  • 要求模型在做出结论之前自行解决问题
  • 使用内心独白或一系列查询来隐藏模型的推理过程
  • 询问模型是否在之前的处理中有遗漏任何内容

使用外部工具

通过向模型提供其他工具的输出来弥补模型的缺陷。例如,文本检索系统(有时称为RAG或检索增强生成)可以告诉模型相关文档的信息。像OpenAI的代码解释器这样的代码执行引擎可以帮助模型进行数学和代码运行。

战术:

  • 使用基于嵌入的搜索来实现高效的知识检索
  • 使用代码执行来进行更精确的计算或调用外部API
  • 让模型访问特定功能

系统地测试变化

我们可以通过调整提示词,观察结果是否满足预期,评估模型的输出效果。

战术:

  • 用标准答案评估模型输出

提示词实战举例

上述列出的每种策略都可以通过具体的战术来实施。这些战术旨在提供尝试的想法。它们并不是完全全面的,你应该随意尝试各种方式编写提示词。

提示词示例说明

众所周知,调用OpenAI的Chat Model API有三种消息类型,即SYSTEM、USER和ASSISTANT,这三种消息的功能如下所示:

消息类型(对应api的角色参数) 描述
SYSTEM 系统消息有助于设置助手的行为。例如,您可以修改助手的个性或提供关于其在整个对话过程中应如何行为的具体指示。但请注意,系统消息是可选的,不提供系统消息时,模型的行为可能类似于使用"您是一个乐于助人的助手"这样的通用消息。
USER 用户消息是用户输入的内容。
ASSISTANT 助手消息表示GPT返回的内容。

本教程中,提示词示例将以下列格式进行解释:

// SYSTEM消息
这显示了如何设置SYSTEM消息的提示词。

// USER消息
这显示了如何设置USER消息的提示词。

// ASSISTANT消息
这演示了GPT可能会返回的内容。

策略:撰写清晰指令

策略:在您的查询中包含细节以获得更相关的答案

为了获得高度相关的响应,请确保请求提供任何重要的细节或上下文。否则,模型会乱猜测您的意思。

不佳 更好
如何在Excel中添加数字? 如何在Excel中自动计算一行美元金额?我希望为整个行的数据自动计算,并使所有总数显示在右侧的名为"总计"的列中。
谁是总统? 2021年墨西哥的总统是谁?选举频率是多少?
编写计算斐波那契数列的代码。 编写一个TypeScript函数,以高效地计算斐波那契数列。在代码中加入注释,解释每个部分的作用以及为什么这样编写。
总结会议记录。 用一段话总结会议记录。然后以Markdown列表的形式列出发言人和他们的要点。最后,列出发言人提出的下一步行动或建议的行动项目,如果有的话。

策略:要求模型扮演角色

系统消息可用于指定模型在回复中扮演什么样的角色或者以什么样的风格进行回复。

// 系统消息
你是一名具备20年开发经验的技术专家。

// 用户消息
nginx如何代理http api?

策略:使用定界符清晰指示输入的不同部分

三引号、XML标记、章节标题等定界符可以帮助标明需要以不同方式处理的文本部分。

// 系统消息
您将会收到一对关于同一主题的文章(用XML标记进行标记)。首先,总结每篇文章的论点。然后指出哪篇文章提出了更好的论点,并解释原因。

// 用户消息
<article>在这里插入第一篇文章</article>
<article>在这里插入第二篇文章</article>
// 系统消息
您将会收到一篇论文摘要和一篇建议的标题。论文标题应让读者对论文主题有了解,同时还要引人注目。如果标题不符合这些要求,建议提出5个其他的选项。

// USER消息

摘要:在这里插入摘要

标题:在这里插入标题

对于像这样简单的任务,使用定界符可能对输出质量没有影响。然而,任务越复杂,清晰地表示任务细节就越重要。不要让模型费力去理解您的确切要求。

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

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

// 系统消息

请根据下面步骤,回答用户输入。

步骤1 - 用户会输入用三引号包括的文本提供给你。用一个带有“摘要:”前缀的句子概括这个文本。

步骤2 - 将步骤1的摘要翻译成西班牙语,用一个带有“翻译:”前缀的句子。

// 用户消息
"""插入文本"""

策略:提供示例

为模型提供一些例子,可以让模型清楚的知道你希望的问答模式、回答问题的风格、输出什么样格式。

// 系统消息
用一致的方式回答。

// 用户消息
教我耐心。

// 助手消息
雕刻最深峡谷的河流起源于一处不起眼的泉水;最宏伟的交响乐源自一支孤独的音符;最复杂的挂毯始于一根孤寂的丝线。

// 用户消息
教我海洋。

策略:指定期望的输出长度

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

// 用户消息

用大约50个字概括由三引号分隔的文本。

"""插入文本"""
// 用户消息

用2段话概括由三引号分隔的文本。

"""插入文本"""
// 用户消息

用3个项目符号概括由三引号分隔的文本。

"""插入文本"""

策略:提供参考文本

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

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

// 系统消息

使用由三引号分隔的提供的文章来回答问题。如果答案在文章中找不到,写“我找不到答案”。

// 用户消息

<插入文章,每篇由三引号分隔>

问题:<插入问题>

鉴于所有模型都有限的上下文窗口,我们需要一种动态查找与当前提问相关的信息的方式。嵌入可用于实现有效的知识检索。有关如何实施这一功能的更多详细信息,请参阅“使用基于嵌入的搜索实现有效的知识检索”策略。

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

如果输入已经被相关知识补充,那么就可以要求模型在其答案中加入从所提供文档中引用的段落的引文。请注意,可以通过在提供的文档中进行字符串匹配来程序化验证输出中的引文。

// 系统消息

您将获得一篇由三引号分隔的文件和一个问题。您的任务是仅使用提供的文件回答问题,并引用所使用的文档的段落。如果文档中没有答案所需的信息,则简单地写:“信息不足”。如果提供了问题的答案,则必须用引文加注。请使用以下格式引用相关段落({"引用":…})。

// 用户消息

"""<在此处插入文件>"""

问题:<插入问题>

策略:使用意图分类,识别与用户查询最相关的指令

在实际应用场景,针对用户的查询,是可以归类道不同的场景,通过不同的场景再提供更专业的回答,这种借助LLM实现用户查询意图分类的方法,在某些场景可以提高AI回答问题的质量,避免回答的问题过度自由,回答错误的情况。

例如,假设对于一个客户服务应用,查询可以有以下有用的分类:

// 系统消息
您将收到客户服务查询。将每个查询分类为主要类别和次要类别。以json格式提供输出,包括主要和次要键。

主要类别:计费、技术支持、账户管理或常规查询。

计费次要类别:
- 退订或升级
- 添加支付方式
- 费用说明
- 争议费用

技术支持次要类别:
- 故障排除
- 设备兼容性
- 软件更新

账户管理次要类别:
- 重置密码
- 更新个人信息
- 关闭账户
- 账户安全

常规查询次要类别:
- 产品信息
- 价格
- 反馈
- 与客服人员交流

// 用户消息
我需要让我的互联网再次运行起来。

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

// 系统消息
您将收到在技术支持背景下需要故障排除的客户服务查询。帮助用户:

- 要求他们检查路由器的所有连接电缆是否连接。请注意,随着时间的推移,电缆可能会松动。
- 如果所有电缆都连接而问题仍然存在,请询问他们使用的路由器型号
- 现在您将建议他们如何重新启动设备:
-- 如果型号为MTD-327J,请建议他们按下红色按钮并保持5秒,然后等待5分钟再测试连接。
-- 如果型号为MTD-327S,请建议他们拔出并重新插入,然后等待5分钟再测试连接。
- 如果客户在重新启动设备并等待5分钟后问题仍然存在,则通过输出{"请求IT支持"}将其连接到IT支持。
- 如果用户开始提出与此主题无关的问题,则确认他们是否想结束有关故障排除的当前聊天并根据以下方案对其请求进行分类:

<在此处插入上述主/次要分类方案>

// 用户消息
我需要让我的互联网再次运行起来。

通过上面的提示词例子,我们可以轻松实现一个AI客户问答业务。

策略:对于需要非常长对话的对话应用程序,总结或过滤先前的对话

由于模型具有固定的上下文长度,用户和AI助手之间的对话内容,不能超过GPT上下文长度限制,例如:你跟AI来回沟通了数百次,有数百条消息,因为上下文长度限制,不能每次请求GPT都把历史的消息传给GPT。

有各种解决这个问题的方法,其中一种是总结先前对话中的内容。一旦输入达到预定长度阈值,这可能会触发一个查询,对对话的部分内容进行总结,并且先前对话的总结可能会作为系统消息的一部分包含在内。另一种替代解决方案是动态地选择与当前查询最相关的先前对话部分。参见策略“使用基于嵌入式的搜索实现高效的知识检索”。

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

由于模型具有固定的上下文长度,所以无法在单个查询中用于总结长度超过上下文长度减去生成摘要长度的文本。

要总结一本非常长的文档,比如一本书,我们可以使用一系列查询来总结文档的每个部分。可以连接各个部分的摘要,并进行摘要的摘要。这个过程可以递归进行,直到整个文档被总结。如果需要使用关于前面部分的信息来理解后面的部分,那么一个有用的进一步技巧是,在总结某一点的内容时,包括文本之前的运行摘要。这个程序用于总结书籍的有效性已经在 OpenAI 的 研究中使用 GPT-3 的变体进行了研究。

策略:给模型时间“思考”

策略:指示模型在匆忙得出结论之前自行解决问题

有时,我们可以提示GPT在给出答案之前,先自行思考给出解答步骤,再给出答案,这种方式可以利用模型的推理能力。例如,假设我们希望模型评估学生对数学问题的解答。最明显的方法是简单地询问模型学生的解答是否正确。

// 系统消息
确定学生的解答是否正确。

// 用户消息
问题陈述:我正在建造太阳能发电装置,需要帮助计算财务情况。
- 土地成本每平方英尺100美元
- 我可以以每平方英尺250美元购买太阳能电池板
- 我谈判了一份维护合同,每年的固定成本是10万美元,另外每平方英尺额外成本为10美元。
作为平方英尺数量的函数,首年运营的总成本是多少?

学生的解答:设x为安装的面积,单位为平方英尺。
1. 土地成本:100x
2. 太阳能电池板成本:250x
3. 维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000

// 助手消息
学生的解答是正确的。

然而,学生的解答实际上是不正确的!我们可以成功地让模型注意到这一点,通过提示模型先自行生成解答。

// 系统消息
先自己解决问题。然后比较你的解答与学生的解答,评估学生的解答是否正确。在自己解决问题之前,不要决定学生的解答是否正确。

// 用户消息
问题陈述:我正在建造太阳能发电装置,需要帮助计算财务情况。
- 土地成本每平方英尺100美元
- 我可以以每平方英尺250美元购买太阳能电池板
- 我谈判了一份维护合同,每年的固定成本是10万美元,另外每平方英尺额外成本为10美元。
作为平方英尺数量的函数,首年运营的总成本是多少?

学生的解答:设x为安装的面积,单位为平方英尺。
1. 土地成本:100x
2. 太阳能电池板成本:250x
3. 维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000

// 助手消息
设x为安装的面积,单位为平方英尺。
1. 土地成本:100x
2. 太阳能电池板成本:250x
3. 维护成本:100,000 + 10x
总成本:100x + 250x + 100,000 + 10x = 360x + 100,000

学生的解答是不正确的。他们在维护成本的计算中犯了错误,使用了100x而不是10x。首年运营的正确总成本是360x + 100,000。

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

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

内心独白是一种可以用来减轻这种情况的策略。内心独白的想法是指示模型将那些不希望用户看到的输出部分放入一个结构化的格式中,以便于解析。然后在向用户呈现输出之前,对输出进行解析,只有部分输出是可见的。

// 系统提示
按照以下步骤回答用户的问题。

步骤 1 - 首先自己解决问题。不要依赖学生的解决方案,因为它可能是错误的。将这一步的所有工作都放在三重引号(""")之间。

步骤 2 - 比较你的解决方案和学生的解决方案,并评估学生的解决方案是否正确。将这一步的所有工作都放在三重引号(""")之间。

步骤 3 - 如果学生犯了错误,确定你可以给学生什么提示而不透露答案。将这一步的所有工作都放在三重引号(""")之间。

步骤 4 - 如果学生犯了错误,向学生提供上一步的提示(在三重引号之外)。而不是写“步骤 4 - ...”,写“提示:”。

// 用户提示
问题陈述: <插入问题陈述>

学生解决方案: <插入学生解决方案>

或者,可以通过一系列查询来实现这一点,除了最后一个查询外,所有查询的输出都对最终用户隐藏。

首先,我们可以要求模型自行解决问题。由于这个初始查询不需要学生的解决方案,因此可以省略。这还带来了额外的好处,即模型的解决方案不会受到学生尝试解决方案的影响。

// 用户提示
<插入问题陈述>

接下来,我们可以让模型利用所有可用信息来评估学生的解决方案是否正确。

// 系统提示
将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。

// 用户提示
问题陈述: """<插入问题陈述>"""

你的解决方案: """<插入模型生成的解决方案>"""

学生的解决方案: """<插入学生的解决方案>"""

最后,我们可以让模型利用自己的分析来以乐于助人的导师身份构建回复。

// 系统提示
你是一名数学导师。如果学生犯了错误,以不透露答案的方式向学生提供建议。如果学生没有犯错误,只需给予他们鼓励的评论。

// 用户提示
问题陈述: """<插入问题陈述>"""

你的解决方案: """<插入模型生成的解决方案>"""

学生的解决方案: """<插入学生的解决方案>"""

分析: """<插入上一步生成的模型分析>"""

策略: 询问模型是否错过了先前通过的任何内容

假设我们正在使用一个模型来列举源文件中与特定问题相关的摘录。在列举每个摘录之后,模型需要确定是否应该开始写另一个摘录,还是应该停止。如果源文件很大,模型通常会过早停止,没有列出所有相关的摘录。在这种情况下,通过提示模型进行后续查询来找到它在先前查询中错过的任何摘录,通常可以获得更好的性能。

// 系统提示
你将收到一个由三重引号限定的文档。你的任务是选择与以下问题相关的摘录: “人工智能史上发生了哪些重大范式转变”。

确保摘录包含解释所需的所有相关上下文——换句话说,不要提取缺少重要上下文的小片段。以以下 JSON 格式提供输出:

[{"excerpt": "..."},
...
{"excerpt": "..."}]

// 用户提示
"""<在此处插入文档>"""

// 助手提示
[{"excerpt": "模型在此处编写摘录"},
...
{"excerpt": "模型在此处编写另一摘录"}]

// 用户提示
是否还有更多相关的摘录?请确保不要重复摘录。还要确保摘录中包含解释所需的所有相关上下文——换句话说,不要提取缺少重要上下文的小片段。

策略:使用外部工具

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

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

文本嵌入是一种可以衡量文本字符串相关性的向量。相似或相关的字符串将比不相关的字符串更接近。这一事实,再加上存在快速向量搜索算法,意味着可以使用嵌入来实现高效的知识检索。特别是,文本语料库可以被分成多个块,然后每个块可以被嵌入和存储。然后,可以对给定的查询进行嵌入并执行向量搜索,以找到与查询最相关的语料库中被嵌入的文本块(即在嵌入空间中最接近的)。

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

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

// 系统消息

您可以通过将其置于三个反引号中来编写和执行Python代码,例如 \`\`\`代码放在此处\`\`\`。使用这种方法执行计算。

// 用户消息

找出以下多项式的所有实根:3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10。

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

// 系统消息

您可以通过将其置于三个反引号中来编写和执行Python代码。还要注意,您可以访问以下模块来帮助用户发送消息给他们的朋友:

\`\`\`python
import message
message.write(to="John", message="嘿,下班后想见面吗?")\`\`\`

警告:执行模型生成的代码本质上是不安全的,因此在任何寻求执行此操作的应用中应采取预防措施。特别是需要一个沙箱化的代码执行环境,以限制不受信任的代码可能造成的伤害。

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

对话完成API允许在请求中传递函数描述列表。这使得模型可以根据提供的模式生成函数参数。生成的函数参数以JSON格式由API返回,并且可以用于执行函数调用。函数调用提供的输出随后可以在下一个请求中反馈到模型中,以关闭循环。这是使用OpenAI模型调用外部函数的推荐方式。

策略:系统化地测试变化

有时很难判断一个变化(例如新指令或新设计)是否会让系统变得更好还是更糟。查看一些例子可能会暗示哪个更好,但是对于很小的样本量来说,很难区分是真正的改进还是纯粹的运气。也许这个变化会改善某些输入的性能,但会影响其他输入的性能。

评估程序对于优化系统设计非常有用。良好的评估具有以下特点:

  • 代表真实世界的使用情况(或者至少是多样化的)
  • 包含许多测试用例,以获得更高的统计功效(有关指南,请参见下表)
  • 易于自动化或重复
需要检测的差异 95% 置信度所需的样本量
30% ~10
10% ~100
3% ~1,000
1% ~10,000

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

基于模型的评估在存在一系列可能被认为质量相当高的输出时(例如对于长答案的问题)是有用的。基于模型的评估能够真实地评估基于模型的评估和需要人工评估的边界是模糊的,并且随着模型变得更加强大,这个边界一直在不断变化。我们鼓励进行实验,以找出基于模型的评估在您的用例中能发挥多大作用。

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

假设已知问题的正确答案应涉及特定的已知事实集合。然后我们可以使用模型查询来计算答案中包含了多少必需事实。

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

// 系统消息
您将获得由三个引号分隔的文本,该文本应该是问题的答案。检查以下信息是否直接包含在答案中:

- 尼尔·阿姆斯壮是第一个登上月球的人。
- 尼尔·阿姆斯壮首次登上月球的日期是1969年7月21日。

对于每个要点执行以下步骤:

1 - 重新表述该要点。
2 - 提供与该要点最接近的答案中的引用。
3 - 考虑读者是否可以直接推断出该要点。在做出决定之前解释原因。
4 - 如果答案是肯定的,请写“是”,否则写“否”。

最后,提供“是”答案的计数。将计数提供为{"count": <insert count here>}。

这是一个满足两个要点的示例输入:

// 系统消息
<插入上面的系统消息>

// 用户消息
"""尼尔·阿姆斯壮因成为第一个登上月球的人而闻名。这一历史事件发生在1969年7月21日,阿波罗11号任务期间。"""

这是一个仅满足一个要点的示例输入:

// 系统消息

<插入上面的系统消息>

// 用户消息

"""尼尔·阿姆斯壮创造历史,当他迈出登月舱,成为第一个登上月球的人。"""

这是一个一个要点也未被满足的示例输入:

// 系统消息

<插入上面的系统消息>

// 用户消息

"""在69年的夏天,一次伟大的航行,
阿波罗11号,英勇如传说中的手。
阿姆斯壮迈出了一步,历史展现,
“一小步”,他说,为了一个新世界。"""

这种基于模型的评估有许多可能的变体。考虑以下变体,它跟踪候选答案与黄金标准答案之间的重叠类型,并跟踪候选答案是否与黄金标准答案的任何部分相矛盾。

// 系统消息
使用以下步骤来回应用户输入。在继续之前,完全重新概述每个步骤。即“步骤1:原因……”。

步骤1:逐步推理提交的答案中的信息,与专家答案相比,是相离、相等、子集、超集或重叠的(即有一些交集,但不是子集/超集)。

步骤2:逐步推理提交的答案是否与专家答案的任何方面相矛盾。

步骤3:输出一个结构化的JSON对象,格式如下:{"type_of_overlap": "disjoint"或"equal"或"subset"或"superset"或"overlapping","contradiction": true或false}

以下是一个答案虽然不够理想但并未与专家答案相矛盾的示例输入:

// 系统消息

<插入上面的系统消息>

// 用户消息

问题:"""尼尔·阿姆斯壮因何事最为人所知,发生在哪一天?假设使用协调世界时。"""

提交的答案:"""他不是登上了月球或什么的吗?"""

专家答案:"""尼尔·阿姆斯壮最为人所知的是成为第一个登上月球的人。这一历史事件发生在1969年7月21日。"""

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

// 系统消息

<插入上面的系统消息>

// 用户消息
问题:"""尼尔·阿姆斯壮因何事最为人所知,发生在哪一天?假设使用协调世界时。"""

提交的答案:"""1969年7月21日,尼尔·阿姆斯壮成为第二个登上月球的人,紧随其后的是巴兹·奥尔德林。"""

专家答案:"""尼尔·阿姆斯壮最为人所知的是成为第一个登上月球的人。这一历史事件发生在1969年7月21日。"""

以下是一个正确答案并且额外提供了一些不必要细节的示例输入:

// 系统消息
<在上方插入系统消息>

// 用户消息

问题: """尼尔·阿姆斯特朗因何事最为人所知?发生在哪个日期?假设使用世界协调时间(UTC)。"""

提交的回答: """大约在 1969 年 7 月 21 日 02:56 UTC,尼尔·阿姆斯特朗成为第一个踏上月球表面的人类,标志着人类历史上的重大成就。"""

专家回答: """尼尔·阿姆斯特朗最为人所知的是成为第一个走上月球的人。这一历史性事件发生在 1969 年 7 月 21 日。"""


关联主题

章节目录