ARTICLE · 1040042
AI审代码,最烦它漏文件、标错行——阿里开源的工具专治这个
AI审代码,最烦它漏文件、标错行——阿里开源的工具专治这个
改动一多,AI审代码就开始挑活:只挑几个文件看,剩下的直接跳过;报出来的问题,行号还飘,你得先自己找它在说哪一行。
漏掉的那几个文件,可能正好是出事的那几个。标错的行,光是定位这一下,就够你喝一壶。
这两样毛病,阿里内部那个工具治了两年。它叫Open Code Review,官方说法是:它最早是阿里巴巴内部的官方AI代码审查助手,两年里服务了数万名开发者,累计找出数百万个代码缺陷。仓库是今年5月18日建起来并开源的,此前只在阿里内部用;这两天它又冲上GitHub趋势榜,一天涨了两千多星,现在攒下3.6万颗。
对写代码的人来说,最实际的用法就一句:PR提交之前,先让它过一遍。
前两天我写过《80万行代码,AI自己重写了》——AI写代码的速度早就不是瓶颈,瓶颈挪到了审。
用通用AI Agent审代码,毛病在哪
项目里写得很直白。拿Claude Code这类通用agent来审代码,常碰到三件事。
一是看不全。改动一多,agent就开始"抄近路",只挑一部分文件看,剩下的直接漏掉。
二是位置会飘。报出来的问题经常跟真实代码位置对不上,行号、文件引用一路漂走。
三是质量不稳。靠自然语言写的Skills本身很难调试,提示词稍微改一点,审查质量就上下浮动。
项目把根因归到架构上:纯语言驱动的流程,对那些"不能出错"的环节没有硬约束。模型是会走神的,而审查这一步,走神的代价就是漏掉真问题——你收到一份看起来挺像样的报告,里面却没有那条最要紧的。
阿里的解法:该工程管的,不让模型管
Open Code Review的思路是分工:确定性的环节交给工程逻辑,判断的环节交给模型。
有几件事"不能错",所以一件都不交给模型:
选文件。哪些文件要审、哪些该过滤,由工程逻辑定死,保证重要改动一条不漏。
打包。把相关文件捆成一个审查单元,比如message_en.properties和message_zh.properties捆在一起审。每个包跑一个子agent,上下文互相隔离,改动再大也稳,还能并行跑。
匹配规则。按每个文件的特征去匹配对应规则,用的是模板引擎,不是让模型自己现场找,噪音从源头就压掉了。
定位和反思。这是两个独立模块,一个专管评论该落在哪一行,一个专管这条评论说得对不对。
模型只干动态的那部分:做判断、按需取上下文,配的是一套专门为代码审查调过的提示词。仓库描述里还提到,它内置了多语言规则集,覆盖空指针、线程安全、XSS、SQL注入这些老坑,接口上兼容OpenAI和Anthropic两家。
说白了,前面那些步骤要么别错、要么错了也看不出来,所以用工程兜;只有"该怎么判断"才交给模型。
官方给的成绩单
为了证明这套分工有用,项目顺手放出了自己的基准:AACR-Bench。
它由50个热门开源仓库、200个真实Pull Request、10种编程语言构成,80多位资深工程师交叉验证,一共标出1505条真实问题。
在这套基准上,官方给的结论是:同一个底层模型,换Open Code Review来审,准确率和F1都明显更高,token只花约九分之一,速度还更快。
这里有两个词值得翻译一下。准确率(Precision)看的是"它报出来的问题里,有多少是真的";召回率(Recall)看的是"真问题里,它找出来多少"。
Open Code Review主动认了后半项:它的召回率比通用agent低。官方说这是有意的取舍——宁可少报,也不想拿一堆误报来烦你。
这个取舍放在实际工作里其实好理解:误报是要人花时间一条条去看的,报错了比不报还费人。所以它选的是"报了就大概是真的"。
它省的是token,不是判断。召回率这关它自己就认了:真问题也会漏,只是报出来的多半是真的。再一个,模型端点得你自己配——想接本地模型还是外面的大模型,自己定。它更像一道不拿工资的初筛,不是替你拍板的审查人。
怎么用,花不花钱
仓库是Apache-2.0协议,免费。地址在这儿:
https://github.com/alibaba/open-code-review装好之后填一个模型端点就能跑,命令是ocr。交互界面会带着你选厂商、填API key、挑模型,填完自动测一遍连通性。
它读的是Git diff,把改动的文件交给模型,产出的是带行号的评论。要审整个文件——比如接手一个陌生代码库——用ocr scan。
环境上要求Git 2.41以上。安装方式有安装脚本、GitHub Release里的二进制、从源码编译几种。
它也能挂进你现有的流程:Claude Code和Kimi Code都有插件;CI/CD支持GitHub Actions、GitLab CI、GitFlic CI和Gerrit,PR一提交它自己就跑一遍。另外还有个委派模式,让你本地的编码agent用自己的模型来审,连OCR这边的API key都不用配。
审代码这活,通用agent当然也能干。但"不能出错"的环节,靠提示词是堆不出来的。把工程约束和模型判断拆开、各管一段——这个路子值不值得抄,自己装一遍就知道了。
数据来源:GitHub(github.com)
以上。既然看到这儿了,如果觉得不错,随手「点赞、在看、转发」三连;想第一时间收到推送,给我加个星标⭐~谢谢你读到这里,我们下期见。