Google Prompt Engineering

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 提示工程 作者:李 · 布恩斯特拉
2. Prompt Engineering 致谢 内容贡献者 迈克尔 · 谢尔曼 Yuan Cao Erick Armbrust Anant Nawalgaria Antonio Gulli Simone Cammel 策展人与编辑 安东尼奥 · 古利 安南特 · 纳瓦尔加 里亚 格蕾丝 · 莫里森 技术撰稿人 乔伊 · 海梅克 Designer 迈克尔 · 兰宁 2025 年 2 月 2
3. Table of contents Introduction 6 提示工程 7 大语言模型输出配置 8 输出长度 8 采样控制 9 Temperature 9 Top‑K 与 Top‑P 10 综合应用 11 Prompting techniques 13 通用提示 / 零样本 13 单样本与少样本学习 15 系统提示、上下文提示与角色提示 18 System prompting 角色提示 21 上下文提示 23 19
4. 退步提示法 25 思维链( CoT ) 29 自洽性 32 Tree of Thoughts (ToT) 36 反应(推理与行动) 37 自动提示工程 40 代码提示法 42 编写代码的提示 42 解释代码的提示 44 翻译代码的提示 46 调试与审查代码的提示 48 多模态提示如何? 54 最佳实践 54 提供示例 54 设计力求简洁 55 明确输出要求 56 优先使用指令而非限制条件 56 Control the max token length 58 在提示词中使用变量 58 尝试不同输入格式与写作风格 59 对于小样本分类任务的提示,可混合不同类别样本 59 适应模型更新 60 Experiment with output formats 60
5. JSON 修复 61 使用模式 62 与其他提示工程师共同实验 63 CoT Best practices 64 记录各种提示尝试 64 Summary 尾注 68 66
6. Prompt Engineering You don’t need to be a data scientist or a machine learning engineer – everyone can write a prompt. 引言 在考虑大型语言模型的输入输出时,文本提示(有时辅以图像提示等其他模态)是模型用于预测 特定输出的输入。您无需成为数据科学家或机器学习工程师 —— 人人都可以编写提示。然而,设 计最有效的提示可能相当复杂。提示的诸多方面都会影响其效果:所使用的模型、模型的训练数 据、模型配置、措辞选择、风格与语气、结构以及上下文都至关重要。因此,提示工程是一个迭 代过程。不恰当的提示可能导致模棱两可、不准确的响应,并阻碍模型提供有意义的输出。 2025 年 2 月 6
7. Prompt Engineering 当您与 Gemini 聊天机器人对话时,本质上是在编写提示词。本白皮书重点介绍如何为 Ve ex AI 平台内或通过 API 调用的 Gemini 模型编写提示词,因为直接对模型进行提示时,您将能 访问温度等配置参数。 本白皮书详细探讨提示工程技术。我们将分析多种提示技巧以帮助您快速入门,并分享成 为提示专家的实用建议与最佳实践,同时讨论编写提示时可能遇到的一些挑战。 提示工程 记住大语言模型( LLM )的工作原理:它是一个预测引擎。模型接收序列文本作为输入,然后 根据其训练数据预测下一个标记应该是什么。LLM 通过不断重复这一过程运作,将先前预测的 标记添加到序列文本末尾以预测后续标记。下一个标记的预测基于先前标记内容与 LLM 训练期 间所见模式之间的关系。 编写提示词时,你实际上是在引导 LLM 预测正确的标记序列。提示工程就是设计高质量提示的 过程,这些提示能指导大语言模型生成准确输出。该过程包括调试寻找最佳提示、优化提示长度, 以及根据任务需求评估提示的写作风格和结构。在自然语言处理和 LLM 领域,提示是指为生成 响应或预测而提供给模型的输入内容。 2025 年 2 月 7
8. Prompt Engineering 这些提示可用于实现各类理解与生成任务,如文本摘要、信息抽取、问答系统、文本分类、 语言或代码翻译、代码生成、代码文档编写及逻辑推理等。 请随时参考谷歌的提示指南 2,3,其中包含简单高效的提示示例。 进行提示工程时,首先需选择模型。无论您使用 Vertex AI 中的 Gemini 语言模型、 GPT 、 Claude,还是 Gemma 或 LLaMA 等开源模型,都可能需要针对特定模型优化提示。 除了提示词外,你还需要调整大语言模型的各种配置参数。 大语言模型输出配置 选定模型后,需进一步调试模型配置。大多数大语言模型提供多种配置选项来控制输出效果。高 效的提示词工程要求根据任务需求优化这些参数设置。 输出长度 关键配置项是设定生成响应内容的令牌数量。生成更多令牌会消耗更多算力,导致能耗增加、 响应延迟和成本上升。 2025 年 2 月 8
9. Prompt Engineering 减少大语言模型( LLM )的输出长度并不会使其生成的文本在风格或内容上更简洁,它只是 让模型在达到限制时停止预测更多标记。若您需要更短的输出长度,可能还需对提示进行针对 性设计以适应需求。 输出长度限制对某些 LLM 提示技术尤为重要,例如 ReAct (推理 ‑ 行动循环),该场景下模型可能会在所 需响应后持续生成无用标记。 需注意:生成更多标记会消耗 LLM 更多算力,导致能耗增加、响应延迟及成本上升。 采样控制 大语言模型( LLM )并非直接预测单一标记,而是预测下一个可能标记的概率分布,模型词 汇表中的每个标记都会被赋予一个概率值。随后通过采样这些概率分布来决定实际输出的标记。 温度( Temperature )、 Top‑K 和 Top‑P 是最常见的配置参数,用于控制如何根据预测出 的标记概率筛选出最终输出的单个标记。 温度 温度参数控制标记选择的随机性程度。较低温度适用于需要确定性输出的提示词,而较高温度 可能产生更多样化或出人意料的结果。当温度设为 0 时(贪婪解码模式) 2025 年 2 月 9
10. Prompt Engineering 确定性:总是选择概率最高的 token (但需注意,若两个 token 的预测最高概率相同,根据平 局处理方式的不同,即使温度参数设为 0 也可能得到不同输出)。 温度值接近上限时,输出随机性更强。随着温度值不断升高,所有 token 作为下一个预测 token 的出现概率会趋 于均等。 Gemini 温度控制机制可类比机器学习中的 softmax 函数:低温设置类似低 softmax 温度 (T), 突出单一优选温度的高确定性;高温设置则类似高 softmax 温度,使选定温度周围更大范围值变 得可接受。这种增强的不确定性适用于非严格精准温度要求的场景,例如创意输出实验。 Top‑K 与 top‑P Top‑K 与 top‑P (又称核采样)是大型语言模型中用于限制预测下一个令牌来自最高预测概率 令牌的两种采样设置。与温度参数类似,这些采样设置控制生成文本的随机性和多样性。 • Top‑K 采样从模型预测的分布中选择前 K 个最可能的令牌。top‑K 值越高,模型输出越具创 造性和多样性;top‑K 值越低,模型输出越受限且趋于事实性。top‑K 值为 1 时等同于贪婪解 码。 2025 年 2 月 10
11. Prompt Engineering • Top‑P 采样会选择累积概率不超过特定值( P )的顶部词元。P 的取值范围从 0 (贪婪 解码)到 1 (涵盖大语言模型词汇表中的所有词元)。 选择 top‑K 还是 top‑P 的最佳方法是同时尝试两种方法(或组合使用),观察哪种能产生符合预期的结果。 整合应用 在 top‑K 、 top‑P 、温度参数及生成标记数量之间进行选择,需根据具体应用场景和预期效果 而定,这些设置会相互影响。同时,务必理解所选模型如何将不同采样设置组合运用。 若温度参数、 top‑K 和 top‑P 均可配置(如 Vertex Studio ),同时满足 top‑K 和 top‑P 条件 的标记将作为候选预测标记,随后应用温度参数从这些候选标记中采样。若仅支持 top‑K 或 top‑ P,则仅使用单一设置,流程同理。 若温度参数不可用,则从符合 top‑K 和 / 或 top‑P 条件的标记中随机选取,生成单个预测标记。 当某一采样配置值设为极端参数时,该设置会抵消其他配置效果或失去实际意义。 2025 年 2 月 11
12. Prompt Engineering • 若将温度值设为 0,则 top‑K 和 top‑P 参数将失效 —— 系统始终选择概率最高的令牌作 为下一个预测令牌。若将温度值设得极高(超过 1,通常达两位数),温度参数将失效,此时 系统会随机采样通过 top‑K 和 / 或 top‑P 筛选的令牌作为预测结果。 • 若将 top‑K 设为 1,温度与 top‑P 参数将失效。此时仅有一个令牌能通过 top‑K 筛选,该令 牌即成为下一个预测令牌。若将 top‑K 设为极大值(如设为 LLM 词表大小),则所有非零概率 令牌都能通过筛选,系统不会排除任何候选令牌。 • 若将 top‑P 设为 0 (或极小值),多数 LLM 采样实现将仅考虑概率最高的令牌通过筛选, 此时温度与 top‑K 参数失效。若将 top‑P 设为 1,则所有非零概率令牌都能通过筛选,系统不会 排除任何候选令牌。 作为通用起始点,温度值设为 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 参数往往会加剧此现象。 2025 年 2 月 12
13. Prompt Engineering top‑p 设置问题。这种现象在低温和高温设置下都可能发生,但原因不同。低温时模型会过度确 定性地遵循最高概率路径,若该路径重复已生成文本则导致循环;高温时模型输出过于随机,大 量可选词中偶然选择先前状态的概率增加,同样形成循环。两种情况下采样过程都会 " 卡住 ", 产生单调无用的输出直至填满窗口。通常需精细调整温度值和 top‑k/top‑p 参数,在确定性与随 机性间找到平衡点。 提示技巧 大语言模型经过指令微调并基于海量数据训练,能理解提示并生成回答。但模型并非完美 —— 提 示文本越清晰,模型预测后续文本的效果越好。此外,利用大语言模型训练原理和工作机制的特 定技巧,能帮助您获得更相关的结果。 既然我们已经了解了什么是提示工程及其所需条件,接下来让我们深入探讨一些最重要的提示技术示例。 通用提示 / 零样本 zero-shot 5 ~ 提示是最简单的提示类型。它仅提供任务描述和一些供 LLM 开始的文本。这个输 入可以是任何内容:一个问题、一个故事的开头或指令。零样本的名称代表 “ 无示例 ”。 2025 年 2 月 13
14. Prompt Engineering 让我们使用 Ve ex AI Studio (语言版)中的 Ve ex AI6,它提供了一个测试提示词的 playground。在表 1 中,您将看到一个用于电影评论分类的零样本提示示例。 如下所示的表格格式是记录提示词的绝佳方式。您的提示词在进入代码库前可能会经历多次迭 代,因此以规范、结构化的方式跟踪提示工程工作非常重要。关于此表格格式、跟踪提示工程 工作的重要性以及提示开发流程的更多内容,请参阅本章后续 “ 最佳实践 ” 部分中的 “ 记录 各类提示尝试 ”。 模型温度应设置为较低数值,因为不需要创造性,我们使用 gemini‑pro 默认的 top‑K 和 top‑ P 值(这实际上禁用了这两项设置,参见前文 ‘LLM 输出配置 ’ )。请密切关注生成内容。 词汇 disturbing 和 masterpiece~ 会使预测稍显复杂,因为这两个词出现在同一句子中。 2025 年 2 月 14
15. Prompt Engineering Name 1_1_ 电影分类 Goal 将电影评论分类为正面、中性或负面。 模型 gemini-pro 温度 nx̀0 np 令牌限制 5 Top-K N/A Top-P 1 提示词 Classify movie reviews as POSITIVE, NEUTRAL or NEGATIVE. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. I wish there were more movies like this masterpiece . Sentiment: 输出 积极 表 1. 零样本提示示例 当零样本提示无效时,可在提示中提供示范或示例,即 “ 单样本 ” 与 “ 少样本 ” 提示技术。通用提示 / 零 样本 单样本与少样本 为 AI 模型设计提示时,提供示例有助于模型理解需求。当需要引导模型输出特定结构或模式时, 示例尤为有效。 单样本提示会提供 single~ 个示例,因此得名。其核心是让模型通过模仿示例来完成任务。 少样本提示会向模型提供 multiple~ 个示例。该方法通过展示待遵循的模式,原理与单样本类似, 但多示例能提升模型遵循目标模式的概率。 2025 年 2 月 15
16. Prompt Engineering 小样本提示所需的示例数量取决于几个因素,包括任务的复杂性、示例质量以及所用生成式 AI 模型的能力。一般而言,建议至少使用三到五个示例进行小样本提示。但对于更复杂的任务, 可能需要更多示例;若受模型输入长度限制,则可能需要减少示例数量。 表 2 展示了一个小样本提示示例,我们将沿用之前的 gemini‑pro 模型配置设置,仅提 高 token 限额以适应生成长响应需求。 Goal 将披萨订单解析为 JSON 模型 gemini-pro 温度 nx̀0 np 令牌限制 250 Top‑K 采样 N/A Top‑P 采样 1 提示词 Parse a customer's pizza order into valid JSON: EXAMPLE: I want a small pizza with cheese, tomato sauce, and pepperoni. JSON Response: ``` { "size": "small", "type": "normal", "ingredients": [["cheese", "tomato sauce", "peperoni"]] } ``` 转下页 ... 2025 年 2 月 16
17. Prompt Engineering 提示 EXAMPLE: Can I get a large pizza with tomato sauce, basil and mozzarell a { "size": "large", "type": "normal", "ingredients": [["tomato sauce", "bazel", "mozzarella"]] } Now, I would like a large pizza, with the first half cheese an d mozzarella. And the other tomato sauce, ham and pineapple. JSON Response: 输出 ``` { "size": "large", "type": "half-half", "ingredients": [["cheese", "mozzarella"], ["tomato sauce", "ham", "pineapple"]] } ``` Table 2. An example of few-shot prompting 为提示词选择示例时,应选用与目标任务相关的案例。示例需具备多样性、高质量且表述严谨。 细微差错可能导致模型混淆,产生不理想的输出结果。 如果你试图生成对各种输入都具有鲁棒性的输出,那么在示例中包含边缘案例就非常重要。边缘 案例是指那些不寻常或意外的输入,但模型仍应能够处理。 2025 年 2 月 17
18. Prompt Engineering 系统提示、上下文提示与角色提示 系统提示、上下文提示和角色提示均是用于指导大语言模型生成文本的技术,但各自侧重点不同: • 系统提示为语言模型设定整体语境与目标。它定义了模型应执行任务的 ‘ 宏观框架 ’, 例如语言翻译、评论分类等。 情境提示提供与当前对话或任务相关的具体细节或背景信息。它帮助模型理解所提问题的细微 差别,并据此调整响应内容。 角色提示为语言模型指定特定的角色或身份。这有助于模型生成符合所分配角色及其相关知识和 行为模式的响应。 系统提示、情境提示和角色提示之间可能存在显著重叠。例如,一个为系统分配角色的提示,也可以包含情境 信息。 然而,每种提示类型的主要目的略有不同: • 系统提示:定义模型的基本能力和总体目标。 • 上下文提示:提供即时、任务特定的信息以引导响应。它高度针对当前动态任务或输入。 • 角色提示:设定模型输出的风格和语气。它增加了特定性和个性化层次。 2025 年 2 月 18
19. Prompt Engineering 区分系统提示、上下文提示和角色提示为设计意图明确的提示提供了框架,允许灵活组合,并更 容易分析每种提示类型如何影响语言模型的输出。 让我们深入探讨这三种不同类型的提示。 系统提示 表 3 包含一个系统提示,我在其中指定了关于如何返回输出的附加信息。我提高了温度值以获得 更高的创意水平,并设置了更高的令牌限制。但由于我对输出格式的明确指示,模型并未返回额 外文本。 Goal 将电影评论分类为正面、中性或负面。 模型 gemini-pro 温度 1 令牌限制 5 Top‑K 采样 40 Top‑P 采样 nx̀0 n 提示 Classify movie reviews as positive, neutral or negative. Only return the label in uppercase. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. It's so disturbing I couldn't watch it. Sentiment: 输出 负面 表 3. 系统提示示例 系统提示可用于生成符合特定要求的输出。' 系统提示 ' 这一名称实际代表 ' 为系统提供额外任 务 '。例如,您可以使用系统提示生成与特定编程语言兼容的代码片段,或利用系统提示返回特 定结构。请参阅表 4,其中我以 JSON 格式返回了输出。 2025 年 2 月 19
20. Prompt Engineering Goal 将电影评论分类为正面、中性或负面,返回 JSON 格式。 模型 gemini-pro 温度 1 令牌限制 1024 Top-K 40 Top‑P nx̀0 n 提示词 Classify movie reviews as positive, neutral or negative. Return valid JSON: 采样 Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. It's so disturbing I couldn't watch it. Schema: ``` MOVIE: { "sentiment": String "POSITIVE" | "NEGATIVE" | "NEUTRAL" "name": String } MOVIE REVIEWS: { "movie_reviews": [MOVIE] } ``` JSON Response: 输出 ``` { "movie_reviews": [ { "sentiment": "NEGATIVE", "name": "Her" } ] } ``` 表 4. 使用 JSON 格式的系统提示示例 2025 年 2 月 20
21. Prompt Engineering 从提取数据的提示中返回 JSON 对象有一些好处。在实际应用中,我不需要手动创建这种 JSON 格式,已经可以按排序顺序返回数据(处理日期时间对象时非常方便),但最重要的是, 通过提示要求 JSON 格式,可以强制模型创建结构并减少幻觉。 系统提示在安全性和毒性控制方面也非常有用。要控制输出,只需在提示中添加额外一行,例如:‘ 你的回答应 当保持尊重。’ 角色提示 角色提示( Role prompting )是提示工程中的一种技术,通过为生成式 AI 模型分配特定角色, 使模型能根据所扮演角色调整输出内容,从而生成更具相关性和信息量的结果。 例如,你可以让生成式 AI 模型扮演图书编辑、幼儿园教师或励志演讲者等角色。分配角色后, 即可提供与该角色相关的特定提示。比如要求教师角色生成可供审阅的教案方案。参考表 5 所 示案例,该模型正以旅行向导角色进行输出。 2025 年 2 月 21
22. Prompt Engineering Goal 充当旅行向导并提供 3 条旅行建议 模型 gemini-pro 温度 1 令牌限制 1024 Top-K 40 Top‑P 采样 nx̀0 n 提示词 I want you to act as a travel guide. I will write to you about my location and you will suggest 3 places to visit near me. In some cases, I will also give you the type of places I will visit. My suggesti on: "I am in Amsterdam and I want to visit only museums." Travel Suggestions: 输出 1. 荷兰国家博物馆:世界知名博物馆,以荷兰大师杰作闻名 如伦勃朗的《夜巡》等杰作。千万别错过这些展现荷兰 艺术与历史的珍贵绘画和文物收藏。 2. 梵高博物馆:沉浸于文森特 · 梵高 震撼人心的艺术世界。馆内藏有全球最丰富的梵高画作与 素描手稿,包括《星月夜》和《向日葵》等传世名作。 3. 阿姆斯特丹市立博物馆:探索现当代艺 来自世界各地的。博物馆的藏品包括毕加索、 康定斯基和里特维尔德的杰作,陈列在一座引人注目的现代建筑中。 表 5. 角色提示示例 上述示例展示了扮演旅行顾问角色的案例。若将角色切换为地理教师,您会注意到获得的回 应将有所不同。 为 AI 模型定义角色视角,相当于为其提供关于预期语调、风格及专业领域的蓝图,从而提升输 出内容的质量、相关性和有效性。 2025 年 2 月 22
23. Prompt Engineering 以下是一些我认为有效的风格供您选择: 对抗性、描述性、直接、正式、幽默、有影响力、非正式、 Inspirational, Persuasive 让我们将表 6 中的提示改为包含幽默和鼓舞人心的风格。 提示 I want you to act as a travel guide. I will write to you about my location and you will suggest 3 places to visit near me in a humorous style. My suggestion: "I am in Manhattan." Travel Suggestions: 输出 1. 领略帝国之心:登上帝国大厦令人眩晕的高度, 在曼哈顿天际线的壮丽中沉醉。准备好感受如同 金刚屹立大苹果之巅的豪情,只是少了巨猿尺寸的香蕉。 2. 在 MoMA 速成艺术达人:在现代艺术博物馆 释放你内心的艺术狂热。凝视那些令人瞠目的杰作,它们会让你质疑自己的火柴人涂鸦是 否 一种独特的优点。 • P 3. 在第五大道血拼到腿软:在这条标志性的第五大道上尽情享受购物疗法。 准备好面对橱窗购物(或实际消费)时令人咋舌的价格标签,设计师精品店会让你的钱包哭泣。 不过既然身在曼哈顿,何不拥抱这份极致奢华! 表 6. 采用幽默语气和风格的角色提示示例 表 6. 采用幽默语气和风格的角色提示示例 上下文提示 通过提供上下文提示,您可以帮助确保与 AI 的交互尽可能无缝且高效。模型将能更快理解您的 请求,并生成更准确相关的响应,如表 7 示例所示。 2025 年 2 月 23
24. Prompt Engineering Goal 为复古游戏博客推荐文章 模型 Gemini Pro 温度 1 令牌限制 1024 Top-K 40 Top‑P 采样 nx̀0 n 提示词 Context: You are writing for a blog about retro 80's arcade video games. Suggest 3 topics to write an article about with a few lines of description of what this article should contain. 输出 1. ** 街机柜设计的演变:** 这篇文章将探讨街机柜设计的演变历程,从 20 世纪 70 年代早期的木质和金属机柜,到如今流线型、霓虹灯点缀的设计 20 世纪 80 年代及以后。 2. ** 怀旧经典:80 年代标志性街机游戏:** ‑ 这篇文章将回顾历史,探讨影响与传承, 聚焦 1980 年代一些最具标志性和影响力的街机游戏, 展现其创新之处、流行玩法及历久弥新的魅力。 3. ** 像素艺术的崛起与复古复兴:** 本文将深入探讨像素艺术作为一种标志性视觉风格的演变历程, 追溯其起源,剖析创作技法, 并探讨像素艺术在现代游戏和数字艺术中的复兴现象。 表 7. 情境式提示示例 2025 年 2 月 24
25. Prompt Engineering 回退式提示 回退式提示是一种通过先让大语言模型思考与当前具体任务相关的普遍性问题,再将普遍性问题 的答案作为后续具体任务提示的输入,从而提升性能的技术。这种 ‘ 回退 ’ 步骤能让大语言模 型在尝试解决具体问题前,先激活相关的背景知识和推理过程。 通过考量更广泛和根本的原则,大语言模型能生成更准确且富有洞察力的回答。回退式提示鼓励 大语言模型进行批判性思考,并以新颖创造性方式应用知识。该技术通过调用模型参数中更多潜 在知识来修改最终执行任务的提示,相比直接提示能激发更深层的知识运用。 通过关注通用原则而非具体细节,回退式提示( step‑back prompting )有助于减轻大语言模型回答中的偏见。 让我们通过以下示例来理解回退式提示如何提升结果质量。首先查看传统提示案例(表 8 ), 再对比回退式提示案例(表 9 ): 2025 年 2 月 25
26. Prompt Engineering Goal 为第一人称射击游戏的一个关卡撰写剧情。 模型 gemini-pro 温度 1 令牌限制 1024 Top-K 40 Top‑P 采样 nx̀0 n 提示词 Write a one paragraph storyline for a new level of a first- person shooter video game that is challenging and engaging. 输出 关卡开始时,玩家小队在密集的城区遭遇伏击 面对一个 relentless 的敌对势力,玩家必须穿过如同迷宫般的 后巷和破败的建筑,利用潜行和精准射击来消灭 敌方部队并避免被发现。玩家必须充分利用周围环境, 设置陷阱、利用掩体、精心计算每一步以求生存。途中,他们发现情报显示敌人正在策划一场毁灭性的 ° x0 一声确认,玩家必须争分夺秒地收集证据并将其传递回 他们的总部,以防敌人实施他们的计划。 表 8. 传统提示与退步提示对比前的示例 当温度设为 1 时,你可能会得到各种富有创意的故事情节,但同时也相当随机且泛泛。因此让我们退一步思考: 2025 年 2 月 26
27. Prompt Engineering 提示 Based on popular first-person shooter action games, what are 5 fictional key settings that contribute to a challenging and engaging level storyline in a first-person shooter video game? 输出 1. ** 废弃军事基地 **:一座后末日风格的庞大军事建筑群 遍布变异士兵和失控机器人,适合进行高难度 近战对抗。 2. ** 赛博朋克都市 **:霓虹闪烁的未来主义城市景观,耸立着 摩天大楼与幽深巷弄,充斥着经过机械强化的敌人 以及黑客机制。 3. ** 外星飞船 **:一艘搁浅在地球上的庞大外星飞船,内部有诡异的 走廊、零重力区域以及可遭遇的外星生物。 4. ** 丧尸围城的小镇 **:一个被成群凶猛丧尸占据的荒凉小镇, 包含激烈的近身战斗和解谜元素以寻找安全通道。 安全通道。 5. ** 水下研究设施 **:一座被洪水淹没的深海实验室, 充斥着变异水生生物,需要潜行和水下 探索技能才能生存。 表 9. 自洽性提示的示例 这些主题确实很适合第一人称视频游戏。让我们回到最初的提示,但这次我们将后退步骤的答案 作为上下文包含进去,看看会返回什么结果。 2025 年 2 月 27
28. Prompt Engineering 提示 Context: 5 engaging themes for a first person shooter video game: 1. **Abandoned Military Base**: A sprawling, post-apocalyptic military complex crawling with mutated soldiers and rogue robots, ideal for challenging firearm combat. 2. **Cyberpunk City**: A neon-lit, futuristic urban environment with towering skyscrapers and dense alleyways, featuring cybernetically enhanced enemies and hacking mechanics. 3. **Alien Spaceship**: A vast alien vessel stranded on Earth, with eerie corridors, zero-gravity sections, and extraterrestrial creatures to encounter. 4. **Zombie-Infested Town**: A desolate town overrun by hordes of aggressive zombies, featuring intense close-quarters combat and puzzle-solving to find safe passage. 5. **Underwater Research Facility**: A deep-sea laboratory flooded with water, filled with mutated aquatic creatures, and requirin g stealth and underwater exploration skills to survive. Take one of the themes and write a one paragraph storyline for a new level of a first-person shooter video game that is challenging and engaging. 输出 在幽暗深渊的中心,矗立着一座破败的水下研究设施, 它既是人类野心的见证,也是其灾难性后果的证明。 笼罩在黑暗中,伴随着故障机械的嗡鸣声, 被溺亡灵魂的回响所萦绕,这座设施如今已成为 深海孕育的噩梦滋生之地。玩家扮演一名精英海军陆战队员,配备着 先进潜水装备与实验性武器系统,奉命潜入 这片充满恐怖的水域。凭借坚韧与机智,他们必须 穿越险恶走廊,破解晦涩谜题,直面狰狞海洋 潜伏在深渊中的恐怖怪物。从对抗深海的重压 到智胜狡猾的水生掠食者,在这片未被探索的 水下世界,每一刻都在考验人类耐力与勇气的极限。 Table 10. An example of prompting for self consistency 这看起来像是个有趣的游戏!通过使用回推提示技巧,你可以提高提示的准确性。 2025 年 2 月 28
29. Prompt Engineering Chain of Thought (CoT) 思维链( CoT )提示是一种通过生成中间推理步骤来提升大语言模型推理能力的技术。它能帮 助模型输出更准确的答案。对于需要先推理再回答的复杂任务,可结合少量示例提示获得更佳 效果 —— 因为零样本思维链本身存在挑战。 思维链具备诸多优势:首先它成本低廉且高效,能直接适配现成的大语言模型(无需微调)。其 推理过程具有可解释性,用户可通过模型的响应步骤学习推理逻辑,一旦出错也便于定位。在不 同版本的大语言模型间迁移时,思维链能保持更强的鲁棒性,这意味着提示模板的性能波动会小 于非推理链式提示。当然其缺点也较为直观。 由于大语言模型的响应包含思维链推理过程,这意味着需要输出更多标记( token ),从而导致预测成 本更高且耗时更长。 为了解释表 11 中的示例,我们首先尝试创建一个不使用思维链提示( CoT )的提示,以展示大语言模型的缺陷。 提示 When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? 输出 63 岁 表 11. 尝试解决数学问题的提示示例 2025 年 2 月 29
30. Prompt Engineering 糟糕,这显然是错误答案。事实上,大语言模型( LLM )在处理数学任务时常常表现不佳,甚 至可能连简单的两数乘法都会出错。这是因为它们主要基于海量文本数据进行训练,而数学问 题往往需要不同的解决思路。让我们试试通过添加中间推理步骤来改进输出结果。 提示词 When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? Let's think step by step. 输出 1. 假设我当前的年龄是 “x” 岁。 2. 当我 3 岁时,我的年龄是 3 岁。 3. 当时我伴侣的年龄是我的 3 倍,这意味着我伴侣的年龄是 3 * n•~ ‚P~ nð~ 岁。 4. 现在,我 20 岁了,这意味着我的年龄比 3 = 17 增加了 20 岁。 自从我 3 岁起已经过去了这些年。 5. 由于我 3 岁时伴侣的年龄是 9 岁,而我的年龄增加了 17 岁,那么伴侣的年龄也一定增加了 17 岁。 x0 6. 因此,伴侣当前的年龄是 nð~ ‚ ~ np nÐ~ ‚P~ n€nÀ~ 岁。 所以,我的伴侣现在是 26 岁。 表 12. 思维链提示的一个示例 好的,现在最终答案是正确的。这是因为我们明确指示大语言模型逐步解释而不仅仅是返回答 案。有趣的是,模型将增加的 17 年累加起来。在我脑海中,我会计算伴侣与我之间的年龄差再 相加( n€n`‚ (9‑3) )。让我们帮助模型更像我这样思考一点。 2025 年 2 月 30
31. Prompt Engineering 表 12 展示了 ‘ 零样本 ’ 思维链的示例。当与单样本或少样本结合时,思维链提示技术会变得非常强大,如表 13 所示: 提示词 Q: When my brother was 2 years old, I was double his age. Now I am 40 years old. How old is my brother? Let's think step by step. A: When my brother was 2 years, I was 2 * 2 = 4 years old. That's an age difference of 2 years and I am older. Now I am 40 years old, so my brother is 40 - 2 = 38 years old. The answer is 38. Q: When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? Let's think step by step. A: 输出 我 3 岁时,伴侣的年龄是 3 * n•~ ‚P~ nð~ 岁。这是年龄 相差 6 岁且伴侣年长。现在我 20 岁,因此我的 pa ner 的年龄是 n€n`~ ‚ ~ nÀ~ ‚P~ n€nÀ~ 岁。答案是 26 岁。 表 13. 单样本思维链提示的示例 思维链可适用于多种场景。例如代码生成,将需求分解为若干步骤,并映射到具体的代码行。 或是在拥有类似 “The product is called XYZ, write a description guiding the model through the assumptions you would make based on the product given title.” 种子数据时创建合成数据。一般而言,任何能通过 ‘ 逐步推演 ’ 解 决的问题都适合采用思维链。如果你能阐述问题解决的步骤,就尝试使用思维链。 请参阅 GoogleCloudPlatform Github 仓库中的 notebook10,该文档将深入探讨思维链提示技术: 2025 年 2 月 31
32. Prompt Engineering 在本章的最佳实践部分,我们将学习一些专门针对思维链提示的最佳实践。 自洽性 尽管大型语言模型在各种自然语言处理任务中展现出令人瞩目的成就,但其推理能力常被视为仅 靠扩大模型规模无法克服的局限。正如我们在前一节思维链提示中所学,模型可被提示像人类解 题般生成推理步骤。然而思维链采用简单的 ‘ 贪婪解码 ’ 策略,限制了其有效性。自洽性 11 结 合抽样与多数表决机制,生成多样化推理路径并选择最一致的答案,从而提升大语言模型生成响 应的准确性与连贯性。 自洽性为答案的正确性提供了伪概率似然,但显然成本高昂。 其步骤如下: 1. 生成多样化推理路径:多次向大语言模型提供相同提示。高温设置促使模型对问题产生不同 的推理路径和视角。 2. 从每个生成的响应中提取答案。 3. 选择最普遍的答案。 以邮件分类系统为例,该系统将邮件标记为重要或非重要。零样本思维链提示会多次发送给大语 言模型,观察每次提交后响应是否不同。请注意邮件中友好的语气、措辞选择及使用的讽刺手法, 这些都可能导致大语言模型误判。 2025 年 2 月 32
33. Prompt Engineering 提示 EMAIL: ``` Hi, I have seen you use Wordpress for your website. A great open source content management system. I have used it in the past too. It comes with lots of great user plugins. And it's pretty easy to set up. I did notice a bug in the contact form, which happens when you select the name field. See the attached screenshot of me entering text in the name field. Notice the JavaScript alert box that I inv0k3d. But for the rest it's a great website. I enjoy reading it. Feel free to leave the bug in the website, because it gives me more interesting things to read. Cheers, Harry the Hacker. ``` Classify the above email as IMPORTANT or NOT IMPORTANT. Let's think step by step and explain why. 继续下一页 ... 2025 年 2 月 33
34. Prompt Engineering 输出 示例 1 ** 步骤 1:明确邮件目的。** 该邮件的目的是通知收件人网站联系表单中存在一个漏洞 发件人还提到他们很喜欢浏览该网站 并且目前暂时保留该漏洞不作处理 ** 步骤 2:评估该漏洞的潜在影响。** 联系表单中的漏洞可能允许攻击者在网站上执行任意 JavaScript 代码。这可能导致攻击者能够窃取 控制网站、窃取敏感信息或篡改网站内容。 ** 步骤 3:评估发件人的可信度。** 邮件发件人自称是名为 Harry 的黑客。但无法验证其身份真实性。 该发件人可能是试图帮助收件人的合法黑客, 但也可能是企图诱骗收件人点击恶意链接的 不法分子。 链接或下载恶意文件。 ** 结论:重要 ** 根据该漏洞的潜在影响及发件人的可信度, 此邮件应归类为 ** 重要 **。收件人应立即采取行动修复漏洞,保护网站免受攻击。 输出 尝试 2 ** 说明 :** 1. ** 缺乏紧迫性 :** 邮件未传达任何紧迫感或 时间敏感性。它以随意问候开头,并以 平铺直叙的语气呈现信息。 2. ** 非关键性错误报告 :** 联系表单中报告的 错误被描述为有趣但不关键。发件人甚至暗示 网站所有者可以选择保留该漏洞。 3. ** 缺乏个人影响:** 邮件未表明对网站所有者有任何直接或 个人层面的影响。仅提及发件人 喜欢阅读该网站内容。 转下页 ... 2025 年 2 月 34
35. Prompt Engineering 输出 A项2 4. ** 无行动请求 **:邮件未明确要求任何 网站所有者的行动。它并未要求修复该漏洞或 提供任何具体的改进建议。 5. ** 发送者意图:** 发送者的意图似乎更侧重于 分享观察结果并表达对网站的兴趣,而非 提出严重关切或请求帮助。 ** 结论:不重要 ** 输出 A empt 3 ** 步骤 1:明确邮件目的。** 该邮件的目的是通知收件人,其网站的联系表单中存在一个缺陷。发件人还提到,他们很喜欢浏览该网站, n 并暂时保留该缺陷不予修复。 他们暂时保留这个漏洞不修复。 ** 步骤 2:评估该漏洞的潜在影响。** 联系表单中的漏洞可能允许攻击者执行任意 JavaScript 代码。这可能导致攻击者能够控 制网站、窃取敏感信息或篡改网站内容。 ** 步骤 3:考虑发件人的可信度。** 邮件发送者自称是名为 Harry 的黑客。但没有任何 验证发送者身份的方法。发送者可能是合法的 试图帮助接收者的黑客,但也可能是 试图利用该漏洞谋取私利的恶意行为者。 ** 结论:** 基于上述因素,该邮件应归类为 ** 重要 **。 联系表单中的漏洞是严重的安全风险,且发送者的可信度 发件人身份未知。收件人应立即采取行动修复漏洞并核实发件人的主张。 表 14. 自洽性提示示例 您可以使用上述提示语尝试观察其是否返回一致的分类结果。根据所用模型及温度参数配 置,可能返回 “ 重要 ” 或 “ 非重要 ” 两种结果。 2025 年 2 月 35
36. Prompt Engineering 通过生成多条思维链,并采用最常出现的答案( “ 重要 ” ),我们可以从大语言模型中获得更一致且正确的 回答。 此示例展示了如何通过自洽提示技术,结合多角度思考并选择最一致的答案,从而提高大语言 模型响应的准确性。 Tree of Thoughts (ToT) 在熟悉思维链与自洽提示后,让我们回顾思维树( ToT )方法。12 该方法泛化了思维链提示的 概念,允许大语言模型同时探索多条不同的推理路径,而非仅遵循单一线性思维链。如图 1 所示。 图 1. 左侧展示的是思维链提示的可视化效果,右侧则为思维树提示的可视化对比 2025 年 2 月 36
37. Prompt Engineering 这种方法使得思维树( ToT )特别适合需要探索的复杂任务。其工作原理是维护一棵思维树,其 中每个思维代表一个连贯的语言序列,作为解决问题的中间步骤。模型可以通过从树中不同节点 分支来探索不同的推理路径。 有一份非常详细的笔记,进一步展示了基于论文《大型语言模型引导的思维树》的思维树( ToT )方法。9 ReAct (推理与行动) 推理与行动( ReAct ) [10] 13 提示是一种范式,使大语言模型能够通过自然语言推理结合外部工 具(搜索、代码解释器等)来解决复杂任务,允许大语言模型执行某些操作,例如与外部 API 交 互以检索信息,这是实现智能体建模的第一步。 ReAct 模仿了人类在现实世界中的操作方式,即通过语言推理并采取行动获取信息。 ReAct 在多个领域中的表现优于其他提示工程方法。 ReAct 提示的工作原理是将推理与行动结合成一个思考 ‑ 行动循环。大语言模型首先对问题进 行推理并生成行动计划,然后执行计划中的行动并观察结果。接着,大语言模型利用观察结果 更新推理并生成新的行动计划。这一过程持续进行,直到大语言模型找到问题的解决方案。 要实际体验这一过程,您需要编写一些代码。在代码片段 1 中,我使用了 Python 的 langchain 框架, 结合 Ve exAI ( google-cloud-aiplatform )和 google-search-results pip packages。 2025 年 2 月 37
38. Prompt Engineering 要运行此示例,您需在 h ps://serpapi.com/manage‑api‑key 创建一个(免费) SerpAPI 密钥,并设置环境 变量 SERPAPI_API_KEY。 接下来让我们编写一些 Python 代码,任务是让 LLM 来理解:How many children Ñ à õ ƒ0 Ñ ƒ0 € Ñ € ð ° ð ƒ0 ñ Ñ ñ ƒ0 ` à Ñ ` ƒ0 € ° € ð ƒ0 • ƒ0 ` à õ ƒ0 ê Ñ • ñ ƒ0 W õ ` Ñ 0 0 ë Ñ Python from from from from langchain.agents import load_tools langchain.agents import initialize_agent langchain.agents import AgentType langchain.llms import VertexAI prompt = "How many kids do the band members of Metallica have?" llm = VertexAI(temperature=0.1) tools = load_tools(["serpapi"], llm= llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run(prompt) 代码片段 1. 使用 LangChain 和 Ve exAI 创建 ReAct 智能体 代码片段 2 展示了运行结果。注意 ReAct 通过串联多次搜索实现:实际上 LLM 正在抓取谷 歌搜索结果来识别乐队名称,随后将结果列为观察项并串联思考以进行下一次搜索。 2025 年 2 月 38
39. Prompt Engineering > Entering new AgentExecutor chain... Metallica has 4 members. Action: Search Action Input: How many kids does James Hetfield have? Observation: three children Thought: 1/4 Metallica band members have 3 children Action: Search Action Input: How many kids does Lars Ulrich have? Observation: 3 Thought: 2/4 Metallica band members have 6 children Action: Search Action Input: How many kids does Kirk Hammett have? Observation: Hammett has been married to his second wife Lani since 1998. They have two sons, Angel (b. September 29, 2006) and Vincenzo (b. June 28, 2008). Thought: 3/4 Metallica band members have 8 children Action: Search Action Input: How many kids does Robert Trujillo have? Observation: 2 Thought: 4/4 Metallica band members have 10 children Final Answer: 10 代码片段 2. 在终端执行 ReAct 智能体 代码片段 2 首先确定金属乐队 Metallica 有四名成员,随后逐一搜索每位成员以获取其子女数量 并累加求和,最终返回子女总数作为最终答案。 在实践中应用 ReAct 提示法需要理解,你必须不断重新发送之前的提示 / 响应(并对额外生成 的内容进行修剪),同时为模型配置适当的示例 / 指令。请参考托管在 GoogleCloudPlatform Github 仓库中的 notebook14,其中通过一个更详尽的示例更详细地展示了实际 LLM 的输入 和输出。 2025 年 2 月 39
40. Prompt Engineering 自动提示工程 此时你可能会意识到编写提示词可能很复杂。如果能自动化这一过程(用提示词生成提示词) 岂不美哉?确实存在这样的方法:自动提示工程( APE )。该方法 15 不仅减少了人工输入的 需求,还提升了模型在各类任务中的表现。 你将通过提示模型生成更多提示词。评估这些提示词,对优质提示进行可能的修改,并循环这一过程。 例如,您可以使用自动提示工程来帮助训练一个商品 T 恤网店的聊天机器人。我们想要弄清楚 顾客在购买乐队周边 T 恤时可能使用的各种表达方式。 1. 编写能生成输出变体的提示。在本例中,我使用 gemini‑pro 生成 10 条指令。参见表 15: 2025 年 2 月 40
41. Prompt Engineering 提示 We have a band merchandise t-shirt webshop, and to train a chatbot we need various ways to order: "One Metallica t-shirt size S". Generate 10 variants, with the same semantics but keep the same meaning. 输出 1. 我想购买一件小号的 Metallica T 恤。 2. 我可以订购一件小号的 Metallica T 恤吗? 3. 我想买一件小号的 Metallica T 恤。 4. 请给我一件小号的 Metallica T 恤。 5. 我想要一件小号的 Metallica T 恤。 6. 我想订购一件小号的 Metallica T 恤。 7. 小号 Metallica T 恤,请给我一件。 8. 我在找一件小号的 Metallica T 恤。 9. 能给我一件小号的 Metallica T 恤吗? 10. 请给我一件 Metallica 乐队的小号 T 恤。 表 15. 使用 LLM 生成提示词 2. 通过选定指标(例如 BLEU 双语评估替补或 ROUGE 面向召回率的摘要评估)对所有候 选指令进行评分,完成评估。 3. 选择评估分数最高的候选指令作为最终提示词,可直接应用于软件或聊天机器人。也可调 整所选提示词后重新评估。 2025 年 2 月 41
42. Prompt Engineering 代码提示 Gemini 主要专注于基于文本的提示,也包括为返回代码编写提示。让我们前往 Ve ex AI Studio 测试这些提示,查看一些编码示例。 Prompts for writing code Gemini 还能充当开发者角色,协助您用任意编程语言编写代码。作为开发者,这能帮助您加速编码过程。 想象一下,你的机器上有一个包含数百个文件的文件夹,这些文件需要重命名。逐个重命名 会花费大量时间。你懂一点 Bash,可以写个脚本来自动化这个任务,但这可能也需要一些 时间。那么,我们来写个提示词吧。你可以在公开的消费者聊天机器人 Gemini 中编写提示 词,或者如果你更关注保密性,可以在你的 Google Cloud 账户内编写这些提示词并打开 Ve ex AI Studio。Ve ex AI Studio 的优势在于你可以配置温度等参数。 2025 年 2 月 42
43. Prompt Engineering Name 1_bash 重命名文件夹中的文件 Goal 编写一个提示,用于在 Bash 中重命名文件夹中的文件。 模型 gemini-pro 温度 nx̀0 np 令牌限制 1024 Top‑K 采样 N/A Top‑P 采样 1 提示词 Write a code snippet in Bash, which asks for a folder name. Then it takes the contents of the folder and renames all the files inside by prepending the name draft to the file name. 输出 ```bash #!/bin/bash # Ask for the folder name echo "Enter the folder name: " read folder_name # Check if the folder exists if [ ! -d "$folder_name" ]; then echo "Folder does not exist." exit 1 fi # Get the list of files in the folder files=( "$folder_name"/* ) # Rename each file by prepending "draft" to the file name for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$new_file_name" done echo "Files renamed successfully." ``` Table 16. Using Gemini to program code 这段代码看起来不错 —— 甚至还有文档说明!但由于大语言模型不具备推理能力且会复述训练数据,务必亲自阅 读并测试你的代码。 我们翘首以盼的时刻到了,它真的能运行吗? 2025 年 2 月 43
44. Prompt Engineering 我们先用一个只包含少量文件的测试文件夹试运行,需要将文件名从 filename.txt 重命名为 dra_filename.txt。 1. 复制表 16 的输出内容(不含 ```bash ``` text 包裹符号),粘贴到新建文件 “rename_files.sh” 中。 2. 打开终端窗口输入:./rename_files.sh。程序会提示输入文件夹名称,例如输入 test 后按回车键。 3. 脚本似乎运行正常。您将看到消息:文件重命名成功。当您查看测试文件夹时,会发现 所有文件都被完美重命名为 dra_ 文件名 .txt。 成功了! 代码解释提示 作为开发者,在团队协作时需要阅读他人代码。Gemini 同样能协助这一过程。我们以表 16 的代码输出为例,移除注释后让大语言模型解释其逻辑,参见表 17: 2025 年 2 月 44
45. Prompt Engineering Name 1_bash_ 代码解释 Goal 编写一个解释 Bash 代码的提示 模型 gemini-pro 温度 nx̀0 np 令牌限制 1024 Top‑K 算法 N/A Top‑P 采样 1 提示词 Explain to me the below Bash code: ``` #!/bin/bash echo "Enter the folder name: " read folder_name if [ ! -d "$folder_name" ]; then echo "Folder does not exist." exit 1 fi files=( "$folder_name"/* ) for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$new_file_name" done echo "Files renamed successfully." ``` 输出 该 Bash 脚本执行以下任务: 1. ** 用户输入 **: ‑ 使用 `echo` 和 `read` 命令提示用户输入文件夹名称。 输入的文件夹名称将存储在 ŠÀ folder_nameŠÀ ~ 变量中。 2. ** 文件夹存在性检查 **: ‑ 使用 ŠÀ zÐ~ ! ‑d 命令检查指定名称的文件夹是否存在。 “$folder_name”zàŠÀ ~ 条件。若文件夹不存在,则显示错误 信息( “ 文件夹不存在。” )并以退出码 1 终止脚本。 Continues next page... 2025 年 2 月 45
46. Prompt Engineering 输出 3. ** 文件列表 **: ‑ 使用 ŠÀ 文件 ‚P (“$folder_”) 列出指定文件夹内的所有文件 名称 ”/* )ŠÀ ~ 命令。这会创建一个名为 ŠÀ 文件 ŠÀ ~ 的数组,包含路径 到文件夹中所有文件的路径。 4. ** 文件重命名 **: ‑ 它使用 ŠÀ forŠÀ ~ 循环遍历 ŠÀ 文件 ŠÀ ~ 数组中的每个文件。 ‑ 对于每个文件,它使用 ŠÀ new_file_ 名称 ‚P ”dra _$(basename “$ 文件 ”)” ŠÀ ~ 命令生成一个新的文件名。这个新文件名被创建 通过在原始文件名前添加字符串 “dra_” 来实现。 ‑ 然后使用 ŠÀ mv“$ 文件 ”“$ 新文件名 ”ŠÀ ~ 命令重命名文件, 该命令将文件移动到新的文件名下。 5. ** 成功消息 **: ‑ 在重命名所有文件后,它会显示一条成功消息( “ 文件重命名成功 ” ), 以表明重命名操作已成功完成。 表 17. 代码解释提示 代码翻译提示 表 16 中的 bash 代码似乎能正常运行。但若该脚本能提示输入文件名,将更具复用性,理想情 况下应作为带界面的独立应用运行。作为起点,Python 比 Bash 更适合开发(网页)应用。大 语言模型可协助实现跨语言代码转换,示例见表 18: 2025 年 2 月 46
47. Prompt Engineering Name 1_python_ 重命名 _ 文件 Goal 编写一个提示词,将 Bash 代码翻译为 Python 模型 gemini-pro 温度 nx̀0 np 令牌限制 1024 Top-K N/A Top-P 1 提示 Translate the below Bash code to a Python snippet. ```bash #!/bin/bash echo "Enter the folder name: " read folder_name if [ ! -d "$folder_name" ]; then echo "Folder does not exist." exit 1 fi files=( "$folder_name"/* ) for file in "${files[@]}"; do new_file_name="draft_$(basename "$file")" mv "$file" "$new_file_name" done echo "Files renamed successfully." ``` 输出 ```python import os import shutil # Get the folder name from the user folder_name = input("Enter the folder name: ") # Check if the folder exists if not os.path.isdir(folder_name): print("Folder does not exist.") exit(1) Continues next page... 2025 年 2 月 47
48. Prompt Engineering 输出 # Get a list of all files in the folder files = os.listdir(folder_name) # Iterate over the files for file in files: # Create a new file name with the prefix "draft_" new_file_name = f"draft_{file}" # Move the file to the new name shutil.move(os.path.join(folder_name, file), os.path.join(folder_name, new_file_name)) # Print a success message print("Files renamed successfully.") ``` 表 18. 将代码从 Bash 翻译到 Python 的提示 阅读并审查代码。从提示中复制输出内容,粘贴到新文件 file_renamer.py 中。通过打开终 端窗口并执行以下命令来测试代码:python file_renamer.py。 注意:在 Ve ex AI 的 Language Studio 中请求( Python )代码时,需点击 ‘Markdown’ 按钮。否则将获得纯文本格式,缺少 Python 代码运行所需的正确行缩进。 调试与代码审查提示 让我们手动对表 18 的代码进行一些编辑。它应提示用户输入文件名前缀,并将该前缀以大 写字符形式写入。参见代码片段 *3 的示例,但糟糕的是现在出现了 Python 错误! 2025 年 2 月 48
49. Prompt Engineering Python import os import shutil folder_name = input("Enter the folder name: ") prefix = input("Enter the string to prepend to the filename: ") text = toUpperCase(prefix) if not os.path.isdir(folder_name): print("Folder does not exist.") exit(1) files = os.listdir(folder_name) for file in files: new_filename = f"{text}_{file}" shutil.move(os.path.join(folder_name, file), os.path.joi(folder_name, new_file_name)) print("Files renamed successfully.") Snippet 3. A broken Python script 哎呀!这看起来像是个错误: The below Python code gives an error: Traceback (most recent call last): File “/Users/leeboonstra/Documents/test_folder/rename_files.py”, line 7, in <module> text = toUpperCase(prefix) NameError: name ‘toUpperCase’ is not defined Snippet 4. I broke the Python code 让我们试试能否让大语言模型来调试和审查代码。请查看表 19: 2025 年 2 月 49
50. Prompt Engineering Name 1_python 调试代码 Goal 编写一个用于调试和审查 Python 代码的提示。 模型 gemini-pro 温度 nx̀0 np 令牌限制 1024 Top‑K 采样 N/A Top‑P 采样 1 提示词 The below Python code gives an error: Traceback (most recent call last): File "/ Users/leeboonstra/Documents/test_folder/rename_files.py", line 7, in <module> text = toUpperCase(prefix) NameError: name 'toUpperCase' is not defined Debug what's wrong and explain how I can improve the code. ```python import os import shutil # Get the folder name from the user folder_name = input("Enter the folder name: ") prefix = input("Enter the string to prepend to the filename: ") text = toUpperCase(prefix) # Check if the folder exists if not os.path.isdir(folder_name): print("Folder does not exist.") exit(1) # Get a list of all files in the folder files = os.listdir(folder_name) # Iterate over the files for file in files: 继续下一页 ... 2025 年 2 月 50
51. Prompt Engineering 提示 # Create a new file name with the prefix "draft_" new_filename = f"{text}_{file}" # Move the file to the new name shutil.move(os.path.join(folder_name, file), os.path.join(folder_name, new_file_name)) # Print a success message print("Files renamed successfully.") ``` 输出 代码调用了 `toUpperCase` 函数将 ` 前缀 ` 转换为大写,但该函数未定义。要解决此问题,可以使用 `upper()` 方法。 字符串类中的该方法可将给定字符串转换为大写。修改后的代码 如下所示: f ```python import os import shutil # Get the folder name from the user folder_name = input("Enter the folder name: ") prefix = input("Enter the string to prepend to the filename: ") text = prefix.upper() # Check if the folder exists if not os.path.isdir(folder_name): print("Folder does not exist.") exit(1) # Get a list of all files in the folder files = os.listdir(folder_name) # Iterate over the files for file in files: # Create a new file name with the prefix "draft_" new_filename = f"{text}_{file}" # Move the file to the new name shutil.move(os.path.join(folder_name, file), Continues next page... 2025 年 2 月 51
52. Prompt Engineering 输出 os.path.join(folder_name, new_filename)) # Print a success message print("Files renamed successfully.") ``` 此外,还可以对代码进行一些其他改进: 1. 新文件名的扩展名未保留。最好从原文件名中提取扩展名并附加到新文件名上。 2. 代码假设文件夹名称中没有空格。然而,最佳实践是通过将空格替换为下划线等方式优雅处理。 3. 当前实现未考虑路径中的特殊字符(如中文或符号),建议增加字符编码处理逻辑。 4. 可添加异常捕获机制,防止因权限不足或路径不存在导致程序中断。 下划线或连字符。 n•x ~ 0 Using the `f` string syntax for string interpolation is more readable and 比传统的 ŠÀ ‚ ŠÀ ~ 运算符更简洁。 4. 代码未处理重命名过程中可能出现的错误 最好将 ŠÀ shutil.moveŠÀ ~ 调用包裹在 ŠÀ try...exceptŠÀ ~ 块中,以 捕获任何潜在错误。 x0 以下是应用这些建议后的改进代码: ```python import os import shutil # Get the folder name from the user folder_name = input("Enter the folder name: ") prefix = input("Enter the string to prepend to the filename: ") # Check if the folder exists if not os.path.isdir(folder_name): print("Folder does not exist." ) exit(1) # Get a list of all files in the folder files = os.listdir(folder_name) # Iterate over the files for file in files: 继续下一页 ... 2025 年 2 月 52
53. Prompt Engineering 输出 # Get the file extension ext = os.path.splitext(file)[1] # Create a new file name with the prefix and the file extensio n new_filename = f"{prefix}_{os.path.splitext(file)[0]}{ext}" # Build the full paths for the original and new files old_path = os.path.join(folder_name, file) new_path = os.path.join(folder_name, new_filename) # Try to move the file try: shutil.move(old_path, new_path) except Exception as e: print(f"An error occurred while moving the file {file}: {e}") # Print a success message print("Files renamed successfully.") ``` These improvements make the code more robust and exible while also making 使其更易于阅读和理解 ... (响应因达到令牌限制而被截断 如果需要更长的响应,请尝试增加令牌限制。 更长的回复。 表 19. 用于调试和审查 Python 代码的提示 太棒了。它不仅告诉我如何解决问题,还发现我的代码有更多错误并提供了解决方案。提示的最 后部分还给出了改进代码的通用建议。 2025 年 2 月 53
54. Prompt Engineering 多模态提示技术如何? 代码提示仍使用常规的大语言模型。多模态提示是另一个领域,它指的是利用多种输入格式(而 不仅依赖文本)来引导大语言模型的技术。根据模型能力和具体任务,可结合文本、图像、音频、 代码或其他格式进行输入。 最佳实践 找到合适的提示需要反复调试。Ve ex AI 中的 Language Studio 是试验提示的绝佳场所,能够针对不同模型进 行测试。 遵循以下最佳实践,成为提示工程专家。 提供示例 最重要的最佳实践是在提示中提供(单样本 / 少样本)示例。这种方法极为有效,因为它能作 为强大的教学工具。这些示例展示了期望的输出或类似响应,使模型能够从中学习并相应调整 自身生成内容。这就像为模型提供了参考点或目标,从而提升其回应的准确性、风格和语气, 更好地符合您的预期。 2025 年 2 月 54
55. Prompt Engineering Design with simplicity 提示词应简洁、清晰且易于您和模型理解。一个经验法则是:如果您自己都觉得困惑,模型很可 能也会困惑。尽量避免使用复杂语言,也不要提供不必要的信息。 示例: BEFORE: I am visiting New York right now, and I'd like to hear more about great locations. I am with two 3 year old kids. Where should we go during our vacation? AFTER REWRITE: Act as a travel guide for tourists. Describe great places to visit in New York Manhattan with a 3 year old. 尝试使用描述动作的动词。以下是一组示例: 行动、分析、分类、归类、对比、比较、创造、描述、定义、评估、提取、查找、生成、识 别、列出、测量、组织、解析、挑选、预测、提供、排序、推荐、返回、检索、重写、选择、 展示、排序、总结、翻译、编写。 2025 年 2 月 55
56. Prompt Engineering 明确输出要求 需明确期望的输出内容。简短的指令可能无法为大型语言模型提供足够引导或过于笼统。在提 示中提供具体细节(通过系统或上下文提示)有助于模型聚焦相关要素,从而提升整体准确性。 &@ Ñ € € 0õ ð xP " ^ xP Generate a 3 paragraph blog post about the top 5 video game consoles. The blog post should be informative and engaging, and it should be written in a conversational style. 禁止事项: Generate a blog post about video game consoles. 优先使用指令而非约束条件 提示工程中通过指令和约束条件来引导大语言模型的输出。 • 指令明确规定了响应所需的格式、风格或内容,指导模型应当执行的操作或生成的内容。 • 约束条件是对响应的限制或边界,规定了模型不应执行或需要避免的事项。 2025 年 2 月 56
57. Prompt Engineering 越来越多的研究表明,在提示中关注正向指令比过度依赖约束条件更为有效。这种方法与人类 偏好正向指令而非禁令清单的心理相契合。 指令直接传达期望结果,而约束条件可能让模型对允许行为产生猜测。它在既定范围内提供灵活 性并鼓励创造性,而约束可能限制模型潜力。冗长的约束清单 还可能出现自相矛盾的情况。 约束条件在特定场景下仍具价值:例如需要防止模型生成有害 / 偏见内容时,或要求严格遵守输出格式 / 风格时。 如有可能,请使用正向指令:与其告诉模型不要做什么,不如告诉它应该做什么。这样可以避免混淆并提高输出 的准确性。 " ^ xP Generate a 1 paragraph blog post about the top 5 video game consoles. Only discuss the console, the company who made it, the year, and total sales. 禁止: Generate a 1 paragraph blog post about the top 5 video game consoles. Do not list video game names. 最佳实践是优先使用指令,明确说明您希望模型执行的操作,仅在出于安全、清晰度或特定需 求时使用约束条件。通过实验和迭代测试不同指令与约束的组合,找到最适合您特定任务的方 案,并予以记录。 2025 年 2 月 57
58. Prompt Engineering 控制最大令牌长度 要控制生成式大语言模型( LLM )响应的长度,您可以在配置中设置最大令牌限制,或在提示中明确指定所需长 度。例如: "Explain quantum physics in a tweet length message." 在提示中使用变量 为了实现提示的重用并使其更具动态性,可在提示中使用变量,这些变量可根据不同输入进行 替换。如表 20 所示,一个提供城市相关信息的提示案例。无需在提示中硬编码城市名称,改 用变量即可。变量能节省时间和精力,避免重复劳动。若需在多条提示中使用相同信息,可将 其存储于变量中,并在各提示中引用该变量。这在将提示集成到自有应用程序时尤为实用。 提示 VARIABLES {city} = "Amsterdam" PROMPT You are a travel guide. Tell me a fact about the city: {city} 输出 阿姆斯特丹是一座美丽的城市,遍布运河、桥梁和狭窄的街道。这是一个 因其丰富的历史、文化和夜生活而值得一游的好地方。 表 20. 在提示中使用变量 2025 年 2 月 58
59. Prompt Engineering 尝试不同的输入格式与写作风格 不同模型、模型配置、提示格式、措辞选择及提交方式可能产生不同结果。因此,尝试提示属性 (如风格、措辞及提示类型 —— 零样本、少样本、系统提示)的实验至关重要。 例如:以生成革命性游戏主机世嘉 Dreamcast 相关内容为目标的提示,可通过疑问句、陈述句 或指令形式呈现,从而获得不同输出: • 提问:世嘉 Dreamcast 是什么?为什么它是一款具有革命性的游戏机? • 陈述:世嘉 Dreamcast 是世嘉公司于 1999 年发布的第六代家用游戏机。它 ... • 指令:用一段话描述世嘉 Dreamcast 游戏机,并解释其革命性意义。 针对分类任务的小样本提示,需混合不同类别 一般来说,小样本示例的顺序影响不大。但在处理分类任务时,务必确保在示例中混合可能的响 应类别。这是因为若不这样做,可能会过度拟合特定示例顺序。通过混合可能的响应类别,可以 确保模型学习识别每个类别的关键特征,而非简单记忆示例顺序。这将使模型在未见数据上表现 更稳健且更具泛化能力。 2025 年 2 月 59
60. Prompt Engineering 一个实用的经验法则是从 6 个少量示例开始,并由此测试准确性。 适应模型更新 您需要密切关注模型架构变更、新增数据及功能升级。尝试使用新版模型并调整提示语以更好 地利用新模型特性。像 Vertex AI Studio 这样的工具非常适合存储、测试和记录不同版本的提 示语。 尝试不同的输出格式 除了提示输入格式外,还可以尝试调整输出格式。对于非创造性任务(如数据提取、选择、解 析、排序、排名或分类),尝试以结构化格式(如 JSON 或 XML )返回输出结果。 从提取数据的提示中返回 JSON 对象有一些优势。在实际应用中,我不需要手动创建这种 JSON 格式,数据已经可以按预排序返回(在处理日期时间对象时非常方便),但最重要的是, 通过要求 JSON 格式,可以强制模型创建结构并减少幻觉输出。 总结使用 JSON 输出的优势: • 始终以相同风格返回 • Focus on the data you want to receive 2025 年 2 月 60
61. Prompt Engineering • 减少幻觉的可能性 • 使其具备关系感知能力 • 您将获得数据类型 • 你能做到的 少样本提示章节中的表 4 展示了如何返回结构化输出的示例。 JSON 修复 虽然以 JSON 格式返回数据具有诸多优势,但也并非没有缺点。JSON 的结构化特性虽然有利 于解析和应用,但其所需的标记数量显著多于纯文本,导致处理时间增加和成本上升。此外, JSON 的冗长性很容易耗尽整个输出窗口,当生成因标记限制而突然中断时,这一问题尤为突 出。这种截断常常导致 JSON 无效,缺失关键的闭合括号或方括号,使输出无法使用。幸运的 是,像 json-repair 库(可在 PyPI 上获取)这样的工具在这些情况下非常宝贵。该库智能 地尝试自动修复不完整或格式错误的 JSON 对象,使其成为处理 LLM 生成的 JSON 时的关键 助手,尤其是在应对潜在的截断问题时。 2025 年 2 月 61
62. Prompt Engineering Working with Schemas 正如我们在本文中多次看到的,使用结构化 JSON 作为输出是一种极佳的解决方案。但对于 input 呢?虽然 JSON 非常适合构建 LLM 生成的 output ,但它同样能有效组织您提供的 input~ 。 这正是 JSON Schema 发挥作用之处。JSON Schema 定义了预期输入 JSON 的结构与数据类型, 通过提供模式,您为 LLM 提供了清晰的数据蓝图,使其能聚焦于 • ` ð 相关信息,降低输 入误解风险。此外,模式还能建立数据间关联,甚至通过包含特定格式的日期 / 时间戳字段, 让 LLM 具备 “ 时间感知 ” 能力。 这里有个简单示例: 假设您想用 LLM 为电商目录中的商品生成描述。与其仅提供自由文本描述,您可以使用 JSON Schema 定义商品属性: { "type": "object", "properties": { "name": { "type": "string", "description": "Product name" }, "category": { "type": "string", "description": "Product category" }, "price": { "type": "number", "format": "float", "description": "Product price" }, "features": { "type": "array", "items": { "type": "string" }, "description": "Key features of the product" }, "release_date": { "type": "string", "format": "date", "description": "Date the product was released"} }, 片段 5. 结构化输出模式的定义 2025 年 2 月 62
63. Prompt Engineering 接着,您可以提供一个符合此模式的 JSON 对象作为实际产品数据: { "name": "Wireless Headphones", "category": "Electronics", "price": 99.99, "features": ["Noise cancellation", "Bluetooth 5.0", "20-hour battery life"], "release_date": "2023-10-27" } 片段 6. 来自大语言模型的结构化输出 通过对数据进行预处理,并仅提供模式和数据而非完整文档,您使大语言模型能清晰理解产品的 属性(包括发布日期),从而更有可能生成准确且相关的描述。这种结构化输入方法能引导大语 言模型关注相关字段,在处理海量数据或将大语言模型集成到复杂应用中时尤为宝贵。 与其他提示工程师共同实验 若您正面临需要构思优质提示的处境,不妨召集多人共同尝试。当每个人都遵循本章所述的最 佳实践时,您将观察到不同提示方案之间的性能差异。 2025 年 2 月 63
64. Prompt Engineering 思维链最佳实践 在思维链提示中,将答案置于推理过程之后是必要的,因为推理过程的生成会改变模型预测 最终答案时所依据的标记。 使用思维链与自洽性方法时,需确保能从提示中分离出与推理过程独立的最终答案。 对于思维链提示( CoT ),将温度参数设置为 0。 思维链提示基于贪心解码策略,即根据语言模型分配的最高概率预测序列中的下一个词。一 般而言,进行推理以得出最终答案时,很可能存在唯一正确答案,因此温度参数应始终设为 0。 记录各类提示尝试 虽然本章前文已提及最后这条建议,但其重要性再怎么强调都不为过:详细记录您的全部提示 尝试细节,这样才能持续了解哪些方法有效、哪些无效。 提示输出可能因模型差异、采样设置不同,甚至同一模型的不同版本而产生变化。此外,即使向 同一模型发送完全相同的提示,输出语句的格式和措辞也可能存在细微差异。(例如前文所述, 若两个标记的预测概率相同,可能会随机打破平局,这将影响后续预测标记)。 2025 年 2 月 64
65. Prompt Engineering 我们建议以表 21 为模板创建 Google 表格。这种方法的优势在于,当您不可避免地需要重新审 视提示工作时(您会惊讶地发现,即使短暂休息后也会遗忘许多细节),可以拥有完整记录 —— 无论是为了将来继续(您可能会忘记很多细节)、测试不同版本模型的提示性能,还是帮助调 试未来出现的错误。 除了表格中的字段外,记录提示版本(迭代)、用于标记结果是否通过( OK/NOT OK/ SOMETIMES OK )的字段以及反馈字段也很有帮助。如果您有幸使用 Vertex AI Studio,请 保存提示(使用文档中列出的相同名称和版本),并在表格中跟踪保存提示的超链接。这样,您 只需点击一下即可重新运行提示。 在 retrieval augmented generation 系统上工作时,您还应记录影响提示内容的具体 RAG 系 统细节,包括查询、分块设置、分块输出及其他信息。 当您觉得提示词接近完美时,将其应用到项目代码库中。在代码库中,将提示词与代码分开保存 在独立文件中,以便于维护。最终,理想情况下您的提示词应成为可操作化系统的一部分。作为 提示工程师,您应依赖自动化测试和评估流程来了解提示词对任务的泛化效果。 提示工程是一个迭代过程。创建并测试不同提示词,分析结果并记录。根据模型表现优化提 示词。持续实验直至获得理想输出。当更换模型或调整模型配置时,需重新用先前使用过的 提示词进行实验验证。 2025 年 2 月 65
66. Prompt Engineering Name [ 您的提示名称及版本 ] Goal zÐ 用一句话解释此尝试的目标 z 模型 [ 所用模型的名称及版本 ] 温度 [ 取值介于 0 到 1] 之间 令牌限制 [ 数字 ] Top-K [ 数字 ] Top-P [ 数字 ] 提示 [Write all the full prompt] 输出 [ 写出输出或多个输出 ] 表 21. 提示文档模板 摘要 本白皮书探讨了提示工程。我们学习了多种提示技术,例如: 零样本提示 少量样本提示 系统提示 角色提示 上下文提示 回退式提示 思维链 自我一致性 思维树 2025 年 2 月 66
67. Prompt Engineering • ReAct 我们甚至研究了如何自动化您的提示词的方法 x0 白皮书随后探讨了生成式 AI 的挑战,例如提示词不足时可能出现的问题。最后我们总结了成为 优秀提示工程师的最佳实践。 2025 年 2 月 67
68. 提示工程 尾注 1. Google, 2023, Gemini by Google. 访问地址 : h ps://gemini.google.com. 2. Google, 2024, Gemini for Google Workspace Prompt Guide. 访问地址 : h ps://inthecloud.withgoogle. com/gemini‑for‑google‑workspace‑prompt‑guide/dl‑cd.html. 3. Google Cloud,2023 年,《提示工程入门》。访问地址:h ps://cloud.google.com/ve ex‑ai/generative‑ai/docs/learn/ prompts/introduction‑prompt‑design。 4. Google Cloud,2023 年,《文本模型请求体:Top‑P 与 top‑K 采样方法》。访问地址:h ps://cloud.google.com/ ve ex‑ai/docs/generative‑ai/model‑reference/text#request_body。 5. 魏杰等人,2023 年,《零样本 —— 微调语言模型即零样本学习者》。访问地址:h ps://arxiv.org/pdf/2109.01652.pdf。 6. Google Cloud,2023 年,《 Google Cloud 模型花园》。访问地址:h ps://cloud.google.com/model‑garden。 7. 布朗等人,2023 年,《少样本 —— 语言模型即少样本学习者》。访问地址:h ps://arxiv.org/pdf/2005. 14165.pdf。 8. 郑磊等人,2023 年,《退一步:通过抽象激发大语言模型推理能力》。访问地址:h ps://openreview.net/pdf?id =3bq3jsvcQ1 nðx ~ 0 • õ x@~ Mx0 x@~ õ `~ Ñ 0x0 x@~ n€n`n€n x • ~ @ à Ñ • ~ ð € ~ „ à ð ° • à `~ w° ð € € ` • • x0 à Ñ 0Ñ ê 0õ ~ Ñ `xP h ps://arxiv.org/pdf/2201.11903.pdfx0 10. Google Cloud Platform,2023 年,《思维链与反应》。发布于:https://github.com/GoogleCloudPlatform/generative‑ai/ blob/main/language/prompts/examples/chain_of_thought_react.ipynb。 11. 王旭等,2023 年,《自洽性提升语言模型中的思维链推理》。发布于:https://arxiv.org/pdf/2203.11171.pdf。 12. 姚松等,2023 年,《思维树:利用大语言模型进行审慎问题解决》。发布于:https://arxiv.org/pdf/2305.10601.pdf。 13. 姚松等,2023 年,《 ReAct:语言模型中推理与行动的协同》。发布于:https://arxiv.org/pdf/2210.03629.pdf。 14. Google Cloud Platform,2023 年,《高级提示工程:思维链与反应》。发布于:https://github.com/ GoogleCloudPlatform/applied‑ai‑engineering‑samples/blob/main/genai‑on‑vertex‑ai/advanced _prompting_training/cot_react.ipynb。 15. 周晨等,2023 年,《自动提示工程 —— 大语言模型达到人类水平的提示工程能力》。发布于:https://arxiv.org/pdf/2211. 01910.pdf。 2025 年 2 月 68

ホーム - Wiki
Copyright © 2011-2025 iteam. Current version is 2.143.0. UTC+08:00, 2025-04-27 02:48
浙ICP备14020137号-1 $お客様$