👁 176 次阅读
在AI辅助编程的工具链里,代码审查(Code Review)一直是成本最高、也最容易被忽视的环节。一份拉取请求(Pull Request)如果全部交由前沿模型逐行审阅,按行业通行的API计费方式,单次审查的成本差异可以达到28倍。
2026年9月,工程AI评测机构Entelligence团队发布了一组实测数据,把GPT-5.6 Luna和GPT-6 Astra放在同一批50个公开基准PR上,用完全相同的提示词、完全相同的验证流程,逐项对比了两者在准确率、成本、速度和bug类型覆盖上的表现。这组数据没有来自厂商营销稿,而是基于可复现的基准测试,因此值得认真拆解。
本文基于Entelligence公布的基准数据,结合我们自己的观察,来回答一个问题:当成本相差28倍时,那个便宜的模型到底值不值得用?

一、测试方法:50个真实PR,同一提示词
Entelligence的基准测试选取了50个公开基准PR,分别来自5个知名开源项目:Cal.com、Sentry、Discourse、Keycloak和Grafana,每个项目10个PR。每个PR都在干净的基线分支上引入了人工植入的缺陷,模拟真实开发中的一次变更。
两个模型拿到的是完全相同的提示词,要求审查正确性(correctness)、安全性(security)、并发问题(concurrency)、资源使用(resource)和错误处理(error-handling)五类bug,明确排除了风格、命名、文档和测试建议等主观项。每个模型都返回结构化的发现列表。
验证环节采用了双评审机制:对于每个PR,把所有模型的发现(包括Astra、Sol、Luna以及Entelligence人工审阅者)汇总成一份匿名列表,再由GPT-6 Astra和GPT-5.6 Sol分别独立判断每一条发现是否真实存在。只有两个评审模型同时认定为真bug的,才计入「已验证」数量。这种双重确认机制下,两个评审者在91%的发现上达成一致,最终有143个独立bug通过了双重验证。
需要说明的是,Astra既是参赛选手,也是评审之一,这在方法论上存在轻微的自我偏好风险。Entelligence在报告中明确列出了这一局限,并指出引入Sol作为第二评审者可以部分但无法完全消除该偏差。
二、成本对比:28倍的差距,从单次审查到每bug成本
在成本维度上,两个模型的定价本身就相差悬殊。GPT-5.6 Luna的API价格为每百万输入token 0.2美元、每百万输出token 1.2美元;GPT-6 Astra的价格为每百万输入token 10美元、每百万输出token 50美元。输出token的价格差距达到了42倍。
在实际的50个PR审查中,Luna的全程总花费为0.20美元,Astra为5.66美元。平均到单次审查,Luna每次花费0.0041美元,Astra为0.113美元,差距约28倍。
但单纯的单次成本并不够,更有意义的指标是「每个已验证bug的成本」。Luna找到69个已验证bug,Astra找到92个。按此计算,Luna每个已验证bug的成本为0.0030美元,Astra为0.061美元,差距约20倍。
| 模型 | 输入价格 | 输出价格 | 50个PR总成本 | 单次审查成本 | 已验证bug数 | 每bug成本 |
|---|---|---|---|---|---|---|
| GPT-5.6 Luna | $0.20 / M输入 | $1.20 / M输出 | $0.20 | $0.0041 | 69 | $0.0030 |
| GPT-6 Astra | $10 / M输入 | $50 / M输出 | $5.66 | $0.113 | 92 | $0.061 |
值得注意的是,Luna在单次审查中写出的输出token数量是Astra的3.1倍。它之所以仍然更便宜,完全依赖于其输出价格比Astra低了42倍。如果未来Astra的价格出现大幅下降,这个经济性优势可能会被压缩。
在速度方面,Luna每次审查平均耗时23秒,Astra为36秒。对于需要在短时间内获取反馈的开发工作流而言,这个差距虽然不是决定性的,但在高频审查场景下会累积成明显的等待成本。

