该文章是对谷歌第七版Prompt Engineering的阅读与理解
Prompt Engineering
Author: Lee Boonstra
引言
在构建大型语言模型(LLM)的输入输出系统时,文本提示(Prompt)是模型用于产生特定输出的输入内容(有时也可能使用其他的模态,比如图像提示)。提示工程(Prompt Engineering)并非仅限于专业技术人员 ,任何使用者都可以进行提示编写。要设计出最优化的提示策略往往具有相当的挑战性。许多因素都会影响提示的效果:使用的模型、模型的训练数据、模型配置、措辞、风格和语气、结构以及上下文,这些都至关重要。因此,提示工程是一个反复迭代的过程。欠佳的提示可能会导致模棱两可、不准确的回复,还会妨碍模型输出有意义的内容。
例如,当你与Gemini Chatbot聊天时,本质上是在编写提示语。本白皮书重点关注在Vertex AI中为Gemini模型编写提示语,或通过应用程序接口(API)来编写,因为直接向模型发送提示语(而不是使用成品),你就能对诸如温度参数等配置进行设置。
本书将深入探讨提示工程。我们将研究各种提示技巧,并分享实用窍门和最佳实践,助你成为提示工程专家。我们还会探讨在精心编写提示语过程中可能遇到的一些挑战。
提示工程
大语言模型(LLM)的工作原理:它是一个预测引擎。模型将连续的文本作为输入,然后根据其训练数据预测下一个标记(token)。LLM 通过不断重复这一过程来运行,将先前预测的 token 添加到连续文本的末尾,以预测下一个token。下一个token的预测基于与前序token之间的关联性,以及 LLM 在训练过程中所学习到的内容。
当你编写提示词时,实际上是在尝试引导 LLM 预测正确的 token 序列。提示工程是指设计高质量提示词的过程,这些提示词会引导 LLM 生成准确的输出。这一过程包括反复调整以找到最佳提示、优化提示长度,以及结合任务需求评估提示的写作风格和结构。 在自然语言处理和 LLM 的语境中,提示词是提供给模型,以便获得响应的输入。这些提示词可用于完成各类理解与生成任务,例如文本摘要、信息提取、问答交互、文本分类、语言或代码翻译、代码生成,以及代码文档编写或推理等。
在进行提示工程时,首先需要选择模型。无论是使用Vertex AI中的 Gemini 语言模型、GPT、Claude,还是 Gemma 或 LLaMA 等开源模型,可能都需要针对模型进行提示词的特定优化。除了提示词本身,可能还需要调整 LLM 的各种配置参数。
LLM 输出配置
在选择了模型之后,就需要对模型进行配置。大部分 LLM 都提供了多种多样的配置项,以此来控制 LLM 的输出。 有效的提示工程要求针对特定任务,设置特定的最佳配置。
输出长度
输出长度是控制生成内容中 Token 数量的关键配置。生成更多 Token 会增加计算量,可能导致更高的能耗、更长的响应时间以及更高的成本。
需要注意的是,减少输出长度并不会让 LLM 的回答变得更简洁或更有风格------它只是强制模型在达到限制时停止生成。如果需要更简短的输出,还需通过提示词(prompt)设计来引导模型。
此外,输出长度限制也是一种重要的技术手段,可避免 LLM 在生成有效内容后继续输出无意义的 Token。
Tips 生成更多的Token需要LLM进行更多的计算,会导致更高的能耗和更慢的响应时间,进而导致更高的成本
采样控制
LLM 并不直接预测单个确定的 Token,而是计算下一个 Token 出现的概率分布。LLM词汇表中的每个Token都有一个概率,模型对这些 Token 概率进行采样,以确定下一个生成的 Token 将是什么。常见的采样策略包括调节 Temperature (温度参数)、Top-K (保留概率最高的 K 个 Token)和 Top-P(核采样,保留累积概率达到 P 的最小 Token 集合),这些参数决定了模型如何处理概率分布以生成最终结果。
温度
温度参数控制着 token 选择过程中的随机性程度。 较低的温度值适用于需要确定性输出的场景,而较高的温度值则可能产生更多样化或出人意料的结果。当温度参数为0时(即greedy decoding模式),模型会完全确定性地选择预测概率最高的token(需注意:若多个token具有相同的最高概率,根据系统采用的平局决胜机制,温度设为0时输出结果仍可能不一致)。
当温度参数接近最大值时,输出随机性显著增强。随着温度值不断升高,所有token被选为下一个预测结果的概率将趋于均等。
例如:Gemini模型的温度调控机制与机器学习中的softmax函数运作原理类似:
- 低温设定相当于softmax中的低温参数(T),会强化模型对单一最优解的确定性选择
- 高温设定则类似于调高softmax温度值,使得在设定值附近更宽泛的温度范围都成为可行选项
这种可控的随机性扩展特别适用于以下场景:
当应用场景不需要严格精确输出时(例如创意内容生成),这种不确定性反而能带来更好的效果。
Top-K and top-P
在大型语言模型中,Top-K和Top-P是两种关键的采样参数,用于将预测范围限制在高概率token集合内。与温度参数类似,这些设置直接影响生成文本的随机性和多样性特征:
Top-K采样 :从模型预测的概率分布中筛选出前K个最可能的token。该参数的影响表现为:
- 较高的K值会增强输出的创造性和多样性
- 较低的K值会使输出更加保守和真实
- 当K=1时,其效果等同于greedy decoding模式(选择概率最大的)
类似于优先队列
• Top-P采样 :动态选择概率累积达到阈值P的最小token集合,实现更智能的概率分布截断。 其的工作原理是:从概率最高的token开始按序累积,直到总概率首次超过预设阈值P。该参数的取值范围为:
- P=0:退化为greedy decoding模式(仅选择最高概率token)
- P=1:涵盖模型词表中的全部token
类似于有序前缀和
选择Top-K和Top-P的最佳方式是对两种方法(或同时使用两者)进行实验,观察哪种方法能产生符合预期的结果。
参数综合配置指南
在Top-K、Top-P、温度参数和生成token数量之间的选择取决于具体应用场景和预期输出效果,这些参数设置会相互影响。同时,必须充分理解所选模型是如何将这些不同的采样设置组合在一起的。(不同模型可能不一样)
例如,当温度(temperature)、Top-K和Top-P参数均可使用时(如Vertex Studio中的配置),模型会先筛选出同时满足Top-K和Top-P条件的候选token集合,再基于该集合应用温度参数进行最终采样。 若仅启用Top-K或Top-P中的某一项,则仅依据该单一参数筛选候选token,其他处理流程保持不变。
若温度参数不可用,系统将从符合Top-K或Top-P条件的token中随机选取一个作为下一个预测token。 当某个采样参数设为极端值时,该参数要么会使其他配置失效,要么自身将失去调节意义。
-
当温度设为 0 时,Top-K和Top-P将失效,模型会直接选择概率最高的token作为预测结果。
-
若将温度设为极高值(超过1,通常达到几十),温度参数本身将失去调节作用,系统会从通过Top-K或Top-P筛选的候选token中随机选取下一个预测token。
-
将Top-K设置为 1 时,温度参数和Top-P将失效,仅有一个token能通过Top-K筛选条件,该token将直接作为下一个预测结果输出。
-
若将Top-K设置为极大值(如等于LLM词表大小),则任何具有非零概率的token都能满足Top-K条件,此时Top-K筛选功能实质上被禁用。
-
当Top-P设为0(或极小值)时,多数LLM实现将仅考虑概率最高的单个token作为候选,此时温度参数和Top-K将失效。
-
若将Top-P设为1,则所有非零概率的token都能满足筛选条件,Top-P功能即被完全禁用。
参数设置 | 产生的支配效应 | |
---|---|---|
1 | 温度=0 | greedy decoding,其他参数失效 |
2 | 温度极高(>10) | 温度效应消失,退化为随机采样 |
3 | Top-K=1 | 等价于温度=0的确定性选择 |
4 | Top-K=词表大小 | 相当于禁用Top-K筛选功能 |
5 | Top-P=0 | 退化为greedy decoding |
6 | 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-P值 | Top-K值 | 适用场景说明 |
---|---|---|---|---|
平衡模式 | 0.2 | 0.95 | 30 | 保证连贯性同时保持适度创造性 |
创意模式 | 0.9 | 0.99 | 40 | 适用于需要发散思维的场景 |
精确模式 | 0.1 | 0.9 | 20 | 适合事实性内容生成 |
数学计算 | 0 | - | - | 确定性任务(唯一正确答案) |
注意:当参数自由度较高(温度值、Top-K、Top-P及输出token数量设置较大)时,LLM 生成的结果可能会出现相关性降低的情况。
警告:是否遇到过模型生成内容末尾出现大量无意义填充词的情况?这种现象被称为 "重复循环缺陷",是大语言模型中常见的问题:模型会陷入循环,不断重复生成相同的单词、短语或句式结构,且往往因温度参数和Top-K/Top-P设置不当而恶化。该问题在低温或高温设置下都可能出现,但成因不同:
- 低温环境下,模型会变得过度确定化,严格遵循最高概率路径,若该路径指向已生成的文本,就会形成循环
- 高温环境下,模型输出会过于随机,由于可选token数量庞大,随机选择的单词或短语可能偶然引导回先前状态,从而形成循环
两种情况下,模型的采样过程都会"卡住",导致输出单调无用,直到填满输出窗口。解决此问题通常需要仔细调整温度和Top-K/Top-P值,在确定性和随机性之间找到最佳平衡点。
小结
该部分主要是讲了与LLM配置有关的参数:输出长度,温度、Top-K、Top-P。在使用API进行开发时会需要配置这些参数,不过在使用成品时不需要。其中温度、Top-K、Top-P直接影响了输出结果的多样性与准确性。