你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

提示工程方法

来自 OpenAI 的 GPT-3、GPT-3.5、GPT-4 和 GPT-4o 模型均基于提示。 使用基于提示的模型时,用户通过输入文本提示与模型交互,该文本提示通过文本补全进行响应。 补全是模型的输入文本的延续。

虽然这些模型非常强大,但它们的行为对提示也非常敏感。 这使得提示构造成为开发的重要技能。

提示构造可能很困难。 在实践中,提示的作用是配置模型权重以完成所需的任务,但它更像艺术而不是科学,通常需要经验和直觉来制作成功的提示。 本文的目的是帮助你开始学习此学习过程。 它会尝试探讨适用于所有 GPT 模型的一般概念和模式。 但是,请务必了解,每个模型的行为方式不同,因此这些学习成果可能不适用于所有模型。

基本信息

本部分介绍 GPT 提示的基本概念和元素。

文本提示是用户与 GPT 模型交互的方式。 与所有生成语言模型一样,GPT 模型会尝试生成最有可能紧跟上一个文本的下一系列字词。 就好像我们在说[当我说“<prompt>”时,你首先想到的是什么?]以下示例演示了此行为。 给定著名内容的第一个单词,模型能够准确地延续文本。

Prompt Completion
87 年前,我们的 先辈们在这个大陆上创立了一个新国家,它孕育于自由之中,并致力于所有人生而平等的信条。 […]
“叫我 Ishmael。” “几年前–不要在意确切的时间–我钱包里几乎没有什么钱,岸上也没有什么特别吸引我的事情,所以我想航行一下,看看这个世界中被水覆盖的部分。”[...]

在开发更复杂的提示时,记住这一基本行为会很有帮助。 无论提供的提示是什么,模型都只是使用它确定的最有可能的情况(基于训练数据和训练目标)做出响应。 如果在提示中提出问题,则模型不会遵循单独的“Q&A”代码路径,而是看起来在回答问题,因为回答即是输入的给定问题最有可能的响应。

提示组件

当使用补全 API 而提示的不同部分之间没有区别时,它对于学习和讨论以识别基础提示组件仍然很有用。 使用聊天补全 API 时,提示的不同部分以具有关联角色(系统、用户和助手)的字典数组的形式发送到 API。 本指南更笼统地侧重于如何考虑提示构造,而不是提供特定于某个 API 的规范性指导。

同样重要的是要了解,虽然可能存在其他有效的方法来剖析提示,但这种分解的目标是提供一种相对简单的方法来理解提示构造。 使用补全 API 时,所有组件都是可选的,但必须至少有一个组件存在,而大多数提示包含多个组件。 组件之间也可能存在一些灰色区域。 下面显示的顺序大致对应于每个组件的使用方式(从最多到最少)。

Instructions

指令可能是最常用的提示组件。 指令很简单:向模型说明要执行的操作。 虽然概念简单,但它在实践中可能比较复杂。 下表以两种不同形式显示简单和复杂的指令,借此来说明这一点。

指令类型 Prompt Completion
简单指令 为每周新闻稿撰写简介。 欢迎阅读我们的每周新闻稿。 本周,我们特别关注工作效率。 我们将分享有关如何在生活的各个方面提高工作效率的提示和技巧。 我们希望你喜欢并请与你的朋友分享!
复杂指令 为名为 Contoso 的公司撰写每周新闻稿简介。 它应该要提及我们上周举行的精彩的全体会议,并感谢团队在过去几个月的辛勤工作。 欢迎阅读 Contoso 的每周新闻稿! 我们上周举行了一次精彩的全体会议,我要感谢团队在过去几个月的辛勤工作。 我们期待着一个光明的未来,我相信,在我们团队的奉献和投入下,我们将取得伟大的成就。 感谢你成为我们团队的一员,我期待着在未来几周和几个月内与你们一起工作。 此致,[你的名字]。
复杂指令 为每周新闻稿编写简介,包括以下内容:
- 我的公司名为 contoso
- 兴高采烈的问候
- 感谢团队在艰难的几个月里辛勤工作
- 下一季度的积极前景
- 由 SLT 签名
你好,Contoso 团队! 我想花点时间感谢你们过去几个月的辛勤工作。 这是艰难的几个月,但你们都团结在一起,完成了非常棒的工作。 我真的很为你们感到骄傲。 展望下个季度,我感到非常向上。 我觉得我们会取得一些伟大的成就。 再次感谢,高级领导团队。

