Prompt 调优
问题
上线了一个 AI 功能,效果不稳定,如何系统化地进行 Prompt 调优?
答案
一、调优流程
二、常见失败原因与修复
| 失败表现 | 原因 | 修复方法 |
|---|---|---|
| 输出格式不对 | 指令不清晰 | 加 JSON Schema + 示例 |
| 回答太泛 | 缺少约束 | 加角色设定 + 输出限制 |
| 遗漏要点 | Prompt 太长丢信息 | 重要指令放在开头/结尾 |
| 幻觉严重 | 无知识支撑 | 引入 RAG + 拒答机制 |
| 不一致 | temperature 高 | 降温 + 加 few-shot |
三、调优技巧
1. 结构化 Prompt 模板
## 角色
你是一个{domain}领域的专家助手。
## 任务
{task_description}
## 约束
- 仅根据提供的上下文回答
- 无法回答时说"我不确定"
- 使用{language}回答
## 输出格式
{format_spec}
## 示例
输入: {example_input}
输出: {example_output}
## 上下文
{context}
## 用户问题
{query}
2. 关键原则
| 原则 | 说明 |
|---|---|
| 具体胜于模糊 | "列出 3 个要点" 优于 "简要回答" |
| 示例胜于描述 | 1 个好的 few-shot 胜过 10 行指令 |
| 结构化输出 | 要求 JSON/Markdown 格式减少解析错误 |
| 负面约束 | 明确说"不要做什么"比只说"做什么"更有效 |
| 分步指令 | 复杂任务拆成 Step 1, Step 2... |
3. 版本管理
// Prompt 版本化管理
const promptVersions = {
'v1.0': { template: '...', metrics: { accuracy: 0.72 } },
'v1.1': { template: '...', metrics: { accuracy: 0.78 } }, // 加了 few-shot
'v1.2': { template: '...', metrics: { accuracy: 0.85 } }, // 优化了约束
}
核心心法
Prompt 调优是实验科学,不是理论推导。每次只改一个变量,用数据说话。
常见面试问题
Q1: Prompt 调优和微调怎么选?
答案:
| 维度 | Prompt 调优 | 微调 |
|---|---|---|
| 成本 | 几乎为零 | 需要 GPU + 数据集 |
| 迭代速度 | 分钟级 | 小时~天 |
| 效果上限 | 中 | 高 |
| 适用场景 | 初期快速迭代 | 效果瓶颈后 |
建议:先 Prompt 调优 → 效果瓶颈 → 再考虑微调。
Q2: 长 Prompt 和短 Prompt 哪个好?
答案:
不是越长越好。过长的 Prompt:
- 增加 Token 成本
- 模型可能忽略中间部分(Lost in the Middle 效应)
- 增加延迟
最佳实践:精简但完整,将关键指令放在开头和结尾。
Q3: 如何处理 Prompt 在不同模型间的迁移?
答案:
不同模型对 Prompt 的敏感度不同。迁移时需注意:
- GPT 系列对 System Prompt 响应好
- Claude 更适合详细的 XML 标签结构
- 开源模型可能需要更明确的格式指令
- 每次换模型都要重新评估,不能假设 Prompt 通用