← 返回全部文章
Analysis · 2026年10月4日 · 8 分钟阅读 · 更新于 2026年10月7日

Claude Code 提示词审计实测:模型不同,查出的问题不同

提示词审计用的是当前会话的模型。在我们的小样本仓库里,Opus 和 Sonnet 每次都标出了埋入的 9 个问题,用时约一分钟。Haiku 每次都漏掉不存在的测试命令和部署脚本;正式测试前的一次单独试跑中,它还认为那条测试命令没有问题。

更新 — 2026 年 10 月 7 日:Haiku 5.5 改写了 Haiku 的结果。Anthropic 今天发布了 Claude Haiku 5.5;使用 Anthropic API 时,Claude Code 2.1.293 已将 haiku 别名默认指向新模型。我们用同一个测试样本仓库重跑,Haiku 5.5 三次都标出了全部 9 个埋入的问题,没有把任何对照列为问题,每次约 $0.04;同一天重跑的 Haiku 4.5 则分别标出 3、5、8 个。下文保留的 Haiku 4.5 结果记录了该模型当时的表现,它仍可通过完整模型 ID 调用。重跑的详细结果,以及一次 Haiku 5.5 运行超过 100K token 后触发的价格跳档,见Haiku 5.5 便宜九成只到 100K token:我们 95% 的 Claude Code 流量超过了这条线。

30 秒看懂结论

9 月 25 日,Claude Code 2.1.283 加入了提示词审计(/doctor prompt-audit)。它让 Claude 检查 CLAUDE.md、AGENTS.md、技能(skill)和子代理,找出三类问题:写给旧模型的指令、引用了不存在的文件或命令、文件之间互相矛盾。它会出报告、给修改建议;你不让它改,它就不改。

我们做了一个小仓库,埋入 9 个问题,另留 6 条指令作为对照,再用 Opus 5.5、Sonnet 5.5、Haiku 4.5 各跑 3 次:

  • Opus 5.5:每次都标出全部 9 个问题,没有把任何对照列为问题。按 API 标价换算,每次约 $0.75,用时约一分钟。
  • Sonnet 5.5:每次都标出全部 9 个问题,另有一次把一条对照列为低置信度问题项。每次约 $0.41。
  • Haiku 4.5:分别标出 5、7、6 个问题。3 次都漏掉了不存在的 npm 脚本和部署脚本;正式测试前的一次单独试跑还认为测试脚本没有问题。每次都建议替换文档中记载的 ultrathink 关键词,改用推理投入参数。
  • 9 次运行后,Git 都报告仓库没有变化。

结论:值得切到 Opus 或 Sonnet 跑一次,尤其是在换模型或改过构建命令之后。不过,报告里的每条修改建议仍然要自己核对。审计用的是当前会话的模型,平时用 Haiku 的话,先用 /model 切换。

审计查什么

/doctor prompt-audit 也可以写成 /checkup prompt-audit,要求 Claude Code 2.1.283 或更新版本。它通过内置的 claude-api 技能运行;关闭这个技能后,审计也就不可用了。

默认检查范围包括 CLAUDE.md、CLAUDE.local.md、AGENTS.md,以及 .claude/ 和 ~/.claude/ 下的规则、技能、命令、子代理和输出风格。也就是说,不传路径时,个人配置也在检查范围内。要指定仓库或文件,就在命令后面加路径。例如,/doctor prompt-audit . 检查当前仓库,/doctor prompt-audit .claude/skills/deploy 检查指定目录。

审计的一部分检查内容,与 Anthropic 发布 Opus 5.5 时给出的建议一致。Addy Osmani 在 9 月 22 日发布的指南中建议,删掉要求模型仔细思考的句子,因为模型本来就会在每次回复前思考。原文写道:“Delete ‘think carefully’ lines. Opus 5.5 already thinks before every reply.” 至于精简指令文件到底会改变什么、又不会改变什么,我们在讨论删除 CLAUDE.md 的文章里整理过相关研究。

我们怎么测的

测试仓库叫 acme-api。它的 package.json 里只有三个脚本:test、lint、build;两个源文件都用两个空格缩进。仓库还包含 CLAUDE.md、AGENTS.md、一个技能和一个子代理。我们埋入了下面 9 个问题,另保留 6 条指令作为对照:

#埋入的问题所在文件
1”think step by step and think carefully before every single response”CLAUDE.md
2用全大写措辞施压:“NEVER EVER skip this. THIS IS CRITICAL!!!”CLAUDE.md
3npm run test:unit,脚本不存在CLAUDE.md
4./scripts/deploy.sh staging,文件不存在CLAUDE.md
5”Indent with tabs” 与 “Indent with 2 spaces” 互相矛盾CLAUDE.md 与 AGENTS.md
6@docs/architecture.md,导入的文件不存在CLAUDE.md
7”Use XML tags like <thinking></thinking> to reason before you answer”CLAUDE.md
8”As a large language model, you may not be able to run commands”技能
9model: claude-3-5-sonnet-20241022,指定了已退役的模型子代理