主要内容

主要内容是指模型正在处理或转换的某种文本。 主要内容通常与指令一起使用。 一个简单的示例是语言翻译。 在下面的示例中,英语文本被视为主要内容,而“翻译为法语:”是指令。

Prompt Completion
你能告诉我怎么去博物馆吗?
翻译为法语:
Pouvez-vous s'il vous plaît me dire comment aller au musée?

主要内容也可以更长。 在以下示例中,主要内容是维基百科时间复杂度条目的简介部分,长度近 300 字。 为了便于显示,此内容已在表中缩写。

Prompt Completion
在计算机科学中,时间复杂度是指计算复杂度,用于描述运行算法所需的计算机时间量。 时间复杂度通常通过 [...] 估计
将前面的文本汇总为几个句子:
时间复杂度是度量算法运行所需时间的方法。 它通常表示为输入大小的函数。 最常见的度量值是最差情况的时间复杂度,即给定大小的输入所需的最大时间量。
在计算机科学中,时间复杂度是指计算复杂度,用于描述运行算法所需的计算机时间量。 时间复杂度通常通过 [...] 估计
TL;DR(太长没看)
算法的时间复杂度是运行算法所需的时间量。 通常通过计算算法执行的基本操作数来估计时间复杂度,假定每个基本操作的执行时间都是固定的。 时间复杂度通常表示为输入大小的函数。

GPT 模型还可以处理结构化的主要内容。 在下面的示例中,有关比利时啤酒的 TSV(本文中为显示为缩写)作为提示的一部分传递给模型。 它能够正确解释内容并回答有关数据的问题。

Prompt Completion
Belgian Beer Brands
Beer name Beer style color ABV Brewery
"Chimay Gold: ""Doree""" trappist pale ale gold 4.80% Chimay Brewery (official trappist)
"Chimay Blue: ""Grande Reserve""" trappist dark ale dark 9.00%
[…]
参考上表,有多少啤酒小于 6% ABV?
表中有 10 种啤酒的 ABV 小于 6%。

示例

成功的提示通常依赖于“单样本”或“少样本”学习。 这是指加入模型所需行为的一个或多个示例,通常做法是加入输入和输出对。 这不是从模型进行永久更改这一意义上学习,而是通过示例更好地使模型能够仅根据当前推理的需求做出响应。 使用没有示例的提示有时称为“零样本”学习。 请注意,使用聊天补全 API 时,在初始系统消息后,少样本学习示例通常以示例用户/助手交互的形式添加到消息数组中。

学习类型 Prompt Completion
零样本 头条:教练相信伤病不会破坏勇士队
主题:
教练相信伤病不会破坏勇士队的赛季。 球队仍然专注于他们的目标,他们将继续努力实现他们的目标。
少样本 头条:双城队的科雷亚将选择跳出合同,试水自由市场
主题:棒球
头条:卡塔尔世界杯将设有清醒区
主题:足球
头条:耶茨:第 6 周范特西橄榄球情报
主题:橄榄球
头条:教练相信伤病不会破坏勇士队
主题:
篮球

上面的示例演示了少样本学习的效用。 如果没有这些示例,模型似乎在猜测所需的行为,而示例则清晰地向模型展示了如何操作。 这也演示了模型的强大功能,它可以推断出所需的标签类别,即使示例中没有“篮球”标签。

提示

提示充当模型输出的“快速启动”,帮助将模型定向到所需的输出。 它通常是模型可以作为生成基础的前缀。 在下面的示例中,我们演示了引导故事以包含关键元素的提示。 提示通常与指令一起使用,但并非总是如此。 在下面的示例中,该模型用于汇总长公告电子邮件。 提示在一种情况下用于帮助聚焦模型的输出,在另一种情况下用于建议特定输出格式(项目符号)。

在聊天补全 API 的上下文中,指令采用系统消息的形式,通过提供一系列示例用户/助手交互来指示少样本示例以帮助启动模型。

