提示词工程进阶:从入门到系统化
Prompt 的黄金结构
一个高质量的 System Prompt 通常包含以下要素:
1. 角色定义 — "你是一个 XX 专家"
2. 任务说明 — "你的职责是..."
3. 约束条件 — "不要...,必须..."
4. 输出格式 — "请返回 JSON 格式..."
5. 示例(Few-shot)— "例如:..."
6. 边界处理 — "遇到 X 情况时..."
核心技巧
1. Chain-of-Thought (CoT)
引导模型展示推理过程。简单的"让我们一步一步思考"就能显著提升复杂推理任务的准确率。
- Zero-shot CoT:在问题后加"让我们一步一步思考"
- Few-shot CoT:提供带推理步骤的示例
2. Few-shot 学习
在 Prompt 中提供 2-5 个输入输出示例。示例的选择直接影响效果:
- 示例应与目标问题在格式、难度上接近
- 示例中的边缘情况能帮助模型处理异常
- 示例过多可能稀释注意力(5 个以内最佳)
3. Structured Output(结构化输出)
要求 LLM 按 JSON Schema 返回,确保输出可被程序解析:
请以 JSON 格式返回:
{
"intent": "leave_request | knowledge_query | ...",
"confidence": 0.0~1.0,
"entities": { "date": "...", "type": "..." }
}
4. 角色扮演(Role Prompting)
给模型一个具体角色能显著改变输出风格和质量。例如"你是一个资深架构师"vs"你是一个初级开发者"。角色越具体越好。
5. 分隔符(Delimiter)
用明确的标记(---, ```, XML 标签)区分 Prompt 的不同部分,减少混淆:
【系统指令】
你是...
【知识库参考材料】
{retrieved_chunks}
【用户问题】
{query}
系统化 Prompt 管理
当 Prompt 变多时,需要系统化管理:
- 版本控制:每个 Prompt 都有版本号和变更记录
- 模板化:用模板引擎(Jinja2、Mustache)动态注入变量
- A/B 测试:对比不同 Prompt 版本的效果
- 评估集:建立固定的测试集来量化 Prompt 改进
常见陷阱
- 过度约束:太多"不要"反而不稳定,用正面指令替代
- 幻觉放大:要求"如果你不确定就说不知道"比硬约束有效
- Token 浪费:冗长的示例和指令消耗上下文窗口
- 位置偏差:模型更关注 Prompt 开头和结尾的内容