Prompt 工程基础:如何写出有效的指令 · 第 5 / 6 节

第 05 课:调试和改进 Prompt

本课目标:

  • 学会系统化地识别 prompt 问题
  • 掌握诊断问题原因的方法
  • 建立有效的迭代优化流程

前置知识:<< 04 Chain-of-Thought | 下一课 06 >>

当 prompt 不管用时该怎么办

你精心写了一个 prompt,包含了角色、任务、格式、示例——然后 AI 输出的结果还是不对。可能是格式乱了、内容偏了、或者漏掉了关键信息。这时候该怎么办?

随机改几个词、祈祷下次运气好?还是系统化地找出问题、针对性地修正?本课教你后者——像调试代码一样调试 prompt:识别症状、诊断原因、小步修改、验证效果1

Prompt 调试的三步流程

Prompt 调试跟调试代码很像1

  1. 识别问题:输出哪里不对?
  2. 诊断原因:prompt 的哪个部分导致了这个问题?
  3. 修改验证:改一个地方,测试是否改善

关键是一次只改一个变量。如果你同时改了三个地方,就不知道是哪个改动起了作用。

步骤 1:识别具体问题

"输出不对"太笼统,要具体到哪里不对1

常见问题类型

问题类型具体表现可能原因
格式错误JSON 字段名不对、缺少某个部分格式说明不够明确,或示例不一致
内容偏离回答了不相关的问题、跑题了任务描述不清楚,或约束条件不够
信息遗漏漏掉了某些关键信息没有明确列出所有需要的信息
过度发挥输出了你不需要的额外内容缺少"只输出 X,不要输出 Y"的约束
理解错误AI 误解了你的意图用词歧义、或缺少示例澄清
不稳定每次运行结果差异很大prompt 过于宽松、给了 AI 太多自由度

示例:识别问题

你的 prompt:

总结这篇文章的要点

AI 输出:

这篇文章讨论了三个要点:首先是……其次是……最后是……

问题识别:格式不是你要的列表格式,而且没有说是几个要点。

步骤 2:诊断原因

找出 prompt 的哪个部分(或缺失的部分)导致了问题。

诊断问题的清单

  • 任务描述清楚吗?"总结要点"太模糊,没说几个要点、每个多长。
  • 格式有示例吗?没有,AI 只能猜你要什么格式。
  • 约束条件够吗?没有说"只输出要点,不要输出引导语"。
  • 是否有歧义?"要点"可能被理解为"核心观点"或"所有论点"。

诊断结果:缺少格式说明和数量约束

步骤 3:小步修改,验证效果

一次只改一个问题,测试是否改善。

修改 1:明确数量和格式

用三个要点总结这篇文章,每个要点一句话,用项目符号列表格式。

测试结果:格式对了,但每个要点太长,超过一句话。

修改 2:加入长度约束

用三个要点总结这篇文章。
要求:- 每个要点不超过 20 字- 用项目符号(- )列表- 只输出要点,不要输出"要点如下"之类的引导语

测试结果:符合预期。

记录有效的修改,下次遇到类似问题可以复用。

常见问题的诊断和修复

问题 1:格式不稳定

症状:有时输出 JSON,有时输出纯文本;有时用冒号,有时用等号。

诊断:缺少格式示例,或者示例之间格式不一致。

修复

  • 给出 2-3 个格式完全一致的示例
  • 或者在约束中明确说:"严格按照以下 JSON 格式,不要输出其他格式"

问题 2:遗漏信息

症状:输出只包含部分信息,总是漏掉某些字段。

诊断:你要求的信息没有明确列出来。

修复

提取以下所有字段(必填):1. 标题2. 作者3. 发布日期4. 摘要
如果某个字段在原文中找不到,输出"未提供",不要省略该字段。

关键是明确列出所有必填字段,并说明找不到时该怎么办。

问题 3:过度解释

症状:你只要代码,AI 给了代码 + 一大段解释;你只要列表,AI 在列表前后加了介绍和总结。

诊断:缺少"只输出 X"的约束。

修复

只输出可运行的代码,不要输出任何解释、注释或说明。

或者:

只输出列表,不要输出"以下是列表"之类的引导语或总结。

问题 4:理解偏差

症状:AI 理解错了你的意图,回答了相关但不对的问题。

诊断:用词有歧义,或者缺少上下文。

示例

分析这段代码的问题

AI 可能分析:

  • 代码风格问题
  • 性能问题
  • 安全问题
  • 逻辑错误

你要的是逻辑错误,但 prompt 里没说。

修复

分析这段代码中的逻辑错误。忽略代码风格和性能问题,只关注会导致输出错误的逻辑bug。

明确你要的维度,排除其他维度。

迭代优化的最佳实践

实践 1:建立测试用例

准备 3-5 个代表性的输入,每次修改后都用这些输入测试1

示例:你在优化"提取产品评论的情感"这个 prompt。