提示数 Prompt Completion
0 绩效评估是我们 Contoso 绩效与发展方法的核心组成部分。 […]
总结上述电子邮件:
这封电子邮件的目的是通知员工最近对绩效评估体验进行了更改,这是 Contoso 绩效与发展方法的一部分。 这些更改包括改进结构、升级工具内用户体验和重点提示。 此外,现在还有一个可选的“对话启动器”部分,供员工标记他们希望与经理讨论的主题。
1 绩效评估是我们 Contoso 绩效与发展方法的核心组成部分。 […]
总结上述电子邮件:
邮件的关键要点是
Contoso 通过更加专注于核心优先事项、期望和影响来改进绩效评估体验。 此外,他们还使用小贴士、资源和指南来升级工具内用户体验。 最后,他们添加了有关如何激活公司范围内的核心优先事项的指导。
2 绩效评估是我们 Contoso 绩效与发展方法的核心组成部分。 […]
总结上述电子邮件:
要点:
Contoso 正在根据员工的反馈推出对绩效评估体验的更改。
•这些更改包括对核心优先事项、期望和影响的新侧重;升级用户体验;以及公司范围核心优先事项的新指南。
•绩效评估是反思过去绩效和学习以及规划未来优先事项和增长机会的机会。
•员工和经理应在绩效考核会议之前撰写评论。
•每年至少应进行两次绩效评估。
•每次评估的时间投资应保持大致相同。

支持内容

支持内容是模型可用于以某种方式影响输出的信息。 它与主要内容的不同之处在于,它不是任务的主要目标,但它通常与主要内容一起使用。 常见示例包括上下文信息,例如当前日期、用户名、用户偏好等。 以下示例使用支持内容来帮助为用户安排一组计划的研讨会。 如果没有支持(重要主题),模型只会列出研讨会(为显示而截断),当被告知我的重要主题时,模型能够准确地分组会议。

支持内容 Prompt Completion
没有 研讨会列表:
标题描述
规划研讨会启动请加入我们以启动研讨会! 听取我们的领导关于未来一年的跨组优先事项和学习内容。 此活动的邀请已发送给 [...] 中的每个人
总结上述研讨会,按主题分组:
研讨会列表:
规划研讨会启动
- 规划研讨会总结
- 核心会面
- 客户驱动的观点
- 影响和重点领域
- 最佳做法
- 加速应用采用 [...]
With 研讨会列表:
标题描述
规划研讨会启动请加入我们以启动研讨会! 听取我们的领导关于未来一年的跨组优先事项和学习内容。 此活动的邀请已发送给 [...] 中的每个人
我的重要主题:提示工程、搜索、GPT 模型
总结上述研讨会,按我的重要主题分组:
1.提示工程:
- 新的提示工程技巧
- 提示工程的艺术
2. 搜索:
- 使用嵌入的矢量搜索简介
3. GPT 模型:
- GPT-4 简介
- 深度了解 GPT-35-Turbo。

特定于场景的指南

虽然提示工程的原则可以在许多不同的模型类型间归纳,但某些模型需要专用的提示结构。 对于 Azure OpenAI GPT 模型,目前有两个不同的 API,提示工程可以在其中发挥作用:

  • 聊天补全 API。
  • 补全 API。

每种 API 要求以不同的格式输入数据,这反过来又会影响整体的提示设计。 聊天补全 API 支持 GPT-35-Turbo 和 GPT-4 模型。 这些模型旨在接收存储在字典数组中的类似聊天的特定脚本格式的输入。

补全 API 支持较旧的 GPT-3 模型,并且具有更灵活的输入要求,即它接受没有特定格式规则的文本字符串。

本部分中的技术将指导你提高使用大型语言模型 (LLM) 生成的响应的准确性并巩固其基础。 但是,请务必记住,即使有效地使用了提示工程,你仍需要验证模型生成的响应。 仅仅因为精心制作的提示适用于某个特定方案并不一定意味着它能更广泛地推广到某些用例。 了解 LLM 的限制与了解如何利用其优势一样重要。

