芝士AI吃鱼
随着生成式人工智能(尤其是 ChatGPT)的爆炸性普及,提示对于人工智能领域的人们来说已成为一项越来越重要的技能。制作提示,即与 ChatGPT 等大型语言模型 (LLM) 交互的机制,并不是乍看起来那么简单的语法任务。在第一次与 ChatGPT 交流的新鲜感之后,很明显需要练习和思考才能迅速掌握。因此,开发流程来创建尽可能最有用的提示(称为提示工程)已成为令人垂涎的专业知识。
这篇文章分为三个部分;他们是
提示原则
基本提示工程
提示工程策略
进阶技巧
提示工程是有效利用 LLM 的最重要方面,也是定制与 ChatGPT 交互的强大工具。它涉及制定清晰且具体的指令或查询,以从语言模型中得出所需的响应。通过仔细构建提示,用户可以引导 ChatGPT 的输出实现其预期目标,并确保更准确和有用的响应。
在 ChatGPT 的提示优化过程中需要记住一些基本技术。
首先,在提示开头提供明确的指令有助于设置上下文并定义模型的任务。指定预期答案的格式或类型也是有益的。此外,可以通过在提示中加入系统消息或角色扮演技术来增强交互。
下面是使用上述技术的示例提示:
我希望您为食谱博客生成 10 个快速准备晚餐的想法,每个想法都包含一个标题和对这顿饭的一句话描述。这些博客是为寻找易于准备的家庭膳食的父母受众编写的。将结果输出为项目符号列表。
将该提示与以下内容进行比较:
写 10 篇食谱博客。
直观上,前者会获得更有用的结果。
请记住,可以通过迭代地改进和试验提示来提高模型响应的质量和相关性,从而创建更富有成效的对话。不要害怕直接在 ChatGPT 上测试潜在的提示。
现在已经知道基本提示应该是什么样子了,让我们更详细地探讨一些基本的提示工程注意事项。
提示的措辞至关重要,因为它指导模型生成所需的输出。以 ChatGPT 能够理解并准确回应的方式表达问题或陈述非常重要。
例如,如果用户不是某个领域的专家并且不知道表达问题的正确术语,ChatGPT 可能会遇到他们提供的答案受到限制。这类似于在不知道正确关键字的情况下在网络上搜索。
虽然很明显可以使用附加信息来创建更好的提示,但一般来说过于冗长不一定是最佳策略,这一点可能不太明显。最好不要将提示措辞视为一种单独的技术,而是将其视为连接所有其他技术的线索。
提示的简洁对于清晰度和精确性非常重要。精心设计的提示应该简洁明了,为 ChatGPT 提供足够的信息来理解用户的意图,但又不会过于冗长。然而,确保提示不要太简短至关重要,否则可能会导致歧义或误解。不够和太多之间的平衡可能很难实现。练习可能是掌握这项技能的最好方法。
提示中的措辞和简洁性很重要,因为它是为了具体化。
在提示工程中,角色是为LLM分配的角色。例如,如果有人有兴趣让 ChatGPT 为一篇关于机器学习分类指标的博客文章撰写大纲,明确说明ChatGPT将充当专家机器学习实践者,并且其目标受众是数据科学新手,这肯定会有助于提供富有成效的回应。是否应该用对话语言(“你将担任在凤凰城地区有 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 个可能的名字。
我喜欢的狗名字是香蕉。
少样本策略涉及LLM根据用户提供的一些示例或上下文片段生成答案。该策略可以指导 ChatGPT 的响应并确保其符合用户的意图。这里的想法是,多个示例将为模型提供比单个示例更多的指导。例如:
为我的新狗生成 10 个可能的名字。
我喜欢的狗名字包括:
– 香蕉
– 猕猴桃
– 菠萝
– 椰子
正如您所猜测的,提示中包含的示例越多,生成的输出就越接近所需的结果。对于零样本,可能不会建议任何水果名称;如果是一次,则可能有多个;在很少的情况下,建议可能完全由水果主题的名称组成。
思路链策略包括为LLM提供一些示例,帮助完善原始问题并确保得到更准确和全面的答案。所谓思路提示,是因为提示中包含了一些思路示例。它与 X-shot 提示技术不同,因为思维链提示的结构是为了鼓励批判性思维,并且旨在帮助发现 ChatGPT 可能没有考虑到的新见解或方法。
该技术还鼓励LLM输出其批判性推理。思维链提示的名片是“让我们一步一步思考”这句话,它通常附加在提示的末尾,研究表明这足以改善生成的结果。
考虑以下一次性提示示例:
问:乔有 20 个鸡蛋。他又买了两盒鸡蛋。每箱装有 12 个鸡蛋。乔现在有多少个鸡蛋?
答:答案是44。
问:农夫约翰有 93 只鸡。如果他把 20 只卖给农夫比尔,然后又买了两倍数量的鸡,那么农夫约翰现在有多少只鸡?
并考虑 ChatGPT 的错误输出响应:
答案是73。
现在让我们看一下下面的思维提示链,它是为鼓励LLM的批判性思维而编写的:
问:乔有 20 个鸡蛋。他又买了两盒鸡蛋。每箱装有 12 个鸡蛋。乔现在有多少个鸡蛋?让我们一步步思考。
A:乔一开始有 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 章:Bootstrap 悖论
1.1 Bootstrap 悖论的本质
– 解释概念及其起源
– 来自文学、电影和现实生活轶事的关键例子
……
然后这个迭代可以继续。进一步的提示可能是:
让我们充实一下介绍。生成本章每个部分将涵盖的内容的两段摘要。介绍的章节大纲如下。
– – –
引言
– 定义时间悖论
– 时间旅行叙事中时间悖论的意义
– 章节结构概述
可以看到在此示例中如何继续进一步迭代。可以使用类似的迭代来让 ChatGPT 生成代码:从概述开始,迭代概述以生成模块,在模块上生成以生成函数,最后在函数内生成代码。正如将大问题分解为更小、更易于管理的问题通常是人类成功的处方一样,ChatGPT 擅长以更容易处理的方式完成更大的任务。
看待 ChatGPT 的最佳方式是作为初级助理,无论是研究助理、编码助理、问题解决助理,还是您需要的任何助理。认识并培养这种协作氛围可以带来进一步的成功。以下是促进这种合作的一些快速提示。
改进提示制作的一种方法是让 ChatGPT 参与进来。像这样的提示可能会带来有益的结果:
我现在可以使用什么提示来进一步帮助您完成此任务?
然后,ChatGPT 应该生成有用提示的建议,您可以使用它来加强其进一步的响应。
模型引导提示涉及指示LLM提示您完成所请求的任务所需的信息。这类似于告诉某人“问我你需要知道什么”。
我希望你编写一个 Python 程序来管理我的客户信息,这些信息存储在 Google Sheet 中。为了完成这项任务,请询问我需要回答的任何问题。
让 ChatGPT 来决定执行任务所需的信息是有益的,因为它可以消除一些猜测并阻止幻觉。当然,模型引导提示的精心设计的提示可能会让您从 ChatGPT 中回答许多不相关的问题,因此最初的提示仍然需要经过深思熟虑地编写。
一旦熟悉了此处列出的提示工程策略,就可以寻找其他更复杂、高性能的方法。其中一些策略包括思想树、反思和自我一致性等。正在定期制定其他战略;毫无疑问,从撰写本文到阅读本文期间,这方面已经出现了一些有趣的进展。
请记住,提示工程的重点是以 LLM 可以清楚、明确地理解的方式向 ChatGPT 传达的意图和愿望,以便它能够根据请求采取行动,产生与期望的输出尽可能接近的结果。可能的。如果牢记这一点,继续执行所提出的策略,并通过定期练习磨练您的提示工程技能,会发现 ChatGPT 是一个真正有用的初级助手,愿意并且能够在需要时提供帮助。
只要你问得对。