摘要
本文介绍了 26 个专为简化向大语言模型(Large Language Model)提问和设置提示的原则。我们旨在让研究者更容易理解如何针对不同规模的大语言模型提出问题,评估其能力,并了解这些模型在面对不同提示时的反应。我们在 LLaMA-1/2(容量分别为 7B、13B 和 70B)和 GPT-3.5/4 上进行了广泛实验,验证了这些原则在设计指令和提示时的实用性。我们希望这项研究能为那些致力于提高大语言模型响应质量的研究人员提供实用的指导。项目详细信息可在 https://github.com/VILA-Lab/ATLAS 查阅。
1 引言
如何与生成式大语言模型 (Generative Large Language Model) 有效沟通,这就是所谓的提示工程 (Prompt Engineering)。
ChatGPT, *2023
如 ChatGPT [13] 这样的大语言模型 (Large Language Models,LLMs) 在回答问题 [7]、数学推理 [5]、编写代码 [11, 9] 等多个领域展现了惊人的能力。然而,它们的应用和使用,尤其是在设计最优化的指令或提示方面,对普通用户来说有时可能显得不那么明晰。在本研究中,我们旨在为开发者或普通用户揭示如何在与大语言模型互动时提出查询和互动的“秘诀”,并通过策划更为有效的提示,进一步提升预训练大语言模型的响应质量。
图 1: 示范了应用原则前后的提示及其相应响应的例子。左侧是 GPT-4 的原始提示及其响应,右侧则展示了经过原则优化后的提示及其相应的回答。其中涉及原则 5 和 6。
考虑到直接对大语言模型进行特定任务的微调 (fine-tuning) 对于大多数用户和开发者而言不太实际或无法实现,主要因为效率问题,研究界开始关注于提示的优化。所谓的提示工程技术,包括用自然语言精心制定的精确、针对特定任务的指令,无论是手动还是通过自动化手段完成,以及在提示中包含精选的代表性示例,已经成为大语言模型研究的核心。尽管已经做出了许多专门的努力,但要可靠地引导大语言模型产生特定响应并充分利用预训练大语言模型的能力,仍然是一个巨大的挑战。
在这项研究中,我们提出了一套全面的原则性指南,旨在提高大语言模型(LLMs)的提示质量。具体而言,我们研究了在输入不同类型和形式的提示时,大语言模型的表现,例如在提示中加入预期受众的信息,如“受众是该领域的专家”或“受众是 5 岁儿童”,以及其他与大语言模型特性相关的多个方面。我们的研究结果显示,较大的模型具有显著的模拟能力。任务或指示越精确,模型的表现就越出色,其响应与我们的预期更为一致。这说明大语言模型不只是简单记忆训练数据,而是能够根据不同的提示,即使核心问题不变,也能调整信息以适应。因此,为大语言模型分配特定角色,以期得到更符合我们预期的输出,是非常有效的做法。
我们在第 3 节中详细阐述了这些用于大语言模型提示的原则性指南,并提供了进一步的背景和几个具体的设计原则。在第 4 节中,我们通过实验展示了这些原则能够产生比标准提示更高质量、更简洁、更准确和更简明的响应。例如,我们手动设计的 ATLAS 基准测试包含了每个原则的多个问题,我们提出的特定提示在应用于 GPT-4 时,平均提升了响应的质量和准确度分别达到 57.7% 和 67.3%。此外,模型规模的增加使得这些改进更加显著,例如从 LLaMA-2-7B 到 GPT-4 的性能提升超过了 40%。
2 相关工作
大语言模型。大语言模型(LLM)的演变在推进自然语言处理(NLP)领域中扮演了核心角色。这一部分对 LLM 的主要发展进行了回顾,为本研究打下了基础。起始于 Google 的 BERT [3],它采用了双向训练方式,为理解语境提供了革命性的视角。接着,T5 [17] 进一步推动了该领域的发展,将多种 NLP 任务融合到了同一个框架中。与此同时,GPT-1 [14] 引入了一种利用 Transformer 架构进行无监督学习的创新模型。其继任者 GPT-2 [15] 将参数数量大幅增加到了 15 亿,展示了其在文本生成方面的卓越能力。紧接着,GPT-3 [2] 在规模和能力上实现了巨大的飞跃,拥有高达 1750 亿的参数,成功展示了其在广泛语言任务中的高效能力。
在最近提出的大语言模型 (Large Language Model) 中,Gopher [16] 不仅以其 2800 亿参数模型大幅提升了语言处理能力,同时也把伦理问题推到了研究的前沿。Meta 的 LLaMA 系列 [21,22] 突出了效率的重要性,表明即便是在资源更少的情况下也能发挥强大性能。这一理念同样得到了 Chinchilla [4] 的支持,Chinchilla 认为,通过优化训练的小型模型也能取得非凡的成果。在这系列创新中,最新的成就是 Mistral [6],它在效率和性能方面都表现出色,甚至超越了体量更大的模型。这一领域的最新里程碑是 OpenAI 的 GPT-4 [13] 和 Google 的 Gemini 系列 [20]。它们在理解和生成能力上取得了显著进步,为大语言模型在各个领域的应用树立了新的标杆。
在与大语言模型(LLM)的互动中,激发式引导(Prompting)作为一种独特的交互方式,以其简便性(无需对模型进行微调(fine-tune))而发展成为一个复杂而精细的研究领域。这一领域特别强调用户输入与大语言模型回应之间的复杂关系。早期的研究,例如 [19] 的工作,深入探讨了不同的激发式引导设计如何显著影响语言模型的表现和输出,这标志着“Prompt 工程”这一概念的诞生。这个领域迅速发展,揭示了在少样本(few-shot)和零样本(zero-shot)学习场景中,激发式引导的关键作用。以 [2] 的 GPT-3 研究为例,精心设计的激发式引导使得模型能够在极少的先前示例基础上执行任务。除了作为任务指令,最近的研究转向理解激发式引导中的语义和上下文的细微差别,探究微小变化如何导致大语言模型产生截然不同的反应。
“随问随答”(Ask-Me-Anything)策略是指利用多个不完美的提示,通过整合这些提示来提高模型特别是在问答格式中的性能。另一种方法,名为“思维链”(Chain-of-Thought)[23],该方法通过模型生成一系列中间推理步骤来提高处理复杂任务的效率。此外,“由简入繁提示”(least-to-most prompting)[26] 是一种新策略,它将复杂问题分解为更简单的子问题,从而显著提升模型处理比直接提示更具挑战性问题的能力。研究还探讨了解释对大语言模型(LLM)在复杂任务上学习能力的影响[8],发现解释能有效提升模型的学习效果。同时,研究还审视了与 ChatGPT [24] 相关的提示工程技术,强调提示工程在提升软件开发和教育中大语言模型应用的重要性。这也突出了有效的提示设计对于提升大语言模型在编程和学习体验中的性能的重要性。最后,“定向刺激提示”(Directional Stimulus Prompting)[12] 介绍了一个新框架,该框架通过可调整的策略模型生成辅助提示,指导大语言模型实现特定的期望结果。这些多样化的提示策略展示了大语言模型领域的快速发展,提供了多种方式来更有效地利用这些模型的能力。
3 原则
3.1 动机
预训练大语言模型 (LLM) 生成的回应质量直接取决于用户提供的提示或指令的质量。因此,设计出 LLM 能够理解并有效回应的提示显得尤为重要。这些提示不仅是用户与 LLM 互动的编程手段,而且还能提升 LLM 处理各种任务的能力。我们的工作主要集中在制定和定制提示的方法上,旨在提高输出质量。要做到这一点,我们需要全面了解 LLM 的运作方式、底层机制和其响应原则。本研究通过详细解释 26 个全面的提示原则来实现这一目标,这些原则适用于不同的场景和情境,如 图 1 所示。
3.2 概述
我们将这些原则总结在 表 1 中,并根据它们的特点,将它们分为五大类,如 表 2 所示:(1) 提示的结构和清晰度,例如,提示中应考虑到预期听众的特性,如听众是该领域的专家;(2) 具体性和信息,例如,“确保你的回答无偏见且不依赖于刻板印象”应该被加入到提示中;(3) 用户互动和参与,例如,允许模型通过询问问题来获取精确的细节和要求,直到有足够的信息提供所需的输出,“从现在开始,我希望你能向我提出问题来……”;(4) 内容和语言风格,例如,与 LLM 交流时无需客气,避免使用“请”,“如果你不介意”,“谢谢”,“我想要”等礼貌用语,而应直截了当;(5) 复杂任务和编码提示,例如,将复杂任务拆分为一系列简单的提示,在互动对话中逐步解决。
#原则 | 针对指令的提示原则 |
---|---|
1 | 与大语言模型交流无需客气,避免使用如“请”、“谢谢”这样的礼貌用语,直截了当地表达需求。 |
2 | 在提示中明确你的受众,比如指出受众是该领域的专家。 |
3 | 把复杂任务拆分成简单的步骤,并通过交互式对话逐步进行。 |
4 | 使用积极的指示词汇,例如“做”,避免使用否定词汇,如“不要”。 |
5 | 当需要对某个主题、想法或信息有更清晰、深入的理解时,可以使用以下提示:o 简单地解释[具体主题]。o 像向 11 岁的孩子一样向我解释。o 像我是[领域]新手一样向我解释。o 使用简单易懂的语言编写[文章/文本/段落],就像对 5 岁孩子解释一样。 |
6 | 添加一句“我会给出$xxx 的小费来获取更好的解决方案!” |
7 | 使用以示例为驱动的提示方法(采用少样本 (few-shot) 提示)。 |
8 | 在撰写提示时,首先用“###指令###”来开始,接着是“###示例###”或“###问题###”(如果适用)。然后展示你的内容。用分行或分段的方式区分开指令、示例、问题、背景和输入数据。 |
9 | 添加短语“你的任务是”和“你必须”。 |
10 | 添加短语“将会受到惩罚”。 |
11 | 使用“以自然、类似人类的方式回答问题”这一短语。 |
12 | 使用引导性词汇,比如“逐步思考”。 |
13 | 在提示中加入“确保你的回答无偏见,不依赖于刻板印象”。 |
14 | 允许模型通过问询来从你那里获取具体的细节和要求,直到它有足够的信息来提供所需输出,例如,“从现在开始,请向我提出问题,以便……”。 |
15 | 当你想探究一个特定主题或想法,或需要某些信息时,如果你想检验自己的理解,可以用这样的话来提问:“请教授我 [任何定理/主题/规则的名称],并在最后附上一个测试,但不要告诉我答案,等我回答后再告诉我答案是否正确”。 |
16 | 为大语言模型 (Large Language Model) 分配一个角色。 |
17 | 使用分隔符。 |
18 | 在一个指令中多次重复某个特定单词或短语。 |
19 | 结合使用思维链 (Chain-of-thought, CoT) 和少样本 (Few-shot) 提示。 |
20 | 使用输出启动器,即用你希望得到的输出的开头来结束你的指令。通过在指令的结尾处加上你期待的回应的开头来应用输出启动器。 |
21 | 要撰写一篇详尽的论文、文本、段落、文章或任何类型的文字时,可以这样说:“请为我写一篇关于 [主题] 的详细 [论文/文本/段落],并包含所有必要的信息”。 |
22 | 为了在不改变其风格的情况下修正或更改特定文本:“请尝试修订用户提交的每个段落。你应该只改善用户的语法和词汇,确保其听起来自然,但不要改变写作风格,比如将一个正式段落变得非正式”。 |
23 | 当你面对一个涉及多个文件的复杂编码指令时:“从现在开始,每当你需要生成跨越多个文件的代码时,请生成一个 [编程语言] 脚本,该脚本能够运行并自动创建所需文件或修改现有文件,以插入生成的代码。[你的问题]”。 |
24 | 当你想使用特定的单词、短语或句子来开始或继续一个文本时,可以使用以下指令: o 我为你提供了开头 [歌词/故事/段落/论文等]:[插入歌词/单词/句子]。请根据所提供的内容完成它,并保持内容的连贯性。 |
25 | 清晰地说明模型必须遵循的要求,以便产生内容,这些要求可以是关键词、规则、提示或指示的形式。 |
26 | 要撰写任何文本,例如文章或段落,使其与提供的样本相似,请遵循以下指示:请根据提供的段落[/标题/文本/文章/答案]使用相同的语言。 |
表 1: 26 个提示原则的概览。
类别 | 原则 | # |
---|---|---|
提示结构与清晰度 | 将预期听众融入到提示中。 | 2 |
使用积极的指令,如“去做”,避免使用否定词汇,如“不要”。 | 4 | |
使用引导性词语,比如写作“一步步思考”。 | 12 | |
使用“输出启动器”,即用期望的输出开头来结束你的提示。 通过以预期回答的开头来结束你的提示。 |
20 | |
使用分隔符来区分不同部分。 | 17 | |
在格式化提示时,先写“###指令###”,再根据需要加上“###例子###”或“###问题###”。然后陈述你的内容。用一个或多个换行来区分指令、例子、问题、背景和输入数据。 | 8 | |
具体性与信息 | 使用示例驱动的提示方法(采用少样本提示)。 | 7 |
当你需要清楚地或更深入地理解某个主题、观点或任何信息时,可以使用以下提示: o 用简单的话解释[指定的主题]。 o 像对 11 岁的孩子那样向我解释 o 像我是[该领域]的初学者一样向我解释 o“用简单的英语写作[论文/文本/段落],就像你在向一个 5 岁的孩子解释一样” |
5 | |
在你的提示中加入这句话:“确保你的回答不带有偏见,且不依赖刻板印象。” | 13 | |
要写出与提供的样本风格类似的文本,请包含具体指示:o“请根据所提供的段落[ /标题/文本 /论文/回答]使用相同的语言风格。” | 26 | |
当你想用特定的单词、短语或句子开启或延续一个文本时,可以使用下面的提示结构: o 我提供了开头[歌词/故事/段落/论文…]:[插入歌词/单词/句子]。 请根据提供的内容完成它,保持语句流畅和一致。 |
24 | |
明确模型为生成内容而必须遵循的要求,以关键词、规定、提示或指令的形式表达。 | 25 | |
当你想询问特定主题或概念,并测试自己的理解时,可以使用以下短语 [16]: o“教我 [任何定理/主题/规则名称] 并在最后加上一个测试,但先不要给我答案,等我回答后再告诉我是否正确。” |
15 | |
要撰写一篇详尽的论文、文本、段落、文章或其他形式的文本时:o“请为我就 [主题] 撰写一篇包含所有必要信息的详尽 [论文/文本/段落]。” | 21 | |
用户互动与参与 | 让模型通过询问问题来获取确切的细节和需求,直到它获得足够的信息来提供所需的输出 o“从现在起,我希望你通过提问来……”。 |
14 |
要撰写一篇详尽的论文、文本、段落、文章或其他形式的文本时: “请为我就 [主题] 撰写一篇包含所有必要信息的详尽 [论文/文本/段落]。” | 21 | |
内容和语言风格 | 更正或修改特定文本,但不改变其风格:“请修改用户发送的每段文字。你应仅改进用户的语法和词汇,确保其听起来自然。不要改变其写作风格,如将正式文本改为非正式。” | 22 |
使用以下短语:“你的任务是”和“你必须。” | 9 | |
使用以下短语:“你将受到惩罚。” | 10 | |
为语言模型指定一个角色。 | 16 | |
在你的提示中使用“以自然语言形式回答问题”的短语。 | 11 | |
与大语言模型交流无需客套,无需使用“请”、“如果你不介意”、“谢谢”、“我想要”等礼貌用语,直接说明要求即可。 | 1 | |
在一个提示中重复使用特定单词或短语多次。 | 18 | |
添加“我将为更佳解决方案支付 $xxx 小费!” | 6 | |
复杂任务与编码引导 | 把复杂任务拆分为一系列更简单的步骤,在互动式对话中实现。 | 3 |
当你面对可能跨越多个文件的复杂编码任务时: o“从现在开始,每当你需要生成涉及多个文件的代码时,创建一个 [编程语言] 脚本,用以自动创建所需文件或修改现有文件,以嵌入生成的代码。 [你的问题]。” |
23 | |
结合连锁思考模式(Chain-of-thought, Cot)和少量样本的提示。 | 19 |
表 2: 提示原则的分类。
3.3 设计原则
在这项研究中,我们确定了几个基本原则,用于制定提示和指令,以从预训练的大语言模型 (Large Language Models) 中获得高质量的回应:
简洁与清晰:通常情况下,过于冗长或不明确的提示可能会让模型混淆,从而产生无关的回应。因此,我们应该让提示尽量简洁,避免加入不必要的信息,同时要确保提示足够具体,以便引导模型。这是制定有效提示的基本原则。
语境相关性:提示需要提供与任务相关的背景和领域信息,以帮助模型理解任务的语境。引入关键词、特定领域的术语或情境描述,可以确保模型的回应在正确的语境下进行。这是我们设计原则中的一个重点。
任务一致性:提示应该与实际任务紧密结合,使用清晰的语言和结构来明确向模型表明任务的性质。这可能包括将提示设计成一个问题、命令或填空语句,以符合任务预期的输入和输出格式。
示例演示:对于更复杂的任务,在提示中加入示例可以帮助展现期望的格式或回应类型。这通常包括展示输入 – 输出对,特别是在“少样本”或“零样本”学习情境中。
避免偏见:在设计提示时,应尽量减少因训练数据带来的固有偏见。使用中性的语言,并对可能存在的伦理问题保持警觉,尤其是在处理敏感话题时。
渐进式提示:对于需要分步进行的任务,可以将提示设计成一系列逐步的指导。将任务拆解为一系列互相衔接的提示,以步骤性地引导模型。同时,根据模型的反应和迭代反馈,提示需要能够进行适当的调整,即根据模型的初步表现和行为来优化提示。此外,应根据模型的表现、响应以及人类的迭代反馈和偏好来调整提示。
高级提示设计:更高级的提示可能包括类似编程的逻辑,以实现复杂的任务。例如,使用条件语句、逻辑运算符或伪代码等,以指导模型的推理过程。随着大语言模型 (LLMs) 的日益复杂,提示设计成为了一个不断进化的领域。随着研究人员继续探索通过提示设计所能达到的极限,这些原则将会得到进一步的完善和扩展。
4 实验
4.1 实验设置与实施详情
我们的所有评估工作都是在 ATLAS 上进行的 [18],这是一个专门为原则性提示评估设计的手工基准测试。每个原则都包含了 20 个人工挑选的,带有或不带有该原则提示的问题。依据 [10, 25] 的方法,我们通过人类评估来衡量大语言模型 (LLM) 输出在不同规模下的表现。
4.2 模型和评估指标
我们采用经过指令优化微调的 LLaMA-1-13、LLaMA-2-13,以及现成的 LLaMA-2-70B 聊天模式、GPT-3.5(ChatGPT)和 GPT-4 作为我们的基础模型。这些模型被分为不同的规模等级:小型(7B 模型)、中型(13B 模型)和大型(70B 模型,包括 GPT-3.5 和 GPT-4)。我们从两个方面对这些模型进行评估:效能提升和准确性评估。这两种评估方式共同帮助我们全面了解模型的性能表现。
-
效能提升。我们通过人工评估的方式来衡量在应用了明确指令原则后,不同大型语言模型(LLM)回答质量的提高。作为对比基准,我们使用原始未经修改的提示。展示出效能提升意味着模型性能由于采用了结构化、基于原则的指令而得到改善,详见图 2。
-
准确性评估。准确性是指模型输出或回答的精确度,确保其准确无误、相关并且无误导性错误。我们运用人工评审来衡量这一指标,这对检验模型的准确性至关重要。准确性是模型生成符合预期精确标准的输出的证明,详见图 3。
4.3 实验结果
4.3.1 小型、中型和大型大语言模型 (LLMs) 的性能提升情况
性能提升分析。 在应用了我们介绍的一系列改进原则之后,各种规模的大语言模型都展现出了明显的性能提升。这一点可以从 图 5 中看出。特别是在原则 2、5、15、16、25 和 26 的应用中,大型模型通过这些精心设计的提示获得了最为显著的进步。
准确度分析。 此外,如 图 5 所示,应用这些原则普遍使得模型在不同尺寸上的平均性能提高了超过 20%。具体来说,对于小型和中型的模型,性能提升通常在 20% 到 30% 之间;而对于大型模型,这一提升甚至可以超过 50%。
4.3.2 针对各个大语言模型 (LLMs) 的具体结果
性能提升细节。 如 图 6 所展示的,通过采用经过改良的提示,每个单独的大语言模型在响应质量上平均都实现了大约 50% 的提升。更加具体的分析结果,如 图 8 所示,展现了在不同大语言模型中,每个改进原则带来的具体提升情况。
准确度提升趋势。 此外,图 7 显示了在不同规模的大语言模型中准确度的提高情况。从 LLaMA-2-13B, LLaMA-2-70B-chat 到 GPT-3.5 和 GPT-4,我们可以看到一个明显的趋势:模型的规模越大,其准确度提升的幅度也越大。图 9 进一步详细展示了不同原则在提高准确度方面的具体成效。
4.3.3 大语言模型不同规模的更多实例
在本节中,我们将展示小型和中型大语言模型的一些额外实例。这些实例通过图 10 和 11 展示了小型 LLaMA-2-7B 模型,以及通过图 12 和 13 展示了中型 LLaMA-2-13B 模型。根据我们
5 结论
我们通过深入分析,提出了 26 条原则,这些原则能显著提高大语言模型(LLM)在处理输入信息时对关键要素的关注度,进而生成高质量的回答。在输入处理前,应用这些精心设计的原则来指导大语言模型,有助于激发模型产生更优秀的回应。我们的实验结果证明,这种方法能有效改善可能影响输出质量的上下文问题,使得模型生成的回应更加相关、简洁和客观。
关于未来的研究方向,我们的实验中采用了一种限制性的少样本 (few-shot) 提示方式来实施这些原则。我们计划进一步改进基础模型,让其更好地遵循我们的原则,可能会采取微调、强化学习、直接偏好优化或利用我们创建的数据集进行不同的提示方式等多种策略。成功的策略可以被融入到标准大语言模型的常规操作中,例如,通过将原始/原则性的提示作为输入,经过优化的原则性回应作为训练目标进行微调。
6 限制和讨论
尽管我们提出的 26 条原则旨在提升大语言模型在处理各种问题时的回应质量,但在面对极其复杂或高度专业化的问题时,这些原则的效果可能会有所下降。这主要取决于每个模型的推理能力和训练水平。为了全面评估这些原则的效果,我们已在不同规模的模型上进行了测试。
虽然我们在七种不同的语言模型上评估了这些原则,但需要明确的是,结构不同的其他模型可能会以不同方式对这些原则作出反应。此外,我们对改进和正确率的评估是基于有限的问题集合进行的。在未来的研究中,扩大问题集可能会带来更广泛的发现,并对每个原则的适用性提供更深入的理解。