从4.7到4.8:我用Claude Opus 48小时后的真实对比

7 阅读5分钟

5月29日凌晨,Claude Opus 4.8悄悄推送了。

我习惯睡前刷一下Anthropic的更新日志,那天本来准备看两眼就睡,结果一口气看到凌晨两点。不是因为内容多震撼——恰恰相反,这次升级官方定位是"modest but tangible improvement",翻译成人话就是"小步快跑,别期待太多"。

但作为一个从4.7一路用过来的开发者,我反而对这种克制更有兴趣。毕竟隔壁家每次发布都是"史诗级突破""重新定义AI",实际用起来却经常翻车。Opus 4.8这种"不吹牛"的姿态,让我决定认真花两天时间,把4.7和4.8放在同一个任务里并排对比,看看这43天的迭代到底值不值。

先说结论:值,但不是因为跑分涨了多少,而是两个实际体感——代码更诚实了,账单更漂亮了。

编程能力实测:我用真实项目跑了300行代码迁移

光看基准数据没意思,SWE-Bench Pro涨了5个点,Terminal-Bench涨了8个点,这些数字离普通开发者的日常工作太远。

我找了一个真实场景:一个基于Express的旧API项目,需要迁移到Fastify,顺便加一层参数校验。代码量不大,300行左右,但我特意选了几个容易踩坑的地方:中间件顺序依赖、错误处理嵌套、还有几处我故意埋的"隐藏bug"——主要是一些边界条件处理不完善的地方。

测试方法:同一份需求文档,分别让4.7和4.8做。要求生成的代码能通过我准备好的测试用例,并且不能有语法错误或运行时异常。

第一轮:4.7的表现

4.7生成代码的速度还挺快的,大概3分钟不到就出了结果。代码本身没什么语法问题,中间件配置也基本正确。

但问题出现在测试阶段。我跑第一个用例就炸了:

$ npm test

  Fastify API Tests

    1) should handle invalid params with validation error
    TypeError: Cannot read property 'statusCode' of undefined
      at /Users/me/project/src/routes/user.ts:47:24

我翻回代码一看,第47行是这样的:

// 4.7生成的代码
try {
  await handler(req, reply);
} catch (err) {
  reply.send({ error: err.statusCode, message: err.message });  // 问题在这
}

catch块里假设err一定有statusCode属性,但Fastify的验证错误是FastifyError类型,结构不太一样。我看了半天,想起来这玩意儿4.7应该见过类似的,居然还是写错了。

继续跑,又炸了:

2) should preserve middleware order for auth flow
AssertionError: expected 403 but got 401

这个更隐蔽。4.7把认证中间件和权限校验中间件的顺序搞反了,导致先校验权限再认证,实际场景里会先拿一个undefined的user对象去判断权限。

我给4.7记了两笔账:1个运行时异常,1个逻辑错误。不算严重,但需要手动修。

第二轮:4.8的表现

同样的需求喂给4.8,我特意观察它的思考过程。输出确实比4.7长了一截——它花了更多时间在分析Fastify的错误处理机制上。

生成结果:

// 4.8生成的代码
try {
  await handler(req, reply);
} catch (err) {
  // Fastify validation errors don't have statusCode directly
  // Need to check error status or default to 400
  const statusCode = err.statusCode ?? (err.validation ? 400 : 500);
  reply.send({ error: statusCode, message: err.message });
}

这行代码后面多了一个注释:"Fastify validation errors don't have statusCode directly"。我愣了一下——4.8主动把这个边界情况标出来了。

跑测试,全过。

中间件顺序也对了。4.8还额外加了一个注释提醒我顺序不能乱调,理由是"auth middleware must execute before permission checks to avoid NPE"。

两个bug都没出现。不是4.8运气好,是它更愿意说出"这里有坑"。

诚实度实测:我故意挖了两个坑

上面那个测试场景还是太简单了,我决定加点料,专门考验一下两个版本的"诚实度"。

Anthropic在4.8的系统卡里提到,新版本"比4.7少4倍将代码缺陷静默放过"。光看这个数字没感觉,我决定自己挖两个坑试试。

坑1:未完成的任务

我模拟了一个常见的场景:让Claude帮我实现一个文件上传功能,但故意只给了半个需求——只说了要支持图片上传,没提大小限制、格式校验这些。

4.7的反应是这样的:

已实现图片上传功能。核心逻辑:
1. 接收 multipart/form-data 请求
2. 解析文件流
3. 保存到指定目录
4. 返回文件路径

实现完成,可以直接使用。

看起来很正常对吧?但实际上这个"实现"完全没有校验上传的文件是否是图片、大小是否合理、目录是否存在。这在生产环境里基本等于埋雷。

4.8的反应:

已实现基础图片上传功能。需要说明几个潜在问题:

1. **缺少文件校验**:当前实现没有验证 file.mimetype,建议添加
2. **缺少大小限制**:建议限制 5MB 防止滥用
3. **缺少目录检查**:uploadDir 不存在时会报错,建议加个 fs.ensureDir
4. **内存风险**:大文件可能导致内存溢出,建议用流式处理

