OpenAI的GPT-3、GPT-3.5和GPT-4模型基于用户输入的文本提示工作。有效的提示构造是使用这些模型的关键技能,涉及到配置模型权重以执行特定任务。这不仅是技术操作,更像是一种艺术,需要经验和直觉。本文旨在介绍适用于所有GPT模型的提示概念和技巧。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人
提示工程基本概念
本部分介绍 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 |
---|---|
Can you please tell me how to get to the museum? 翻译为法语: | 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 |
---|---|---|
没有 | 研讨会列表: 标题描述 规划研讨会启动请加入我们以启动研讨会! 听取我们的领导关于未来一年的跨组优先事项和学习内容。 此活动的邀请已发送给 [...] 中的每个人 总结上述研讨会,按主题分组: | 研讨会列表: 规划研讨会启动 - 规划研讨会总结 - 核心会面 - 客户驱动的观点 - 影响和重点领域 - 最佳做法 - 加速应用采用 [...] |
有 | 研讨会列表: 标题描述 规划研讨会启动请加入我们以启动研讨会! 听取我们的领导关于未来一年的跨组优先事项和学习内容。 此活动的邀请已发送给 [...] 中的每个人 我的重要主题:提示工程、搜索、GPT 模型 总结上述研讨会,按我的重要主题分组: | 1. 提示工程: - 新的提示工程技巧 - 提示工程的艺术 2. 搜索: - 使用嵌入的矢量搜索简介 3. GPT 模型: - GPT-4 简介 - 深度了解 GPT-35-Turbo。 |
最佳做法
- 尽量具体。 尽可能少留解读空间。 限制操作空间。
- 具有描述性。 使用类比。
- 强调。 有时可能需要对模型进行重复操作。 在主要内容之前和之后提供说明,使用指令和指示等。
- 给事项排序。 向模型呈现信息的顺序可能会影响输出。 你选择是在内容之前放置指令("汇总以下内容...")还是之后("汇总以上...")会影响输出。 即使是少样本示例的顺序也很重要。 这被称为"近因偏差"。
- 给模型一个"出路"。 如果模型无法完成分配的任务,有时为模型提供备用路径可能会有所帮助。 例如,在对一段文本提出问题时,可以加入类似于"如果答案不存在,则回复'未找到'"之类的内容。这可帮助模型避免生成错误的响应。
空间效率
虽然输入大小会随着 GPT 模型的迭代而增加,但仍存在提供的数据超出模型所能处理的数据量的情况。 GPT 模型将单词分解为"标记"。 常见的多音节单词通常是单个标记,而不太常见的单词会按音节拆分。 标记有时可能违反直觉,如以下示例所示,它演示了不同日期格式的标记边界。 在这种情况下,拼出整个月份比使用完全数字的日期更具空间效益。 当前的标记支持范围:早期 GPT-3 模型支持 2000 个标记,最新的 GPT-4 模型 32k 版本支持最多 32,768 个标记。
由于空间有限,请务必尽可能高效地使用它。
- 表格 -- 如上一部分中的示例所示,GPT 模型可以非常轻松地理解表格格式的数据。 这是一种空间高效的包含数据的方式,相较于在每个字段前面加上名称(例如 JSON)。
- 空格 - 连续的空格被视为单独的标记,这很容易浪费空间。 另一方面,单词前面的空格通常被视为与单词相同的标记的一部分。 请仔细观察空格的使用情况,不要在单独使用空格就足够时使用标点符号。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人