三、准确率对比:便宜的模型,噪声是贵的模型的7倍
成本优势如此显著,但准确率上的差距同样不可忽视。在50个PR的审查中,Luna总共给出93条发现,其中24条未能通过验证,即错误率约为四分之一;Astra给出96条发现,其中4条未能通过验证,错误率约为百分之四点二。
换句话说,Luna大约每四条评论中就有一条是错误的;Astra则是大约24条中错一条。对于已经习惯于快速略过AI审查评论的开发者而言,这个噪声率差异意味着:当团队把Luna接入审查流程后,开发者会倾向于更大幅度地忽略其输出,因为四分之一的内容是噪声。
这一现象背后有一个值得注意的机制:错误率的高低不仅影响单次审查的可用性,还会影响开发者对整个AI审查流程的信任度。一旦开发者形成了「这个模型的评论大多不可靠」的认知,即使Luna在正确性bug上表现接近Astra,团队也可能降低对其输出的重视程度,从而导致实际收益低于理论上限。
四、按代码库拆分:平均数掩盖了关键弱点
上一篇文章中,读者反馈要求将结果按代码库和bug类型分别拆分,因为整体得分可能掩盖某个模型在某一仓库上表现优异、在另一仓库上表现极差的情况。数据拆分后,Luna的弱点变得非常清晰。
| 代码库 | 已验证bug数 | 差距评估 |
|---|---|---|
| Sentry / Discourse / Grafana | Luna与Astra差距在2个已验证bug以内 | 基本持平 |
| Cal.com | Luna 21个,Astra 30个 | 差距9个,明显落后 |
| Keycloak | Luna 6个,Astra 14个 | 差距8个,Luna准确率仅50% |
Keycloak的表现尤其值得警惕。Keycloak是一个身份与访问管理(IAM)服务器,其基准PR大多涉及认证和权限逻辑的变更。Luna在Keycloak上找到的已验证bug数量仅为Astra的不到一半,且其Keycloak发现中只有50%通过了验证,而Astra的验证通过率为93%。
这个差距的出现并非偶然。Entelligence在报告中明确指出:在认证和权限相关代码上,Luna的表现远不如Astra。这不是Luna「偶尔犯懒」的问题,而是它在这类需要推理整个权限模型才能判断正确性的代码上,能力存在结构性差距。
五、按Bug类型拆分:安全类bug是致命短板
将143个已验证bug按根因分类后,各类型的对比结果如下:
| Bug类型 | Luna已验证数 | Astra已验证数 | Luna/Astra比值 |
|---|---|---|---|
| 数据与逻辑bug(最大类别) | 39 | 47 | 83% |
| 并发bug | 10 | 13 | 77% |
| 安全bug | 9 | 19 | 47% |
数据与逻辑bug是最大的类别,Luna在这里的表现相对可以接受,找到了Astra发现数量的83%。并发bug上差距稍大,Luna找到77%。但在安全bug上,Luna只找到了24个安全bug中的9个,Astra找到了19个,比值仅47%。
这意味着:如果团队用Luna来审查安全敏感代码——认证逻辑、权限控制、输入校验、跨站请求防护——它的遗漏率接近一半。这类bug的修复成本远高于开发时多花的那点审查成本,一旦上线,后果可能是数据泄露或权限绕过。