本指南不会深入介绍聊天补全消息结构背后的机制。 如果不熟悉如何以编程方式与聊天不全模型交互,建议首先阅读有关聊天补全 API 的操作指南

注意

本指南的这一部分中的所有示例都针对基础 GPT-4 模型进行了英语测试。 如果你在通过另一种语言阅读本文的本地化版本,则这些响应表示英语结果的本地化翻译。 若要根据你用于提示模型的语言详细了解潜在的限制,请参阅负责任 AI 透明度说明

少样本学习

使语言模型适应新任务的一个常见方法是使用少样本学习。 在少样本学习中,需要在提示中提供一组训练示例,以便为模型提供额外的上下文。

使用聊天补全 API 时,用户和助手之间的一系列消息(以新的提示格式编写)可以作为进行少样本学习的示例。 这些例子可以用来引导模型以某种方式相应,模仿特定的行为,并为常见的问题提供种子答案。

系统消息 少样本示例
助手是一种智能聊天机器人,旨在帮助用户回答其税务相关问题。
Instructions
- 仅回答与税收相关的问题。
- 如果你不确定答案,你可以说“我不知道”或“我不确定”,并建议用户前往 IRS 网站获取详细信息。
用户 -“我需要报税的截止时间是?”
助手 -“在 2023 年,你需要在 4 月 18 日前报税。 该日期在通常的 4 月 15 日最后期限之后,因为 4 月 15 日在 2023 年是星期六。 有关详细信息,请参阅 https://www.irs.gov/filing/individuals/when-to-file

用户 -“如何检查我的退税状态?”
助手 -“你可以通过访问 https://www.irs.gov/refunds 检查你的退税状态”

上表介绍了基本的提示结构,但有关确切提示格式的详细说明,需要参考聊天补全指南

非聊天场景

虽然聊天补全 API 已优化为处理多回合对话,但它也可用于非聊天场景。 例如,对于情绪分析场景,可以使用以下提示:

系统消息 用户 Assistant
你是负责根据语音数据分析情绪的助手。 用户将粘贴文本字符串,而你将对讲话人的响应进行评估。 给出 1-10 的评分(10 为最高)。 解释给出此评分的原因。 嗨,感谢你致电 Contoso 药店,我今天和谁通话?我了解你的挫败感,玛丽。你能告诉我你想要实现什么目标吗?好的,很高兴帮你看一下,请稍等片刻。我在这里看到你曾经使用过普通立普妥是吗?好的,那么我看到你的医生在 2021 年停止开这些药物的处方了。实际上是这样吗?好的,让我为你检查一下。因为有时候系统中会出现漏洞,并没有被报告出来。请稍等片刻,让我看看这里是否有记录。所以根据最新提供给我们的医生办公室记录显示,在 2012 年至 2021 年期间,你的医生曾经给你开过这些药物处方。好的,在最新记录中显示,现在医生已经更换了不同种类的药物–二甲双胍。请问我们需要帮忙准备并发放 500 毫克二甲双胍处方给你吗?不客气玛丽,请告诉我们今天还有什么可以帮到你的。 情绪评分:8
此文本中的讲者在解决客户关注的问题时似乎很有礼貌、有帮助和耐心。 他们花时间检查信息,提供明确的解释,并提供协助。 然而,评分不是 10 分,因为对话的某些部分中仍然存在不确定性的迹象,这可能不会向客户传达完全的信心。

从明确的说明开始

信息在提示中显示的顺序非常重要。 这是因为 GPT 风格的模型是以某种方式构建的,这定义了它们处理输入的方式。 我们的研究表明,在共享其他上下文信息或示例之前,在提示开始时告诉模型你希望它执行的任务有助于生成更高质量的输出。

注意

尽管通常仍建议遵循此方法,但与之前的模型版本(GPT-3 和更早)相比,我们的测试表明,无论是否使用该技术,ChatGPT 和 GPT-4 模型的模型响应都是相同的。 在下面的示例中,我们看到添加了语句“几个消息来源... 爆发”到提示的开头或末尾后,不会导致最终模型响应发生任何变化。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 你的任务是验证“几个消息来源提到了可能会发生另一次大爆发”这一说法是否有以下一组片段中的具体引文的支持。
---
内容片段
[1] 专家称西雅图发生特大地震的几率为14%
西雅图 - 美国地质调查局估计,在未来 50 年里,西雅图发生 9 级卡斯卡迪亚地震的可能性为 14%。 “不幸的是,我们无法...

