随着生成式人工智能,特别是 ChatGPT 越来越受欢迎,对于人工智能领域的人来说,提示工程已成为一项日益重要的技能。构建提示(与大型语言模型 (LLM)(例如 ChatGPT)交互的机制)并非最初看起来那样简单的语法任务。在与 ChatGPT 进行首次交流的新奇感过后,很明显,提示掌握需要实践和思考。因此,开发尽可能创建最有用提示的过程(称为提示工程)已成为 LLM 圈子及其他领域令人垂涎的专业知识。
在这篇文章中,您将学习提示工程。特别是,
- 如何在提示中提供信息以对响应产生最大影响
- 什么是角色、正向和负向提示、零样本提示等等
- 如何迭代使用提示以利用 ChatGPT 的对话性质
通过我的书《最大限度地提高 ChatGPT 生产力》开始并应用 ChatGPT。它提供了实际用例和提示示例,旨在让您快速使用 ChatGPT。
让我们开始吧。

用于与 ChatGPT 有效交互的提示工程
图片由 Adrian Tam 使用 Stable Diffusion 生成。保留部分权利。
概述
这篇博文分为三部分;它们是:
- 提示原则
- 基本提示工程
- 高级提示工程策略
- 协作能力提示
提示原则
提示工程是有效利用 LLM 最关键的方面,也是自定义与 ChatGPT 交互的强大工具。它涉及精心制作清晰具体的指令或查询,以从语言模型中获取所需的响应。通过仔细构建提示,用户可以引导 ChatGPT 的输出达到其预期目标,并确保更准确和有用的响应。
在 ChatGPT 的提示优化过程中,有几个基本技术需要记住。
首先,在提示的开头提供明确的指令有助于设置上下文并为模型定义任务。指定预期答案的格式或类型也很有益。此外,您可以通过在提示中加入系统消息或角色扮演技术来增强交互。
以下是包含上述技术的示例提示
我希望您为食谱博客生成 10 个快速准备晚餐的餐点创意,每个创意都包括标题和一句话的餐点描述。这些博客将面向正在寻找易于准备的家庭餐的家长读者。以项目符号列表的形式输出结果。
将该提示与以下提示进行比较
写 10 个食谱博客。
直观地,前者将获得更有用的结果。
请记住,您可以通过迭代地细化和试验提示来提高模型响应的质量和相关性,从而创建更富有成效的对话。不要害怕直接在 ChatGPT 上测试潜在提示。
基本提示工程
现在您已经了解了基本提示的样子,让我们更详细地探讨一些基本的提示工程注意事项。
提示措辞
提示的措辞至关重要,因为它指导 LLM 生成所需的输出。以 ChatGPT 能够理解并准确响应的方式提问或陈述非常重要。
例如,如果用户不是某个领域的专家,并且不知道正确的术语来提问,ChatGPT 在提供答案时可能会受到限制。这类似于在不知道正确关键词的情况下在网上搜索。
虽然显而易见,可以使用额外的信息来创建更好的提示,但笼统地过于冗长不一定是最佳策略,这可能不那么明显。最好将提示措辞视为贯穿所有其他技术的连接线索,而不是单独的技术。
简洁
提示的简洁性对于清晰度和精确性很重要。一个精心制作的提示应该简洁明了,提供足够的信息让 ChatGPT 理解用户的意图,而不会过于冗长。然而,确保提示不要太简短至关重要,因为这可能会导致歧义或误解。这种不多不少的平衡可能很难把握。练习可能是掌握这项技能的最佳方法。
提示中的措辞和简洁性很重要,因为它关系到特异性。
角色和目标
在提示工程中,角色是为 LLM 和目标受众分配的身份。例如,如果有人想让 ChatGPT 为一篇关于机器学习分类指标的博客文章撰写提纲,明确说明 LLM 将充当机器学习专家,并且其目标受众是数据科学新手,无疑将有助于提供富有成效的响应。这应该用口语化的语言(“您将扮演一名在凤凰城地区拥有 10 年经验的房地产经纪人”)还是更正式的方式(“作者:经验丰富的凤凰城房地产经纪人;受众:缺乏经验的购房者”)来表达,可以在特定场景中进行实验。
目标与角色密切相关。明确说明提示引导交互的目标不仅是个好主意,而且也是必要的。没有它,ChatGPT 怎么会知道要生成什么输出?
以下是一个考虑了角色和目标的合格提示
您将扮演一名在凤凰城地区拥有 10 年经验的房地产经纪人。您的目标是为凤凰城大都市区排名前 5 的家庭社区提供每社区一段摘要。目标受众是缺乏经验的购房者。
除了明确说明的角色和目标之外,请注意上面示例提示的相对特异性。
正向和负向提示
正向和负向提示是另一种引导模型输出的框架方法。正向提示(“这样做”)鼓励模型包含特定类型的输出并生成特定类型的响应。另一方面,负向提示(“不要这样做”)阻止模型包含特定类型的输出并生成特定类型的响应。使用正向和负向提示可以极大地影响模型输出的方向和质量。
考虑以下示例提示
您将扮演一名在凤凰城地区拥有 10 年经验的房地产经纪人。您的目标是为凤凰城大都市区排名前 5 的家庭社区提供每社区一段摘要。目标受众是缺乏经验的购房者。
上述提示的框架本质上是积极的,为 ChatGPT 应该生成什么提供了指导。让我们添加一些措辞来阻止某些输出,无论是在内容还是格式上。负向提示的一个例子,旨在进行内容指导,可以是在我们上面的例子中添加以下内容
不要包含距市中心 5 英里以内或靠近机场的任何街区。
这个额外的约束应该有助于 ChatGPT 理解它应该生成什么输出。
高级提示工程策略
让我们来看看一些更高级的提示工程策略。虽然上一节提供了一些与 LLM 交互的一般准则,但您可以转向各种现代策略,这些策略在提示工程师的工具包中很常见,可以以更复杂的方式与 ChatGPT 交互。
输入/输出提示
输入/输出提示策略涉及定义用户提供给 LLM 的输入以及 LLM 响应时要生成的输出。该策略是提示工程的基础,因为它直接影响 ChatGPT 响应的质量和相关性。
例如,用户可能会提供一个输入提示,要求 ChatGPT 为特定任务生成一个 Python 脚本,而所需的输出将是生成的脚本。
以下是最基本策略的示例:提供一个输入并希望得到一个输出。
生成一个 Python 脚本,该脚本接受一个强制命令行参数([project])并执行以下任务
– 创建一个名为 [project] 的新文件夹
– 在新文件夹中创建一个名为 [project].py 的文件
– 将一个简单的 Python 脚本文件头写入 [project].py 文件
零样本提示
零样本策略涉及 LLM 在没有任何示例或上下文的情况下生成答案。当用户希望快速获得答案而无需提供额外细节,或者当主题非常普遍以至于示例会人为地限制响应时,此策略可能很有用。例如
为我的新狗生成 10 个可能的名字。
单样本提示
单样本策略涉及 LLM 根据用户提供的单个示例或上下文生成答案。此策略可以指导 ChatGPT 的响应并确保其与用户的意图保持一致。这里的想法是,一个示例将比没有示例向模型提供更多指导。例如
为我的新狗生成 10 个可能的名字。
我喜欢的一个狗名是 Banana。
少样本提示
少样本策略涉及 LLM 根据用户提供的几个示例或上下文生成答案。此策略可以指导 ChatGPT 的响应并确保其与用户的意图保持一致。这里的想法是,几个示例将比一个示例向模型提供更多指导。例如
为我的新狗生成 10 个可能的名字。
我喜欢的狗名包括
– 香蕉
– 猕猴桃
– 菠萝
– 椰子
如您所料,提示中包含的示例越多,生成的输出就越符合预期。对于零样本,可能没有建议的水果名称;对于单样本,可能有几个;对于少样本,建议可能完全由水果主题名称组成。
思维链提示
思维链策略涉及向 LLM 提供一些示例,以帮助完善原始问题并确保更准确和全面的答案。思维链提示之所以如此命名,是因为它们在提示中包含了一些思维链示例。它与 X-shot 提示技术不同,因为思维链提示的结构旨在鼓励批判性思维,并旨在帮助发现 ChatGPT 可能未曾考虑过的新见解或方法。
该技术还鼓励 LLM 输出其批判性推理。思维链提示的标志性短语是“让我们一步一步地思考”,该短语通常附加在提示的末尾,研究表明这足以改善生成的结果。
考虑以下单样本提示示例
问:乔有 20 个鸡蛋。他又买了 2 箱鸡蛋。每箱有 12 个鸡蛋。乔现在有多少个鸡蛋?
答:答案是 44。问:农民约翰有 93 只鸡。如果他卖了 20 只给农民比尔,又买了原来数量的两倍,农民约翰现在有多少只鸡?
并考虑 ChatGPT 的错误输出响应
答案是 73。
现在让我们看看以下思维链提示,该提示旨在鼓励 LLM 进行批判性思考
问:乔有 20 个鸡蛋。他又买了 2 箱鸡蛋。每箱有 12 个鸡蛋。乔现在有多少个鸡蛋?让我们一步一步地思考。
答:乔最初有 20 个鸡蛋。2 箱 12 个鸡蛋是 24 个鸡蛋。20 + 24 = 44。因此,乔有 44 个鸡蛋,答案是 44。问:农民约翰有 93 只鸡。如果他卖了 20 只给农民比尔,又买了原来数量的两倍,农民约翰现在有多少只鸡?让我们一步一步地思考。
ChatGPT 的响应这次有所不同
答:农民约翰卖了 20 只鸡给农民比尔,所以他剩下 93 – 20 = 73 只鸡。然后他买了卖出数量两倍的鸡,所以他买了 2 * 20 = 40 只鸡。将这些新买的鸡加到他剩余的库存中,农民约翰现在有 73 + 40 = 113 只鸡。
通过提供解决此问题所需的批判性思维过程示例,并指导它一步一步地思考,ChatGPT 可以将相同的推理应用于我们的问题,并这次得出正确的答案。
自我批评
自我批评策略涉及提示 LLM 评估其输出是否存在潜在不准确或需要改进的领域。此策略可以确保 ChatGPT 提供的信息尽可能准确。它可以帮助用户调试其提示并确定为什么他们没有获得符合预期的结果。
此类提示的一个示例如下
请重新阅读您上面的回复。您是否发现您的回复有任何问题或错误?如果有,请指出这些问题或错误并进行必要的修改。
这个例子是关于指导 ChatGPT 使用自我批评来调试其有缺陷的代码
查看您刚刚生成的代码。目前它无法运行。您能看到任何语法错误或流程控制错误并能够纠正吗?如果能,请指出有问题的代码段并重新生成。
利用 ChatGPT 的自我修复能力是您绝不能忽视的提示工程技术。
迭代
迭代或扩展策略涉及根据初始提示的输出向 LLM 提供后续提示。这包括通过向每个后续响应提出更多问题或提出额外请求来迭代结果。
例如,考虑让 ChatGPT 协助您撰写一本书的提纲。第一个提示可能如下所示
我正在写一本关于时间旅行理论的书。我还没有确定一个具体的主题。请为这本书生成 5 个具体的选题建议。对于每个建议,提供一个标题和一句话的描述,说明这本书将涵盖什么内容。这本书将面向普通读者。
现在,假设其中一个建议主题如下
标题:《时间悖论:驾驭时间旅行的复杂性》
描述:“时间悖论”深入探讨了时间旅行悖论令人费解的复杂性,探索了它们带来的迷人难题。本书探讨了各种悖论,例如自举悖论、宿命论悖论和信息悖论等。……
然后,您可以使用后续提示进行迭代
我将撰写您建议的书《时间悖论:驾驭时间旅行的复杂性》。请为这本书生成一个章节大纲,包括章节和子章节。
下面是一个可能的输出摘录
引言
– 定义时间悖论
– 时间悖论在时间旅行叙事中的意义
– 章节结构概述第一章:自举悖论
1.1 自举悖论的本质
– 解释概念及其起源
– 文学、电影和现实生活轶事中的关键示例
…
此迭代可以继续。进一步的提示可以是
让我们充实一下引言。生成一个两段摘要,说明每个章节部分将涵盖什么内容。引言的章节大纲如下。
– – –
引言
– 定义时间悖论
– 时间悖论在时间旅行叙事中的意义
– 章节结构概述
您可以看到此示例中进一步迭代的持续方式。类似的迭代可用于让 ChatGPT 生成代码:从概述开始,迭代概述以生成模块,迭代模块以生成函数,最后生成函数中的代码。正如将大问题分解成更小、更易于管理的问题通常是人类成功的秘诀一样,ChatGPT 擅长以更易于处理的块完成更大的任务。
协作能力提示
看待 ChatGPT 的最佳方式是将其视为一名初级助理,无论是研究助理、编码助理、问题解决助理,还是您需要的任何助理。认识并培养这种协作氛围可以带来更大的成功。以下是一些促进这种协作的快速提示。
提示提示
改进提示制作的一种方法是让 ChatGPT 参与进来。这样的提示可能会带来有益的结果
我现在可以使用什么提示来进一步帮助您完成此任务?
ChatGPT 应该会生成有关有用提示的建议,您可以将其用于加强其后续响应。
模型引导提示
模型引导提示涉及指示 LLM 提示您完成所请求任务所需的信息。这类似于告诉某人“问我你需要知道什么。”
我希望您编写一个 Python 程序来管理我的客户信息,这些信息存储在 Google 表格中。请提出您需要答案的任何问题,以便完成此任务。
让 ChatGPT 决定它需要什么信息来执行任务可能很有益,因为它消除了一些猜测并阻止了幻觉。当然,一个制作不佳的模型引导提示可能会让您回答 ChatGPT 的许多不相关问题,因此初始提示仍然需要深思熟虑地编写。
结论
一旦您熟悉了这里提出的提示工程策略,您就可以寻找其他更复杂、高性能的方法。其中一些策略包括思维树、反思和自洽性等。其他策略正在定期开发中;毫无疑问,在本文撰写时和您阅读时之间,这方面已经出现了一些有趣的进展。
请记住,提示工程的目的是以 LLM 能够清晰明确理解的方式向 ChatGPT 传达您的意图和愿望,以便它能够按照请求尽可能地产生所需的输出。如果您牢记这一点,继续使用所提出的策略,并通过定期练习磨练您的提示工程技能,您会发现 ChatGPT 是一位真正有用的初级助理,随时乐意提供帮助。
只要你问得恰当。
谢谢马修,感谢您对提示工程做了精彩的总结。非常有用。我相信还有更多。我期待高级版本!
感谢您对提示工程的深入描述。
嗨 Vimisha… 不客气!感谢您的反馈!
很棒!真的很喜欢它的解释方式。
感谢您的反馈 Havish!请随时告知我们您的进展!