随着生成式人工智能(尤其是ChatGPT、GPT-4)的爆炸性普及,对于人工智能领域的人们来说,写Prompt已经成为了一项越来越重要的技能。然而,当您在实操过程中会发现,并不是乍看起来那么简单的语法任务。当体验完ChatGPT、GPT-4等大模型的新鲜感之后,写Prompt需要个人练习和思考才能快速掌握该技能。因此,根据实际应用场景创建最有效的Prompt(Prompt工程)已经成为LLMs领域内外令人垂涎的专业知识。这也催生出了Prompt工程师的岗位。
本篇文章,将带你全面了解Prompt工程,其中包括:如何在提示中提供对回答影响最大的信息;什么是人物角色、正面和负面提示、零样本提示等;如何迭代利用Prompt来使用ChatGPT、GPT-4等大语言模型(LLMs);如何与LLMs模型进行合作完成任务。
Prompt工程能够让我们根据具体应用场景高效的使用LLMs。它包括制作清晰而具体的请求指令,以从语言模型中获取所需的响应。通过仔细地构建Prompt,我们可以引导ChatGPT、GPT-4输出准确有用的响应。在ChatGPT的Prompt构建过程中,有几个基本原则需要了解:
首先,在Prompt的开头提供明确的说明,这有助于为模型设置上下文任务。同时,指定预期答案的格式类型也是有益的。此外,您可以通过在提示符中加入系统消息或角色扮演技术来增强交互。下面是一个使用上述技术的示例提示符:
将该提示与以下提示进行比较:
直观地看,前者将获得更多有用的结果。
您可以通过迭代地改进和实验提示来提高模型响应的质量和相关性,从而创建更有成效的对话。不要害怕直接在ChatGPT上测试潜在的提示。
上一节主要展示了简单的Prompt工程,下面将会更详细地探讨一些基本的提示工程注意事项。
「Prompt关键词对于Prompt工程来说至关重要」。在某些场景下,它是引导出LLMs生成所需答案的关键输入。换种方式来说,以ChatGPT、GPT-4等LLMs能够理解的方式表达问题是非常重要的。例如,如果用户不是某个领域的专家并且不知道表达问题的正确术语,ChatGPT、GPT-4等LLMs给出的答案可能并不及预期。这类似于在不知道正确关键字的情况下在网络上盲目搜索。
对于Prompt来说,附加相关信息可以带来更好的效果,但是过于冗长的附加信息并不一定是最佳的策略。Prompt关键词虽然至关重要,「但最好不要将其视为一种单独的技术,而是将其视为连接其它关键技术的纽带」。
「简洁的Prompt对于LLMs输出的清晰度和精确性非常重要」。精心设计的提示应该是简洁明了的,即为ChatGPT、GPT-4等LLMs提供足够的信息来理解用户的意图,但又不会过于冗长。然而,过于简洁的Prompt也会存在问题,因为这样会导致LLMs的输入存在歧义和误解。Prompt的简介和附加关联信息是存在矛盾的,在实际应用过程中需要多加练习是掌握该项技能最好的方法。
「在Prompt中添加角色分配和目标设置」。例如,如果有人想要让ChatGPT、GPT-4等LLMs为一本关于机器学习的书写一个引言,明确指出LLMs的角色为机器学习领域的专家,该图书的主要受众是机器学习入门的新手,这肯定会产生比较好的输出结果。在Prompt不管是写:“你是一名机器学习领域的资深专家,请您为机器学习这本书写一篇引言,该书的主要受众是机器学习入门的新手”,还是写“作者:机器学习领域资深专家,受众:机器学习入门新手”,这样都可以在给定的场景进行尝试。并且你会发现,大部分情况下给LLMs分配角色,生成的效果相对较好。
目标与角色密切相关。在Prompt中明确引导交互的目标不仅是一个好主意,而且是必要的。
「正负提示是指导模型输出的另一套框架方法」。积极的提示(“这样做”)鼓励模型包含特定类型的输出并生成特定类型的响应。另一方面,负面提示(“不要这样做”)会阻止模型包含特定类型的输出并生成特定类型的响应。使用正面和负面提示可以极大地影响模型输出的方向和质量。例如以下提示:
❝“您将担任一名在东京拥有10年经验的房地产经纪人。您的目标是用一段文字总结港区排名前5的小区。目标受众是没有经验的购房者。” ❞
上述提示的框架本质上是积极的,让我们添加一些措辞来阻止某些输出。针对内容指导的负面提示的一个示例可以是在上面的示例中添加以下内容:
❝“请不要包含距离最近地铁站超过徒步10分小区。” ❞
这个额外的约束应该有助于ChatGPT、GPT-4等LLMs理解它应该具体生成哪些输出。
上一节主要介绍了与LLM交互的基础Prompt策略,本节主要介绍一系列更高级的Prompt工程策略,它们能够让您以更复杂的方式与ChatGPT、GPT-4等LLMs进行交互,同时也是Prompt工程师经常用的策略。
输入/输出Prompt策略涉及定义用户向LLM提供的输入以及LLM作为响应生成的输出 该策略对于Prompt工程至关重要,因为它直接影响ChatGPT、GPT-4等LLMs响应的质量和相关性。例如,用户可能会提供输入提示,要求LLMs为特定任务生成Python脚本,所需的输出将是生成的脚本。具体实例如下所示:
Zero-shot Prompt策略主要是应用在为ChatGPT、GPT-4等LLMs没有任何示例或上下文的情况下生成答案。用户想要快速回答而不提供额外细节时,或者当主题过于笼统以至于示例会人为地限制响应时,此策略可能很有用。例如:
One-shot Prompt策略主要是应用在为ChatGPT、GPT-4等LLMs提供的单个示例或上下文的情况下生成答案。该策略可以引导ChatGPT、GPT-4等LLMs的响应并确保其符合用户的意图。该策略可以这么理解,为模型提供一个样例总比没有样例提供好。例如:
Few-shot Prompt策略主要是应用在为ChatGPT、GPT-4等LLMs提供的一些示例或上下文的情况下生成答案。该策略可以引导ChatGPT、GPT-4等LLMs的响应并确保其符合用户的意图。这里的想法是,多个示例将为模型提供比单个示例更多的引导。例如:
如上所示,Prompt中包含的示例越多,生成的输出就越接近所需的结果。对于Zero-shot,可能不会给出任何水果名称;如果是One-shot,则可能有多个;在Few-shot Prompt的情况下,建议可能完全由水果主题的名称组成。
思维链Prompt策略主要是为ChatGPT、GPT-4等LLMs提供一些示例,帮助完善原始问题并确保得到更准确和全面的答案。思维链 Prompt,是因为提示中包含了一些思路示例。它与X-shot提示技术不同,因为思维链提示的结构是为了引导模型具备批判性思维,并且旨在帮助ChatGPT、GPT-4等LLMs发现可能没有考虑到的新方法。
该技术还引导LLMs输出其批判性推理。思维链Prompt的slogen是“让我们一步一步思考”,它通常附加在提示的末尾,研究结果表明这可以改善生成的结果。首先,我们先考虑一个One-shot的例子:
现在让我们看一下下面的思维链Prompt:
可以发现,通过提供解决此问题的思维过程的示例,并引导LLMs逐步思考,ChatGPT可以将相同的推理应用于我们的问题,并得出正确的答案。
Self-Criticism策略主要引导LLMs评估其输出是否存在潜在的不准确之处或需要改进的地方。该策略可以确保LLMs输出响应信息尽可能准确。它可以帮助用户调整提示并确定为什么他们没有得到符合预期的结果。此类Prompt的示例如下:
❝“请重新审阅您的上述回复。您能发现存在的错误吗?如果存在,请找出这些错误并进行必要的编辑。” ❞
此示例指导LLMs使用自我批评来调试其错误代码:
❝“查看您刚刚生成的代码。目前它没有运行。您是否能够看到可以纠正的语法错误?如果是这样,请找出有问题的代码部分并重新生成它。” ❞
利用 ChatGPT 的自我修复能力是一项不容忽视的Prompt工程技术。
迭代Prompt策略主要是根据初始提示的输出向LLMs提供后续提示。具体地,根据初始输出,通过提出进一步的问题或根据每个连续的响应提出额外的请求来迭代结果。例如,考虑让ChatGPT协助您为正在撰写的一本书创建大纲。第一个提示可能是这样的:
❝"我正在写一本关于时间旅行的书。我还没有确定一个具体的主题。请为该书生成5个建议的主题。对于每项主题,请提供标题和一段关于本书将涵盖的内容的描述。这本书将针对休闲读者。" ❞
假设生成的主题之一如下:
❝标题:“时间悖论:探索时间旅行的复杂性” 描述:“时间悖论”深入研究了时间旅行悖论中令人费解的错综复杂,探索它们所呈现的迷人难题。本书探讨了各种悖论,例如引导悖论、预定悖论和信息悖论等。…… ❞
然后,您可以使用后续提示对此进行迭代:
❝"我会按照《时间悖论:探索时间旅行的复杂性》这个标题进行写。请您帮忙生成本书的章节大纲,包括章节和小节"。 ❞
可能的输出摘录如下:
❝介绍
第一章:Bootstrap 悖论 1.1 Bootstrap悖论的本质
❞
您可以看到在此示例中如何继续进一步迭代。可以使用类似的迭代来让LLMs生成代码:从概述开始,迭代概述以生成模块,在模块上生成以生成函数,最后在函数内生成代码。正如将大问题分解为更小、更易于管理的问题通常是人类成功的方法一样,LLMs擅长以更容易处理的方式完成更大的任务。
正确使用ChatGPT、GPT-4的最佳方式是将其作为初级助理,无论是研究助理、编码助理、问题解决助理,还是您需要的任何助理。认识并培养这种协作氛围可以带来进一步的成功。以下是促进这种合作的一些快速提示。
改进提示制作的一种方法是让 ChatGPT 参与进来。像这样的提示可能会带来有益的结果,例如:
❝我现在可以使用什么提示来进一步帮助您完成此任务? ❞
然后,ChatGPT 应该生成有用提示的建议,您可以使用它来加强其进一步的响应。
模型引导提示主要是让模型给出完成具体任务所需要的信息。这类似告诉某人:“完成该项任务,你需要什么请告诉我”。例如:
❝我希望你编写一个 Python 程序来管理我的客户信息,这些信息存储在Google Sheet中。为了完成这项任务,请询问我您需要回答的任何问题。 ❞
让ChatGPT来决定执行任务所需的信息是有益的,因为它可以消除一些猜测并阻止幻觉。当然,模型引导提示的精心设计的提示可能会让您从ChatGPT中回答许多不相关的问题,因此最初的提示仍然需要经过深思熟虑地编写。