6 条对照中,有 5 条与仓库实际情况一致:npm install、npm run lint、npm test、先 npm run build 再 git tag,以及只有 src/db/client.ts 可以导入 pg 的规则。另一条是 ultrathink when a change touches billing code。Anthropic 在 2.1.283 的发布说明中写明,审计会保留 Claude Code 文档认可的思考关键词。因此,建议替换 ultrathink 也会被我们计入对照被列为问题的次数。

正式测试在 10 月 4 日进行,使用 Claude Code 2.1.289。每次都用一份全新的仓库副本,只加载项目设置,通过 claude -p "/doctor prompt-audit ." 非交互运行,同时跑 3 个会话。总共 9 次,按 API 标价换算合计 $4.08,各次运行耗时相加为 529 秒。

我们逐份读完报告,再按事先约定的规则计数:报告标出了埋入问题所在的那一行,就算标出该问题;把对照列为问题项,就计入对照被列为问题的次数。如果报告保留了某条指令,只附带一条可选建议,则不计入。

测试结果

埋入的问题Opus 5.5Sonnet 5.5Haiku 4.5
1. “think step by step”3/33/33/3
2. 用全大写措辞施压3/33/33/3
3. 不存在的 npm run test:unit3/33/30/3
4. 缺失的 scripts/deploy.sh3/33/30/3
5. 制表符与 2 个空格的缩进冲突3/33/33/3
6. 缺失的 @docs/architecture.md3/33/31/3
7. <thinking> 标签3/33/32/3
8. “As a large language model…“3/33/33/3
9. 已退役的模型 ID3/33/33/3
每次标出的问题数9, 9, 99, 9, 95, 7, 6
对照被列为问题01(低置信度)3(每次都是 ultrathink)

Opus 和 Sonnet 会去仓库里核实指令。它们读取 package.json,确认没有 test:unit,也注意到 AGENTS.md 已经写了 npm test。它们还确认了 scripts/ 目录不存在,并在核实只有 src/db/client.ts 导入 pg 之后,保留了这条规则。

遇到缩进冲突时,Opus 在 3 次运行中、Sonnet 在 3 次中的 2 次,都指出现有代码用的是两个空格。两者都把最终选择留给了我们,并在报告中给出修改建议。

Sonnet 唯一一次把对照列为问题,是认为 git tag vX.Y.Z 这一步应该交代版本号从哪里来。它把这条标为低置信度问题项,按我们的规则要计入,但建议本身说得通。它的报告还对一些保留的指令提出了可选的补充说明。

Haiku 错在哪里

不存在的命令,3 次都没标出。不存在的 npm 脚本和缺失的部署脚本,都属于文档明确说要检查的“引用了不存在的文件或命令”。Haiku 在 3 次正式运行中全部漏掉。正式测试前,我们还单独试跑过一次;那次它看过 test:unit 所在的行,却认为这条指令只是操作步骤,与模型无关,而且仍然有效。报告原话是:“operational, not model-related, and remains current”。

每次都想把 ultrathink 换成推理投入参数。Haiku 每次都把这个关键词标为过时,建议改成 output_config: {effort: "xhigh"} 或 effort: "max"。这些是 Claude API 的请求参数,写进 CLAUDE.md 并不能设置 API 的推理投入。Opus 和 Sonnet 每次都保留了这一行。

这里还要分清另一件事:ultrathink 写在 CLAUDE.md 里是否起作用,我们没有测试。文档说的是把这个关键词写在提示词里。

处理缩进冲突时,建议与现有代码相反。两个源文件都用两个空格,Haiku 却在 3 次运行中都建议把 AGENTS.md 改成要求使用制表符。第 3 次报告还补充说,这应该由项目自己决定。另有一次,它删掉了要求模型逐步思考的那段话,却换上了另一句要求仔细推理的指令。

费用与耗时

模型每次平均费用,按 API 标价换算每次平均耗时报告轮次
Opus 5.5$0.75($0.74–$0.77)62 s10–13
Sonnet 5.5$0.41($0.39–$0.42)45 s12
Haiku 4.5$0.20($0.17–$0.23)69 s10–14

Haiku 费用最低,耗时却最长。表里的轮次采用 Claude Code 每次运行报告的计数。Pro 或 Max 订阅用户在额度内运行,计入方案的用量上限;超出部分按用量点数计费。

这些费用来自一个很小的仓库。配置更多时可能更贵,但费用具体怎样随配置规模变化,我们没有测。

本站 CLAUDE.md 实测

我们还用 Opus 5.5 审计了一次本站的 CLAUDE.md:13 轮、108 秒,按 API 标价换算为 $1.05。它先读指令文件,再按核实内容的需要去读布局、配置和脚本,一共列出 9 个问题项。其中有 3 个,我们确认确实有问题:

  • 规则指错了文件。表格宽度规则把 CSS 的位置写成了 tailwind.config.mjs。实际样式在布局文件里,作用于构建插件添加的包裹容器。
  • 同一份文件里,措辞要求互相矛盾。一条要求使用直白语言的规则,把某个中文词列为要禁用的行话;往下几行,中文风格清单又推荐用同一个词。
  • 脚本名缺少目录。gen-og.py 和 gen-llms.py 实际都在 scripts/ 下面。