[2] 地震专家对西雅图的“真正的大地震”进行了最新展望
“我们说,在未来 50 年里,大约有 14% 的机会再次发生大约 9 级的地震,”华盛顿大学的一位地球物理学家说。
---
“几个消息来源提到了可能会发生另一次大爆发”,此陈述是由内容片段直接暗示或明确表述的吗?
否,该语句不是由内容片段直接暗示或明确表述的。 这些片段提到在未来 50 年内,西雅图有可能发生“特大地震”和“卡斯卡迪亚 9 级地震”,但并未提到另一次大型爆发的可能性。

在末尾重复指令

模型可能容易受到近因偏差的影响,在此上下文中,这意味着提示结束时的信息对输出的影响可能比提示开头的信息更大。 因此,值得尝试一下在提示结束时重复指令,并评估对所生成响应的影响。

引导输出

这是指在提示的末尾包含几个字词或短语,以获取遵循所需形式的模型响应。 例如,使用 “Here’s a bulleted list of key points:\n- ” 等提示有助于确保输出的格式为项目符号列表。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 尽可能少地回答。 约翰·史密斯与露西·史密斯结婚了。 他们有五个孩子,他在 Microsoft 担任软件工程师。 我应该执行哪些搜索查询来检查此事实? ## 一个可能的搜索查询是: “约翰·史密斯与露西·史密斯结婚五个孩子软件工程师 Microsoft”

在上述提示中,文本“一个可能的搜索查询是:”引导模型生成单个输出。 如果没有此提示,模型将生成多个搜索查询作为输出。

添加明确的语法

对提示使用明确的语法(包括标点符号、标题和节标记)有助于传达意向,并且通常使输出更易于分析。

在下面的示例中,分隔符(本例中为 ---)已添加到不同的信息源或步骤之间。 这允许使用 --- 作为生成的停止条件。 此外,节标题或特殊变量以大写形式显示,用于区分。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 你将阅读一个段落,然后向搜索引擎发出查询,以便对其进行事实检查。 另请解释查询。
---
段落
约翰·史密斯与露西·史密斯结婚了。 他们有五个孩子,他在 Microsoft 担任软件工程师。 我应该执行哪些搜索查询来检查此事实?
---
QUERIES
1.“约翰·史密斯 Microsoft”- 检查约翰·史密斯是否确实在 Microsoft 工作。
2.“约翰·史密斯露西·史密斯”–检查约翰·史密斯是否与露西·史密斯结婚了。
3.“约翰·史密斯孩子”- 检查约翰·史密斯是否有 5 个孩子。

如果不确定要使用哪种语法,请考虑使用 Markdown 或 XML。 这些模型已通过 XML 和 Markdown 的大量 Web 内容进行了训练,可能会提供更好的结果。

分解任务

如果任务分解为较小的步骤,大型语言模型(LLM)的性能通常会更好。 例如,在前面引用的搜索查询提示中,可以调整提示的结构,以便首先指示模型提取相关事实,然后指示生成可用于验证这些事实的搜索查询。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 你将阅读一个段落,然后向搜索引擎发出查询,以便对其进行事实检查。
---
段落
约翰·史密斯与露西·史密斯结婚了。 他们有五个孩子,他在 Microsoft 担任软件工程师。 我应该执行哪些搜索查询来检查此事实?
---
现在,你将提取事实声明,并向其发出查询以对其进行事实检查。 发出查询时,请使用函数 SEARCH ("query")

事实声明
1.约翰·史密斯与露西·史密斯结婚了
2. 他们有五个孩子
3. 他在 Microsoft 担任软件工程师

QUERIES
SEARCH(“约翰·史密斯与露西·史密斯结婚了”)
SEARCH(“约翰·史密斯家庭规模”)
SEARCH(“约翰·史密斯 Microsoft 软件工程师”)

