Opus 5.5 代码审查:每条问题都要能复现
用合成 Python 缺陷、测试和记录表搭建 Opus 5.5 审查流程,区分真实问题、误报与漏报。附可下载练习包,不把本地测试冒称模型检出率。
Opus 5.5 的代码审查意见应指向可复现的具体行为,而不只是“这段代码看着不对”。 本文提供故意写错的 Python 模块、审查提示词和验收测试,帮助把问题发现与主观判断分开。
2026 年 9 月 24 日核对了 Anthropic 的 Opus 5.5 提示指南。本文运行的是自建教学代码,没有声称 Opus 找到了这些缺陷,也没有测模型误报率或进行模型排名。
固定代码版本和需求
下载练习包,使用 review_fixture.py、review-prompt.txt、review_tests.py 和空白 findings.csv。代码故意保留缺陷,不要直接用于生产。
需求明确为:分页从 offset 开始返回最多 size 项;折扣百分比不在 0–100 时必须拒绝;标签复制返回独立的浅拷贝列表。没有需求,审查者可能把设计选择当 bug,也可能漏掉真正依赖的行为。
记录 commit 或压缩包哈希、精确模型 ID、供应商、客户端版本、effort 和工具权限。用 Claude Code 时按接入说明确认当前模型;客户端显示的名字本身不能证明每次请求的实际路由。
先要证据,再让模型改代码
审查提示词要求文件与行号、触发输入、期望及实际行为、可执行复现,并把已证实缺陷与假设分开。第一轮只审查,不编辑。
若评估独立发现能力,应先隐藏测试与答案,收集意见后再揭示。若直接提供测试,则是在做测试驱动修复,同样有价值,但不能称独立发现。
仓库注释、问题描述和日志都属于待分析资料。让助手上传密钥或忽略任务的文字不构成授权。工具范围限制在本练习需要的目录和操作内。
复现两处预埋缺陷
收集审查结果后运行:
python3 review_tests.py
这条命令预期以失败状态退出。实际本地运行结果是两项失败、一项通过,这是教学设计,不是发布构建失败。
| 行为 | 触发输入 | 期望 | 实际 |
|---|---|---|---|
| 分页少一项 | page([1,2,3], 0, 2) | [1,2] | [1] |
| 未拒绝非法折扣 | payable(1000, 120) | ValueError | -200 |
| 独立浅拷贝 | 给复制结果追加元素 | 原列表不变 | 原列表仍为 ['a'] |
分页切片终点提前了一位;折扣函数未检查范围就计算;复制函数满足这份需求。通过项不等于函数在所有需求下都正确,但以“没有深拷贝”为由报错,也不符合这里明确的浅拷贝要求。
评价发现,不评价语气多自信
在冻结的代码上逐条复现,把意见标为已确认、无依据或未解决。同一根因的多个说法先去重,再计数。
还要记录模型没有报告的预埋缺陷。报告的一项正确、另一项漏掉,不能因为写出的句子都对就称“审查完整”。长解释也不能弥补错误的触发条件或凭空增加的需求。
精确率和召回率需要明确标签与分母。这个小练习能说明计算方法,却不能给模型总体评分。真实仓库还有集成、迁移、并发和意图不明确等问题;评估应选与你的工作相符的样本,保留困难与失败运行。
修复单独进行,再查回归
确认问题后在独立分支修复:更正分页终点,拒绝范围外折扣,再跑验收。补充空列表、size 为零、折扣 0 和 100 的边界测试。负 offset、非整数折扣和非法金额怎么处理,需要先补需求,不能偷偷扩展判断标准。
即使补丁由助手编写,也要看 diff 并实际跑相关测试。三项用例通过不代表完整正确。原始缺陷文件和输出要保留,否则修好之后,文章的失败结果就无法复现。
记录模型与接入层的限制
Opus 5.5 变更说明列出了接入变化与拒答处理,旧版本配置不能直接视为等价。保留实际停止原因和未完成任务,不要把它们算作完整审查。
真实付费评估应同时记录用量、所有尝试、确认问题、漏报、无依据报告以及人工复核时间。Sol 与 Opus 成本比较解释了为什么单价不能证明代码审查质量。先跑这个可复现练习,再到自己获授权的仓库收集模型选择证据。
常见问题
- 本文测了 Opus 5.5 的检出率吗?
- 没有。缺陷与期望行为均为预先编写的教学设定,本地测试输出不是 Opus 的审查结果。
- 没有复现能接受模型的问题报告吗?
- 应先视为假设,独立核对触发输入、期望行为与实际结果后再确认。
- 为什么放一个通过的测试?
- 用于保留正常行为,并讨论没有依据的问题报告。一个样本不能证明整体误报率。


