提示工程 作者:李·布恩斯特拉 致谢 迈克尔·谢尔曼赵超艾里克·阿姆布罗斯安南特·纳瓦拉加里亚安东尼奥·古利西蒙·卡梅尔 安东尼奥·古利安南特·纳瓦拉加里亚Grace Mollison 技术文档编写员乔伊·海梅克 设计师迈克尔·兰宁 目录表 引言6提示工程7LLM 输出配置8输出长度8抽样控制9温度9Top-K和top-P10将其全部综合在一起11提示技术13一般提示/零样本提示13一次性与少量样本15系统、上下文和角色提示18系统提示19角色提示21上下文提示23 你不需要成为数据分析专家科学家或机器学习工程师 – 每个人都可以编写一个提示。 引言 在考虑大型语言模型的输入和输出时,文本提示(有时伴随其他模态,如图像提示)是模型用来预测特定输出的输入。您不需要是数据科学家或机器学习工程师——每个人都可以编写提示。然而,制作最有效的提示可能很复杂。您提示的许多方面都会影响其有效性:您使用的模型、模型的训练数据、模型配置、您的词汇选择、风格和语气、结构以及上下文都很重要。因此,提示工程是一个迭代的过程。不充分的提示可能导致模糊、不准确的结果,并阻碍模型提供有意义的输出。 当您与Gemini聊天机器人进行对话时,1您基本上编写提示词,然而这份白皮书侧重于在Vertex AI中为Gemini模型编写提示词,或通过使用API进行编写,因为通过直接提示模型,您可以访问诸如温度等配置。 这份白皮书详细讨论了即时工程。我们将探讨各种提示技术,帮助您入门,并分享提示专家的技巧和最佳实践。我们还将讨论在制作提示时可能遇到的挑战。 提示工程 记住一个语言模型的工作原理;它是一个预测引擎。该模型接受序列文本作为输入,然后基于其训练数据预测下一个标记应该是什么。语言模型被操作化以反复执行此操作,将先前预测的标记添加到序列文本的末尾,以便预测下一个标记。下一个标记的预测基于前一个标记中的内容与语言模型在训练过程中所见到的内容之间的关系。 当你编写一个提示时,你正在尝试设置大型语言模型以预测正确的令牌序列。提示工程是设计高质量提示的过程,以引导大型语言模型生成准确输出。这个过程涉及调整以找到最佳的提示,优化提示长度,并评估提示的写作风格和结构与任务的相关性。在自然语言处理和大型语言模型的情况下,提示是提供给模型以生成响应或预测的输入。 这些提示可用于实现各种理解和生成任务,例如文本摘要、信息提取、问答、文本分类、语言或代码翻译、代码生成以及代码文档或推理。 请随意参阅谷歌的提示指南。2,3使用简单而有效的提示示例。 当进行即时工程时,您将首先选择一个模型。无论您使用Vertex AI中的Gemini语言模型、GPT、Claude,还是开源模型如Gemma或LLaMA,都需要针对您的特定模型优化提示。 除了即时反馈,您还需要调整大型语言模型的各种配置。 LLM 输出配置 一旦您选择了您的模型,您需要确定模型配置。大多数大型语言模型都提供了各种配置选项,这些选项控制着语言模型的输出。有效的提示工程需要为您的任务优化这些配置。 输出长度 一个重要的配置设置是在响应中生成多少个标记。生成更多的标记需要LLM进行更多的计算,这可能导致更高的能耗、可能的响应时间变慢和更高的成本。 减少LLM的输出长度并不会使LLM在创建输出时在风格或文本上变得更加简洁,它只是导致LLM在达到限制后停止预测更多标记。如果你的需求需要较短的输出长度,你可能还需要设计你的提示来适应这种情况。 输出长度限制对于某些LLM提示技术,如ReAct,尤为重要,在这些技术中,LLM会在你想要的响应之后继续发出无用的标记。 请注意,生成更多代币需要LLM进行更多计算,这导致更高的能耗和潜在较慢的响应时间,进而导致更高的成本。 抽样控制 LLMs 并不正式预测单个标记。相反,LLMs 预测下一个可能出现的标记的概率,其中 LLM 的词汇表中的每个标记都分配一个概率。然后,这些标记概率被采样以确定下一个生成的标记。温度、top-K 和 top-P 是最常用的配置设置,它们决定了如何处理预测的标记概率来选择单个输出标记。 温度 温度控制了代币选择的随机程度。较低的温度适合期望更确定性响应的提示,而较高的温度可能导致更多样化或意外的结果。0温度(贪婪解码)是 确定性:始终选择概率最高的令牌(尽管请注意,如果有两个令牌具有相同的最高预测概率,则根据平局处理方式的实现,您可能并非始终在温度为0时得到相同的结果)。 温度接近最大值时往往会产生更随机的输出。随着温度越来越高,所有标记都成为下一个预测标记的可能性相等。 Gemini温度控制可以以与机器学习中使用的softmax函数相似的方式理解。低温设置类似于低softmax温度(T),强调了具有高度确定性的单一、首选的温度。更高的Gemini温度设置类似于高softmax温度,使得所选设置周围更广泛温度范围内的温度更易接受。这种增加的不确定性适应了那些可能并不需要严格、精确温度的场景,例如当尝试创新输出时。 Top-K和top-P Top-K 和 top-P(也称为核采样)4在LLMs中,有两大采样设置用于限制预测的下一个标记只能来自具有最高预测概率的标记。与温度相似,这些采样设置控制了生成文本的随机性和多样性。 •TOP-K采样从模型预测分布中选择最可能的K个标记。top-K值越高,模型的输出越具有创造性和多样性;top-K值越低,模型的输出越不稳定、更偏向事实。top-K为1等同于贪婪解码。 •顶级-P采样选择累积概率不超过某一特定值(P)的最优标记。P的取值范围从0(贪婪解码)到1(LLM词汇表中的所有标记)。 选择顶级-K和顶级-P之间的最佳方法是通过尝试两种方法(或同时使用)并查看哪种方法产生您所需的结果。 将其全部综合在一起 在选择顶级K、顶级P、温度以及生成token的数量之间进行选择,这取决于具体的应用和期望的结果,并且所有设置都会相互影响。同时,确保你理解所选模型如何将不同的采样设置组合在一起也是很重要的。 如果温度、top-K和top-P都可用(如在Vertex Studio中),满足top-K和top-P两个条件的标记将成为下一个预测标记的候选者,然后对通过top-K和top-P条件的标记应用温度进行采样。如果只有top-K或top-P可用,行为相同,但仅使用一个top-K或P设置。 如果温度不可用,则从满足前K个和/或前P个标准的任意标记中随机选择以生成单个下一个预测标记。 在一种采样配置值极端设置的情况下,该采样设置要么取消其他配置设置,要么变得无关紧要。 • 如果您将温度设置为0,top-K和top-P就变得无关紧要——最可能的标记成为下一个预测的标记。如果您将温度设置得非常高(超过1—通常在10s以上),温度就变得无关紧要,然后根据top-K和/或top-P标准筛选出的任何标记都会被随机采样以选择下一个预测的标记。 • 如果将top-K设置为1,温度和top-P变得无关紧要。只有一个标记符通过top-K标准,该标记符即为下一个预测的标记符。如果你将top-K设置得非常高,例如达到LLM词汇表的大小,任何具有成为下一个标记符的非零概率的标记符都将满足top-K标准,并且没有任何标记符被排除。 • 如果将top-P设置为0(或一个非常小的值),大多数LLM采样实现将只考虑最可能的令牌以满足top-P标准,使得温度和top-K变得无关紧要。如果您将top-P设置为1,任何有非零概率成为下一个令牌的令牌都将满足top-P标准,且没有任何令牌被排除。 作为一个一般性的起始点,温度设置为0.2,top-P设置为0.95,top-K设置为30,将为您提供相对一致的、富有创意但不会过于夸张的结果。如果您想要特别有创意的结果,可以尝试将温度设置为0.9,top-P设置为0.99,top-K设置为40。如果您想要较不创意的结果,可以尝试将温度设置为0.1,top-P设置为0.9,top-K设置为20。最后,如果您的任务始终有一个唯一正确的答案(例如,解答数学问题),则可以从温度设置为0.开始。 注意:在更大的自由度(更高的温度、top-K、top-P以及输出令牌)下,大型语言模型可能会生成与主题关联度较低的文本。 警告:您曾见过一个以大量填充词结尾的回应吗?这也被称为“重复循环错误”,这是大型语言模型中常见的問題,模型陷入循环,反复生成相同的(填充)单词、短语或句子结构,通常由不适当的温度和top-k/ 在低温度设置和高温度设置下都可能发生top-p设置。虽然原因不同。在低温下,模型变得过于确定性,严格地 sticking rigidly to the highest probability path,如果该路径再次生成先前生成的文本,可能会导致循环。相反,在高温下,模型的输出变得过于随机,增加了随机选择的单词或短语偶然回到先前状态的概率,由于可用的选项数量庞大,这可能导致循环。在这两种情况下,模型的采样过程都会“卡住”,导致单调且无帮助的输出,直到输出窗口被填满。解决这个问题通常需要仔细调整温度和top-k/top-p值,以找到确定性随机性之间的最佳平衡。 提示技术 大型语言模型经过调整以遵循指令,并在大量数据上训练,以便它们可以理解提示并生成答案。但大型语言模型并不完美;提示文本越清晰,对于大型语言模型预测下一个可能的文本就越有利。此外,利用大型语言模型的训练方式和运作方式的具体技术将有助于您从大型语言模型中获得相关结果。 现在我们已经了解了提示工程是什么以及需要哪些要素,让我们来探讨一些最重要的提示技术示例。 一般提示/零样本提示 A零次射击5提示符是最简单的一种提示符。它只为LLM提供任务描述和一些文本以开始。这种输入可以是任何东西:一个问题、一个故事的开头,或是一些指令。零样本(zero-shot)这个名字代表“无示例”。 让我们在Vertex AI中使用Vertex AI Studio(用于语言)。6这提供了一个测试提示的游乐场。在表1中,您将看到一个用于分类电影评论的零样本提示示例。 表格格式如下,是一种很好的记录提示的方法。您的提示可能在最终进入代码库之前经历多次迭代,因此,以纪律性和结构化的方式跟踪您的提示工程工作非常重要。关于这种表格格式、跟踪提示工程工作的重要性以及提示开发过程,将在本章后面的“最佳实践”部分进行更多介绍(“记录各种提示尝试”)。 模型温度应设置为低数值,因为不需要创造力,我们使用gemini-pro默认的top-K和top-P值,这实际上禁用了这两个设置(见上文的‘LLM 输出配置’)。请注意生成的输出。单词令人不安的并且杰作应当使预测变得更加复杂,因为这两个词在同一句子中被使用。 当零样本技术不适用时,您可以在提示中提供演示或例子,从而实现“一次性”和“少量样本”提示。通用提示/零样本 一次性与少量样本 在为AI模型创建提示时,提供示例是有帮助的。这些示例有助于模型理解你所寻求的内容。当你想引导模型走向特定输出结构或模式时,示例特别有用。 A一次性提示,提供了单一示例,因此得名单次射击。其理念是模型有一个可以模仿的示例,以最佳完成任务。 A少量样本提示7提供多重例子用于模型。这种方法向模型展示了一个它需要遵循的图案。这个想法与单次展示类似,但增加多个期望图案的例子会增加模型遵循该图案的概率。 所需用于少量提示的示例数量取决于几个因素,包括任务的复杂性、示例的质量以及您使用的生成式AI(gen AI)模型的能力。一般来说,您应该至少使用三个到五个示例进行少量提示。然而,对于更复杂的任务,您可能需要使用更多示例,或者由于模型输入长度限制,可能需要使用更少的示例。 表2展示了几个样本提示示例,我们将使用与之前相同的gemini-pro模型配置设置,除了将令牌限制增加到可以容纳更长的响应需求。 当您为您的要求选择示例时,请使用与您想执行的任务相关的示例。这些示例应多样化、