![]()
3秒审完75个文件,零漏洞。这速度连扫一眼文件名都不够。
开发者Mitchell Hashimoto最近干了一件事:用同一个Claude模型,分别以命令行(CLI)和API两种方式审代码。结果让他怀疑自己是不是在跟两个完全不同的AI对话——CLI版本揪出7个真bug,API版本先是哑火,后来改配置后喷出84条警告,其中大半是误报。
这事发生在他的Rust项目重构期间。20次提交、77个文件、净删4700行代码。他把这次重构丢给自研工具brunt,一个专门让AI互相找茬的代码审查系统。测试对象锁定Claude Sonnet,同一个模型家族,同一套提示词,三种接入方式。
CLI版:7条 findings,条条见血
命令行跑出来的结果干净得不像AI。
7个问题,每个都能直接进JIRA。最漂亮的一击是个Rust异步陷阱:某处调用了异步函数却漏了.await,编译器不报错,运行时直接静默丢弃Future——场景触发器永远也不会激活。Hashimoto的原话是:「这正是你希望AI审查员抓住的那种bug。」
代码长这样:
// Bug: 创建了Future但从未轮询它 state.scenario_trigger.on_activity_created( user.tenant_id, &activity, &state ); // 应该是: state.scenario_trigger.on_activity_created( user.tenant_id, &activity, &state ).await;
![]()
Rust的编译器在这里失职了。它把未处理的Future当成合法代码,程序能跑,就是逻辑永远不走。这种bug人工审查很容易滑过去,CLI版Sonnet却精准点杀。
API版:84条 findings,狼来了
切换到API通道,画风突变。
Hashimoto第一次跑API时,3秒返回零发现。75个文件,零漏洞,物理上不可能——除非所有调用都在失败。排查一小时,真相浮出水面:他用的模型别名claude-sonnet-4-6-20250514在CLI能解析,API直接404。Promise.allSettled默默吞掉了所有错误,返回空结果。
修复配置后重跑,Sonnet API版喷出84条警告。数量是CLI的12倍,质量却断崖下跌。它举报已删除代码里的bug,警告已被整体移除的函数参数问题。技术上,这些观察对孤立diff成立;实际上,依赖项在同一PR里被连带删除了。
Opus API版稍好,44条发现,8条标为critical——全是「移除模块声明会破坏依赖方」。单文件视角看成立,跨文件视角看荒谬:依赖方也被删了。模型看不见完整上下文。
同一家公司,两套神经系统
Hashimoto的测试暴露了一个反直觉的事实:Anthropic没把CLI和API做成同一套服务的两个入口。
![]()
CLI版显然带了更完整的上下文工程。它可能默认启用了代码库感知,或者prompt里嵌入了跨文件关联的隐式指令。API版则是裸奔状态,除非你手动喂给它同样的上下文——而大多数人不会,因为文档没告诉你需要这么做。
这解释了数字的荒诞对比。7对84,不是模型能力的差距,是产品形态的差距。CLI是Anthropic自己调好的相机,API是给你RAW格式自己后期。
更隐蔽的坑在于错误处理。brunt用Promise.allSettled收集结果,这本是个防御性设计,却恰好掩盖了API的404灾难。开发者拿到「零发现」还以为是代码太干净,实际上是请求全失败了。这种沉默的失败比报错更危险。
噪音是审查系统的毒药
Hashimoto的结论是工具性的,但戳中了AI工程的核心困境。
一个喊84次狼来的审查员,训练开发者无视警告。一个只报7次且次次精准的审查员,才能建立信任。这个信任成本在代码安全场景下是致命的——当AI成为主要代码生产者,审查环节的任何失效都会指数级放大。
他目前的workflow是:Claude CLI写代码,brunt+CLI版审查,人工做最终把关。API版被降级到实验性任务,Ollama本地模型直接出局。
这个选择背后有个未被言明的焦虑:如果AI写代码、AI审代码的链条里,审查环节本身不可靠,整个自动化大厦的地基就裂了。Hashimoto的测试没有解决这个焦虑,只是把它从抽象担忧变成了可量化的7 vs 84。
brunt的GitHub仓库现在有了条新issue:「调查API与CLI的行为差异」。没人回复。Hashimoto在文末抛了个问题:如果你也在用AI审AI写的代码,你确定你的审查员看的是同一页剧本吗?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.