请注意,应使用清晰的语法来区分不同部分并引导输出。 在此简单示例中,将任务从一步分解为两步并不十分引人注目,但在试图对包含许多事实声明的较大文本进行分解时,将任务分解会产生显著的不同。

使用可供性

有时候,我们可以让模型使用可供性,而不是仅依赖其自身的参数来获取信息和答案。 例如,搜索可以作为一种可供性来帮助减轻虚构答案的风险,并获取最新的信息。

使用可供性的一种简单方法是在模型生成可供性调用时停止生成,然后将结果粘贴回提示中。 下面是执行上述 SEARCH 调用后进行跟进调用的示例。 请注意看我们如何将搜索结果粘贴到提示中并替换之前的 SEARCH 调用。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 你将阅读段落,提取事实声明,然后使用搜索引擎结果对它们进行事实检查
---
段落
约翰·史密斯与露西·史密斯结婚了。 他们有五个孩子,他在 Microsoft 担任软件工程师。 我应该执行哪些搜索查询来检查此事实?
---
事实声明
- 约翰·史密斯与露西·史密斯结婚了
- 约翰和露西有五个孩子
- 约翰在 Microsoft 担任软件工程师
---
下面是为研究上述声明而发出的各种搜索查询:
搜索查询
- 约翰·史密斯与露西·史密斯结婚了
- 约翰·史密斯儿童数量
- 约翰·史密软件工程师 Microsoft
---
下面是搜索结果的内容片段:
内容片段:
[1] ... 约翰·史密斯的婚礼是在 2012 年 9 月 25 日...
[2] ... John Smith 和他的妻子 Lucy 一起参加了一场聚会
[3]约翰带着他的两个女儿和三个儿子去看了足球比赛
[4] ... 在 Microsoft 工作 10 年后,史密斯创立了自己的初创公司 Tailspin Toys
[5] 约翰·M 是镇上的铁匠,他娶了菲奥娜。 他们有一个女儿叫露西
---
根据给定的内容片段,事实检查上述每个事实声明:
- 约翰·史密斯与露西·史密斯结婚了:已确认。 片段 [1] 和 [2] 都提及了约翰·史密斯的妻子露西。

- 约翰和露西有五个孩子:已确认。 片段 [3] 提到约翰由他的两个女儿和三个儿子陪同。

- 约翰在 Microsoft 担任软件工程师:部分确认。 片段 [4] 提到约翰已在 Microsoft 工作 10 年,但没有明确说明他目前在那里工作。 可能需要进一步调查才能确认他目前的就业状况。

思维链提示

这是分解任务技术的变体。 在这种方法中,不是将一项任务分割成较小的步骤,而是指示模型响应逐步进行,并提出所有涉及的步骤。 这样做可以减少结果不准确的可能性,并使评估模型响应更容易。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 谁是在悉尼举行的奥林匹克运动会中获得最多奖牌(最大奖牌数)的个人运动员? 采取逐步方法回答问题,在分享最终答案之前引用来源并给出推理,格式如下:答案是:<name> 步骤 1:确定悉尼奥运会的年份。 悉尼奥运会是在 2000 年举行的。

步骤 2:查找在 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单。

据奥运会官方网站称,在 2000 年悉尼奥运会上,有数名运动员获得了多枚奖牌。 一些值得注意的名字包括:
•伊恩·索普(澳大利亚)- 3 金 2 银 0 铜
•彼得·范登·霍根班德(荷兰)- 2 金 0 银 2 铜
•莱尼·克雷泽尔堡(美国)- 3 金 0 银 0 铜
·英格·德·布鲁伊恩(荷兰)- 3 金 1 银 0 铜

步骤 3:确定获得最多奖牌的运动员。 回顾了在 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单后,我们可以看到,获得奖牌最多的运动员是来自澳大利亚的伊恩·索普,他共获得 5 枚奖牌(3 金 2 银)。

因此,答案是:伊恩·索普。

指定输出结构

使用提示指定输出结构时,可能会对结果的性质和质量产生重大影响。 有时,系统消息输入“仅写出真实事实”或“不捏造信息”可能不足以缓解问题。 相反,要求模型响应同时包含引文有助于减少错误响应的概率。