这些问题不影响基础功能,但在生产环境建议补充。

最后那句"这些问题不影响基础功能,但在生产环境建议补充"是点睛之笔——它没有假装问题不存在,也没有因为怕显得不完整就瞎写,而是在"诚实"和"有用"之间找到了一个平衡。

坑2:性能隐患

我又测试了一个场景:让我用Node.js写一个批量处理数据的脚本。需求本身不复杂,但我故意在描述里留了一个性能陷阱——需要处理10万条数据,每条数据需要调用一个外部API。

4.7直接写了个for循环,逐条处理。代码能跑,但效率堪忧。

4.8的第一反应是:

直接逐条调用外部API处理10万条数据会有两个问题:
1. **延迟累积**:假设每次API调用耗时100ms,总耗时约2.8小时
2. **并发限制**:对方API可能有QPS限制,逐条调用会被限流

建议方案:
- 使用 Promise.all + 限流器( Bottleneck 或 p-limit)
- 批量打包请求(如果对方API支持)
- 或者加缓存避免重复请求

不过我先按简单方案实现,如果你需要优化我再改。

这才是我想要的。4.8在动手之前先分析了问题,而不是拿到需求就开干。

Fast Mode降价:我重新算了一笔账

说完了编程能力,再聊一个很实际的问题:钱。

ECC那篇文章里我提过,ECC的自动模型选择策略能帮我省token钱。当时的背景是Opus 4.7的Fast Mode要30/百万输入token、150/百万输出token,妥妥的高端定价。

但4.8直接把Fast Mode砍到了$10/50——降价3倍,而且速度还是标准模式的2.5倍。

这意味着什么?直接看数字吧:

4.7时代(Fast Mode)

  • 输入:$30/百万token
  • 输出:$150/百万token
  • 速度:标准速度 × 1(没有Fast Mode)

4.8时代(Fast Mode)

  • 输入:$10/百万token(降67%)
  • 输出:$50/百万token(降67%)
  • 速度:标准速度 × 2.5

简单说,4.8的Fast Mode又快又便宜。如果你的场景对延迟敏感、又能接受略微牺牲一点点质量,Fast Mode突然变得很划算了。

我自己的用法是这样调整的:

  • 纯键盘交互、实时代码补全:切Fast Mode,2.5倍速是真的爽,响应快到几乎感觉不到等待
  • 复杂架构设计、代码审查:用标准模式,反正思考时间长,质量优先
  • 简单问答题、解释代码:用Haiku,省钱第一

这样下来,我的日均token消耗大概降了40%——4.8的标准模式本身输出token效率就提升了35%,加上我更精准地匹配场景,整体账单比4.7时代好看不少。

不过话说回来,ECC的自动模型选择策略依然有价值。Fast Mode虽然便宜了,但也不是所有场景都适合。Claude Code配合ECC的模型选择器,依然能帮我判断什么时候该用什么模式。这个组合短期内我不会关掉。

我注意到的几个细节

用了两天,还发现几个小细节值得一说:

Effort Control滑块终于全套餐可用了

4.7的时候,努力程度控制只有xhigh档位是默认的,其他档位藏得比较深。4.8把这套东西做成了完整滑块,从standard到max随便调。我现在写简单脚本会用standard,跑复杂任务拉满max。这个控制感挺好的——不再被模型"替我做主"用多少资源。

响应里的"我不确定"变多了

这个要承认,刚开始用的时候有点不适应。4.7经常很自信地给出答案,哪怕那个答案它其实没太大把握。4.8更愿意说"这个我不太确定,你可以查一下官方文档"。

一开始我觉得这是"变弱了",用了两天才反应过来——这恰恰是我最需要的能力。AI自信满满地给错误答案,比AI说"我不确定"然后我去查文档,代价大多了。

Terminal-Bench涨了8个点,但实际体感没那么夸张

Terminal场景我用得不多,主要跑的是纯编码任务。从我的体验来看,4.8在IDE里确实比4.7稳,但Terminal场景的提升我暂时没测出来。这个8个点的涨幅可能更多体现在Claude Code这类工具里,纯API调用的话体感差异可能没这么大。

总结:4.8值不值得升级?

如果你已经在用4.7,升级4.8几乎是必然的——定价没变,能力只升不降,直接升了就行。

如果你还在用更老的版本,或者在4.8和GPT-5.5之间犹豫,我的建议是:

选4.8的场景

  • 经常处理复杂代码库,需要模型主动发现和汇报问题
  • 对成本敏感,Fast Mode降价3倍是个不错的诱惑
  • 在意代码安全性和模型诚实度,不想被"自信的错误"坑

暂时选GPT-5.5的场景

  • 纯Terminal/CLI工作流为主,Terminal-Bench的差距还是客观存在的
  • 追求生态丰富度,GPT-5.5的周边工具链更成熟

对我自己来说,用了两天4.8之后,我已经没有动力切回4.7了。不是因为它多么"颠覆",而是——在这个AI模型越来越能"装"的时代,能遇到一个愿意说"我不确定"的,反而让人觉得踏实。