其余几项需要由人判断:我们上周加的一条状态说明以后会过时,有些小节标题被它认为语气过重,还有一条与 AGENTS.md 重复的规则,两处内容已经不一致。

报告自己也说错了一句。它主动读了 AGENTS.md 和 CLAUDE.md,随后便说这两个文件在本站仓库里都会被加载。这把本次主动读取与启动时的默认加载混为一谈。我们上周的实测表明,两者同时存在时,Claude Code 启动时默认只加载 CLAUDE.md。另外,这次非交互运行无法批准 git blame 命令,所以它没能执行。

我们已经修正了 CSS 位置说明和脚本路径;那处措辞矛盾还没改。

怎么用

  • 先选 Opus 或 Sonnet。审计用的是当前会话的模型。默认用 Haiku 的话,先运行 /model sonnet。模型别名会随最新版本更新;本次测试使用的具体模型 ID 见来源部分。
  • 传入路径,指定检查范围。/doctor prompt-audit . 把指令文件的检查范围限定在当前仓库;不传路径时,还会检查 ~/.claude/。为核实事实,它仍会读取其他项目文件。
  • 指令矛盾由你决定怎么改。审计会标出冲突,有时还会说明现有代码支持哪一边,但最终选择仍留给你。
  • 换模型或改构建命令后,再跑一次。原本正确的指令,往往就是在这些变化之后过时的。
  • 先看建议,再决定是否应用。你不要求它改,它就不会改。

这些情况没测

  • 大型真实配置。测试仓库特意做得很小,每个问题都有已知答案。除此之外,我们只审计了本站一个 CLAUDE.md 文件,而且只跑了 1 次。
  • Fable 5.1。本次没有测试。
  • 照着建议删改后,代理表现会不会变好。审计指出哪些指令可能过时,并不能证明删掉就会更好;我们没有验证这一点。讨论删除 CLAUDE.md 的文章整理了相关研究结果。
  • 每个模型超过 3 次的运行。Opus 和 Sonnet 在这 3 次里都标出全部 9 个问题,但解释和附加建议并不完全相同;Haiku 每次标出的问题总数也不同。

相关阅读

来源

  1. Anthropic:管理 Claude 的记忆:审计指令文件。说明审计检查什么、默认检查范围、路径参数,以及只有用户要求后才会修改文件。
  2. Anthropic:命令参考。说明 /doctor [prompt-audit [path]]、/checkup 别名,以及最低版本 2.1.283 的要求。
  3. Anthropic:Claude Code 更新日志。2.1.283 加入审计,并说明会保留 Claude Code 文档认可的思考关键词。
  4. Anthropic:模型配置:用 ultrathink 临时加深推理。文档描述的是在提示词中使用 ultrathink。
  5. Addy Osmani,Anthropic:在 Claude 和 Claude Code 中用好 Opus 5.5,2026 年 9 月 22 日。
  6. npm:@anthropic-ai/claude-code。2.1.283 于 9 月 25 日发布。

我们自己的测量:2026 年 10 月 4 日,在 macOS 上使用 Claude Code 2.1.289,通过 claude -p 运行 /doctor prompt-audit .,共 9 次。claude-opus-5-5、claude-sonnet-5-5、claude-haiku-4-5-20251001 各跑 3 次,只加载项目设置,每次都使用一份全新的测试仓库副本。费用采用 Claude Code 按 API 标价报告的总额:这 9 次合计 $4.08,另有一次用 Opus 审计本站 CLAUDE.md,为 $1.05。每份报告都经过人工阅读,对照埋入的 9 个问题和 6 条对照逐项计数。

FAQ

提示词审计能查什么?它让 Claude 检查指令文件里的三类问题:写给旧模型的指令、引用了不存在的文件或命令、文件之间互相矛盾,再给出修改建议。这项功能在 2.1.283 中加入;你不要求它改,它就不会改。

用哪个模型有区别吗?在我们的测试里有。Opus 5.5 和 Sonnet 5.5 每次都标出全部 9 个问题;Haiku 4.5 每次标出 5 到 7 个,每次都漏掉不存在的测试命令和部署脚本。

跑一次要多少钱?在我们的小仓库里,按 API 标价换算,Opus 每次约 $0.75,Sonnet 约 $0.41,Haiku 约 $0.20。订阅用户会先消耗方案内的额度,计入用量上限。

它会直接修改文件吗?你不让它改,它就不改。我们的 9 次运行结束后,Git 都报告仓库没有变化。

要删掉那句要求逐步思考的指令吗?所有模型每次都标出了它,Anthropic 的 Opus 5.5 指南也建议删掉要求仔细思考的句子。不过,我们没有测试删掉后代理表现会不会变好。构建和测试命令等模型无法自行推断的信息,应当保留。

这篇对你有帮助吗?

相关阅读


文章独立产出 · 编辑政策

继续阅读 →