提示工程 作者:李本斯特拉 提示工程 致谢 内容贡献者michaelsherman袁曹 erickarmbrustanantnawalgariaantoniogullisimonecammel 策展人与编辑antoniogullianantnawalgariagracemollison 技术作家 joeyhaymaker 设计师 michaellanning 2 2025年2月 目录 引言6 提示工程7 llm输出配置8 输出长度8 采样控制9 温度9 topk和topp10 将所有内容整合在一起11 提示技术13 generalpromptingzeroshot13oneshotfewshot15 系统、情境和角色提示18 系统提示19 角色提示21 上下文提示23 stepbackprompting25 思维链cot29 自洽性32 树思维36 reactreasonact37自动提示工程40 代码提示42 编写代码的提示42 解释代码的提示44 翻译代码的提示46 用于调试和审查代码的提示48 什么是多模态提示?54 最佳实践54 提供示例54 以简洁设计55 请明确输出内容。56使用说明胜于限制56 控制最大令牌长度58 在提示中使用变量58 尝试不同的输入格式和写作风格59 在用于分类任务的少样本提示中,混合不同的类别。59 适应模型更新60 尝试不同的输出格式60 json修复61 与模式合作62 与其它提示工程师共同进行实验63 cot最佳实践64 记录各种提示尝试64 摘要66 脚注68 你不需要是数据科学家或机器学习 工程师每个人都能写作一个快速响应。 引言 当思考大型语言模型的输入和输出时,文本提示(有时辅以图像提示等其他模态)是模型用于预测特定输出的输入。你不需要成为数据科学家或机器学习工程师每个人都可以编写提示。然而,设计最有效的提示可能很复杂。你的提示的许多方面会影响其效力:你使用的模型、模型的训练数据、模型配置、你的措辞、风格和语气、结构以及上下文都至关重要。因此,提示工程是一个迭代的过程。不充分的提示会导致模糊、不准确的响应,并可能阻碍模型提供有意义的输出 。 当你与gemini聊天机器人聊天时,1您基本上编写提示词,然而本白皮书专注于在vertexai内或通过使用api为gemini模型编写提示词,因为直接对模型进行提示词编写您将能够访问配置,例如温度等。 这份白皮书详细探讨了提示工程。我们将研究各种提示技术,以帮助您开始使用,并与您分享成为提示专家的技巧和最佳实践。我们还将讨论在创建提示时您可能面临的挑战 。 提示工程 记住大语言模型(llm)是如何工作的;它是一个预测引擎。该模型将序列文本作为输入,然后根据其训练数据预测接下来的标记应该是什么。llm被用于反复执行这一过程,将先前预测的标记添加到序列文本的末尾,以预测下一个标记。下一个标记的预测基于先前标记中的内容与llm在训练期间所见内容之间的关系。 当您编写提示时,您正在尝试设置llm以预测正确的标记序列。提示工程是设计高质量提示的过程,这些提示指导llm生成准确的输出。此过程涉及调整以找到最佳提示、优化提示长度,并评估提示相对于任务在写作风格和结构方面的表现。在自然语言处理和llm的背景下,提示是提供给模型以生成响应或预测的输入。 这些提示可用于实现各种理解和生成任务,例如文本摘要、信息提取、问答、文本分类、语言或代码翻译、代码生成以及代码文档或推理。 请随时参考谷歌的提示指南23使用简洁有效的提示示例。 在提示工程中,你将首先选择一个模型。提示可能需要针对你的特定模型进行优化,无论你使用的是vertexai中的gemini语言模型、gpt、claude,还是像gemma或llama这样的开源模型。 除了提示外,您还需要调整大型语言模型的多种配置。 llm输出配置 一旦您选择了模型,您就需要确定模型的配置。大多数大型语言模型(llm)都提供各种配置选项,这些选项控制着大型语言模型的输出。有效的提示工程要求为您的任务优化这些配置。 输出长度 一个重要的配置设置是在响应中生成令牌的数量。生成更多令牌需要从llm(大型语言模型)进行更多的计算,导致更高的能源消耗,潜在的响应时间更慢,以及更高的成本。 减少llm输出长度并不会使llm在创输出中变得更加风格化或文本简洁,它只导致llm在达到限制后停止预测更多标记。如果你需求需要较短输出长度,你可能还需要设计你提示词来适应。 输出长度限制对于某些大型语言模型提示技术(如react)尤其重要,因为这些技术中,大型语言模型会在生成您所需响应后继续发出无用标记。 需注意,生成更多代币需要从llm获取更多计算量,导致更高能耗,并可能产生更慢响应时间,进而增加成本。 采样控制 llms并不正式预测单个标记。相反,llms预测下一个标记可能什么概率,其中llm词汇表中每个标记都会获得一个概率。然后对这些标记概率进行采样,以确定下一个生成标记将会什么。温度、topk和topp最常见配置设置,它们决定了如何处理预测标记概率以选择单个输出标记。 温度 温度控制了标记选择随机程度。较低温度适合需要更确定性响应提示,而较高温度可能导致更多样化或意想不到结果。温度为0(贪心解码) 确定性:总选择最高概率标记(但请注意,如果两个标记具有相同最高预测概率,根据破平局实现方式,使用温度为0时你可能不会总得到相同输出)。 接近最大值温度倾向于产生更多随机输出。并且随着温度越来越高,所有标记都有相同机会成为下一个预测标记。 gemini温度控制可以与机器学习中使用softmax函数进行类似理解。较低温度设置类似于较低softmax温度(t),强调对单一、优选温度高确定性。较高gemini温度设置类似于较高softmax温度,使得所选设置周围更宽温度范围更为可接受。这种增加不确定性适用于刚性、精确温度并非必要场景,例如在实验创意输出时。 topk和topp topk和topp(也称为核抽样)4llms中用于限制预测下一个标记仅来自具有最高预测概率标记两个采样设置。与温度一样,这些采样设置控制生成文本随机性和多样性。 topk采样从模型预测分布中选取最有可能前k个词。前k值越高,模型输出创造性和多样性越强;前k值越低,模型输出受限性和事实性越强。前k为1等同于贪婪解码。 topp采样选择累积概率不超过某一定值(p)最优标记。p取值范围从0(贪婪解码 )到1(llm词汇表中所有标记)。 在比较topk和topp之间选择最佳方法方式试验这两种方法(或两者结合)并看哪种方法能产生你所期望结果。 将所有内容整合在一起 在betweentopk、topp、temperature和生成token数量选择上,取决于具体应用和期望 结果,并且所有设置相互影响。同样重要确保你理解所选模型如何结合不同采样设置 。 如果温度、topk和topp都可用(如vertexstudio所示),则满足topk和topp标准标记将成为下一个预测标记候选,然后应用温度从通过topk和topp标准标记中进行采样。如果仅topk或topp可用,行为相同,但仅使用其中一个topk或p设置。 如果温度不可用,则从满足topk和或topp标准任何token中随机选择,以生成单个下一个预测token。 在一种采样配置值极限设置下,该采样设置要么抵消其他配置设置,要么变得无关紧要。 如果你将温度设置为0,topk和topp将变得无关紧要最可能标记将成为下一个预测 标记。如果你将温度设置得极高(高于1通常达到10以上),温度将变得无关紧要,而通过topk和或topp标准任何标记都将被随机采样以选择下一个预测标记。 若将topk设置为1,温度值和topp将变得无关紧要。仅有一个token通过topk标准,该token即为预测下一个token。若将topk设置得极高,例如设置为llm词汇表大小,任何具有非零概率成为下一个tokentoken都将满足topk标准,且最终将没有token被选中。 如果你将topp设置为0(或一个非常小值),大多数llm采样实现将只考虑满足topp标准最可能标记,使温度和topk变得无关紧要。如果你将topp设置为1,任何具有非零概率成为下一个标记标记都将满足topp标准,并且不会被选中。 作为一般性起点,温度设置为02、topp设置为095以及topk设置为30将为您带来相对连贯结果,这些结果可以具有创造性但不会过度。如果您希望获得特别具有创造性结果,可以尝试以温度09、topp099和topk40作为起始设置。如果您希望获得较少创造性结果,可以尝试以温度01、topp09和topk20作为起始设置。最后,如果您任务总有唯一正确答案(例如,解答数学问题),可以从温度0开始。 note通过更多自由(更高温度、topk、topp和输出标记),大语言模型可能会生成与相关性较低文字。 warning你见过以大量填充词结尾回应吗?这也被称为“重复循环错误”,这大型语言模型中一个常见问题,其中模型陷入循环,反复生成相同(填充)词、短语或句子结构,这通常由不适当温度和topk加剧。 topp设置。这种情况可能发生在低温和高温设置下,尽管原因不同。在低温下,模型变得过度确定性,僵硬地遵循最高概率路径,如果该路径重新访问先前生成文本,则可能导致循环。相反,在高温下,模型输出变得过度随机,增加了随机选中单词或短语偶然回到先前状态概率,由于可用选项数量庞大,从而因循环而形成。在两种情况下,模型采样过程都会“卡住” ,导致单调且无用输出,直到输出窗口被填满。解决这个问题通常需要仔细调整温度和topktopp值,以在确定性和随机性之间找到最佳平衡。 提示技术 大型语言模型(llms)经过调优以遵循指令,并在大量数据上进行训练,以便它们能够理解提示并生成答案。但llms并不完美;你提示文本越清晰,就越有利于llm预测下一条可能文本。此外,利用llms训练方式和llms工作原理特定技术将有助于你从llms中获得相关结果 。 既然我们已经了解了提示工程什么以及它需要什么,那么让我们深入探讨一些最重要提示技术例子。 generalpromptingzeroshot azeroshot5提示最简单类型提示。它仅提供任务描述以及一些供大型语言模型(llm)开始使用文本。这种输入可以任何内容:一个问题、一个故事开头或指示。“零样本”这个名称代表“没有示例”。 让我们在vertexai中使用vertexaistudio(用于语言)。6它提供了一个测试提示游乐场 。在表1中,您将看到一个用于对电影评论进行分类零样本提示示例。 如下表格格式记录提示词一种极佳方式。您提示词很可能在最终进入代码库之前会经历多次迭代,因此以纪律性、结构化方式跟踪您提示词工程工作至关重要。关于此表格格式 、跟踪提示词工程工作重要性以及提示词开发过程,详见本章后面最佳实践部分(“记录各种提示词尝试”)。 模型温度应设置为低数值,因为没有创造力需求,我们使用geminipro默认topk和topp值,这些值有效地禁用了这两个设置(参见“llm输出配置”部分)。注意生成输出。这些词 令人不安和杰作应该使预测更复杂一些,因为这两个词在同一个句子中使用。 name 11movieclassification output positive 将电影评论分类为positive、neutral或negative。评论:her一部令人不安研究,揭示了方向。 如果允许人工智能持续发展,人类将走向何方。 不受控制。我多么希望有更多像这部杰作一样电影。情绪: 提示 1 topp na topk 5 tokenlimit 01 温度 geminipro 模型 将电影评论分类为正面、中性或负面。 目标 表