首页/模型/Opus 4.8 vs Sonnet 5:代码重构任务实测对比
模型 已验证可复现

Opus 4.8 vs Sonnet 5:代码重构任务实测对比

选型讨论里最常见的一句话是"感觉 Opus 更聪明一点"。这篇把"感觉"换成 20 个真实重构用例下的数字。

可复现前提: 用例来自我们自己仓库的历史重构 PR,已脱敏后整理成 bench/refactor-20。评测脚本、原始输出与判定标准全部在仓库里,跑一遍约 40 分钟。

一、用例怎么选

我没有用公开 benchmark,原因很简单:公开题目和我们的代码风格差太远,结论迁移不过来。20 个用例全部来自过去半年真实合并的重构 PR,每个用例包含:

  • 重构前的文件快照
  • 一句话的重构意图(取自 PR 描述)
  • 重构后的人工版本作为参考
  • 该模块原有的单元测试

判定标准只有一条硬指标:改完之后原有测试全绿,加一条软指标:改动是否引入了明显多余的抽象。

二、结果

汇总text
                通过率     平均耗时    平均成本
Opus 4.8        18/20      52s        ¥0.83
Sonnet 5        16/20      19s        ¥0.14

两个失败用例两边重合:都是需要跨 4 个文件同步改签名的场景,两个模型都漏了最后一个调用点。这说明问题不在模型强弱,而在我给的上下文范围不够。

细分来看:

任务类型 用例数 Opus Sonnet
单文件提取函数 8 8 8
跨文件重命名 5 5 4
消除重复逻辑 4 4 3
调整模块边界 3 1 1

三、结论与用法建议

  1. 单文件范围内的重构,用 Sonnet。质量没差别,快 2.7 倍,便宜 6 倍。
  2. 跨模块的结构性重构,用 Opus,并且要把相关文件全部显式加进上下文。
  3. "调整模块边界"这类任务两个都不靠谱,目前还是人来定边界、模型来执行更划算。

第 3 条是这次评测最有价值的发现:我们原本打算把架构调整也交出去,数据劝退了这个想法。

四、你怎么复现

代码bash
git clone git@internal:praxis/bench-refactor-20.git
cd bench-refactor-20
cp .env.example .env   # 填入你自己的 API key
./run.sh --model claude-opus-5 --model claude-sonnet-5
# 输出:results/<date>/summary.md 与逐用例 diff

跑完欢迎把你的 summary.md 贴评论区,我想收集不同代码库上的差异。

4.6/ 5
5 位同事评分
这篇实践你能照着复现吗?给它打个分:
每人一次,可随时修改

评论与复现反馈 3

登录 后可以评论、评分,并把复现结果反馈给作者。
评审员 已复现1 天前

我们组按这个结论切了一周,成本确实降下来了,质量没感觉出差别。补一个数据点:我们的用例里跨文件占比只有 15%,所以整体省得更多。

好问题评审员21 小时前

「调整模块边界」那一行数据很有说服力。想问下这 3 个用例的失败模式是一样的吗?是边界划错了还是改漏了?

评审员19 小时前

不一样。2 个是边界划得过细(把一个内聚模块拆成了三个),1 个是改漏了循环依赖。原始 diff 都在仓库的 results/ 里,可以直接看。

相关实践

全部 →