CrabNote螃蟹笔记

OpenAI官网教程:如何与大型语言模型高效沟通

OpenAI官网教程:如何与大型语言模型高效沟通

OpenAI官网教程:如何与大型语言模型高效沟通 OpenAI官网教程:如何与大型语言模型高效沟通 Modified November 26, 2025 在评估用户提供的解决方案之前,可以先让模型尝试给出自己的解决方案。这种方式可以帮助模型更全面地理解问题,并避免受到用户提供的错误解决方案的干扰。 例如,假设我们想要让模型评估学生对一道数学题的解答过程。最直接的做法是询问模型学生的答案是否正确。 但学生的解决方案实际上是错误的!我们可以通过提示模型首先生成自己的解决方案,然后与学生的答案进行比较,来发现这个错误。 技巧:使用“内心独白”或一系列查询来隐藏模型的推理过程 前面的技巧表明,有时对于模型在回答特定问题之前详细推理问题很重要。对于某些应用程序,模型用来得出最终答案的推理过程可能不适合与用户分享。例如,在辅导应用程序中,我们可能希望鼓励学生自己解决问题,但模型关于学生解决方案的推理过程可能会向学生透露答案。 内部独白是可以用来缓解这一点的一种策略。内部独白的思想是指导模型将意图隐藏于用户的输出部分放入结构化格式中,使得解析它们变得容易。然后在将输出呈现给用户之前,解析输出并只显示输出的一部分。 或者,这可以通过一系列查询实现,其中除最后一次之外的所有查询的输出都对最终用户隐藏。 首先,我们可以要求模型自己解决问题。由于这个初始查询不需要学生的解决方案,因此可以省略。这提供了额外的优点,即模型的解决方案不会受到学生尝试解决方案的偏见。 最后,我们可以让模型根据分析结果给出对学生的反馈,只展示最终的反馈内容。 技巧:询问模型是否在之前的尝试中遗漏了什么 假设我们使用模型列出与特定问题相关的来源摘录。在列出每个摘录后,模型需要确定是否应该开始编写另一个或是否应该停止。如果源文档很大,模型过早停止并未列出所有相关摘录是很常见的。在这种情况下,通过使用后续查询来查找模型在之前的尝试中遗漏的任何摘录,通常可以获得更好的性能。 角色 内容 SYSTEM 你将收到一个由三重引号分隔的文档。你的任务是选择与以下问题相关的摘录:“人工智能历史上发生了哪些重要的范式转变?” 确保摘录包含解释它们的所有相关背景 换句话说,不要提取缺少重要背景的小片段。以 JSON 格式输出结果,如下所示: [{“excerpt”: “…”}, …, {“excerpt”: “…”}] USER “””在这里插入文档””” ASSISTANT [{“excerpt”: “模型在这里写一个摘录”}, …, {“excerpt”: “模型在这里写另一个摘录”}] USER 还有更多相关的摘录吗?请注意不要重复已经提取过的内容。同时确保提取的段落包含所有必要的上下文信息,避免断章取义。 策略:使用外部工具 技巧:使用基于嵌入的搜索实现高效的知识检索 如果提供了模型输入的一部分,则模型可以利用外部信息来源。这可以帮助模型生成更有信息量和更新的回应。例如,如果用户询问有关特定电影的问题,向模型的输入添加有关电影的高质量信息(例如演员、导演等)可能是有用的。嵌入可以用来实现高效的知识检索,以便在运行时动态地将相关信息添加到模型输入中。 文本嵌入是一种可以测量文本字符串之间相关性的向量。相关或相似的字符串将比不相关的字符串更接近。这一事实,加上存在快速向量搜索算法的事实,意味着嵌入可以用来实现高效的知识检索。具体而言,文本语料库可以被分解成块,每个块可以被嵌入并存储。然后可以嵌入给定的查询,并执行向量搜索,以找到与查询最相关的语料库中的嵌入块(即在嵌入空间中最接近的)。 示例实现可以在 OpenAI Cookbook 中找到。有关如何使用知识检索来最小化模型编造不正确事实的可能性的示例,请参见策略 “指导模型使用检索到的知识回答查询” 。 技巧:使用代码执行来进行更精确的计算或调用外部 API 语言模型本身无法可靠地进行算术或长时间计算。在需要这样做的情况下,可以指导模型编写并运行代码,而不是进行自己的计算。特别是,可以指导模型将要运行的代码放入指定格式,如三重反引号。生成输出后,可以提取并运行代码。如果需要,可以将代码执行引擎(即 Python 解释器)的输出提供给模型,以便进行下一个查询。 角色 内容 SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。使用这种方式进行计算。 USER 求解以下多项式的所有实根:3 x 5 5 x 4 3 x 3 7 x 10。 另一个代码执行的好用例是调用外部 API。如果模型在正确使用 API 的指导下,它可以编写使用它的代码。可以通过提供 API 文档或代码示例,指导模型如何使用 API。 角色 内容 SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。你还可以使用以下模块向用户的朋友发送消息: python<br import message<br message.write(to="John", message="嘿,下班后一起聚一聚?")<br 警告:执行模型生成的代码存在安全风险。建议在安全的沙箱环境中运行代码,避免潜在危害。 技巧:让模型访问特定功能 Chat Completions API 允许在请求中传递函数描述列表。这使模型可以根据预定义的函数来生成参数。由 API 返回的生成的函数参数可以用来执行函数调用。由函数调用提供的输出随后可以在下一个请求中反馈给模型,以完成整个流程。这是使用 OpenAI 模型调用外部函数的推荐方式。要了解更多信息,请参阅我们的介绍性文本生成指南中的“ 函数调用部分 ”以及 OpenAI Cookbook 中的更多“ 函数调用示例 ”。 策略:系统地测试更改 有时很难分辨出更改——例如,新的指令或新的设计——是使你的系统变得更好还是更糟。查看几个示例可能会暗示哪个更好,但由于样本量小,很难区分真正的改进还是随机运气。也许更改在某些输入上有助于性能,但在其他输入上则损害性能。 评估程序(或“评估”)在优化系统设计时很有用。好的评估程序需要具备以下特点: • 具有代表性:能够代表真实世界的使用场景,或者至少包含多样化的测试用例。 • 样本量充足:拥有足够的测试用例,以保证统计结果的可靠性(参考下表)。 • 易于自动化:可以自动运行或重复执行。 需要检测的差异 95% 置信度所需的样本量 30% 10 10% 100 3% 1,000 1% 10,000 评估工作可以由计算机、人类或两者协作完成。计算机可以使用客观标准(例如,针对单一正确答案的问题)以及一些主观或模糊标准自动执行评估,其中模型输出由其他模型查询评估。 OpenAI Evals 是一个开源软件框架,提供了创建自动评估程序的工具。 基于模型的评估在评估具有多种可能答案的问题时非常有用,例如开放性问题。模型可以根据预定义的标准对不同的答案进行评分,帮助我们选择最佳答案。可以用模型进行评估和需要人工评估之间的界限是模糊的,并且随着模型变得越来越强大而不断变化。我们鼓励你进行实验,找到最适合你的用例的评估方法。 技巧:根据金标准答案评估模型输出 假设我们知道某个问题的正确答案应该包含以下信息: • 尼尔·阿姆斯特朗是第一个登上月球的人。 • 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 我们可以使用以下系统消息来评估模型的答案是否包含了所有必要的信息: 角色 内容 SYSTEM 你将收到一段用三重引号括起来的文本,这段文本应该包含以下信息的答案: 尼尔·阿姆斯特朗是第一个登上月球的人。 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 请执行以下步骤: 1. 逐条列出上述信息。 2. 从答案中找到与每条信息最接近的句子。 3. 判断一个不了解该话题的人能否从该句子中直接推断出该信息。请解释你的判断理由。 4. 如果步骤 3 的答案是肯定的,则输出“yes”,否则输出“no”。 最后,统计所有“yes”的个数,并以 {“count”: <在这里插入个数 } 的格式输出。 以下是一些示例: 示例 1:包含所有必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””尼尔·阿姆斯特朗因为是第一个踏上月球的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日,阿波罗 11 号任务期间。””” 示例 2:只包含部分必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””尼尔·阿姆斯特朗登上登月舱时创造了历史,成为第一个登月的人。””” 示例 3:没有包含任何必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””在 69 年的夏天,一次宏伟的航行,阿波罗 11 号,传奇的手。阿姆斯特朗迈出了一步,历史展开了,“一小步”,他说,为了一个新世界。””” 除了检查答案是否包含所有必要的信息之外,我们还可以评估答案与标准答案之间的重叠程度,以及答案是否与标准答案相矛盾。 角色 内容 SYSTEM 使用以下步骤回应用户输入。完全重述每个步骤再进行。即“第 1 步:推理…”。 第 1 步:逐步推理提交答案与专家答案相比的信息是:不相交、相等、子集、超集或重叠(即一些交集但不是子集/超集)。 第 2 步:逐步推理提交答案是否与专家答案的任何方面相矛盾。 第 3 步:输出一个结构化的 JSON 对象,如:{“type of overlap”: “disjoint” or “equal” or “subset” or “superset” or “overlapping”, “contradiction”: true or false} 以下是一些示例: 示例 1:答案不完整但没有与标准答案相矛盾 角色 内容 SYSTEM <插入上述系统消息 USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””他不是登上月球了吗?””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 示例 2:答案与标准答案相矛盾 角色 内容 OpenAI Cookbook “指导模型使用检索到的知识回答查询” 函数调用部分 函数调用示例 OpenAI Evals 在评估用户提供的解决方案之前,可以先让模型尝试给出自己的解决方案。这种方式可以帮助模型更全面地理解问题,并避免受到用户提供的错误解决方案的干扰。 例如,假设我们想要让模型评估学生对一道数学题的解答过程。最直接的做法是询问模型学生的答案是否正确。 但学生的解决方案实际上是错误的!我们可以通过提示模型首先生成自己的解决方案,然后与学生的答案进行比较,来发现这个错误。 技巧:使用“内心独白”或一系列查询来隐藏模型的推理过程 前面的技巧表明,有时对于模型在回答特定问题之前详细推理问题很重要。对于某些应用程序,模型用来得出最终答案的推理过程可能不适合与用户分享。例如,在辅导应用程序中,我们可能希望鼓励学生自己解决问题,但模型关于学生解决方案的推理过程可能会向学生透露答案。 内部独白是可以用来缓解这一点的一种策略。内部独白的思想是指导模型将意图隐藏于用户的输出部分放入结构化格式中,使得解析它们变得容易。然后在将输出呈现给用户之前,解析输出并只显示输出的一部分。 或者,这可以通过一系列查询实现,其中除最后一次之外的所有查询的输出都对最终用户隐藏。 首先,我们可以要求模型自己解决问题。由于这个初始查询不需要学生的解决方案,因此可以省略。这提供了额外的优点,即模型的解决方案不会受到学生尝试解决方案的偏见。 最后,我们可以让模型根据分析结果给出对学生的反馈,只展示最终的反馈内容。 技巧:询问模型是否在之前的尝试中遗漏了什么 假设我们使用模型列出与特定问题相关的来源摘录。在列出每个摘录后,模型需要确定是否应该开始编写另一个或是否应该停止。如果源文档很大,模型过早停止并未列出所有相关摘录是很常见的。在这种情况下,通过使用后续查询来查找模型在之前的尝试中遗漏的任何摘录,通常可以获得更好的性能。 角色 内容 SYSTEM 你将收到一个由三重引号分隔的文档。你的任务是选择与以下问题相关的摘录:“人工智能历史上发生了哪些重要的范式转变?” 确保摘录包含解释它们的所有相关背景 换句话说,不要提取缺少重要背景的小片段。以 JSON 格式输出结果,如下所示: [{“excerpt”: “…”}, …, {“excerpt”: “…”}] USER “””在这里插入文档””” ASSISTANT [{“excerpt”: “模型在这里写一个摘录”}, …, {“excerpt”: “模型在这里写另一个摘录”}] USER 还有更多相关的摘录吗?请注意不要重复已经提取过的内容。同时确保提取的段落包含所有必要的上下文信息,避免断章取义。 角色 角色 内容 内容 SYSTEM SYSTEM 你将收到一个由三重引号分隔的文档。你的任务是选择与以下问题相关的摘录:“人工智能历史上发生了哪些重要的范式转变?” 确保摘录包含解释它们的所有相关背景 换句话说,不要提取缺少重要背景的小片段。以 JSON 格式输出结果,如下所示: [{“excerpt”: “…”}, …, {“excerpt”: “…”}] 你将收到一个由三重引号分隔的文档。你的任务是选择与以下问题相关的摘录:“人工智能历史上发生了哪些重要的范式转变?” 确保摘录包含解释它们的所有相关背景 换句话说,不要提取缺少重要背景的小片段。以 JSON 格式输出结果,如下所示: [{“excerpt”: “…”}, …, {“excerpt”: “…”}] USER USER “””在这里插入文档””” “””在这里插入文档””” ASSISTANT ASSISTANT [{“excerpt”: “模型在这里写一个摘录”}, …, {“excerpt”: “模型在这里写另一个摘录”}] [{“excerpt”: “模型在这里写一个摘录”}, …, {“excerpt”: “模型在这里写另一个摘录”}] USER USER 还有更多相关的摘录吗?请注意不要重复已经提取过的内容。同时确保提取的段落包含所有必要的上下文信息,避免断章取义。 还有更多相关的摘录吗?请注意不要重复已经提取过的内容。同时确保提取的段落包含所有必要的上下文信息,避免断章取义。 策略:使用外部工具 技巧:使用基于嵌入的搜索实现高效的知识检索 如果提供了模型输入的一部分,则模型可以利用外部信息来源。这可以帮助模型生成更有信息量和更新的回应。例如,如果用户询问有关特定电影的问题,向模型的输入添加有关电影的高质量信息(例如演员、导演等)可能是有用的。嵌入可以用来实现高效的知识检索,以便在运行时动态地将相关信息添加到模型输入中。 文本嵌入是一种可以测量文本字符串之间相关性的向量。相关或相似的字符串将比不相关的字符串更接近。这一事实,加上存在快速向量搜索算法的事实,意味着嵌入可以用来实现高效的知识检索。具体而言,文本语料库可以被分解成块,每个块可以被嵌入并存储。然后可以嵌入给定的查询,并执行向量搜索,以找到与查询最相关的语料库中的嵌入块(即在嵌入空间中最接近的)。 示例实现可以在 OpenAI Cookbook 中找到。有关如何使用知识检索来最小化模型编造不正确事实的可能性的示例,请参见策略 “指导模型使用检索到的知识回答查询” 。 OpenAI Cookbook “指导模型使用检索到的知识回答查询” 技巧:使用代码执行来进行更精确的计算或调用外部 API 语言模型本身无法可靠地进行算术或长时间计算。在需要这样做的情况下,可以指导模型编写并运行代码,而不是进行自己的计算。特别是,可以指导模型将要运行的代码放入指定格式,如三重反引号。生成输出后,可以提取并运行代码。如果需要,可以将代码执行引擎(即 Python 解释器)的输出提供给模型,以便进行下一个查询。 角色 内容 SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。使用这种方式进行计算。 USER 求解以下多项式的所有实根:3 x 5 5 x 4 3 x 3 7 x 10。 角色 角色 内容 内容 SYSTEM SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。使用这种方式进行计算。 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。使用这种方式进行计算。 USER USER 求解以下多项式的所有实根:3 x 5 5 x 4 3 x 3 7 x 10。 求解以下多项式的所有实根:3 x 5 5 x 4 3 x 3 7 x 10。 另一个代码执行的好用例是调用外部 API。如果模型在正确使用 API 的指导下,它可以编写使用它的代码。可以通过提供 API 文档或代码示例,指导模型如何使用 API。 角色 内容 SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。你还可以使用以下模块向用户的朋友发送消息: python<br import message<br message.write(to="John", message="嘿,下班后一起聚一聚?")<br 角色 角色 内容 内容 SYSTEM SYSTEM 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。你还可以使用以下模块向用户的朋友发送消息: python<br import message<br message.write(to="John", message="嘿,下班后一起聚一聚?")<br 你可以通过用三重反引号将 Python 代码括起来,例如 代码写在这里 来编写和执行 Python 代码。你还可以使用以下模块向用户的朋友发送消息: python<br import message<br message.write(to="John", message="嘿,下班后一起聚一聚?")<br 警告:执行模型生成的代码存在安全风险。建议在安全的沙箱环境中运行代码,避免潜在危害。 技巧:让模型访问特定功能 Chat Completions API 允许在请求中传递函数描述列表。这使模型可以根据预定义的函数来生成参数。由 API 返回的生成的函数参数可以用来执行函数调用。由函数调用提供的输出随后可以在下一个请求中反馈给模型,以完成整个流程。这是使用 OpenAI 模型调用外部函数的推荐方式。要了解更多信息,请参阅我们的介绍性文本生成指南中的“ 函数调用部分 ”以及 OpenAI Cookbook 中的更多“ 函数调用示例 ”。 函数调用部分 函数调用示例 策略:系统地测试更改 有时很难分辨出更改——例如,新的指令或新的设计——是使你的系统变得更好还是更糟。查看几个示例可能会暗示哪个更好,但由于样本量小,很难区分真正的改进还是随机运气。也许更改在某些输入上有助于性能,但在其他输入上则损害性能。 评估程序(或“评估”)在优化系统设计时很有用。好的评估程序需要具备以下特点: • 具有代表性:能够代表真实世界的使用场景,或者至少包含多样化的测试用例。 • 样本量充足:拥有足够的测试用例,以保证统计结果的可靠性(参考下表)。 • 易于自动化:可以自动运行或重复执行。 需要检测的差异 95% 置信度所需的样本量 30% 10 10% 100 3% 1,000 1% 10,000 需要检测的差异 需要检测的差异 95% 置信度所需的样本量 95% 置信度所需的样本量 30% 30% 10 10 10% 10% 100 100 3% 3% 1,000 1,000 1% 1% 10,000 10,000 评估工作可以由计算机、人类或两者协作完成。计算机可以使用客观标准(例如,针对单一正确答案的问题)以及一些主观或模糊标准自动执行评估,其中模型输出由其他模型查询评估。 OpenAI Evals 是一个开源软件框架,提供了创建自动评估程序的工具。 OpenAI Evals 基于模型的评估在评估具有多种可能答案的问题时非常有用,例如开放性问题。模型可以根据预定义的标准对不同的答案进行评分,帮助我们选择最佳答案。可以用模型进行评估和需要人工评估之间的界限是模糊的,并且随着模型变得越来越强大而不断变化。我们鼓励你进行实验,找到最适合你的用例的评估方法。 技巧:根据金标准答案评估模型输出 假设我们知道某个问题的正确答案应该包含以下信息: • 尼尔·阿姆斯特朗是第一个登上月球的人。 • 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 我们可以使用以下系统消息来评估模型的答案是否包含了所有必要的信息: 角色 内容 SYSTEM 你将收到一段用三重引号括起来的文本,这段文本应该包含以下信息的答案: 尼尔·阿姆斯特朗是第一个登上月球的人。 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 请执行以下步骤: 1. 逐条列出上述信息。 2. 从答案中找到与每条信息最接近的句子。 3. 判断一个不了解该话题的人能否从该句子中直接推断出该信息。请解释你的判断理由。 4. 如果步骤 3 的答案是肯定的,则输出“yes”,否则输出“no”。 最后,统计所有“yes”的个数,并以 {“count”: <在这里插入个数 } 的格式输出。 角色 角色 内容 内容 SYSTEM SYSTEM 你将收到一段用三重引号括起来的文本,这段文本应该包含以下信息的答案: 尼尔·阿姆斯特朗是第一个登上月球的人。 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 请执行以下步骤: 1. 逐条列出上述信息。 2. 从答案中找到与每条信息最接近的句子。 3. 判断一个不了解该话题的人能否从该句子中直接推断出该信息。请解释你的判断理由。 4. 如果步骤 3 的答案是肯定的,则输出“yes”,否则输出“no”。 最后,统计所有“yes”的个数,并以 {“count”: <在这里插入个数 } 的格式输出。 你将收到一段用三重引号括起来的文本,这段文本应该包含以下信息的答案: 尼尔·阿姆斯特朗是第一个登上月球的人。 尼尔·阿姆斯特朗首次登上月球的日期是 1969 年 7 月 21 日。 请执行以下步骤: 1. 逐条列出上述信息。 2. 从答案中找到与每条信息最接近的句子。 3. 判断一个不了解该话题的人能否从该句子中直接推断出该信息。请解释你的判断理由。 4. 如果步骤 3 的答案是肯定的,则输出“yes”,否则输出“no”。 最后,统计所有“yes”的个数,并以 {“count”: <在这里插入个数 } 的格式输出。 以下是一些示例: 示例 1:包含所有必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””尼尔·阿姆斯特朗因为是第一个踏上月球的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日,阿波罗 11 号任务期间。””” 角色 角色 内容 内容 SYSTEM SYSTEM <插入上述系统消息 <插入上述系统消息 USER USER “””尼尔·阿姆斯特朗因为是第一个踏上月球的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日,阿波罗 11 号任务期间。””” “””尼尔·阿姆斯特朗因为是第一个踏上月球的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日,阿波罗 11 号任务期间。””” 示例 2:只包含部分必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””尼尔·阿姆斯特朗登上登月舱时创造了历史,成为第一个登月的人。””” 角色 角色 内容 内容 SYSTEM SYSTEM <插入上述系统消息 <插入上述系统消息 USER USER “””尼尔·阿姆斯特朗登上登月舱时创造了历史,成为第一个登月的人。””” “””尼尔·阿姆斯特朗登上登月舱时创造了历史,成为第一个登月的人。””” 示例 3:没有包含任何必要信息 角色 内容 SYSTEM <插入上述系统消息 USER “””在 69 年的夏天,一次宏伟的航行,阿波罗 11 号,传奇的手。阿姆斯特朗迈出了一步,历史展开了,“一小步”,他说,为了一个新世界。””” 角色 角色 内容 内容 SYSTEM SYSTEM <插入上述系统消息 <插入上述系统消息 USER USER “””在 69 年的夏天,一次宏伟的航行,阿波罗 11 号,传奇的手。阿姆斯特朗迈出了一步,历史展开了,“一小步”,他说,为了一个新世界。””” “””在 69 年的夏天,一次宏伟的航行,阿波罗 11 号,传奇的手。阿姆斯特朗迈出了一步,历史展开了,“一小步”,他说,为了一个新世界。””” 除了检查答案是否包含所有必要的信息之外,我们还可以评估答案与标准答案之间的重叠程度,以及答案是否与标准答案相矛盾。 角色 内容 SYSTEM 使用以下步骤回应用户输入。完全重述每个步骤再进行。即“第 1 步:推理…”。 第 1 步:逐步推理提交答案与专家答案相比的信息是:不相交、相等、子集、超集或重叠(即一些交集但不是子集/超集)。 第 2 步:逐步推理提交答案是否与专家答案的任何方面相矛盾。 第 3 步:输出一个结构化的 JSON 对象,如:{“type of overlap”: “disjoint” or “equal” or “subset” or “superset” or “overlapping”, “contradiction”: true or false} 角色 角色 内容 内容 SYSTEM SYSTEM 使用以下步骤回应用户输入。完全重述每个步骤再进行。即“第 1 步:推理…”。 第 1 步:逐步推理提交答案与专家答案相比的信息是:不相交、相等、子集、超集或重叠(即一些交集但不是子集/超集)。 第 2 步:逐步推理提交答案是否与专家答案的任何方面相矛盾。 第 3 步:输出一个结构化的 JSON 对象,如:{“type of overlap”: “disjoint” or “equal” or “subset” or “superset” or “overlapping”, “contradiction”: true or false} 使用以下步骤回应用户输入。完全重述每个步骤再进行。即“第 1 步:推理…”。 第 1 步:逐步推理提交答案与专家答案相比的信息是:不相交、相等、子集、超集或重叠(即一些交集但不是子集/超集)。 第 2 步:逐步推理提交答案是否与专家答案的任何方面相矛盾。 第 3 步:输出一个结构化的 JSON 对象,如:{“type of overlap”: “disjoint” or “equal” or “subset” or “superset” or “overlapping”, “contradiction”: true or false} 以下是一些示例: 示例 1:答案不完整但没有与标准答案相矛盾 角色 内容 SYSTEM <插入上述系统消息 USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””他不是登上月球了吗?””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 角色 角色 内容 内容 SYSTEM SYSTEM <插入上述系统消息 <插入上述系统消息 USER USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””他不是登上月球了吗?””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””他不是登上月球了吗?””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 示例 2:答案与标准答案相矛盾 角色 内容 角色 角色 内容 内容 SYSTEM <插入上述系统消息 USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””1969 年 7 月 21 日,尼尔·阿姆斯特朗成为第二个登月的人,紧随巴兹·奥尔德林之后。””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 示例 3:答案是正确的,并且比标准答案提供了更多细节 角色 内容 SYSTEM <插入上述系统消息 USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””大约在 1969 年 7 月 21 日 02:56 UTC,尼尔·阿姆斯特朗成为第一个踏上月球表面的人类,标志着人类历史上的一个重大成就。””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 角色 角色 内容 内容 SYSTEM SYSTEM <插入上述系统消息 <插入上述系统消息 USER USER 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””大约在 1969 年 7 月 21 日 02:56 UTC,尼尔·阿姆斯特朗成为第一个踏上月球表面的人类,标志着人类历史上的一个重大成就。””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 问题:”””尼尔·阿姆斯特朗最著名的事件是什么,发生在什么日期?假设 UTC 时间。””” 提交答案:”””大约在 1969 年 7 月 21 日 02:56 UTC,尼尔·阿姆斯特朗成为第一个踏上月球表面的人类,标志着人类历史上的一个重大成就。””” 专家答案:”””尼尔·阿姆斯特朗因为是第一个登月的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日。””” 其他资源 如果想要获取更多灵感,请访问 OpenAI Cookbook ,其中包含示例代码,还链接到第三方资源,例如: OpenAI Cookbook • 提示库和工具 提示库和工具 • 提示指南 提示指南 • 视频课程 视频课程 • 关于提高推理能力的高级提示的论文 关于提高推理能力的高级提示的论文 希望这份指南能够帮助你更好地使用大型语言模型,并获得更理想的结果! You don't have permission to access this synced block. Please log in and try again. Log In 🔗 原文链接: https://www.iaiuse.com/posts/38c482... https://www.iaiuse.com/posts/38c482... 写在前面 • 如何和大语言模型交互,提示词是绕不开的主题,下面的内容是从 OpenAI 官网翻译过来的内容,原文地址为 https://platform.openai.com/docs/guides/prompt engineering 下面表格中的内容原文是可以在 playground 中运行的,如图: 这份指南旨在帮助你更好地使用大型语言模型(LLM,例如 GPT 4),并获得更理想的结果。以下列出的策略和技巧可以单独使用,也可以组合使用以增强效果。我们鼓励你积极尝试,找到最适合自己的方法。 你还可以参考一些提示示例,了解我们模型的强大能力: • 提示示例 探索提示示例,学习如何充分利用 GPT 模型。 提示示例 六大策略助你获得更优结果 1. 清晰明确的指令 请记住,模型无法直接读取你的想法。如果输出结果太长,请要求简短回复;如果输出结果过于简单,请要求专家级别的写作;如果你不喜欢当前的格式,请提供你想要的格式示例。模型需要猜测的东西越少,就越有可能生成你期望的结果。 策略: • 在你的查询中提供更多细节,以便模型给出更相关的答案。 • 要求模型扮演特定角色,例如“以专家口吻”或“像朋友一样”。 • 使用分隔符清晰区分输入的不同部分,例如使用三重引号、XML 标签或章节标题。 • 明确完成任务所需的步骤,将复杂任务分解成更小的步骤。 • 提供示例,让模型学习你期望的输出风格或格式。 • 指定期望的输出长度,例如字数、句子数、段落数或要点数量。 2. 提供参考文本 语言模型有时会编造答案,尤其是在面对冷门话题或需要引用和链接时。就像学生考试时可以参考笔记一样,为模型提供参考文本可以帮助其生成更准确可靠的答案。 策略: • 指导模型使用参考文本回答问题,将参考文本作为回答问题的依据。 • 指导模型使用参考文本中的引用来回答问题,并标注引用来源。 3. 将复杂任务分解为更简单的子任务 正如软件工程中将复杂系统分解成多个模块一样,将提交给语言模型的任务分解成更小的子任务也是一种良好的实践。复杂任务通常比简单任务更容易出错,而且可以将复杂任务重新定义为一系列简单任务的工作流程,其中每个任务的输出作为下一个任务的输入。 策略: • 使用意图分类识别用户查询中最相关的指令,根据用户意图选择最相关的指令集。 • 对于需要很长对话的应用,总结或过滤之前的对话内容,避免超出模型的上下文窗口大小限制。 • 将长文档分段总结,并递归构建完整摘要,逐步总结长文档的内容。 4. 给予模型“思考”时间 就像你需要时间计算 17 乘以 28 一样,模型也需要时间进行推理才能得到正确答案。在回答问题之前,给予模型一定的“思考”时间可以减少推理错误。可以让模型在给出最终答案之前先进行“思考链”推理,提高答案的可靠性。 策略: • 指导模型在得出结论之前先尝试给出自己的解决方案,避免受到用户提供的错误解决方案的干扰。 • 使用“内心独白”或一系列查询来隐藏模型的推理过程,避免在某些应用场景中泄露答案。 • 询问模型是否在之前的回答中遗漏了什么,确保信息的完整性。 5. 使用外部工具 可以将外部工具与语言模型结合使用,以弥补模型自身的不足。例如,使用文本检索系统(如 RAG)为模型提供相关文档,使用代码执行引擎(如 OpenAI 的 Code Interpreter)帮助模型进行数学运算或运行代码。 策略: • 使用基于嵌入的搜索实现高效的知识检索,快速找到与查询最相关的文本片段。 • 使用代码执行进行更精确的计算或调用外部 API,完成更复杂的计算任务或获取外部信息。 • 让模型访问特定功能,例如通过 API 调用外部服务或数据库。 6. 系统地测试更改 修改提示词后,例如添加新的指令或采用新的设计,有时很难判断修改后的效果是好是坏。仅仅观察少量示例并不能得出可靠的结论,因为样本量太小会导致随机性误差。 策略: • 根据金标准答案评估模型输出,使用客观指标来评估模型的性能,例如准确率、召回率等。 策略:清晰明确的指令 技巧:在查询中提供更多细节,以便模型给出更相关的答案 为了获得高度相关的回复,请确保在请求中提供所有重要的细节和背景信息。否则,模型就只能猜测你的意图,这可能会导致结果不尽如人意。 不够理想 更优方案 如何在 Excel 中添加数字? 如何在 Excel 中自动计算一整列美元金额的总和,并将结果显示在名为“总计”的列中? 谁是总统? 2021 年谁是墨西哥的总统?墨西哥总统选举多久举行一次? 编写代码来计算斐波那契数列。 编写一个 TypeScript 函数来高效计算斐波那契数列,并添