六、各自的优势:Luna并非全面落后
需要指出的是,Luna并非在每一项上都全面落后于Astra。在143个已验证bug中,44个由两个模型共同发现,48个仅由Astra发现,25个仅由Luna发现。
Luna独有的25个bug中,16个是数据与逻辑类,4个是并发类。Entelligence给出了两个具体的Luna独有发现案例:
在Discourse项目中,重复执行取消订阅操作会持续降低用户的通知级别——这是一个典型的累积效应bug,单次操作看起来无害,但重复执行后结果会偏离预期。在Sentry项目中,一个并发bug会用新的不健康工作线程替换旧的工作线程,却没有停止旧线程的运行,导致资源泄漏。
这些案例说明Luna在某些特定模式下仍有独特优势,尤其是在检测「累积效应」和「状态残留」类bug时。但这并不能弥补它在安全类bug上的系统性遗漏。
七、两个关键安全案例:Luna为何会漏掉
Entelligence特别提到了两个Keycloak中的安全bug,Astra捕捉到了,但Luna完全遗漏:
第一个:联邦恢复码(Federated Recovery Codes)从未被标记为已使用。这意味着一个恢复码可以被多次使用,在身份恢复流程中构成严重的安全漏洞。第二个:全局查看权限(Global View Permission)会覆盖对单个客户端设置的拒绝规则,导致权限边界被意外突破。
这两个bug的共同特点是:在单行代码层面看不出任何错误,只有将变更后的权限模型作为整体推理,才能发现权限边界的破坏。这恰恰是Luna在安全敏感代码上的结构性短板——它缺乏对「变更后整体语义」的推理能力,而这类能力正是认证和权限审查所必需的。
八、方法论局限:这组数据的边界在哪里
在引用这组数据之前,有必要了解它的边界条件,避免过度外推。
1. 训练截止日期问题
基准PR的提交时间从2013年到2025年7月25日不等,其中20个来自2025年,但没有任何一个PR的提交时间晚于两个模型的训练截止日期。这意味着模型可能「见过」相关代码的修复版本,存在知识泄露风险。Entelligence指出,由于缺陷是人工植入基准PR的,模型不太可能训练到那个具体bug本身,但周围代码是公开且老旧的,模型如果知道「正确版本长什么样」会有额外优势。
2. 评审者偏差
Astra既是参赛选手也是评审者,这在方法论上存在自我偏好。引入Sol作为第二评审者可以部分缓解,但无法完全消除偏差。
3. 单次运行方差
Entelligence额外重复了每个代码库的2个PR,结果发现单次运行和重复运行之间存在明显波动。Astra在重复运行中,第一次的15个已验证bug里有10个在两次重复中都出现,14个至少出现一次;Luna的15个bug里有7个在两次重复中都出现,12个至少出现一次。Luna的稳定性明显低于Astra。
4. 仅看diff,无上下文
两个模型都只看到了diff本身,没有仓库历史、调用图或生产环境数据。这意味着它们无法判断某个文件是否处于授权路径上,某个函数是否被登录流程调用,或类似变更是否在上一季度导致了事故。这些上下文信息在实际审查中往往是判断风险等级所必需的。
九、最佳实践:如何组合使用两个模型
Entelligence基于数据给出了一个明确的结论:Luna足以处理日常的正确性bug,但不应独自审查认证或权限代码。
他们的建议是采用双模型组合策略:在每次拉取请求上都同时运行两个模型。50个PR的基准数据显示,双模型组合共找到143个已验证bug中的117个(82%),总成本为5.86美元——这是Luna的0.20美元加Astra的5.66美元,多覆盖了25个单独运行任一模型都找不到的bug。
对于团队而言,这实际上是一个「用3.6%的成本增量换34%的覆盖率提升」的决策。当然,5.86美元只是50个PR的基准成本,实际团队的用量和成本结构需要根据自己的审查频率和模型定价重新计算。
更实用的落地建议是分级路由:将高风险变更(认证、权限、支付、数据访问层)路由到Astra,常规变更(功能逻辑、UI、配置)路由到Luna。这种路由策略的本质是承认模型能力有结构性边界,而不是在「全用贵的」和「全用便宜的」之间二选一。
Entelligence还给出了一个可自行复现的测试流程,供团队在自己的代码库上验证类似结论:
1. 从仓库中收集30到50个合并后需要修复的已合并PR
2. 用同一提示词分别运行便宜模型和昂贵模型
3. 用一个非参赛模型作为评审者验证发现,或让评审模型加人工抽样
4. 按仓库和bug类别拆分结果,因为平均值会掩盖薄弱环节
5. 重跑部分PR,观察单次运行的波动幅度
6. 计算每个已验证bug的成本,并单独查看遗漏代价高的类别
十、总结:不是替代,是分工
这组50个PR的实测数据给出了一个清晰的结论:GPT-5.6 Luna和GPT-6 Astra不是替代关系,而是分工关系。
Luna的价值在于:以3.6%的成本覆盖75%的已验证bug,在处理数据与逻辑类bug上表现接近Astra,在单次审查速度上快约36%。对于日常的正确性审查、非安全敏感功能的代码审阅,它是经济上合理的选择。
Astra的价值在于:在安全敏感代码上几乎不可替代——认证、权限、跨站请求防护等场景,它的遗漏率比Luna低一倍以上。对于任何涉及资金、数据访问、身份验证的代码变更,Luna的不稳定性是不可接受的风险。
Entelligence的结论可以浓缩为一句话:用Luna审查日常变更,用Astra审查安全边界。在成本差异28倍的模型之间,正确的策略不是选择其中一个,而是根据变更的风险等级路由到不同的模型。
对于正在评估AI代码审查工具的工程团队而言,这组数据最大的启示或许是:不要只看「哪个模型更好」,而要问「在我的代码库上,哪些变更类别是高风险的,哪些是常规变化的」。这个问题的答案,决定了你的模型选择。
数据来源:Entelligence基准测试报告《GPT-5.6 Luna vs GPT-6 Astra: Is a $1.20 Model Good Enough for Code Review?》(entelligence.ai/blogs/gpt-5.6-luna-vs-gpt-6-astra-is-a-1.20-model-good-enough-for-code-review),发布于2026年9月,Hacker News社区评分97分、106条评论讨论。