如果你指示模型在编写语句时引用源材料,则这些语句更有可能有根据。 请求引文会使模型在每次生成响应时都犯两个错误:第一个错误是捏造的响应,第二个错误是错误的引文。 请注意,引文越接近它支持的文本,模型预测引文所需的距离就越短,这表明内联引文比内容末尾的引文更适合缓解虚假内容的生成。

同样,如果要求模型从段落中提取事实陈述,它可能会提取复合语句,例如“X 正在执行 Y 和 Z”(这可能更难验证)。 可以通过指定输出结构来避免这种情况,如(实体 1、关系、实体 2)。

以下示例演示了引文的使用,并指导模型响应适应定义的结构。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手 列出客户支持专员在以下对话中展示的不同行为。
---
嗨,感谢你致电 Contoso 药店,我今天和谁通话?我了解你的挫败感,玛丽。你能告诉我你想要实现什么目标吗?好的,很高兴帮你看一下,请稍等片刻。我在这里看到你曾经使用过普通立普妥是吗?好的,那么我看到你的医生在 2021 年停止开这些药物的处方了。实际上是这样吗?好的,让我为你检查一下。因为有时候系统中会出现漏洞,并没有被报告出来。请稍等片刻,让我看看这里是否有记录。所以根据最新提供给我们的医生办公室记录显示,在 2012 年至 2021 年期间,你的医生曾经给你开过这些药物处方。好的,在最新记录中显示,现在医生已经更换了不同种类的药物–二甲双胍。请问我们需要帮忙准备并发放 500 毫克二甲双胍处方给你吗?不客气玛丽,请告诉我们今天还有什么可以帮到你的。
---
客户支持专员的响应如何?
使用“行为(“原因”)”格式对各种行为进行分类和列出,并引用分类背后的原因
1. 礼貌问候行为(“专员以礼貌的问候语开始对话,并询问呼叫者的姓名”)
2. 同理心行为(“专员意识到玛丽的沮丧,并试图理解她的担忧”)
3. 细心的行为(“专员倾听客户的问题,并询问更多详细信息”)
4. 主动行为(“专员提出为客户检查问题”)
5. 信息性行为(“专员提供了有关客户的处方记录的相关信息”)
6. 全面的行为(“专员检查了系统中可能存在的任何缺口,并提供了完整的回应”)
7. 确认性行为(“专员与客户确认当前药物”)
8. 以解决方案为引导的行为(“专员提出为客户填写新处方”)
9. 礼貌行为(“专员感谢了客户,并提出在需要时提供进一步帮助”)
系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 根据在文本中看到的模式,将以下新闻标题分为主题类别。 还要提到定义这些类别的理由。
输出格式:
{
“主题_名称”:“”,
“标题”:[],
“理由”:“”
}

输入新闻标题:
1.“使用 AR + ML 在 10 秒内从书本到演讲”
2.“1993 年 32 岁的 Yann LeCun 演示了世界第一个文本识别卷积网络”
3.“应用于动画绘画的一阶运动模型”
4.“Robinhood 和其他券商从实际上阻止购买 $GME、$NOK、$BB、$AMC;允许卖出”
5.“美国联合航空公司股票在盘前交易中下跌超过 5%”
输出:

{
“人工_智能”:{
“标题”:[
“使用 AR + ML 在 10 秒内从书本到演讲”、
“1993 年 32 岁的 Yann LeCun 演示了世界第一个文本识别卷积网络”、
“应用于动画绘画的一阶运动模型”
],
“理由”:“这些标题与人工智能、机器学习及其在各个领域的应用有关。”
},
“金融_市场”:{
“标题”:[
“Robinhood 和其他券商从实际上阻止购买 $GME、$NOK、$BB、$AMC;允许卖出”、
“美国联合航空公司股票在盘前交易中下跌超过 5%”、
“比特币在一年前的今天接近 20,000 美元”
],
“理由”:“这些标题与金融市场、股票、加密货币和交易平台有关。
}
}

温度和 Top_p 参数