测试用例:

  1. 明显正面:"非常满意,强烈推荐!"
  2. 明显负面:"完全不能用,浪费钱。"
  3. 中性混合:"功能还行,但价格有点贵。"
  4. 边界情况:"还可以吧。"
  5. 复杂情况:"客服态度很好,但产品质量一般。"

每次修改 prompt 后,用这 5 个输入测试,看是否都分类正确。

实践 2:记录版本和效果

像代码版本管理一样管理 prompt 版本1

简单的记录方式

版本 v1 (2024-01-15):提取评论情感
效果:- 明显情况 OK- 边界情况不稳定
---
版本 v2 (2024-01-15):将评论分类为"正面"、"负面"或"中性"。示例:[3个示例]
效果:- 边界情况改善- 但输出格式不统一(有时输出"positive"、有时"正面")
---
版本 v3 (2024-01-15):[v2 内容] + 约束:只输出中文"正面"、"负面"、"中性"三个词之一。
效果:✅ 通过所有测试用例

这样你知道每个改动带来了什么效果,如果新版本反而变差了,可以回退到上一个好版本。

实践 3:A/B 测试关键变化

不确定某个改动是否有效?同时保留两个版本,各测试 10 次,比较成功率。这就是 A/B 测试:一次只变一个因素,用数据判断优劣。

示例:你不确定加"让我们一步步思考"是否真的有帮助。

  • 版本 A(不加):10 次测试,7 次正确
  • 版本 B(加 CoT):10 次测试,9 次正确

数据说话,B 更好。

实践 4:从简单版本开始

不要一上来就写一个 500 字的复杂 prompt。从最简单的版本开始,逐步添加约束1

迭代路径

v1: 总结这篇文章   → 不够具体
v2: 用三个要点总结这篇文章的核心观点   → 要点太长
v3: 用三个要点总结这篇文章的核心观点,每个要点不超过 20 字   → 格式不统一
v4: [v3] + 用项目符号列表,只输出要点不要输出引导语   → ✅ 效果好

每一步只解决一个问题,最后得到一个刚好够用的 prompt,没有多余的废话。

调试流程总结

完整的调试流程是一个循环:运行 prompt → 检查输出 → 如果不符合预期就识别问题、诊断原因、修改一个地方、用测试用例验证 → 重复直到符合预期 → 记录成功版本。

下图展示了这个迭代循环的每个步骤:

关键原则

  • 一次只改一个地方
  • 用测试用例验证每次改动
  • 记录版本和效果
  • 从简单开始逐步添加约束

何时停止优化

Prompt 优化没有终点,但有一个够用标准:

可以停止优化的信号

  • 在测试用例上成功率 ≥ 90%
  • 输出格式稳定
  • 你能清楚解释 prompt 每个部分的作用
  • 再优化的收益小于投入的时间

还需要继续的信号

  • 成功率 < 70%
  • 同样的输入每次输出差异很大
  • 你不确定 prompt 的某些部分是否有用
  • 在边界情况上经常出错

实用主义原则:够用就行,别追求完美。如果 90% 的情况下都工作良好,剩下 10% 的边界情况可以人工介入。

小结

调试 prompt 的流程是:识别具体问题 → 诊断原因 → 小步修改 → 验证效果。关键是一次只改一个变量,用测试用例验证每次改动,记录版本和效果。

常见问题包括格式不稳定、遗漏信息、过度解释、理解偏差。针对每种问题有对应的修复策略:加示例、明确字段、加"只输出"约束、排除歧义。

从简单版本开始,逐步添加约束,直到在测试用例上成功率达到 90% 以上。记录有效的 prompt 版本,下次可以复用。

下一课学习针对不同任务类型的 prompt 策略——代码生成、文档写作、数据分析各有什么特定技巧。

下一课 针对不同任务的 Prompt 策略 >>

Footnotes

  1. AI Prompt Debugging: Fixing Issues Through Iteration — https://whitebeardstrategies.com/blog/ai-prompt-debugging-fixing-issues-through-iteration/ 2 3 4 5 6

练习

01

下面是一个有问题的 prompt 和 AI 的输出。请识别问题并给出修复方案。

Level 1:诊断 prompt 问题

Prompt

总结这篇文章的要点

AI 输出(三次运行的结果):

  • 第一次:一段 200 字的文字总结
  • 第二次:5 个项目符号要点
  • 第三次:一句话概括 + 三段详细说明

问题:输出格式不稳定,每次都不一样。

完成标准 · 本地勾选
02

选择你自己写过的一个 prompt(或使用下面的场景),通过 3 轮迭代优化它。

Level 2:迭代优化真实 prompt

场景:让 AI 从会议记录中提取待办事项。

要求

  1. 写出 v1 版本(最初的 prompt)
  2. 测试后发现问题,写出 v2(修复一个主要问题)
  3. 再次测试发现新问题,写出 v3(最终版本)
  4. 说明每次改动解决了什么问题
完成标准 · 本地勾选

我的笔记

记下想法、痛点、没懂的地方。只写进这门课的附录,正课文件不动。