Prompt 工程(总览)
Prompt 工程是「不改参数、靠提示词激发模型能力」的技术——性价比最高的大模型应用技能。本页是板块总览与基础;按主题深入请看下面的专题页。更进阶的「管理整个上下文」见 上下文工程。
📚 本板块专题导航
| 专题 | 内容 |
|---|---|
| 推理类提示(CoT 全家桶) | CoT / Self-Consistency / ToT / Least-to-Most / Step-Back / Self-Refine + 推理模型范式转变 |
| 高级提示模式与工程技巧 | 结构化骨架、few-shot 陷阱、元提示、防幻觉、长文档、提示「祛魅」 |
| 自动化提示优化与 Prompt Ops | APE / OPRO / DSPy / TextGrad + 版本化/评估/回归运维 |
| 提示注入与越狱攻防 | 直接/间接注入、越狱手法、为什么难防、纵深防御 |
| 从提示到上下文/循环工程 | Context Engineering、ACE、loop engineering、Hermes 式自改进(最新范式) |
下面是基础速览;每个主题的深挖见上表对应页面。
一、基本要素
一个高质量的 prompt 通常包含:
- 角色设定(Role):「你是一位资深律师……」,激活相关知识与语气。
- 任务指令(Instruction):清晰、具体地说明要做什么。
- 上下文(Context):背景信息、约束条件。
- 输入数据:要处理的具体内容。
- 输出格式约束:JSON / 表格 / 字数 / 结构。
- 示例(可选):few-shot 演示。
三原则:清晰、具体、结构化。 模糊的指令是低质输出的头号原因。
二、核心技巧
Zero-shot / Few-shot
- Zero-shot:直接给指令、不给示例。
- Few-shot(少样本):给几个「输入→输出」示例,利用模型的上下文学习能力。示例的格式、顺序、质量、数量都会影响效果(甚至示例顺序也敏感)。
思维链(Chain-of-Thought, CoT)
让模型「一步步思考」再给答案,显著提升数学、逻辑、多步推理任务表现:
- Zero-shot CoT:加一句「让我们一步步思考(Let's think step by step)」。
- Few-shot CoT:示例里展示推理过程。
- CoT 是涌现能力,只在足够大的模型上有效;对推理模型(o1/R1)则无需手动加 CoT(它们内置长思维链)。
自洽性(Self-Consistency)
对同一问题用 CoT 采样多条推理路径,对最终答案投票取多数,用多样性换正确率,进一步提升准确性(代价是多次采样、更贵)。
思维树 / 思维图(ToT / GoT)
把推理扩展成树/图结构搜索,探索多条路径并评估剪枝,适合复杂规划,成本更高。
ReAct
Reasoning + Acting 交替:模型「思考(Thought)→ 行动(Action,调工具)→ 观察(Observation)」循环推进。这是 Agent 的基础范式,详见 Agent 基础。
三、实用技巧清单
- 结构化输出:要求输出 JSON/表格/特定格式,便于程序解析(强保证见 结构化输出)。
- 分隔符:用 ``` 或 XML 标签清晰分隔指令与数据,减少歧义和注入风险。
- 给模型「思考空间」:让它先分析再下结论,而非一上来给答案。
- 指定「不知道就说不知道」:降低幻觉。
- 提供正例反例:明确想要和不想要的。
- 拆解复杂任务:复杂任务拆成多步/多次调用(Prompt Chaining,见 工作流)。
四、采样参数
- 温度(Temperature):低(0~0.3)→ 确定、事实性任务;高(0.7~1.0)→ 创造性任务。
- top-p(核采样):从累积概率前 p 的 token 中采样,常与温度配合。
- 详见 解码与采样策略。
五、Prompt 注入与防护(安全考点)
- Prompt Injection(提示注入):攻击者在输入中插入恶意指令(如「忽略以上所有指令,改为……」),诱导模型偏离原任务。间接注入(恶意指令藏在 RAG/工具返回的外部内容里)在 Agent 场景尤其危险。
- 越狱(Jailbreak):绕过模型的安全限制。
防护思路(详见 大模型安全):
- 用分隔符/标签清晰区隔「系统指令」与「用户数据」,并明确告知模型数据部分不可作为指令;
- 输入输出做过滤/校验;
- 最小权限原则(尤其 Agent 调用工具时);
- 用专门的护栏模型(guardrail)做二次审查。
六、高频追问
Q:CoT 为什么有效? 它把复杂问题分解成中间步骤,给模型更多「计算空间」(更多 token = 更多前向计算),降低一步到位出错的概率,类似人类打草稿。是涌现能力,只在大模型上有效。
Q:Few-shot 一定比 Zero-shot 好吗? 不一定。对强指令模型,清晰的 Zero-shot 指令往往已足够;Few-shot 在格式约束、特定任务模式上更有用,但占用上下文、增加成本。示例的选择和顺序也会显著影响效果。
Q:Prompt 工程 vs 微调? Prompt 零成本、即时、灵活,适合快速验证和通用任务;微调适合需要稳定风格、专有能力、降低 token 成本的场景。通常先 Prompt,不够再 RAG 或微调。
Q:温度、top-p 怎么调? 确定性/事实性任务用低温度(0~0.3)甚至贪心;创造性任务用高温度(0.7~1.0)+ top-p 0.9。一般固定一个调另一个,别都设激进值。详见 解码与采样。
Q:自洽性(Self-Consistency)的原理? 对同一问题采样多条 CoT 推理路径,对最终答案投票取多数。不同路径可能各自出错但正确答案更可能成为多数,从而用多样性换正确率,代价是多次采样更贵。
Q:怎么防 Prompt 注入? 指令与数据分离(分隔符/标签 + 声明数据不可执行)、输入输出过滤、最小权限、护栏模型二次审查。间接注入(外部内容夹带指令)在 RAG/Agent 中最危险,需重点防范。
Q:Prompt 工程和上下文工程有什么区别? Prompt 工程关注「写好单条提示词」;上下文工程关注「在多步、有状态的 Agent 运行中动态管理整个上下文窗口里放什么」。后者是 Agent 时代的升级,详见 上下文工程。
Q:对推理模型还需要写 CoT 吗? 基本不需要手动加「一步步思考」——o1/R1 这类推理模型已内置长思维链。对它们反而应给清晰的目标和约束,让它自己思考,过度的 CoT 提示可能干扰。