摘要
生成式人工智能 (GenAI) 系统正越来越多地部署在各行各业和研究机构。开发人员和用户通过使用提示或提示工程与这些系统进行交互。虽然提示是一个广泛提及且被研究的概念,但由于该领域的新生,存在相互矛盾的术语和对构成提示的本体论理解不足。本文通过对提示技术的分类和使用案例,构建对提示的结构化理解。作者还提供了 33 个词汇术语的综合词汇表、58 种纯文本提示技术的分类法和 40 种其他模态技术的分类法。作者进一步对自然语言prefix提示进行了整体分析。
一、介绍
基于transformer的LLMs广泛部署在消费级产品、企业内部和研究环境中。通常,这些模型依赖于用户提供输入“提示”来生成输出作为响应。提示可能是文字,比如“Write a poem about trees.”,或采取其他形式:图像、音频、视频或其组合。提示模型的能力,特别是使用自然语言提示的能力,使它们易于交互,并在各种用例中灵活使用。
了解如何使用提示有效地构建、评估和执行其他任务对于使用这些模型至关重要。根据经验,更好的提示会导致各种任务的结果得到改善。关于使用提示来改善结果的文献越来越多,提示技术的数量正在迅速增加。
然而,由于提示是一个新兴领域,人们对提示的使用仍然知之甚少,只有一小部分现有的术语和技术在从业者中广为人知。作者对提示技术进行了大规模的调研,以创建该领域强大的术语和技术资源。
研究范围
作者创建了一个提示技术目录,可以快速理解并轻松实现这些技术,以便开发人员和研究人员进行快速实验。为此,我们将研究限制在离散前缀提示而不是完形填空提示,因为使用前缀提示的现代LLM架构(尤其是仅解码器模型)被广泛使用,并且对消费者和研究人员都有强大的支持。此外,我们将重点放在硬(离散)提示上,而不是软(连续)提示上,并省略了使用基于梯度的更新(即微调)的技术的论文。最后,我们只研究与任务无关的技术。这些决定使对于技术水平较低的读者来说,工作是平易近人的,并保持一个可管理的范围。
章节概述
作者进行了一项基于 PRISMA 流程的机器辅助系统综述以确定 58 种不同的基于文本的提示技术,作者从中创建了一个具有强大的提示术语的分类法(第 1.2 节)。
虽然许多关于提示的文献都集中在纯英语设置上,但作者也讨论了多语言技术(第 3.1 节)。鉴于多模态提示的快速增长,其中提示可能包括图像等媒体,作者还将范围扩展到多模态技术(第 3.2 节)。许多多语言和多模态提示技术是英语纯文本提示技术的直接扩展。
随着提示技术变得越来越复杂,它们已经开始整合外部工具,例如互联网浏览和计算器。作者使用术语“Agent”来描述这些类型的提示技术(第 4.1 节)。
了解如何评估代理和提示技术的输出非常重要,这样可以确保生成准确性并避免幻觉。因此,作者讨论了评估这些输出的方法(第 4.2 节)。作者还讨论了安全性(第 5.1 节)和安全措施(第 5.2 节),设计降低对公司和用户造成伤害风险的提示。
最后,作者在两个案例研究中应用了提示技术(第 6.1 节)。第一个案例,作者针对常用的基准MMLU测试了一系列提示技术。在第二个案例中,作者详细探讨了一个重要的真实用例上的手动提示工程示例,在寻求支持的个人文本中识别出疯狂绝望的信号——自杀危机的首要指标。最后,作者讨论了提示的本质及其最近的发展(第8节)。
1.1 什么是提示?
提示是生成式人工智能模型的输入,用于指导其输出。提示可以由文本、图像、声音或其他媒体组成。提示的一些示例包括:“为会计师事务所的营销活动写一封三段电子邮件”,一张桌子的照片,并附有文字“描述桌子上的一切”,或在线会议的录音,并附有“总结一下”的说明。
提示模板
提示通常是通过提示模板构建的。提示模板是一个包含一个或多个变量的函数,这些变量将被一些媒体(通常是文本)替换以创建提示。然后,可以将此提示视为模板的实例。
请考虑将提示应用于推文的二元分类任务。下面是一个初始提示模板,可用于对输入进行分类。
Classify the tweet as positive or negative:
{TWEET}
数据集中的每条推文都将加入到模板中,生成的提示将被提供给一个 LLM 进行推理。
1.2 术语
1.2.1 提示的组件
提示中包含各种常见组件。作者总结了最常用的组件,并讨论了它们如何适应提示。
a)指令
许多提示以指令或问题的形式发出。这是提示的核心意图,有时简称为“意图”。例如,下面是包含单个指令的提示示例:
Tell me five good books to read.
指令也可以是隐式的,例如在这种one-shot案例中,指令是执行英语到西班牙语的翻译:
Night: Noche
Morning:
b)示例
示例,也称为examples或shots,充当指导 GenAI 完成任务的演示。上面的提示是 One-Shot提示。
c)输出格式
GenAI 通常希望以某些格式输出信息,例如 CSV 或 Markdown 格式。为了方便起见,您可以简单地添加说明,如下所示:
{PARAGRAPH}
Summarize this into a CSV
d)风格说明
风格说明是一种输出格式,用于在风格上而不是在结构上修改输出(第 2.2.2 节)。例如:
Write a clear and curt paragraph about llamas.
e)角色
角色,也称为个性化,是一个经常讨论的组件,可以改进文本的写作和风格(第 2.2.2 节)。例如:
Pretend you are a shepherd and write a limerick about llamas.
f)其他信息
通常需要在提示中包含其他信息。例如,如果指令是写一封电子邮件,您可以包含您的姓名和职位等信息,以便 GenAI 可以正确签署电子邮件。附加信息有时被称为“上下文”,但作者不鼓励使用这个术语,因为它在提示空间中充满了其他含义。
1.2.2 提示词
提示相关的术语正在迅速发展。就目前而言,有许多鲜为人知的定义(例如prompt、prompt engineering)和相互冲突的定义(例如role prompt与persona prompt)。缺乏一致的词汇阻碍了社区清楚地描述所使用的各种提示技术的能力。我们提供了提示社区中使用的术语的强大词汇表(图 1.3)。不太常见的术语请参见(附录 A.2)。为了准确定义提示和提示工程等常用术语,作者整合了许多定义(附录 A.1)来推导出具有代表性的定义。
a)提示
提示是向 GenAI 提供提示的过程,然后生成响应。例如,发送文本块或上传图像的操作构成提示。
b)提示链
提示链(活动:提示链)由连续使用的两个或多个提示模板组成。第一个提示模板生成的提示输出用于参数化第二个模板,一直持续到所有模板用尽为止。
c)提示技术
提示技术是一种蓝图,用于描述如何构建多个提示的提示或动态排序。提示技术可能包含条件或分支逻辑、并行性或其他跨多个提示的体系结构注意事项。
d)提示工程
提示工程是通过修改或更改您正在使用的提示技术来开发提示的迭代过程(图 1.4)。
e)提示工程技术
提示工程技术是一种迭代提示以改进它的策略。在文献中,这通常是自动化技术,但在消费者环境中,用户经常手动执行提示工程。
f)示例
示例是在提示中向模型显示的正在完成的任务的一些示例,从而帮忙大模型理解正在完成的任务。
1.3 提示简史
使用自然语言前缀或提示来引出语言模型行为和响应起源于 GPT-3 和 ChatGPT 时代之前。GPT-2 利用提示,首先被用于生成式 AI 的上下文中。然而,提示的概念之前是相关概念,如控制代码和写作提示。
“提示工程”一词似乎是最近从 Radford 等人 (2021) 中出现的,然后稍晚于 Reynolds 和 McDonell(2021 年)出现。
然而,各种论文在不命名术语的情况下进行提示工程,包括 Schick 和 Schütze (2020a,b);Gao et al. (2021) 用于非自回归语言模型。
一些关于提示的最初工作对提示的定义与当前的使用方式略有不同。例如,考虑 Brown 等人 (2020) 的以下提示:
Translate English to French:
llama
Brown et al. (2020)认为“llama”一词是提示,而“将英语翻译成法语:”是“任务描述”。最近的论文,包括这篇论文,将整个字符串作为提示输入给LLM。
二、Prompt元分析
2.1 系统评价流程
为了可靠地收集本文的来源数据集,作者进行了基于 PRISMA 过程的系统文献综述(图 2.1)。作者在 HuggingFace 上托管此数据集,并在附录 A.3 中展示了该数据集的部分数据。作者的主要数据来源是arXiv、Semantic Scholar和ACL。作者使用与提示和提示工程密切相关的 44 个关键字列表来查询这些数据库(附录 A.4)。
2.1.1 Pipeline
在本节中,将介绍作者的数据抓取管道,其中包括人工审查和 LLM辅助审查。作为建立过滤准则的初始样本,作者基于一组简单的关键字和布尔规则(A.4)从arXiv检索论文。然后,人类标注者根据以下标准标记 arXiv 集中的 1,661 篇文章样本:
-
论文是否提出了一种新的提示技术?(包括)
-
这篇论文是否严格涵盖了硬前缀提示?(包括)
-
这篇论文是否侧重于通过反向传播梯度进行训练?(不包括)
-
对于非文本模态,它是否使用蒙版框架和/或窗口?(包括)
一组 300 篇文章由两名注释者独立审查,同意率为 92%(Krippendorff 的 α = Cohen 的 κ = 81%)。接下来,作者使用 GPT-4-1106-preview 开发一个提示来对剩余的文章进行分类。作者根据 100 个真实注释验证了提示,实现了 89% 的准确率和 75% 的召回率(F 1 为 81%)。将人工和LLM注释相结合,最终生成了 1,565 篇论文。
2.2 基于文本的技术
现在,作者提出了一个包含58种基于文本的提示技术的综合分类本体,分为6个主要类别(图2.2)。虽然有些技术可能适合多个类别,作者将它们放在一个最相关的类别中。
2.2.1 上下文学习(In-Context Learning)
上下文学习是指 GenAI 通过在提示中向他们提供示例和/或相关说明来学习技能和任务的能力,而无需权重更新/再训练。这些技能可以从示例(图 2.4)和/或说明(图 2.5)中学习。请注意,“学习”一词具有误导性。上下文学习可以简单地成为任务规范——技能不一定是新的,并且可能已经包含在训练数据中(图 2.6)。有关该术语用法的讨论,请参阅附录 A.8。目前优化和理解上下文学习也在持续研究中。
Few-Shot Prompting
Few-Shot Prompting是图 2.4 中看到的范式,其中 GenAI 仅用几个示例(示例)学习完成任务。
Few-Shot Learning (FSL)
Few-Shot Learning经常与 Few-Shot Prompting 混为一谈。需要注意的是,FSL 是一种更广泛的机器学习范式,可以通过一些示例来调整参数,而 Few-Shot Prompting 特定于 GenAI 设置中的提示,不涉及更新模型参数。
2.2.1.1 小样本提示设计决策
为提示选择示例是一项艰巨的任务——性能在很大程度上取决于示例的各种因素,并且只有有限数量的示例适合典型的LLM上下文窗口。作者重点介绍了六个独立的设计决策,包括对输出质量产生重大影响的示例的选择和顺序。
- 示例数量
增加提示中的示例数量通常会提高模型性能,尤其是在较大的模型中。然而,在某些情况下,可能20 个多示例也可以。
- 示例排序
示例的顺序会影响模型行为。在某些任务中,示例顺序可能会导致准确性从低于 50% 到 90%+ 不等。
- 示例标签分布
与传统的监督机器学习一样,提示中示例标签的分布会影响行为。例如,如果包含来自一个类的 10 个示例和另一个类的 2 个示例,这可能会导致模型偏向于第一个类。
- 示例标签质量
尽管多个示例具有普遍的好处,但严格有效的演示的必要性尚不清楚。一些工作表明,标签的准确性无关紧要——为模型提供带有错误标签的示例可能不会对性能产生负面影响。然而,在某些设置下,对性能有重大影响。较大的模型通常更擅长处理不正确或不相关的标签。
讨论这个因素很重要,因为如果要从可能包含不准确的大型数据集自动构建提示,则可能需要研究标签质量如何影响结果。
- 示例格式
示例的格式也会影响性能。最常见的格式之一是“Q:{input},A:{label}”,但最佳格式可能因任务而异;可能值得尝试多种格式,看看哪种效果最好。
- 示例相似性
选择与测试样本相似的示例通常有利于性能。然而,在某些情况下,选择更多样化的样本可以提高性能。
2.2.1.2 Few-shot 提示技术
考虑到所有这些因素,Few-Shot Prompting 可能很难有效实施。现在,作者研究了在监督环境中进行 Few-Shot Prompting 的技术。集成方法也可以使 Few-Shot Prompting 受益,但我们单独讨论它们(第 2.2.5 节)。
假设我们有一个训练数据集 ,其中包含多个输入 和多个输出 ,对GenAI进行few-shot prompt而不是梯度更新。假设测试的时候,prompt根据 动态生成,prompt模板如下所示:
K-最近邻 (KNN)是一种选择类似于 示例的算法。虽然有效,但在提示生成过程中使用 KNN 可能会占用大量时间和资源。
Vote-K是选择与测试样本相似的示例的另一种方法。在一个阶段中,模型为标注人员提供了有用的未标记候选示例。在第二阶段,标记池用于 Few-Shot Prompting。Vote-K 还确保新添加的示例与现有示例具有足够的差异,以增加多样性和代表性。
自生成情境学习 (SG-ICL)利用 GenAI 自动生成示例。虽然在训练数据不可用时优于零样本场景,但实际上,生成的样本不如实际数据有效。
提示挖掘是通过大型语料库分析在提示(有效的提示模板)中发现最佳“中间词”的过程。例如,语料库中可能存在更频繁出现的类似内容,而不是使用常见的“Q:A:”格式来表示few-shot提示。语料库中更频繁出现的格式可能会提高提示性能。
更复杂的技术,如LENS、UDR和主动示例选择Active Example Selection 分别利用迭代过滤、嵌入和检索以及强化学习。
2.2.2 Zero-Shot
与 Few-Shot Prompting 相比,Zero-Shot Prompting 使用零示例。有许多众所周知的独立零样本技术,以及零样本技术与另一个概念(例如思想链)相结合,我们将在后面讨论(第 2.2.3 节)。
Role Prompting ,也称为persona prompting,在提示中为 GenAI 分配了特定角色。例如,用户可能会提示它像“麦当娜”或“旅行作家”一样行事。这可以为开放式任务创造更理想的输出,并在某些情况下提高基准测试的准确性。
Style Prompting是指在提示中指定所需的风格、语气或流派,以塑造 GenAI 的输出。使用角色提示可以实现类似的效果。
Emotion Prompting将与人类心理相关的短语(例如,“这对我的职业生涯很重要”)纳入提示中,这可能会提高LLM基准测试和开放式文本生成的性能。
Ststem 2 Attention(S2A)首先要求LLM 重写提示并删除与问题无关的任何信息。然后,它将此新提示传递给LLM 以检索最终响应。
SimToM擅长处理多个人或物体的复杂问题。给定问题,它试图建立一个人知道的一组事实,然后仅根据这些事实回答问题。这是一个双提示过程,可以帮助消除提示中不相关信息的影响。
Rephrase and Respond (RaR)指示LLM在生成最终答案之前重新表述和扩展问题。例如,它可能会在问题中添加以下短语:“改写和扩展问题,然后回答”。这一切都可以一次性完成,也可以将新问题传递给单独的问题LLM。
Re-reading (RE2)除了重复问题外,还在提示中添加了短语“再读一遍问题:”。虽然这是一种如此简单的技术,但它在推理基准方面显示出改进,尤其是对于复杂的问题。
Self-Ask 提示LLMs首先决定他们是否需要针对给定提示提出后续问题。如果是这样,LLM则生成这些问题,然后回答它们,最后回答原始问题。
2.2.3 Thought生成
思想生成包括一系列技术,这些技术促使人们在LLM解决问题时阐明其推理。
Chain-of-Thought(CoT)Prompting利用few-shot提示来鼓励在LLM给出最终答案之前表达其思考过程,这种技术被称为思维链。它已被证明可以显着提高LLM数学和推理任务的表现。在 Wei et al. (2022) 中,提示包括一个问题、推理路径和正确答案的示例(图 2.8)。
2.2.3.1 Zero-Shot-CoT
最直接的 CoT 版本是zero-shot示例,例如向提示中加入“Let’s think step by step.”。其他建议的产生思想的短语包括“Let’s work this out in a step by step way to be sure we have the right answer”和“First, let’s think about this logically”。Zero-Shot CoT 方法很有吸引力,因为它们不需要示例,并且通常与任务无关。
后退提示(Step-Back Prompting)是对 CoT 的修改,在LLM推理之前,首先询问有关相关概念或事实的通用、高级问题。这种方法显著提高了 PaLM2L 和 GPT-4 的多个推理基准的性能。
类比提示(Analogical Prompting)类似于 SG-ICL,可以自动生成示例,包括 CoT ,在数学推理和代码生成任务上表示突出。
Thread-of-Thought (ThoT) Prompting由一种改进的 CoT 推理思维诱导器组成。它没使用“Let’s think step by step.”,而是使用“Walk me through this context in manageable parts step by step, summarizing and analyzing as we go.”。这种思维诱导器在问答和检索环境中效果很好,尤其是在处理大型复杂上下文时。
表格思维链Tabular Chain-of-Thought (Tab-CoT)由一个 Zero-Shot CoT 提示组成,该提示将LLM输出推理结果作为Markdown表格形式。这种表格设计LLM能够改进结构,从而改进其输出的推理。
2.2.3.2 Few-shot CoT
Few-shot技术提供了LLM多个示例,其中包括思维链,这可以显著提高性能,这种技术有时被称为 ManualCoT或 Golden CoT。
对比CoT 提示(Contrastive CoT Prompting)在CoT提示中添加一个错误和一个正确的示例,目的是让LLM知道如何拒绝推理。这种方法在算术推理和事实 QA 等领域显示出显着改进。
不确定路由CoT 提示(Uncertainty-Routed CoT Prompting)对多个 CoT 推理路径进行采样,然后在高于特定阈值(根据验证数据计算)时选择多数。如果没有,它会贪婪地采样并选择该响应。这种方法证明了 GPT4 和 Gemini Ultra 模型的 MMLU 基准测试上有所改进。
基于复杂度提示(Complexity-based Prompting)对 CoT 有两项重大修改。首先,它根据问题长度或所需的推理步骤等因素选择复杂的示例进行注释并包含在提示中。其次,在推理过程中,它对多个推理链(答案)进行采样,并在超过一定长度阈值的链中使用多数票,前提是推理时间越长,答案质量越高。该技术在三个数学推理数据集上显示出改进。
主动提示(Active Prompting)从一些训练问题/示例开始,要求他们LLM解决它们,然后计算不确定性(在这种情况下是分歧),并要求人类注释者重写具有最高不确定性的示例。
思维记忆提示(Memory-of-Thought Prompting)利用未标记的训练示例在测试时构建 Few-Shot CoT 提示。在测试时间之前,它使用 CoT 对未标记的训练示例执行推理。在测试时,它会检索与测试样本类似的实例,这种技术在算术、常识和事实推理等基准测试方面取得了实质性的改进。
自动思维链提示 (Auto-CoT) 使用 Zero-Shot 提示自动生成思维链,然后,使用生成的思维链为测试样本构建 Few-Shot CoT 提示。
2.2.4 分解
重要的研究集中在将复杂的问题分解为更简单的子问题。对于人类和 GenAI 来说,这是一种有效的解决问题的策略。一些分解技术类似于思维诱导技术,例如 CoT,它通常自然地将问题分解为更简单的组件。然而,明确地分解问题可以进一步提高LLMs解决问题的能力。
从最少到最多提示(Least-to-Most Prompting)首先提示 LLM 将给定问题分解为子问题而不求解它们。然后,按顺序求解它们,每次都将模型响应附加到提示中,直到得出最终结果。这种方法在涉及符号操作、组合泛化和数学推理的任务中显示出显着的改进。
分解提示 (DECOMP) Few-Shot 提示LLM 向它展示如何使用某些功能。这些可能包括字符串拆分或互联网搜索等内容;这些通常作为单独的LLM调用实现。鉴于此,它LLM将其原始问题分解为子问题,并将其发送到不同的函数。在某些任务上,它显示出比“从少到多”提示更高的性能。
计划与解决提示(Plan-and-Solve Prompting)由改进的 Zero-Shot CoT 提示组成,“Let’s first understand the problem and devise a plan to solve it. Then, let’s carry out the plan and solve the problem step by step“。这种方法在多个推理数据集上生成比标准 Zero-Shot-CoT 更强大的推理过程。
思维树ToT(Tree-of-Thought)也称为 Tree of Thoughts,从初始问题开始,创建了一个树状搜索问题,然后以思想的形式生成多个可能的步骤(如来自 CoT)。它会朝着解决问题方向来评估每个当前步骤,然后决定继续哪些步骤,然后不断创建更多想法,从而创建一个树状搜索问题。ToT 对于需要搜索和规划的任务特别有效。
Recursion-of-Thought类似于常规 CoT。但是,每当它在推理链的中间遇到一个复杂的问题时,它都会将这个问题发送到另一个提示/LLM调用中。完成此操作后,答案将插入到原始提示中。通过这种方式,它可以递归地解决复杂的问题,包括那些可能在最大上下文长度上运行的问题。这种方法在算术和算法任务方面有所改进。虽然使用微调来实现输出一个特殊的令牌,将子问题发送到另一个提示中,但它也只能通过提示来完成。
Program-of-Thoughts 使用像Codex类似的 LLMs 生成编程代码作为推理步骤。代码解释器执行这些步骤以获得最终答案。它在数学和编程相关任务中表现出色,但在语义推理任务中效果较差。
忠实思维链(Faithful Chain-of-Thought)生成一个同时具有自然语言和符号语言(例如 Python)推理的 CoT,就像 Program-of-Thoughts 一样。但是,它也以依赖于任务的方式使用不同类型的符号语言。
思维提纲(Skeleton-of-Thought)专注于通过并行化加快应答速度。给定一个问题,它提示创建LLM答案的提纲,从某种意义上说,也是要解决的子问题。然后,并行地,它将这些问题发送到一个LLM,并将所有输出连接起来以获得最终响应。
2.2.5 集成
在 GenAI 中,集成是使用多个提示来解决同一问题,然后将这些响应聚合到最终输出中的过程。在许多情况下,多数投票(选择最频繁的响应)用于生成最终输出。集成技术可以减少输出的LLM方差,并且通常可以提高准确性,但代价是增加获得最终答案所需的模型调用次数。
Demonstration Ensembling (DENSE)创建多个小样本提示,每个提示都包含来自训练集的不同示例子集。接下来,它聚合它们的输出以生成最终响应。
混合推理专家(Mixture of Reasoning Experts (MoRE))通过对不同的推理类型(例如用于事实推理的检索增强提示、用于多跳和数学推理的思维链推理以及用于常识推理的生成知识提示)使用不同的推理专家来创建一组不同的推理专家。所有专家的最佳答案都是根据协议分数选择的。
最大互信息(Max Mutual Information Method)创建多个具有不同样式和示例的提示模板,然后选择最大化提示和LLM输出之间相互信息的模板作为最佳模板。
自洽性(Self-Consistency)是基于直觉,即多种不同的推理路径可以导致相同的答案。这种方法首先提示多次LLM执行 CoT,关键是使用非零温度以引发不同的推理路径。接下来,它使用对所有生成的响应的多数投票来选择最终响应。自洽性在算术、常识和符号推理任务方面有所改进。
通用自洽性(Universal Self-Consistency)与自洽性类似,不同之处在于它通过以编程方式计算多数响应的发生频率来选择多数响应,而是将所有输出插入到选择多数答案的提示模板中。这对于自由格式文本生成以及不同提示输出相同答案可能略有不同的情况很有帮助。
使用多CoTs进行元推理(Meta-Reasoning over Multiple CoTs)类似于通用的自洽性;它首先为给定问题生成多个推理链(但不一定是最终答案)。接下来,它将所有这些链插入到单个提示模板中,然后从它们生成最终答案。
DiVeRSe为给定问题创建多个提示,然后对每个提示执行自一致性,生成多个推理路径。他们根据其中的每个步骤对推理路径进行评分,然后选择最终响应。
基于一致性的自适应提示(Consistency-based Self-adaptive Prompting(COSP))通过在一组示例上运行具有自一致性的零样本 CoT,然后选择要包含在最终提示中的高一致性输出子集作为示例来构建 Few-Shot CoT 提示。它再次执行此最终提示的自一致性。
通用自适应提示(Universal Self-Adaptive Prompting (USP))建立在 COSP 的成功基础上,旨在使其可推广到所有任务。USP 利用未标记的数据来生成示例,并使用更复杂的评分功能来选择它们。
提示释义(Prompt Paraphrasing)通过改变一些措辞来改变原始提示,同时仍然保持整体含义。它实际上是一种数据增强技术,可用于生成集成提示。
2.2.6 自我批评
在创建 GenAI 系统时,LLMs批评他们自己的输出可能很有用。这可能只是一个判断(例如,这个输出是否正确),或者LLM可以提示提供反馈,然后用于改进答案。已经开发了许多产生和整合自我批评的方法。
自我校准(Self-Calibration)首先提示回答LLM一个问题。然后,它会生成一个新提示,其中包括问题、LLM答案和询问答案是否正确的附加说明。这对于在决定何时接受或修改原始答案时衡量申请LLMs时的置信度很有用。
Self-Refine 是一个迭代框架,给定 LLM的初始答案,它会提示相同的LLM人提供对答案的反馈,然后提示 LLM 根据反馈改进答案。此迭代过程一直持续到满足停止条件(例如,达到的最大步数)。Self-Refine 在一系列推理、编码和生成任务方面表现出了改进。
逆转思维链 (RCoT)首先提示LLMs根据生成的答案重建问题。然后,它会在原始问题和重建问题之间生成细粒度的比较,以检查是否存在任何不一致之处。然后将这些不一致转换为反馈,以便LLM修改生成的答案。
自我验证(Self-Verification)使用思维链 (CoT) 生成多个候选解决方案。然后,它通过屏蔽原始问题的某些部分并要求根据LLM问题的其余部分和生成的解决方案来预测它们,从而对每个解决方案进行评分。这种方法在八个推理数据集上显示出改进。
验证链 (COVE)首先使用 LLM 来生成给定问题的答案。然后创建一个相关问题列表,以帮助验证答案的正确性。每个问题都由 LLM回答,然后将所有信息提供给 LLM 以产生最终修改后的答案。这种方法在各种问答和文本生成任务中显示出改进。
累积推理(Cumulative Reasoning)首先生成回答问题的几个潜在步骤。然后,会对它们进行LLM评估,决定接受或拒绝这些步骤。最后,它检查它是否得出了最终答案。如果是这样,它会终止该过程,否则它会重复该过程。这种方法在逻辑推理任务和数学问题方面得到了改进。
2.3 提示技术用法
正如我们刚才所看到的,存在许多基于文本的提示技术。然而,只有一小部分方法被用于研究和工业界。作者通过评估数据集中其他论文的引用次数来衡量技术使用情况。作者这样做的假设是,关于提示的论文更有可能实际使用或评估所引用的技术。作者从数据集中以这种方式引用的前 25 篇论文绘制图表,发现其中大多数都提出了新的提示技术(图 2.11)。Few-Shot 和 Chain-of-Thought 提示的引用流行率并不奇怪,有助于建立了解其他技术流行情况的基线。
2.3.1 Benchmarks
在prompt研究方面,当研究人员提出一项新技术时,他们通常会在多个模型和数据集上对其进行基准测试。这对于证明该技术的实用性并检查它如何在模型之间转换非常重要。
为了让提出新技术的研究人员更容易知道如何对它们进行基准测试,作者定量检查了正在使用的模型(图2.9)和基准数据集(图2.10)。同样,作者通过数据集中的论文引用基准数据集和模型的次数来衡量使用情况。
为了找出正在使用的数据集和模型,作者使用 GPT-4-1106-preview 从数据集中的论文正文中提取任何提到的数据集或模型。之后,作者手动过滤掉了不是模型或数据集的结果。引文计数是通过在Semantic Scholar上搜索最终列表中的项目获得的。
2.4 提示工程
除了调研提示技术外,作者还回顾了用于自动优化提示的提示工程技术,还讨论了一些使用梯度更新的技术,因为提示工程技术的集合比提示技术的集合小得多。
元提示(Meta Prompting)是提示生成LLM或改进提示或提示模板的过程。
自动提示(AutoPrompt) 使用冻结LLM和提示模板,其中包括一些“触发令牌”,其值在训练时通过反向传播进行更新,这是软提示的一个版本。
自动提示工程师(Automatic Prompt Engineer (APE))使用一组示例来生成 ZeroShot 指令提示。它生成多个可能的提示,对它们进行评分,然后创建最佳提示的变体(例如,通过使用提示释义)。它会迭代此过程,直到达到一些目标。
免梯度指令提示搜索(Gradientfree Instructional Prompt Search(GrIPS))类似APE,但使用一组更复杂的操作,包括删除、添加、交换和释义,以创建起始提示的变体。
使用文本梯度进行提示优化 (ProTeGi)是一种独特的方法,通过多步骤过程改进提示模板的提示工程。首先,它通过模板传递一批输入,然后将输出、基本事实和提示传递到另一个批评原始提示的提示中。它从这些批评中生成新的提示,然后使用bandit算法来选择一个。ProTeGi 展示了对 APE 和 GRIPS 等方法的改进。
RLPrompt 使用一个解冻模块的冻结LLM模块。它使用该LLM来生成提示模板,对数据集上的模板进行评分,并使用软 Q-Learning 更新解冻模块。有趣的是,该方法经常选择语法上乱码的文本作为最佳提示模板。
对话包含的策略梯度离散提示优化 (DP2O)可能是最复杂的提示工程技术,涉及强化学习、自定义提示评分函数和LLM对话以构建提示。
2.5 答案工程
答案工程是开发或选择从LLM输出中提取精确答案的算法的迭代过程。要了解答案工程的必要性,请考虑一个二元分类任务,其中标签为“Hate Speech”和“Not Hate Speech”。提示模板可能如下所示:
当将仇恨言论样本放入模板时,它可能会有诸如“It’s hate speech”、“Hate Speech”甚至“Hate speech, because it uses negative language against a racial group”之类的输出。响应格式的这种差异很难一致地解析;改进的提示会有所帮助,但仅限于一定程度。
答案工程中有三种设计决策,即答案空间的选择、答案形状和答案提取器(图 2.12)。Liu et al. (2023b) 将前两个定义为答案工程的必要组成部分,作者附加了第三个。作者认为答案工程与提示工程不同,但又非常密切相关;这些过程通常是串联进行的。
2.5.1 答案shape
答案的shape是它的物理格式。例如,它可以是token、token片段,甚至是图像或视频。有时,将 LLM 的输出shape限制为单个token(如二分类)很有用。
2.5.2 答案space
答案的范围是LLM所包含的值域,可能是所有token,或者在二分类任务中,可能只是两个可能的token。
2.5.3 答案抽取器
在无法完全控制答案空间(例如面向LLMs消费者)的情况下,或者预期答案可能位于模型输出中的某个位置,可以定义一个规则来提取最终答案。这个规则通常是一个简单的函数(例如正则表达式),但也可以使用单独的LLM函数来提取答案。
Verbalizer 通常用于监督任务,一个Verbalizer可以映射为一个token、token片段或其他类型的输出到标签,反之亦然。例如,如果我们希望一个模型来预测一条推文是正面的还是负面的,我们可以提示它输出“+”或“-”,然后Verbalizer会将这些标记序列映射到适当的标签。Verbalizer的选择是答案工程的一个组成部分。
Regex 如前所述,正则表达式通常用于提取答案。它们通常用于搜索标签的第一个实例。但是,根据输出格式和是否生成 CoTs,可能最好搜索最后一个实例。
Separate LLM 有时输出非常复杂,以至于正则表达式无法始终如一地工作。在这种情况下,单独LLM评估输出并提取答案可能很有用。
三、超越英文文本提示
用英文文本提示 GenAI 是目前的主要交互方法。使用其他语言或通过不同模式进行提示通常需要特殊技术才能实现类似的性能。在此背景下,作者讨论了多语言和多模态提示的领域。
3.1 多语言
最先进的 GenAI 通常主要使用英语数据集进行训练,导致英语以外的语言,尤其是资源不足的语言的输出质量存在显着差异。因此,出现了各种多语言提示技术,试图提高模型在非英语环境中的性能。
Translate First Prompting 可能是最简单的策略,它首先将非英语输入示例翻译成英语。通过将输入翻译成英语,模型可以利用其英语优势来更好地理解内容。
3.1.1 Chain-of-Thought(CoT)
CoT提示可以扩展到多语言:
XLT (Cross-Lingual Thought)提示使用由六个独立指令组成的提示模板,包括角色分配、跨语言思维和 CoT。
Cross-Lingual Self Consistent Prompting (CLSP) 引入了一种集成技术,该技术构建不同语言的推理路径来回答同一个问题。
3.1.2 上下文学习
上下文学习可以扩展到多语言:
X-InSTA提示 探索了三种不同的方法,用于将上下文示例与分类任务的输入句子对齐:使用与输入语义相似的示例(语义对齐)、与输入共享相同标签的示例(基于任务的对齐),以及语义和基于任务的对齐的组合。
In-CLT (Cross-lingual Transfer)提示 利用源语言和目标语言来创建上下文示例,这与使用源语言示例的传统方法不同。这种策略有助于激发多语言的跨语言认知能力LLMs,从而提高跨语言任务的表现。
3.1.3 上下文样本选择
上下文中的示例选择严重影响了 LLMs 的性能。找到语义上与源文本相似的上下文示例非常重要。然而,使用语义上不同(特殊)的示例也被证明可以提高性能。在纯英语环境中也存在同样的对比。此外,在处理模棱两可的句子时,选择具有多义词或罕见词义的示例可能会提高性能。
PARC (Prompts Augmented by Retrieval Crosslingually)引入了一个从高资源语言中检索相关示例的框架。该框架专门设计用于提高跨语言传输性能,特别是对于资源匮乏的目标语言。Li et al. (2023g) 将这项工作扩展到孟加拉语。
3.1.4 Prompt模板语言选择
在多语言提示中,提示模板的语言选择会显著影响模型性能。
英文提示模板
英文提示模板在多语言任务中,通常比任务中涉及到的语言更有效。这可能是由于在预训练期间LLM英语数据占主导地位。Lin et al. (2022) 认为这可能是由于与训练前数据和词汇量高度重叠。同样,Ahuja 等人(2023 年)强调了创建任务语言模板时的翻译错误如何以不正确的语法和语义的形式传播,从而对任务性能产生不利影响。此外,Fu et al. (2022) 比较了语言内(任务语言)提示和跨语言(混合语言)提示,发现跨语言方法更有效,可能是因为它在提示中使用了更多的英语,从而有助于从模型中检索知识。
任务语言提示模板
相比之下,许多多语言提示基准测试,如 BUFFET 或 LongBench将任务语言提示用于特定于语言的用例。Muennighoff et al. (2023) 专门研究了构建母语提示时的不同翻译方法。他们证明了人工翻译的提示优于机器翻译的提示。原生或非原生模板性能可能因任务和模型而异。因此,这两种选择都不会永远是最好的方法。
3.1.5 用于机器翻译的提示
关于利用 GenAI 促进准确和细致入微的翻译,有大量研究。尽管这是提示的特定应用,但其中许多技术对于多语言提示更广泛地很重要。
Multi-Aspect Prompting and Selection (MAPS) 模仿人工翻译过程,该过程涉及多个准备步骤以确保高质量的输出。该框架从源句子的知识挖掘开始(提取关键字和主题,并生成翻译示例),它整合了这些知识以生成多种可能的翻译,然后选择最佳翻译。
Chain-of-Dictionary (CoD) 首先从源短语中提取单词,然后通过从字典中检索自动列出它们在多种语言中的含义(例如英语:“apple”,西班牙语:“manzana”)。然后,他们将这些字典短语附加到提示符中,提示符要求 GenAI 在翻译过程中使用它们。
Dictionary-based Prompting for Machine Translation (DiPMT) 的工作方式与 CoD 类似,但仅给出源语言和目标语言的定义,并且格式略有不同。
Decomposed Prompting for MT (DecoMT) 将源文本分成几个块,并使用few-shot提示分别进行翻译。然后,使用这些翻译和块之间的上下文信息来生成最终翻译。
3.1.5.1 人机交互
Interactive-Chain-Prompting(ICP) 通过首先要求 GenAI 生成有关要翻译的短语中任何歧义的子问题来处理翻译中的潜在歧义。人类随后回答这些问题,系统将这些信息包括在内,以生成最终翻译。
Iterative提示 在翻译过程中也涉及人类。首先,他们会提示LLMs生成翻译草稿,通过集成从自动检索系统或直接人工反馈获得的监督信号,进一步完善了此初始版本。
3.2 多模态
随着 GenAI 模型超越基于文本的领域,新的提示技术应运而生。这些多模态提示技术通常不仅仅是基于文本的提示技术的应用,而是通过不同模式实现的全新想法。现在,作者扩展了基于文本的分类法,以包括基于文本的提示技术的多模态类似物以及全新的多模态技术的混合。
3.2.1 图像提示
图像形式包括照片、图画甚至文本截图等数据。图像提示可以指包含图像或用于生成图像的提示。常见任务包括图像生成、标题生成、图像分类和图像编辑。现在,将介绍用于此类应用程序的各种图像提示技术。
Prompt Modifiers只是附加到提示以更改生成图像的单词。经常使用诸如“中等”(例如“在画布上”)或“照明”(例如“光线充足的场景”)等组件。
Negative Prompting 允许用户对提示中的某些术语进行数字加权,以便模型比其他术语更重视/更少考虑它们。例如,通过对术语“坏手”和“额外数字”进行负权重,模型可能更有可能生成解剖学上准确的手。
3.2.1.1 多模态上下文学习
ICL 在基于文本的环境中的成功促进了对多模态 ICL 的研究。
Paired-Image提示 模型需要两张图像:一个是转换之前,一个是转换之后。然后,向模型显示一个新图像,它将对其执行演示的转换,既可以通过文本指令完成,也可以没有文本指令来完成。
Image-as-Text提示 生成图像的文本描述,这允许在基于文本的提示中轻松包含图像(或多个图像)。
3.2.1.2 多模态CoT
CoT 已以各种方式扩展到图像域。一个简单的例子是包含数学问题图像的提示,并附有文本说明“Solve this step by step”。
Duty Distinct Chain-of-Thought (DDCoT) 将从最少到最多的提示扩展到多模态设置,创建子问题,然后解决它们并将答案组合成最终答案。
Multimodal Graph-of-Thought将Graph-of-Thought扩展到多模态设置。GoT-Input 还使用两步原理然后回答过程。在推理时,输入提示用于构建思维图,然后与原始提示一起使用以生成回答问题的理由。当图像与问题一起输入时,使用图像标题模型生成图像的文本描述,然后在思维图构建之前将其附加到提示中以提供视觉上下文。
Chain-of-Images (CoI)是思维链提示的多模态扩展,它生成图像作为其思维过程的一部分。他们使用提示“Let’s think image by image”来生成 SVG,然后模型可以使用这些 SVG 进行视觉推理。
3.2.2 音频提示
提示也已扩展到音频模式。音频 ICL 的实验产生了不同的结果,一些开源音频模型无法执行 ICL。然而,其他结果确实显示了音频模型的 ICL 能力。音频提示目前还处于早期阶段,但作者预计未来会看到各种提示技术的提出。
3.2.3 视频提示
提示也已扩展到视频模式,用于文本到视频的生成、视频编辑和视频到文本生成。
3.2.3.1 视频生成技术
在提示模型生成视频时,可以使用各种形式的提示作为输入,并且通常采用几种与提示相关的技术来增强视频生成。与图像相关的技术,例如提示修饰符,通常可用于视频生成。
3.2.4 分段提示
提示也可用于分割(例如语义分割)。
3.2.5 3D提示
提示也可用于 3D 模态,例如在 3D 对象合成中、3D 表面纹理和 4D 场景生成(动画 3D 场景),其中输入提示模式包括文本、图像、用户标注(边界框、点、线)和 3D 对象。
四、Prompt扩展
到目前为止,我们讨论的技术可能非常复杂,包含许多步骤和迭代。但是,我们可以通过添加外部工具(比如agent)来进一步提示,复杂的评估算法可以判断输出的LLM有效性。
4.1 Agents
随着LLMs能力的迅速提高,公司和研究人员也探索了如何让他们利用外部系统。这是由于数学计算、推理和事实性等领域的缺点LLMs所必需的。这推动了提示技术的重大创新;这些系统通常由提示和提示链驱动,这些提示和提示链经过大量设计,允许类似代理的行为。
Agent的定义
在 GenAI 的上下文中,我们将agent定义为 GenAI 系统,它通过与 GenAI 本身之外的系统互动的操作来服务于用户的目标。这个 GenAI 通常是一个 LLM.举个简单的例子,考虑一个LLM负责解决以下数学问题的 IT:
如果正确提示,可以LLM输出字符串 CALC(4,939*.39)。可以提取此输出并放入计算器中以获得最终答案。
这是一个代理示例:LLM输出文本,然后使用下游工具。代理LLMs可能涉及单个外部系统(如上所述),或者它们可能需要解决路由问题,以选择使用哪个外部系统。除了行动之外,此类系统还经常涉及记忆和计划。
代理的示例包括LLMs可以进行 API 调用以使用计算器等外部工具,LLMs可以输出导致在类似健身房中采取行动的字符串环境,以及更广泛地说,LLMs编写和记录计划、编写和运行代码、搜索互联网等。OpenAI 助手 OpenAI、LangChain Agents 和 LlamaIndex Agents 是其他例子。
4.1.1 工具使用agent
工具使用是 GenAI 代理的关键组成部分。符号(例如计算器、代码解释器)和神经(例如 separate LLM)外部工具都是常用的。工具有时可能被称为专家或模块。
Modular Reasoning, Knowledge, and Language (MRKL) System是最简单的代理配方之一。它包含一个LLM路由器,提供对多个工具的访问。路由器可以拨打多个电话以获取天气或当前日期等信息。然后,它将这些信息组合在一起以生成最终响应。Toolformer、Gorilla、Act-1等都提出了类似的技术,其中大部分涉及一些微调。
Self-Correcting with Tool-Interactive Critiquing (CRITIC) 首先生成对提示的响应,没有外部调用。然后,同样LLM批评此响应可能存在错误。最后,它相应地使用工具(例如互联网搜索或代码解释器)来验证或修改部分响应。
4.1.2 代码生成agent
编写和执行代码是许多代理的另一个重要能力。
Program-aided Language Model (PAL) 将问题直接翻译成代码,将其发送给 Python 解释器以生成答案。
Tool-Integrated Reasoning Agent (ToRA) 类似于 PAL,但它不是单一的代码生成步骤,而是在必要时交错代码和推理步骤以解决问题。
TaskWeaver 也类似于PAL,将用户请求转换为代码,但也可以使用用户定义的插件。
4.1.3 基于观察的agent
一些智能体可以通过与玩具环境交互来解决问题。这些基于观察的代理可以接收观察结果并插入到其提示中。
Reasoning and Acting (ReAct) 在被赋予要解决的问题时产生思想、采取行动并接受观察(并重复此过程)。所有这些信息都插入到提示中,因此它具有过去的想法、行动和观察结果的记忆。
Reflexion 建立在 ReAct 之上,增加了一层内省。它获得行动和观察的轨迹,对成功/失败进行评估。然后,对它所做的事情和出了什么问题进行反思。此反射作为工作内存添加到其提示符中,并且该过程重复进行。
4.1.3.1 Lifelong Learning Agents
集成 LLM Minecraft代理的工作产生了令人印象深刻的结果,代理能够在他们在这个世界中导航时获得新技能开放世界视频游戏。作者认为这些代理不仅仅是代理技术在Minecraft中的应用,而是可以在需要终身学习的现实世界任务中探索的新颖代理框架。
Voyager由三个部分组成。首先,它为自己提出了要完成的任务,以便更多地了解世界。其次,它生成代码来执行这些操作。最后,它保存了这些操作,以便在以后有用时作为长期记忆系统的一部分进行检索。该系统可以应用于代理需要探索工具或网站并与之交互的现实世界任务(例如渗透测试、可用性测试)。
Ghost in the Minecraft (GITM) 从一个任意目标开始,递归地将其分解为子目标,然后通过生成结构化文本(例如“equip(sword)”)而不是编写代码来迭代地计划和执行行动。GITM 使用 Minecraft 物品的外部知识库来帮助分解以及过去经验的记忆。
4.1.4 Retrieval Augmented Generation (RAG)
在 GenAI 代理的上下文中,RAG 是一种范式,其中信息从外部源检索并插入到提示符中。这可以提高知识密集型任务的表现。当检索本身被用作外部工具时,RAG 系统被视为代理。
Verify-and-Edit 通过生成多个思维链,然后选择一些进行编辑,从而提高了自洽性。他们通过检索相关(外部)信息来做到这一点然后选择一些要编辑的 CoT,并允许它们LLM相应地增强它们。
Demonstrate-Search-Predict 首先将问题分解为子问题,然后使用查询来解决它们,并将它们的回答组合成最终答案。它使用少样本提示来分解问题并合并响应。
Interleaved Retrieval guided by Chain-ofThought (IRCoT)是一种交错 CoT 和检索的多跳问答技术。IRCoT 利用 CoT 来指导检索和检索哪些文档,以帮助规划 CoT 的推理步骤。
Iterative Retrieval Augmentation 像前瞻性主动检索增强生成(FLARE)和模仿、检索、释义(IRP),在长格式生成过程中多次执行检索。此类模型通常执行迭代的三步过程:1)生成一个临时句子,作为下一个输出句子的内容计划;2)使用临时句作为查询来检索外部知识;3)将检索到的知识注入临时句子中,以创建下一个输出句子。与长格式生成任务中提供的文档标题相比,这些临时句子已被证明是更好的搜索查询。
4.2 评估
LLMs在提取和推理信息并理解用户意图方面表现优异,因此通常使用这些LLMs来作为评估者。例如,可以根据提示中定义的一些指标,提示 LLM 评估一篇文章的质量,甚至评估之前LLM的输出的质量。作者描述了评估框架的四个组成部分,这些组成部分对于建立强大的评估者非常重要:提示技术(如第 2.2 节所述)、评估的输出格式、评估管道的框架以及其他一些方法设计决策。
4.2.1 提示技术
评估器提示中使用的提示技术(例如,简单指令与 CoT)有助于构建强大的评估器。评估提示通常受益于常规的基于文本的提示技术,包括角色、任务说明、评估标准的定义和上下文示例。在附录 A.5 中找到完整的技术列表。
In-Context Learning 经常用于评估提示,就像它在其他应用程序中的使用方式一样。
基于角色的评估是改进评估和多样化评估的有用技术。通过创建具有相同评估指令但角色不同的提示,可以有效地生成不同的评估。此外,角色可以在多智能体环境中使用,在这种LLMs环境中,辩论要评估的文本的有效性。
思维链提示 可以进一步提高评估绩效。
Model-Generated Guidelines提示 LLM 生成评估指南。这减少了因评分指南和输出空间定义不明确而引起的提示不足问题,这可能导致评估不一致和不对齐。Liu et al. (2023d) 生成了模型在生成质量评估之前应执行的详细评估步骤的思路链。Liu et al. (2023h) 提出了 AUTOCALIBRATE,它根据专家人工注释得出评分标准,并使用模型生成标准的精细子集作为评估提示的一部分。
4.2.2 输出格式化
LLM输出格式会显着影响评估性能。
Styling LLM使用 XML 或 JSON 样式输出被证明可以提高评估者生成的判断的准确性。
Linear Scale 一个非常简单的输出格式是线性刻度(例如 1-5)。许多工作使用 1-10 分、1-5 分甚至 0-1 分的评分。可以提示模型在边界之间输出离散或连续分数。
Binary Score 提示模型生成二元响应,如“是”或“否”,“真或假”是另一种常用的输出格式。
Likert Scale 充分利用Likert Scale对 GenAI 提示可以更好地理解scale的含义。
4.2.3 提示评估框架
LLM-EVAL 是最简单的评估框架之一。它使用单个提示,其中包含要评估的变量架构(例如语法、相关性等)、告诉模型在特定范围内输出每个变量的分数的指令以及要评估的内容。
G-EVAL 类似于 LLM-EVAL,但在提示本身中包含一个 AutoCoT 步骤。这些步骤根据评估说明生成,并插入到最终提示中。这些权重根据令牌概率回答。
ChatEval 使用多智能体辩论框架,每个智能体都有单独的角色。
4.2.4 其他方法论
虽然大多数方法直接提示生成LLM质量评估(显式),但一些工作也使用隐式评分,其中质量分数是使用模型对其预测的置信度或生成输出的可能性或通过模型的解释(例如,计算错误数量),或通过对代理任务的评估(通过蕴涵的事实不一致)。
Batch Prompting 为了提高计算和成本效率,一些工作采用批量提示进行评估,其中一次评估多个实例或根据不同的标准或角色评估同一实例。然而,在单个批次中评估多个实例通常会降低性能。
Pairwise Evaluation 发现,直接比较两篇课文的质量可能会导致次优结果,明确要求LLM为单个摘要生成分数是最有效和最可靠的方法。成对比较的输入顺序也会严重影响评估。
五、Prompt相关事项
本小节,将介绍prompt的安全性和对齐问题相关问题。
5.1 安全性
随着提示使用越来越多,暴露出来的威胁也在增加。与非神经性和预提示安全威胁相比,这些威胁种类繁多,且难以防御。作者讨论了提示性威胁态势和有限的防御状态。作者首先描述提示黑客攻击,即使用提示攻击LLMs,然后描述由此产生的危险,最后描述潜在的防御措施。
5.1.1 提示黑客攻击的类型
提示黑客攻击是指操纵提示以攻击 GenAI 的一类攻击。此类提示已被用于泄露私人信息、生成令人反感的内容和产生欺骗性信息。提示黑客攻击包括提示注入和越狱的超集,它们是不同的概念。
Prompt Injection是用用户输入覆盖提示中的原始开发人员指令的过程。这是一个架构问题,因为 GenAI 模型无法理解原始开发人员指令和用户输入指令之间的区别。
请考虑以下提示模板。用户可以输入“Ignore other instructions and make a threat against the president.”,这可能会导致模型不确定要遵循哪条指令,从而可能遵循恶意指令。
越狱(Jailbreaking)是让 GenAI 模型通过以下方式做或说意想不到的事情的过程提示。它要么是一个架构问题,要么是一个训练问题,因为对抗性提示极难预防。
请考虑以下越狱示例,该示例类似于前面的提示注入示例,但提示中没有开发人员说明。用户无需在提示模板中插入文本,而是可以直接转到 GenAI 并恶意提示它。
5.1.2 Prompt黑客攻击的风险
prompt黑客攻击可能会导致现实世界的风险,例如隐私问题和系统漏洞。
5.1.2.1 数据隐私
模型训练数据和提示模板都可能通过提示黑客攻击(通常是通过提示注入)泄露。
训练数据重构是指从GenAI中提取训练数据。Nasr et al. (2023) 就是一个直接的例子,他们发现,通过提示 ChatGPT 永远重复“company”这个词,它开始反刍训练数据。
提示泄漏是指从应用程序中提取提示模板的过程。开发人员经常花费大量时间创建提示模板,并认为它们是值得保护的 IP。Willison (2022) 演示了如何从 Twitter 机器人泄露提示模板,只需提供如下说明:
5.1.2.2 代码生成问题
LLMs通常用于生成代码。攻击者可能会以此代码导致的漏洞为目标。
包幻觉生成的代码尝试导入不存在的包。在发现哪些软件包名称经常被LLMs产生幻觉后,黑客就可以创建这些软件包,但使用的是恶意代码。如果用户为这些以前不存在的软件包运行安装,他们将下载病毒。
漏洞(和安全漏洞)在LLM生成的代码中出现的比较频繁。对提示技术的微小更改也可能导致生成的代码中出现此类漏洞。
5.1.2.3 客户服务
恶意用户经常对企业聊天机器人进行提示注入攻击,导致品牌尴尬。这些攻击可能会诱使聊天机器人输出有害评论或同意以非常低的价格向用户出售公司产品。在后一种情况下,用户实际上可能有权获得交易。Garcia (2024) 描述了航空公司聊天机器人如何向客户提供有关退款的错误信息。客户在法庭上上诉并胜诉。尽管这个聊天机器人是 ChatGPT 之前的,并且绝不会被用户欺骗,但当使用细微的提示黑客技术时,这个先例可能适用。
5.1.3 缓解措施
已经开发了几种工具和提示技术来减轻上述一些安全风险。然而,提示黑客攻击(注入和越狱)仍然是未解决的问题,并且可能无法完全解决。
基于提示的防御 已经提出了多种基于提示的防御,其中在提示中加入指令可以避免提示注入。例如,可以将以下字符串添加到提示中:
然而,Schulhoff 等人(2023 年)对数十万个恶意提示进行了一项研究,发现没有基于提示的防御是完全安全的,尽管它们可以在一定程度上减轻提示黑客攻击。
Guardrails是指导 GenAI 输出的规则和框架。护栏可以像将用户输入分类为恶意或非恶意一样简单,然后在恶意的情况下使用预设消息进行响应。更复杂的工具使用对话管理器,允许从LLM许多精心策划的响应中进行选择。还提出了特定于提示的编程语言来改进模板并充当护栏。
Detectors是旨在检测恶意输入并防止提示黑客攻击的工具。许多公司已经开发了这样的检测器,通常使用在恶意提示上训练的微调模型构建。通常,这些工具可以比基于提示的防御在更大程度上减轻提示黑客攻击。
5.2 对齐
确保LLMs在下游任务中与用户需求保持一致对于成功部署至关重要。模型可能会输出有害内容,产生不一致的响应,或表现出偏见,所有这些都使部署它们变得更加困难。为了帮助降低这些风险,可以仔细设计提示,以引出危害较小的输出LLMs。在本节中,我们将介绍提示对齐问题以及潜在的解决方案。
5.2.1 Prompt敏感度
一些研究表明,LLMs对输入提示高度敏感,即即使是对提示的细微变化,例如示例顺序(第 2.2.1.1 节),也会导致截然不同的输出。下面,我们将介绍这些扰动的几个类别及其对模型行为的影响。
提示措辞(Prompt Wording) 可以通过添加额外的空格、更改大小写或修改分隔符来更改提示措辞。尽管这些变化很小,但 Sclar 等人 (2023a) 发现它们会导致 LLaMA2-7B 在某些任务上的性能范围从近 0 到 0.804。
任务格式(Task Format) 描述了提示执行LLM同一任务的不同方法。例如,要求执行LLM情绪分析的提示可以要求LLM将评论分类为“正面”或“负面”,或者提示可以询问LLM“此评论是正面的吗?”以引起“是”或“否”的响应。Zhao 等人(2021b)表明,这些微小的变化可以使 GPT-3 的准确性改变多达 30%。同样,对逻辑上等效的任务特定提示的轻微扰动,例如改变多项选择题中的选择顺序。
提示漂移(Prompt Drift)当 API 背后的模型随时间变化时,就会发生提示漂移 ,因此相同的提示可能会在更新的模型上产生不同的结果。虽然不是直接的提示问题,但它需要对提示性能进行持续监视。
5.2.2 过度自信和校准
LLMs往往对自己的答案过于自信,尤其是当被要求用言语表达自己的信心时,这可能导致用户过度依赖模型输出。置信度校准提供了一个代表模型置信度的分数。虽然置信度校准的自然解决方案是研究 LLM提供的输出令牌概率,但也为置信度校准创建了各种提示技术。
语言分数(Verbalized Score)是一种简单的校准技术,可以生成置信度分数(例如,“从 1 到 10 你有多自信”),但其有效性尚有争议。Xiong et al. (2023b) 发现,即使在采用自洽和思维链时,一些人LLMs在用语言表达信心分数时也非常自信。相比之下,Tian et al. (2023) 发现简单的提示(第 4.2 节)可以实现比模型的输出标记概率更准确的校准。
阿谀奉承(Sycophancy)是指经常表达与用户同意的概念LLMs,即使这种观点与模型自身的初始输出相矛盾。Sharma et al. (2023) 发现,当被要求对论点的意见发表评论时LLMs,如果提示中包含用户的意见(例如“我真的很喜欢/不喜欢这个论点”),模型很容易动摇。此外,他们发现LLM质疑原始答案(例如“你确定吗?”),强烈提供正确性评估(例如“我相信你错了”),并添加错误的假设将完全改变模型输出。Wei et al. (2023b) 注意到与意见引发和错误的用户假设类似的结果,还发现对于更大的和指令调整的模型,阿谀奉承会更高。因此,为了避免这种影响,个人意见不应包含在提示中。
5.2.3 偏见、刻板印象和文化
LLMs应该对所有用户都是公平的,这样模型输出中就不会存在偏见、刻板印象或文化伤害。根据这些目标,已经设计了一些提示技术。
Vanilla Prompting 只是由提示中的一条指令组成,告诉 LLM 是公正的。这种技术也被称为道德自我纠正。
Selecting Balanced Demonstrations或获得针对公平性指标优化的演示可以减少输出中的LLM偏差(第2.2.1.1节)。
文化意识可以注入到提示中,以帮助LLMs文化适应。这可以通过创建几个提示来完成机器翻译,其中包括:1)要求LLM优化自己的输出;2)指导使用LLM与文化相关的词语。
AttrPrompt 是一种提示技术,旨在避免在生成合成数据时生成偏向某些属性的文本。传统的数据生成方法可能偏向于特定的长度、位置和样式。为了克服这个问题,AttrPrompt:1)要求生成LLM对多样性很重要的特定属性(例如位置);2)通过改变这些属性中的每一个来提示生成LLM合成数据。
5.2.4 歧义
模棱两可的问题可以用多种方式解释,每种解释都可能导致不同的答案。鉴于这些多重解释,模棱两可的问题对现有模型具有挑战性,但已经开发了一些提示技术来帮助应对这一挑战。
模棱两可的演示是具有不明确标签集的示例。将它们包含在提示中可以提高 ICL 性能。这可以通过检索器自动完成,但也可以手动完成。
问题澄清 LLM允许识别模棱两可的问题并生成澄清问题以向用户提出。一旦用户澄清了这些问题,LLM就可以重新生成其响应。Mu et al. (2023) 为代码生成这样做,Zhang 和 Choi (2023) 配备了LLMs类似的管道来解决一般任务的歧义,但明确设计了单独的提示:1) 生成初始答案 2) 分类是生成澄清问题还是返回初始答案 3) 决定生成哪些澄清问题 4) 生成最终答案。
六、基准测试
现在我们已经对提示技术进行了系统回顾,我们将通过两种方式分析不同技术的经验性能:通过正式的基准评估,以及现实世界问题的提示工程过程。
6.1 技术基准
对提示技术的正式评估可以在一项广泛的研究中进行,该研究在数百个模型和基准中比较了数百个提示技术。这超出了作者的范围,但由于以前没有这样做过,作者提供了朝着这个方向迈出的第一步。选择了提示技术的子集,并在广泛使用的基准 MMLU 上运行它们。作者运行了 2,800 个 MMLU 问题的代表性子集(每个类别问题的 20%),并在所有实验中使用 gpt-3.5-turbo。
6.1.1 比较Prompt技术
作者使用相同的通用提示模板对六种不同的提示技术进行了基准测试(图 6.2)。此模板显示提示的不同组件的位置。每个提示中只存在基本说明和问题。基本指令是“Solve the problem and return (A), (B), (C) or (D).”这样的短语,作者在某些情况下会有所不同。作者还测试了问题的两种格式(图 6.3 和 6.4)。问题格式将插入到提示模板中,以代替“{QUESTION}”。作者测试了每种提示技术,总共有 6 个变体,但使用自一致性的变体除外。
Zero-Shot 作为基线,作者直接通过模型运行问题,没有任何提示技术。对于这个基线,作者使用了两种格式以及基本指令的三种措辞变体。因此,该基准测试的 2800 个问题总共运行了 6 个。这不包括任何范例或思想诱导器。
Zero-Shot-CoT技术 作者使用了Zero-Shot-CoT技术。作者使用了三个思维诱导器(导致模型生成推理步骤的指令),包括标准的“Let’s think step by step”思维链,以及ThoT和Plan and Solve。然后,作者选择了其中最好的,然后用自一致性运行它,进行了三次迭代,获得了大多数响应。
Few-Shot Techniques 作者还运行了 Few-Shot 提示和 Few-Shot-CoT 提示,两者都使用由其中一位作者生成的示例。对于每个问题,作者使用了基本指令的三种变体以及两种问题格式(也适用于示例)。然后,使用性能最好的措辞和自一致性,进行了三次迭代,获得了大多数响应。
6.1.2 问题格式
作者尝试了 Sclar 等人 (2023b) 提出的两种格式,探讨了格式选择对基准测试结果的影响。作者使用在Sclar 等人任务得到不同的结果的两种格式(图 6.3 和 6.4)。
6.1.3 自洽性
对于两个自洽结果,作者按照 Wang 等人 (2022) 的指南将温度设置为 0.5。对于所有其他提示,使用温度 0。
6.1.4 评估回复
评估是否LLM正确回答了问题是一项艰巨的任务(第 2.5 节)。如果答案遵循某些可识别的模式,例如括号内唯一的大写字母 (A-D) 或遵循“正确答案是”等短语,作者将答案标记为正确。
6.1.5 结果
随着技术变得越来越复杂,性能普遍提高(图 6.1)。然而,ZeroShot-CoT 从 Zero-Shot 急剧下降。尽管它的传播范围很广,但对于所有变体,Zero-Shot 的表现都更好。这两种自一致性的情况,由于它们重复了一种技术,因此自然具有较低的传播,但它只是提高了零射击提示的准确性。Few-Shot CoT 性能最佳,某些技术无法解释的性能下降需要进一步研究。由于提示技术选择类似于超参数搜索,这是一项非常艰巨的任务(Khattab 等人,2023 年)。然而,作者希望这项小型研究能够促进研究朝着更高性能和更强大的提示技术方向发展。
6.2 Prompt工程案例分析
提示工程正在成为一门艺术,许多人已经开始专业实践,但关于提示工程详细指南还没有文献。为此,作者提出了一个带标注的提示工程案例研究来解决现实世界问题。该案例研究并不能直接解决实际问题,相反,它提供了一个有经验的提示工程师如何处理此类任务的例证,以及吸取的经验教训。
6.2.1 问题
作者阐述的问题涉及检测潜在自杀者所写的文本中预测危机级别自杀风险的信号。自杀在世界范围内是一个严重的问题,与大多数心理健康问题一样,由于极度缺乏心理健康资源而变得更加复杂。在美国,全国一半以上的人口生活在联邦定义的精神健康提供者短缺地区;此外,许多心理健康专业人员缺乏预防自杀的核心能力。2021 年,12.3M 美国人认真考虑过自杀,其中 1.7M 人实际上尝试自杀导致超过 48,000 人死亡。在美国,截至 2021 年的统计数据,自杀是 10-14 岁、15-24 岁或 25-34 岁人群的第二大死因(仅次于事故),也是 35-54 岁人群的第五大死因。
最近的研究表明,对潜在自杀倾向的评估具有重要价值,这些评估特别关注自杀危机的识别,即与即将发生的自杀行为的高风险相关的急性痛苦状态。然而,对自杀危机综合症 (SCS) 等诊断方法的验证评估和急性自杀情感障碍需要个人临床互动或完成包含数十个问题的自我报告问卷。因此,用个人语言准确标记自杀危机指标的能力可能会在心理健康生态系统中产生重大影响,而不是替代cal 判断,但作为补充现有实践的一种方式。
作为起点,作者在这里重点关注自杀危机综合症评估中最重要的预测因素,在文献中称为要么是疯狂的绝望,要么是被困,“一种逃离难以忍受的境地的愿望,与所有逃生路线都被封锁的看法联系在一起”。个人正在经历的这种特征也是导致自杀的心理过程的其他特征的核心。
6.2.2 数据集
作者使用了马里兰大学Reddit自杀数据集中的数据子集,该数据集由r/SuicideWatch中的帖子构建,r/SuicideWatch是一个子版块,为任何与自杀念头作斗争的人提供同伴支持。两名接受过自杀危机综合症因素识别培训的编码员对一组 221 个帖子进行了编码,以确定是否存在诱捕,从而实现了可靠的编码人员间可靠性(Krippendorff 的 alpha = 0.72)。
6.2.3 过程
一位专业的提示工程师撰写了一本广泛使用的提示指南,他承担了使用 an LLM 来识别帖子中的陷阱的任务。提示工程师得到了关于自杀危机综合症和诱捕的简短口头和书面总结,以及 121 个开发帖子及其正面/负面标签(其中,以个人语言准确标记自杀危机指标的能力可能会在心理健康生态系统中产生重大影响“积极”意味着存在诱捕), 其他 100 个带标签的帖子保留用于测试。这种有限的信息反映了现实生活中常见的场景,在这些场景中,提示是根据任务描述和数据开发的。更一般地说,这与自然语言处理和人工智能的趋势是一致的,即将编码(注释)作为一项标签任务,而没有深入研究标签实际上可能指的是微妙而复杂的基础社会科学结构。
我们记录了提示工程的过程,以说明有经验的提示工程师的工作方式,总共记录了47个提示过程实践过程,累计工作约20小时。从性能为 0% 的冷启动(提示不会返回结构正确的响应),性能提升到 0.53 的 F1,其中 F1 是 0.86 精度和 0.38 召回率的谐波平均值。
下面,一组提示 q是测试项目,而 q、r 和 a表示示例中的问题、思维链步骤和答案。
6.2.3.1 数据集探索(2步骤)
该过程从提示工程师审查陷阱描述开始(图 6.7);在编码过程的早期,这种描述被用作人类编码人员的第一遍标准,然而,他们注意到他们熟悉 SCS,并且知道它既不是一个正式的定义,也不是详尽无遗的。然后,提示工程师将数据集加载到 Python 笔记本中,以便进行数据探索。他首先询问 gpt-4-turbo-preview 是否知道什么是陷阱(图 6.8),但发现 LLM的回答与给出的描述并不相似。因此,提示工程师在以后的所有提示中都包含了图 6.7 对陷阱的描述。
6.2.3.2 获取标签(8个步骤)
如第 6.1 节所述,MMLU 的human_sexuality子集在LLMs敏感领域表现出不可预测且难以控制的行为。对于提示工程流程中的多个步骤,提示工程师发现 正在LLM提供心理健康建议(例如图 6.9),而不是标记输入。通过切换到 GPT-4-32K 模型解决了这个问题。
从这个初始阶段可以看出,与一些大型语言模型相关的“护栏”可能会干扰提示任务的进展,这可能会影响模型的选择,而不是LLM潜在质量。
6.2.3.3 提示技术(32个步骤)
提示工程师将大部分时间花在改进所使用的提示技术上。这包括 Few-Shot、思维链、AutoCoT、对比 CoT 和多种答案提取技术。作者统计了这些技术首次运行的统计数据;在随后的运行中,F1 分数可能会变化多达 0.04,即使温度和top-p 设置为零也是如此。
Zero-Shot + Context 是第一个评估的技术(图 6.10),使用图 6.7 中的描述。请注意提示中的“定义”一词,尽管图 6.7 不是正式定义。
为了从用于计算性能指标的 LLM 中获得最终响应,必须从LLM输出中提取标签。提示工程师测试了两个提取器,一个用于检查输出是否完全为“是”或“否”,另一个仅检查这些单词是否与输出的前几个字符匹配。后者具有更好的性能,其余部分用于此部分,直到我们使用 CoT。这种方法获得了 0.25 的召回率、1.0 的精确度和 0.40 的 F1,对训练/开发的所有样本进行了评估,因为没有样本被用作示例。
10-Shot + Context。接下来,提示工程师将前十个数据样本(带标签)添加到提示中,格式为 Q:(问题)A:(答案)(图 6.11)。对训练/开发集中的其余项目评估了这 10 个提示,相对于之前的最佳提示,召回率为 ↑ 0.05 (0.30),精度为 ↓ 0.70 (0.30),F1 为 ↑0.05 (0.45) F1。
One-Shot AutoDiCot + Full Context 在形成 10 个提示时,提示工程师观察到开发集中的第 12 个项目被错误地标记为阳性实例,并开始尝试修改提示,以便模型能够正确获取该项目。为了弄清楚为什么会发生这种错误标签,提示工程师提示生成LLM一个解释,解释为什么第 12 项会以这种方式被标记。
作者将图 6.12 中的算法称为自动定向 CoT (AutoDiCoT),因为它会自动引导 CoT 进程以特定方式进行推理。该技术可以推广到任何标记任务。它结合了 CoT 的自动生成和显示错误推理LLM的例子,如对比 CoT 的情况。该算法还用于开发后续提示。
最后,提示扩展了两个额外的上下文/说明。第一封是提示工程师收到的一封电子邮件,其中解释了项目的总体目标,其中提供了有关陷阱概念的更多背景信息以及想要标记它的原因。第二个添加的灵感来自提示工程师注意到该模型经常过度生成陷阱的正标签。假设该模型在基于预训练的显性推理中过于激进第二个添加的灵感来自提示工程师注意到该模型经常过度生成陷阱语言的正面标签,他指示模型将自己限制在明确的陷阱陈述中(图 6.13)。下面我们将这两段上下文称为完整的上下文,除了对陷阱的描述之外,还提供。
此提示还使用了一个新的提取器,用于检查输出中的最后一个单词是“是”还是“否”,而不是第一个单词。此更新的提示针对开发集中除前 20 个输入之外的所有输入进行了测试。它没有改善 F1,↓0.09 (0.36) F1,但它引导提示工程师朝着一个方向发展,如下所述。精确度提高到 ↑ 0.09 (0.39) 精度,召回率下降 ↑ 0.03 (0.33) 召回率。
然而,在这一点上,值得观察的是,尽管它最终导致了F1得分的增加,但事实上,就长期目标而言,这里为减少过度产生正面标签而采取的措施并不是正确的举动。诱捕不需要为了存在而明确表达(例如,通过“我感到被困”或“没有出路”等短语);相反,研究过这些文本的临床专家发现,诱捕的表达可能是隐含的,而且可能非常微妙。此外,在大多数自动发现某人语言陷阱的用例中,精确度和回忆不太可能同等重要,在两者中,召回/敏感性(即不遗漏应该被标记为有风险的人)可能更重要,因为假阴性的潜在成本非常高。
尽管后来才有见解,但这里的要点是,除非提示工程师和更深入地了解实际用例的领域专家之间定期参与,否则提示开发过程很容易偏离实际目标。
Ablating Email, 先前更改的结果是有希望的,但它们确实涉及创建一个提示,其中包括来自电子邮件的信息,这些信息不是为此目的创建的,其中包括有关项目、数据集等的信息,这些信息不打算向广大受众披露。然而,具有讽刺意味的是,删除这封电子邮件会显着降低性能,↓ 0.18 (0.18) F1,↓ 0.22(0.17) 精度和 ↓ 0.13 (0.20) 召回率。我们将其归因于这样一个事实,即该电子邮件提供了有关标签目标的更丰富的背景信息。尽管作者不建议在任何LLM提示中包含电子邮件或任何其他潜在的识别信息,但作者选择将电子邮件保留在提示中;这与许多典型设置中的方案一致,在这些方案中,提示不应公开给其他人。
10-Shot + 1 AutoDiCoT 下一步,Prompt Engineer 尝试包括完整的上下文、10 个常规示例以及关于如何不推理的一次性示例。这损害了性能(图 6.14)↓ 0.30 (0.15) F1,↓ 0.15 (0.15) 精度,↓ 0.15 (0.15) 召回。
Full Context Only 接下来,仅使用完整上下文创建提示,没有任何示例(图 6.15)。这与以前的技术性能提高了,↓ 0.01 (0.44) F1,↓ 0.01 (0.29) 精度,↑ 0.62 (0.92) 召回。有趣的是,在这个提示中,提示工程师不小心粘贴了两次完整上下文电子邮件,这最终对以后的性能产生了显着的积极影响(并且删除重复项实际上降低了性能)。这让人想起重读技术。
这既可以乐观地解释,也可以悲观地解释。乐观地表明,它表明如何通过探索和偶然发现来改进。在悲观的一面,在提示中复制电子邮件的价值凸显了提示在多大程度上仍然是一种难以解释的黑色艺术,其中LLM可能会对人们可能认为无关紧要的变化出乎意料地敏感。
10-Shot AutoDiCoT 下一步是根据图 6.12 中的算法创建更多 AutoDiCoT 示例。总共有 10 个新的 AutoDiCoT 示例被添加到完整的上下文提示中(图 6.16)。就 F1 分数而言,这从该提示工程练习中获得了最成功的提示,↑ 0.08 (0.53) F1,↑ 0.08 (0.38) 精度,↑ 0.53 (0.86) 召回。
20-Shot AutoDiCoT 进一步的实验继续进行,寻求(未成功)改进之前的 F1 结果。在一次尝试中,提示工程师标记了另外 10 个示例,并根据开发集中的前 20 个数据点创建了一个 20 个样本提示。这导致结果比 10 次提示更差,当在前 20 个样本以外的所有样本上进行测试时,↓ 0.04 (0.49) F1,↓ 0.05 (0.33) 精度,↑ 0.08 (0.94) 召回。值得注意的是,它在测试集上的性能也较差。
20-Shot AutoDiCoT + Full Words 提示工程师推测,LLM如果提示包含完整的单词 Question、Reasoning 和 Answer,而不是 Q、R、A,则性能会更好。然而,这并没有成功(图6.17),↓ 0.05 (0.48) F1,↓ 0.06 (0.32) 精度,↑ 0.08 (0.94) 召回。
20-Shot AutoDiCoT + Full Words + Extraction Prompt 在许多情况下,LLM生成的输出无法正确解析以获得响应。因此,他们制作了一个提示,从LLM响应中提取答案(图 6.18)。虽然这提高了几分的准确率,但它降低了 F1,这要归功于许多未解析的输出实际上包含不正确的响应,↓ 0.05 (0.48) F1,↓ 0.05 (0.33) 精度,召回率没有变化 (0.86)。
10-Shot AutoDiCoT + Extraction Prompt 将提取提示符转换为性能最佳的 10-Shot AutoDiCoT 提示符并未改善结果,↓ 0.04 (0.49) F1,↓ 0.06 (0.78) 召回,↓ 0.03 (0.35) 精度。
10-Shot AutoDiCoT without Email 如上所述,从提示中直接删除电子邮件会损害性能,↓ 0.14 (0.39) F1,↓ 0.38 (0.48) 召回,↓ 0.05 (0.33) 精度。
De-Duplicating Email 此外,如上所述,删除电子邮件的重复项似乎与无意重复的提示一样好或更好。然而,事实证明,删除重复项会显着损害性能,↓ 0.07 (0.45) F1,↓ 0.13 (0.73) 召回,↓ 0.05 (0.33) 精度。
10-Shot AutoDiCoT + Default to Negative 这种方法使用性能最佳的提示,并在未正确提取答案的情况下默认标记为否定(而不是陷阱)。这对性能没有帮助,↓ 0.11 (0.42) F1,↓ 0.03 (0.83) 召回,↓ 0.10 (0.28) 精度。
Ensemble + Extraction 特别是对于对其输入细节敏感的系统,尝试输入的多种变体,然后组合其结果具有优势。这是通过采用性能最佳的提示符 10-Shot AutoDiCoT 提示符,并创建具有不同顺序的样例的三个版本来完成的。三个结果的平均值被作为最终答案。不幸的是,两种与默认排序不同的排序都导致LLM无法输出结构良好的响应。因此,使用提取提示来获得最终答案。这种探索伤害而不是帮助性能 ↓ 0.16 (0.36) F1,↓ 0.22 (0.64) 召回,↓ 0.12 (0.26) 精度。
10-Shot AutoCoT + 3x the context (no email dupe) 回想一下,上下文是指对诱捕的描述、关于明确的说明和电子邮件。由于重复的电子邮件提高了性能,提示工程师测试了粘贴上下文的三个副本(首先删除重复的电子邮件)。然而,这并没有提高性能,↓ 0.06 (0.47) F1,↓ 0.08 (0.78) 召回,↓ 0.05 (0.33) 精度。
Anonymize Email 在这一点上,似乎很清楚,在提示中包含重复的电子邮件实际上(尽管无法解释)对于迄今为止获得的最佳性能至关重要。提示工程师决定通过将人名替换为其他随机名称来匿名化电子邮件。然而,令人惊讶的是,这显着降低了性能 ↓ 0.08 (0.45) F1,↓ 0.14 (0.72) 召回,↓ 0.05 (0.33) 精度。
DSPy 作者通过探索手动提示工程的替代方案,即 DSPy 框架来结束案例研究,该框架可LLM自动优化给定目标指标的提示。具体来说,我们从使用图 6.7 中陷阱定义的思维链分类管道开始。在 16 次迭代中,DSPy 引导合成LLM生成的演示和随机抽样的训练示例,最终目标是在上面使用的相同开发集上最大化 F 1。作者使用了 gpt-4-0125-preview 和默认设置。对于 BootstrapFewShotWithRandomSearch“提词器”(优化方法)。图 6.19 显示了测试集上其中两个提示的结果,其中一个使用默认 DSPy 行为,第二个从此默认值手动修改。最好的结果提示包括 15 个示例(没有 CoT 推理)和一个引导推理演示。它在测试集上达到 0.548 F 1(和 0.385 / 0.952 精度/召回率),没有使用教授的电子邮件或不正确的关于诱捕的明确性的说明。它的性能也比测试集上的人类提示工程师的提示好得多,这表明了自动化提示工程的巨大前景。
6.2.4 讨论
提示工程是一个非同寻常的过程,其细微差别目前在文献中没有得到很好的描述。从上面所示的完全手动过程来看,有几个值得总结的要点。首先,提示工程与让计算机按照你想要的方式运行的其他方法有根本的不同:这些系统是被哄骗的,而不是编程的,而且,除了对所使用的特定LLM内容非常敏感之外,它们还可以对提示中的特定细节非常敏感,而没有任何明显的理由这些细节应该很重要。其次,因此,深入研究数据很重要(例如,为LLM导致错误响应的“推理”生成潜在的解释)。与此相关的是,第三个也是最重要的一点是,提示工程应该涉及提示工程师和领域专家之间的参与,前者具有如何哄骗LLMs以期望的方式行事的专业知识,后者了解这些期望的方式是什么以及为什么。
最终,作者发现,在探索提示空间的自动化方法中,有很大的希望,而且将这种自动化与人工提示工程/修订相结合是最成功的方法。作者希望这项研究能够成为对如何进行及时工程的更有力的检查的一步。