改变温度参数会改变模型的输出。 温度参数可以设置为 0 到 2。 较高的值(例如 0.7)将会导致输出更随机,并产生更发散的响应,而较低的值(例如 0.2)会产生更集中和更具体的输出。 虚构的故事可以使用更高的温度生成。 而要生成法律文件,建议使用低得多的温度。 Top_probability 是另一个参数,与温度类似,它也控制模型响应的随机性,但它的控制方式有所不同。 一般建议一次只更改这两个参数其中之一,而不是同时更改它们。

提供基础上下文

提供可靠答案的最有效方法之一是为模型提供数据,让它从基础数据得出响应。 如果你的用例依赖于最新且可靠的信息,而且不是纯粹的创意性场景,我们强烈建议提供有根据的数据。 通常,源材料越接近所需答案的最终形式,模型需要完成的工作就越少,这意味着出错的可能性就越小。 下面的示例向系统提供了介绍在 Azure OpenAI 服务中推出 GPT-4 的最新博客,并要求系统提及一些早期客户的名称。

系统消息 用户 Assistant
“你是帮助用户查找信息的 AI 助手。 你将仅通过以下文本提供回答,并以 100 字或更少的字数给出响应:
“在 Microsoft,我们不断发现释放创造力、解锁生产力和提高技能的新方法,以便让更多人可以从使用 AI 中获益。 这使我们的客户能够...

… 从而减少模型生成有害响应的可能性。”1

回答不超过 100 个字词。 尽可能使用项目符号列表。
谁是 Azure OpenAI 服务 GPT-4 模型的早期客户? 下面是 Azure OpenAI 服务 GPT-4 模型的一些早期客户:
- Epic Healthcare:他们计划使用 GPT-4 来帮助医生和护士在数据输入和调查上花费更少的时间。
- Coursera:他们将 Azure OpenAI 服务与 GPT-4 配合使用,以在其平台上创建新的 AI 驱动的学习体验。
- Coca-Cola:他们正在使用 Azure OpenAI 构建知识中心,并计划利用 GPT-4 的多模态功能处理营销、广告、公共关系和客户关系。
- 其他各种规模的公司也在使用 Azure AI 来改善客户体验、汇总长格式内容、帮助编写软件,并通过预测正确的税务数据来降低风险。

1 来自 Azure OpenAI GPT-4 发布博客的文本。

最佳做法

  • 尽量具体。 尽可能少留解读空间。 限制操作空间。
  • 具有描述性。 使用类比。
  • 强调。 有时可能需要对模型进行重复操作。 在主要内容之前和之后提供说明,使用指令和提示等。
  • 给事项排序。 向模型呈现信息的顺序可能会影响输出。 你选择是在内容之前放置指令(“汇总以下内容...”)还是之后(“汇总以上...”)会影响输出。 即使是少样本示例的顺序也很重要。 这被称为“近因偏差”。
  • 给模型一个“出路”。 如果模型无法完成分配的任务,有时为模型提供备用路径可能会有所帮助。 例如,在对一段文本提出问题时,可以加入类似于“如果答案不存在,则回复‘未找到’”之类的内容。这有助于避免模型生成错误响应。

空间效率

虽然输入大小会随着 GPT 模型的迭代而增加,但仍存在提供的数据超出模型所能处理的数据量的情况。 GPT 模型将单词分解为“标记”。常见的多音节单词通常是单个标记,而不太常见的单词会按音节拆分。 标记有时可能违反直觉,如以下示例所示,它演示了不同日期格式的标记边界。 在这种情况下,拼出整个月份比使用完全数字的日期更具空间效益。 当前的标记支持范围:早期 GPT-3 模型支持 2000 个标记,最新的 GPT-4 模型 32k 版本支持最多 32,768 个标记。

文本字符串的屏幕截图,其中突出显示了标记边界的颜色。

由于空间有限,请务必尽可能高效地使用它。

  • 表格–如上一部分中的示例所示,GPT 模型可以非常轻松地理解表格格式的数据。 这是一种空间高效的包含数据的方式,相较于在每个字段前面加上名称(例如 JSON)。
  • 空格 - 连续的空格被视为单独的标记,这很容易浪费空间。 另一方面,单词前面的空格通常被视为与单词相同的标记的一部分。 请仔细观察空格的使用情况,不要在单独使用空格就足够时使用标点符号。