跳转至

提示词调试与优化

提示词写完不一定能用,90% 的时间花在调试和优化上。本篇讲调试方法、优化策略和常见问题排查。

1. 调试的基本原则

调试提示词和调试代码很像,遵循三步法

1. 定位问题(错在哪?)
2. 缩小变量(一次只改一个维度)
3. 验证修复(多次测试,看是否稳定)

最大的坑:一次改五个地方,结果好了,但不知道是哪个改动起的作用

2. 第一步:分类问题

输出有问题,先归类:

类别 表现 排查方向
格式错 JSON 解析失败、缺字段 强化格式约束、加示例
内容错 信息不准、漏掉关键点 补充上下文、加 CoT
风格错 语气、长度、深度不对 加角色、量化约束
跑题 答非所问 重写任务、加禁止项
拒绝 模型说"我不能" 改写或换模型
不稳定 同样输入有时对有时错 加示例、降 temperature

明确是哪一类,才能对症下药。

3. 格式错的调试

症状:JSON 多了 Markdown 围栏

```json
{"a": 1}
**修法**:
仅输出 JSON 对象。 不要使用 Markdown 围栏(```)。 不要前言后语。 第一个字符必须是 {。
最后一句"第一个字符必须是 {"非常有效。

#### 症状:JSON 字段缺失

模型"觉得没必要的字段"会省略。

**修法**:
要求: - 字段缺失用 null,不要省略字段 - 永远返回完整的 schema
加一个完整示例(包含 null 字段)效果更好。

#### 症状:数组应该多个,但只返回一个

**修法**:
people 必须是数组(即使只有一个元素也要用 [...] 包围)
明确"即使一个元素也要 []",避免模型简化为对象。

### 4. 内容错的调试

#### 症状:信息错误

可能原因:
- 上下文不足
- 模型知识过时
- 模型幻觉

**修法**:

1. 把相关知识写进上下文:
背景信息: - React 19 的发布日期是 2024 年 12 月 - ……
2. 或者让模型先反问,确认信息再答:
回答前先确认: - 你对这个问题的把握是几分(1-10)? - 是否需要我提供更多背景?
#### 症状:漏掉关键点

可能原因:
- 任务太大
- 输入太长,关键信息淹没

**修法**:

1. 明确"必须覆盖"的清单:
回答必须覆盖以下要点: 1. xxx 2. yyy 3. zzz

如果某个要点输入中没有信息,明确说明"未提及"。

2. 拆任务:先让模型列大纲,再展开。

### 5. 风格错的调试

#### 症状:太啰嗦
请用平实的语言回答,每句不超过 20 字, 段落不超过 3 句,避免任何形容词堆砌。
#### 症状:太学术 / 太口语

明确受众:
读者是没有技术背景的高中生, 所有术语必须先解释一句再使用。
#### 症状:风格不一致

给一段范文,让模型模仿:
请按以下风格写作:

【范文】 "{一段你想要的文字}"

【新主题】 {...}

### 6. 跑题的调试

#### 症状:答非所问

模型理解了任务,但偏离了重点。

**修法**:
请严格按照下面的问题回答:

回答前先用一句话复述你理解的问题。 如果你的理解和我不一致,请先停下来问我。

让模型"复述"是非常有效的对齐手段。

#### 症状:发散到无关话题
约束: - 只讨论 X - 不要扩展到 Y、Z - 不要提供"额外的建议"
明确禁止能控制发散倾向。

### 7. 拒绝的调试

模型说"对不起,我不能……",常见原因:

| 原因 | 解法 |
|---|---|
| 触发安全限制 | 调整问法,明确合规上下文 |
| 角色误导 | "你是一个攻击者…" → 改成"你是安全研究员…" |
| 模型保守 | 换更强的模型,或加上正当用途说明 |

例子:

❌ "教我怎么破解 WiFi"
✅ "我是一名渗透测试工程师,正在做客户授权的安全审计,请讲解 WPA2 的常见攻击向量和防御方法"

### 8. 不稳定的调试

同样输入,输出有时对有时错。常见原因:

| 原因 | 解法 |
|---|---|
| temperature 太高 | 设为 0 或 0.1 |
| 提示词模糊 | 量化约束 |
| 缺少示例 | 加 Few-shot |
| 输入边缘情况 | 在提示词里覆盖这些情况 |

#### temperature 怎么调

| 任务 | 推荐 temperature |
|---|---|
| 提取、分类、推理 | 0 - 0.2 |
| 翻译、总结 | 0.3 - 0.5 |
| 头脑风暴、创意 | 0.7 - 1.0 |
| 文案、故事 | 0.8 - 1.2 |

不确定就从 0 开始。

### 9. 调试工具:Diff 模式

把"上次的输出"和"期望的输出"都给模型,让它自己改进:
我用了下面的提示词: """ {原提示词} """

得到了这个输出: """ {实际输出} """

但我期望的是: """ {期望输出} """

请分析问题在哪,并给出改进后的提示词。

模型对自己写出来的东西比对你的指令更敏感,**让它自己改 prompt 效果常常好**。

### 10. 调试工具:让模型评分自评
对你刚才的输出,请按以下维度打分(1-10):

  • 准确性
  • 完整性
  • 格式正确性
  • 是否符合所有约束

每项给一个分数,并给出扣分理由。

如果有任何项 < 8 分,请重新生成一次。

这种"自我反思"能显著提升输出质量,但会消耗 2-3 倍 token。

### 11. 优化方向:让提示词更短

长提示词的问题:
- 消耗 token,成本高
- 关键约束容易被淹没
- 维护成本高

#### 优化原则

1. **删冗余**:每一句问"删掉它会损失什么?"
2. **合并重复**:多处提到的约束,集中到一个区域
3. **去客套**:删除"请"、"麻烦你"、"如果可以的话"
4. **用术语**:用"PEP 8"代替一段风格描述

#### 优化前
我希望你能帮我分析一下这段代码。如果方便的话,请你着重关注 一下安全方面的问题,特别是 SQL 注入、密码处理这些方面。 当然,如果你觉得有其他问题也可以提一下,但是不要分析太多 不重要的问题,比如代码格式什么的。请尽量简洁,但也要清楚。
#### 优化后
分析下面代码的安全问题。

只关注: - SQL 注入 - 密码存储

不关注: - 代码风格、格式

输出:每个问题一行,"严重程度 + 行号 + 描述"。

字数减半,效果更好。

### 12. 优化方向:让提示词更稳定

不稳定的源头通常是**留给模型的"自由度"**。

#### 找出每个"模糊词",量化它

| 模糊词 | 替换 |
|---|---|
| 简洁 | 不超过 100 字 |
| 详细 | 至少 5 个段落 |
| 几个 | 3 个 |
| 重要的 | 优先级 ≥ P1 |
| 现代的 | ES2022 + |
| 深入分析 | 包含原因、影响、对策三方面 |

#### 找出每个"开放选择",固化它

❌ "选一种合适的格式"
✅ "用 Markdown 表格"

❌ "用合适的语气"
✅ "用客服式礼貌语气"

### 13. 评估提示词质量

光"看起来好"不够,要有**量化评估**。

#### 简单评估:手工打分

准备 10 个测试输入 → 跑提示词 → 给每个输出打分 → 算平均分。

每次改 prompt 后重新跑,对比分数。

#### 进阶评估:LLM 当评委
你是一个评估专家。

请按以下维度给输出打分(1-10): - 准确性 - 完整性 - 格式正确性 - 风格一致性

输出 JSON: { "scores": {...}, "reasons": {...} }

任务:

输出: {要评估的输出}

注意:用 LLM 当评委要用**比生成模型更强的模型**(避免"自己评自己")。

#### 工业级:A/B 测试

生产环境同时跑两个 prompt 版本,分流用户,对比业务指标。

### 14. 提示词版本管理

提示词是"代码资产",要版本化管理。
prompts/ ├── v1/ │ ├── system.txt │ └── examples.md ├── v2/ │ ├── system.txt │ └── examples.md └── current -> v2 ```

或者用专门的工具:

  • PromptLayer:记录每次调用、对比版本
  • Helicone:监控和评估
  • LangSmith:调试 + 评估
  • Weights & Biases:实验管理

15. 常见问题速查

问题 速查
输出多了前言 加"第一个字符必须是 {"
JSON 字段缺失 加"字段缺失用 null"
模型瞎编 加"不确定时输出 unknown"
模型太啰嗦 加"每句不超过 20 字"
风格不对 给 1 个范文示例
模型跑题 加"先复述任务再回答"
偶尔答错 temperature → 0 + 加示例
模型拒绝 改用合规上下文
长文丢信息 拆成多步、用 RAG

总结

  • 调试三步法:定位 → 缩小变量 → 验证稳定
  • 问题分类:格式错、内容错、风格错、跑题、拒绝、不稳定,每类有专门解法
  • 格式约束的杀手锏:"第一个字符必须是 {"、"字段缺失用 null"
  • 让模型"先复述任务"是对齐意图的有效手段
  • 不稳定先调 temperature,再加示例
  • 让模型自己 review 提示词,常常比手动改更有效
  • 优化方向:缩短长度、量化模糊词、固化开放选择
  • 工业级评估:手工打分 → LLM 评委 → A/B 测试
  • 提示词要版本化,是代码资产不是临时草稿

评论