您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[Google]:快速工程 - 发现报告

快速工程

2025-02-17GoogleY***
快速工程

作者:李本斯特拉 致谢 内容贡献者Michael Sherman 袁曹Erick ArmbrustAnant NawalgariaAntonio GulliSimone Cammel 策展人与编辑 Antonio GulliAnant NawalgariaGrace Mollison 技术作家Joey Haymaker 设计师Michael Lanning 目录 Step-back prompting25思维链 (CoT)29自洽性32树思维36ReAct (reason & act)37自动提示工程40代码提示42编写代码的提示42解释代码的提示44翻译代码的提示46用于调试和审查代码的提示48什么是多模态提示?54 提供示例54以简洁设计55请明确输出内容。56使用说明胜于限制56控制最大令牌长度58在提示中使用变量58尝试不同的输入格式和写作风格59在用于分类任务的少样本提示中,混合不同的类别。59适应模型更新60尝试不同的输出格式60 你不需要是数据科学家或机器学习工程师——每个人都能写作一个快速响应。 引言 当思考大型语言模型的输入和输出时,文本提示(有时辅以图像提示等其他模态)是模型用于预测特定输出的输入。你不需要成为数据科学家或机器学习工程师——每个人都可以编写提示。然而,设计最有效的提示可能很复杂。你的提示的许多方面会影响其效力:你使用的模型、模型的训练数据、模型配置、你的措辞、风格和语气、结构以及上下文都至关重要。因此,提示工程是一个迭代的过程。不充分的提示会导致模糊、不准确的响应,并可能阻碍模型提供有意义的输出。 当你与Gemini聊天机器人聊天时,1您基本上编写提示词,然而本白皮书专注于在Vertex AI内或通过使用API为Gemini模型编写提示词,因为直接对模型进行提示词编写您将能够访问配置,例如温度等。 这份白皮书详细探讨了提示工程。我们将研究各种提示技术,以帮助您开始使用,并与您分享成为提示专家的技巧和最佳实践。我们还将讨论在创建提示时您可能面临的挑战。 提示工程 记住大语言模型(LLM)是如何工作的;它是一个预测引擎。该模型将序列文本作为输入,然后根据其训练数据预测接下来的标记应该是什么。LLM被用于反复执行这一过程,将先前预测的标记添加到序列文本的末尾,以预测下一个标记。下一个标记的预测基于先前标记中的内容与LLM在训练期间所见内容之间的关系。 当您编写提示时,您正在尝试设置LLM以预测正确的标记序列。提示工程是设计高质量提示的过程,这些提示指导LLM生成准确的输出。此过程涉及调整以找到最佳提示、优化提示长度,并评估提示相对于任务在写作风格和结构方面的表现。在自然语言处理和LLM的背景下,提示是提供给模型以生成响应或预测的输入。 这些提示可用于实现各种理解和生成任务,例如文本摘要、信息提取、问答、文本分类、语言或代码翻译、代码生成以及代码文档或推理。 请随时参考谷歌的提示指南2,3使用简洁有效的提示示例。 在提示工程中,你将首先选择一个模型。提示可能需要针对你的特定模型进行优化,无论你使用的是 Vertex AI 中的 Gemini 语言模型、GPT、Claude,还是像 Gemma 或 LLaMA 这样的开源模型。 除了提示外,您还需要调整大型语言模型的多种配置。 LLM 输出配置 一旦您选择了模型,您就需要确定模型的配置。大多数大型语言模型(LLM)都提供各种配置选项,这些选项控制着大型语言模型的输出。有效的提示工程要求为您的任务优化这些配置。 输出长度 一个重要的配置设置是在响应中生成令牌的数量。生成更多令牌需要从LLM(大型语言模型)进行更多的计算,导致更高的能源消耗,潜在的响应时间更慢,以及更高的成本。 减少LLM的输出长度并不会使LLM在创建的输出中变得更加风格化或文本简洁,它只是导致LLM在达到限制后停止预测更多标记。如果你的需求需要较短的输出长度,你可能还需要设计你的提示词来适应。 输出长度限制对于某些大型语言模型提示技术(如ReAct)尤其重要,因为这些技术中,大型语言模型会在生成您所需响应后继续发出无用的标记。 需注意,生成更多代币需要从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个词。前K值越高,模型输出的创造性和多样性越强;前K值越低,模型输出的受限性和事实性越强。前K为1等同于贪婪解码。 •Top-P采样选择累积概率不超过某一定值(P)的最优标记。P的取值范围从0(贪婪解码)到1(LLM词汇表中的所有标记)。 在比较top-K和top-P之间选择最佳方法的方式是试验这两种方法(或两者结合)并看哪种方法能产生你所期望的结果。 将所有内容整合在一起 在between top-K、top-P、temperature和生成token数量的选择上,取决于具体的应用和期望的结果,并且所有设置相互影响。同样重要的是确保你理解所选模型如何结合不同的采样设置。 如果温度、top-K 和 top-P 都可用(如 Vertex Studio 所示),则满足 top-K 和 top-P 标准的标记将成为下一个预测标记的候选,然后应用温度从通过 top-K 和 top-P 标准的标记中进行采样。如果仅 top-K 或 top-P 可用,行为相同,但仅使用其中一个 top-K 或 P 设置。 如果温度不可用,则从满足top-K和/或top-P标准的任何token中随机选择,以生成单个下一个预测token。 在一种采样配置值的极限设置下,该采样设置要么抵消其他配置设置,要么变得无关紧要。 • 如果你将温度设置为0,top-K和top-P将变得无关紧要——最可能的标记将成为下一个预测的标记。如果你将温度设置得极高(高于1——通常达到10以上),温度将变得无关紧要,而通过top-K和/或top-P标准的任何标记都将被随机采样以选择下一个预测的标记。 • 若将top-K设置为1,温度值和top-P将变得无关紧要。仅有一个token通过top-K标准,该token即为预测的下一个token。若将top-K设置得极高,例如设置为LLM词汇表的大小,任何具有非零概率成为下一个token的token都将满足top-K标准,且最终将没有token被选中。 • 如果你将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开始。 NOTE:通过更多的自由(更高的温度、top-K、top-P 和输出标记),大语言模型可能会生成与相关性较低的文字。 WARNING:你见过以大量填充词结尾的回应吗?这也被称为“重复循环错误”,这是大型语言模型中一个常见问题,其中模型陷入循环,反复生成相同的(填充)词、短语或句子结构,这通常由不适当的温度和top-k/加剧。 top-p设置。这种情况可能发生在低温和高温设置下,尽管原因不同。在低温下,模型变得过度确定性,僵硬地遵循最高概率路径,如果该路径重新访问先前生成的文本,则可能导致循环。相反,在高温下,模型的输出变得过度随机,增加了随机选中的单词或短语偶然回到先前状态的概率,由于可用选项的数量庞大,从而因循环而形成。在两种情况下,模型的采样过程都会“卡住”,导致单调且无用的输出,直到输出窗口被填满。解决这个问题通常需要仔细调整温度和top-k/top-p值,以在确定性和随机性之间找到最佳平衡。 提示技术 大型语言模型(LLMs)经过调优以遵循指令,并在大量数据上进行训练,以便它们能够理解提示并生成答案。但LLMs并不完美;你的提示文本越清晰,就越有利于LLM预测下一条可能的文本。此外,利用LLMs训练方式和LLMs工作原理的特定技术将有助于你从LLMs中获得相关结果。 既然我们已经了解了提示工程是什么以及它需要什么,那么让我们深入探讨一些最重要的提示技术的例子。 General prompting / zero shot Azero-shot 5提示是最简单类型的提示。它仅提供任务的描述以及一些供大型语言模型(LLM)开始使用的文本。这种输入可以是任何内容:一个问题、一个故事的开头或指示。“零样本”这个名称代表“没有示例”。 让我们在Vertex AI中使用Vertex AI Studio(用于语言)。6它提供了一个测试提示的游乐场。在表1中,您将看到一个用于对电影评论进行分类的零样本提示示例。 如下表格格式是记录提示词的一种极佳方式。您的提示词很可能在最终进入代码库之前会经历多次迭代,因此以纪律性、结构化的方式跟踪您的提示词工程工作至关重要。关于此表格格式、跟踪提示词工程工作的重要性以及提示词开发过程,详见本章后面的最佳实践部分(“记录各种提示词尝试”)。 模型温度应设置为低数值,因为没有创造力需求,我们使用gemini-pro默认的top-K和top-P值,这些值有效地禁用了这两个设置(参见“LLM输出配置”部分)。注意生成的输出。这些词令人不安的和杰作应该使预测更复杂一些,因为这两个词在同一个句子中使用。 当零样本学习不奏效时,你可以在提示中提供演示或示例,这会导致“单样本”和“少样本”的提示。通用提示 / 零样本 One-shot & few-shot 在为AI模型创建提示时,提供示例是有帮助的。这些示例可以帮助模型理解你的要求。当你想引导模型生成特定的输出结构或模式时,示例尤其有用。 Aone-shot prompt, 提供single例如,因此得名“一次性”。其理念是模型有一个可模仿的示例,以最佳方式完成任务。 Afew-shot prompt 7提供多个向模型提供示例。这种方法向模型展示其需要遵循的模式。这