Google Cloud 权威指南
Vertex AI 提示工程权威指南
Principles, Techniques, and Best Practices
1. 引言与综述 (Introduction & Overview)
在生成式人工智能(Generative AI)迅速重塑技术格局的背景下,提示工程 (Prompt Engineering) 已从一种边缘的技巧演变为一门核心的系统工程学科。本报告基于 Google Cloud 发布的权威白皮书,旨在为开发者和研究人员提供一套详尽的技术指南。
提示(Prompt)作为人类意图与机器执行之间的桥梁,其质量直接决定了模型输出的准确性、相关性与安全性。一个有效的提示受到多维因素的制约:模型架构、训练数据分布、推理配置参数(如 Temperature)以及提示本身的结构。
2. 大型语言模型的核心机制与配置 (Core Mechanisms)
LLM 本质上是一个基于概率的预测引擎。它预测序列中的下一个 标记 (Token)。这一过程是自回归的,即模型将预测出的 Token 添加到序列末尾作为后续预测的依据。
2.1 输出长度控制 (Output Length)
减少输出长度限制并不等同于让模型变“简洁”,而只是在达到上限时强制截断。合理预估 Token 数量对于控制延迟和成本至关重要。
2.2 采样控制策略 (Sampling Controls)
配置参数是平衡模型“创造性”与“准确性”的关键杠杆:
温度参数 (Temperature)
控制采样的随机性。低温度(0-0.2)趋向于确定性输出,高温度(0.7+)激发创造力。
Top-P (核采样 / Nucleus Sampling)
基于累积概率阈值选择 Token 集合。它比静态的 Top-K 更具动态适应性,在连贯性与丰富性之间取得平衡。
| 任务类型 (Task) | Temperature | Top-P | 策略说明 (Rationale) |
|---|---|---|---|
| 事实性问答 / 数学 | 0.0 | 0.1 - 0.5 | 追求绝对确定性,消除随机性防止事实错误。 |
| 代码生成 | 0.1 - 0.2 | 0.95 | 语法严格,容错率低,需保持逻辑严密。 |
| 创意写作 | 0.7 - 1.0 | 0.99 | 鼓励探索罕见词汇,最大化创造力。 |
3. 基础提示技术 (Basic Prompting)
3.1 零样本与少样本提示 (Zero-shot & Few-shot)
零样本提示 (Zero-shot) 依赖模型的预训练知识。而当任务复杂时,提供示例的 少样本提示 (Few-shot) 利用了模型的上下文学习 (In-Context Learning) 能力。
Few-shot 示例:JSON 解析
解析披萨订单:
示例:我要一个小号芝士披萨。
JSON: {"size": "small", "type": "cheese"}
示例:来一个大号腊肠披萨。
JSON: {"size": "large", "type": "pepperoni"}
当前请求:我要一个中号素食披萨。
JSON:
3.2 系统与角色提示 (System & Role Prompting)
- 系统提示 (System Prompt): 设定“出厂设置”,定义任务背景和安全边界。
- 角色提示 (Role Prompt): 赋予模型特定的人格或专业视角(如“资深架构师”)。
4. 高级推理与逻辑构建 (Advanced Reasoning)
思维链 (Chain of Thought, CoT)
引导模型显式生成推理路径。“让我们一步步思考”是激活 CoT 的经典触发词。
回退提示 (Step-back Prompting)
先提取抽象原则(回退一步),再解决具体问题。显著提升 STEM 领域准确率。
推理与行动 (ReAct)
结合思维轨迹与外部工具调用(如搜索 API),是构建自主 Agent 的基础。
思维树 (Tree of Thoughts, ToT)
在思维空间进行树状搜索和回溯,适用于需要复杂规划和前瞻的任务。
5. 代码生成与开发辅助 (Code Generation)
LLM 在软件生命周期的各个阶段都能提供支持:
6. 提示工程最佳实践总结 (Best Practices)
- 提供覆盖边缘情况的示例。
- 强制使用结构化输出 (JSON/Schema)。
- 优先使用正向指令(做什么)。
- 在生产环境使用变量占位符。
- 使用过于模糊或含糊的修辞。
- 认为提示可以一劳永逸(不测试)。
- 忽略 Token 限制导致的截断。
- 过度依赖负向约束(不准做什么)。
注意: 极端的参数设置(如极高温度或不当的 Top-P)可能导致模型陷入 重复循环错误 (Repetition Loop Bug)。建议通过微调参数打破确定性死循环。