高 进阶
Prompt工程最佳实践#
一句话答案#
Prompt 设计核心:角色设定 + 清晰指令 + 示例(Few-shot)+ 思维链(CoT)+ 结构化输出约束。
核心要点
Prompt 在 LLM 四阶段中的位置: 预训练(学语言)→ SFT(学指令)→ RLHF/DPO(学对齐)→ Prompt 工程(引导输出,不改权重,零成本迭代)
五大核心技巧:
| 技巧 | 作用 | 示例 |
|---|---|---|
| 角色设定 | 约束输出风格和知识范围 | 你是一位资深Java架构师... |
| 清晰指令 | 明确 Do/Don’t + 输出格式 | 请用JSON格式返回,包含name和reason字段 |
| Few-shot 示例 | 通过输入输出样本示范模式 | 给 3 组 Q&A 示例 |
| 思维链(CoT) | 分步推理提升复杂任务准确率 | 请分步分析这个问题 |
| 结构化输出约束 | 强制返回可解析格式 | JSON Schema / Markdown 表格 |
高级推理模式对比:
| 模式 | 原理 | 适用场景 |
|---|---|---|
| Zero-shot | 直接提问,无示例 | 简单明确任务 |
| Few-shot | 提供 2-5 个示例 | 格式/风格约束 |
| CoT | ”分步推理” | 数学、逻辑、多步分析 |
| ReAct | Thought→Action→Observation 循环 | Agent 工具调用 |
| ToT(Tree-of-Thought) | 多路径并行推理,自评选优 | 创意探索、规划 |
常见反模式:
- 指令冲突:System Prompt 和 User Prompt 要求矛盾
- 过长 System Prompt:超过 2000 token 时注意力稀释严重
- 缺少负面约束:只说”要做什么”不说”不要做什么”,模型容易越界
- Few-shot 顺序敏感:最后一个示例对输出影响最大,要精心排列
面试回答(2分钟版)
Prompt工程要放在LLM整个训练流程中理解。模型先经过预训练在海量语料上学习语言能力,然后通过SFT有监督微调学会遵循指令,再用RLHF强化学习对齐人类价值观,最后到我们使用时的Prompt工程阶段——不修改模型权重,通过设计输入来引导输出。Prompt设计的核心技巧可以总结为五步:第一是角色设定,给模型一个专家身份来约束输出风格和范围;第二是清晰指令,明确告诉模型要做什么、不做什么、输出格式是什么;第三是Few-shot示例,给几个输入输出样本让模型理解期望模式;第四是思维链CoT,让模型分步推理而不是直接给答案,显著提升复杂任务的准确率;第五是结构化输出约束,要求返回JSON或特定格式方便下游解析。在实际项目中,好的Prompt工程能让同一个模型的表现提升非常大,而且迭代成本极低。我们还会用ReAct模式让模型在推理和行动之间交替,实现更复杂的多步骤任务。
追问与易错
追问方向:
- CoT 和 Few-shot 什么时候组合用?什么时候只用其中一个? → 复杂推理 + 格式约束时组合用(Few-shot 示范格式 + CoT 引导推理)。简单任务只需 Few-shot,纯推理任务只需 CoT
- 结构化输出不稳定(模型偶尔不按格式返回)怎么办? → 三层防御:Prompt 中给 JSON Schema 示例 + 设 response_format=json_object + 代码层做解析容错(正则提取/重试)
- Prompt 太长 token 成本高怎么优化? → 精简 System Prompt(去冗余指令)、上下文压缩(摘要替代原文)、渐进式披露(按需加载工具描述)。通常可减 30-50% input token
- ReAct 和纯 CoT 在 Agent 场景的区别? → CoT 是”想完再说”(一次性输出推理链),ReAct 是”边想边做”(思考→调工具→看结果→再思考),Agent 场景需要 ReAct 因为要和外部交互
易错点:
- ❌ “Prompt 越长越好” → 过长导致注意力稀释,关键信息被忽略(lost in middle)
- ❌ “CoT 对所有任务都有效” → 简单任务用 CoT 反而降低效率、增加成本
- ❌ “Few-shot 示例越多越好” → 通常 3-5 个足够,过多占用 token 且边际收益递减