阿里开源Open Code Review:一款AI代码评审命令行工具


代码审查还在靠人工一行一行看?阿里把这个内部AI工具开源了

Open Code Review(简称 OCR) 是阿里巴巴于 2026 年开源的 AI 代码审查工具。它最初是阿里内部官方代码审查助手,据项目介绍,已经在阿里内部服务数万开发者,并发现过数百万个代码缺陷。

简单来说,它的定位是:用 AI 自动审查 Git 提交、PR 或代码变更,并给出精确到代码行的 Review 意见。


这玩意儿到底是个什么来头

Open Code Review,名字挺长,但咱们记着它缩写叫OCR就行了。它不是今年才冒出来的新东西,在阿里内部已经跑了好多年,是正儿八经的内部官方代码审查工具。2026年阿里把它开源出来,意思就是不管你用GitHub还是GitLab,不管你是大公司还是小团队,谁都能用。

它的核心任务就一个:自动审查Git提交、Pull Request或者任何代码变更,然后把审查意见精确地标在哪一行哪一列。就像你团队里最严格的那个老程序员,随时在线,永不下班,而且记忆力好到能把整个代码库都装进脑子里。

但关键是,它做这件事的方式和别的AI工具不一样。别的很多AI审查工具,你给它一个代码改动,它就只看这个改动本身。就好像你给一个修理工看一个漏水的水管照片,他就只盯着那个漏水点,完全不看这根水管连着哪个总阀、旁边有没有电线、漏水往下流会不会泡坏楼下天花板。OCR不是这样,它会去看整栋楼的管道布局。

它不光是看改动的那几行代码

很多AI代码审查工具是怎么工作的呢?你提交了一个Pull Request,里面改了三个文件,每个文件改了十来行。工具拿到Git给你的diff输出,就是那种前面带加号减号的行对比,然后直接扔给大模型。大模型就照着这几行改动开始输出意见了。

这个做法有个很大的问题。比如你改了一个函数里头的某一行,但这个函数在别的地方被调用了十次,这十次调用传进来的参数可能不一样。你改完之后,其中两次调用可能会出问题。但AI光看你改动的那一行代码,根本不知道这个函数在外面被调用了多少次、怎么调用的,所以完全发现不了这个风险。

OCR的做法就完全不一样了。它不是你给它看什么它就只看什么,它会自己去翻。你改了一个文件,它会把这个文件完整地读一遍,不是只看改动的那几行。更狠的是,它还会去搜整个代码库,看看有没有别的文件跟你改的这个文件有关系。它还会去找其他被修改的文件,看看这些修改之间会不会互相影响。

这就好比老师改作业,别的AI是只盯着你改了哪个字,而OCR是把整个句子、整个段落、甚至整个章节都看一遍,然后再结合以前你写过的所有作文来判断这个字改得对不对。

它能发现哪些你自己都看不出来的问题

靠这种能翻全仓库的本事,OCR能找出好几种藏得很深的bug。

第一种是空指针风险。Java程序员最怕这个东西,就是明明你以为一个东西肯定不是空的,结果运行起来它就是空的,程序直接崩溃。你改了一段代码,把一个对象赋值给了一个变量,表面上看起来没问题。但OCR会去查这个变量在别的地方是怎么用的,它发现后面有一行代码直接用这个变量调用了方法,但完全没检查是不是空。它就知道了,你这个改动引入了空指针风险。

第二种是线程安全问题。你改了一个共享变量,没加锁。你单看这一处改动,好像没什么。但OCR会去查这个变量还有没有别的线程也在读写,一查发现有,它立马告诉你这里可能会数据错乱。

第三种是SQL注入。你写了一段拼接字符串来构造SQL查询的代码,你觉得没啥问题。OCR会去追踪这个字符串是从哪来的,发现它是从前端传过来的用户输入,然后它马上就警报了,因为用户输入没有过滤就直接拼进SQL里了,黑客可以传一段恶意代码进来。

第四种是XSS漏洞。跟前一种类似,你把用户输入直接吐到了网页上,OCR能追踪到这条数据流,告诉你这里可以被人塞进一段JavaScript脚本。

第五种是逻辑错误。比如你改了订单状态判断的条件,你觉得这样改是对的。但OCR会去查订单状态在别的业务流程里是怎么流转的,它发现按你这么改,有个状态永远也到不了了,整个流程就卡死了。

第六种是架构问题。比如你在一个底层的工具类里添加了调用上层业务模块的代码,看起来能跑通。但OCR会看整个依赖关系,发现你这样搞让依赖变成了循环的,以后维护起来会特别痛苦。

你看,这些都不是表面上的代码格式问题,不是什么缩进没用空格、行尾多了个分号之类的小事。这些都是实打实的、上线之后会造成事故的严重缺陷。

它的设计思路很有意思:工程规则加AI大脑

市面上大多数AI代码审查产品,走的是一条很直接的路线。你给它们一段代码,它们背后的大模型就开始发挥,最后吐出来一堆评论。整个流程像一个黑箱,你把代码从这头塞进去,评论从那头掉出来,中间发生了什么你完全控制不了。

这种做法的风险在于,大模型有时候会犯迷糊。它可能漏看了某个文件,因为你的prompt里没明确说要读那个文件。它可能把评论位置标错了,明明问题在第42行,它标到了第43行。你稍微改一下prompt的说法,它给出的结果就变了,特别不稳定。

阿里团队在做OCR的时候,显然也遇到了这些问题。他们想出来的办法很有意思,不指望大模型把什么都干好,而是先把那些必须准确的事情交给传统的程序来做。

具体来说,OCR的架构分成两层。

底层是一个确定性的工程系统。这个系统不会犯迷糊,它做事情是一板一眼的。它负责筛选哪些文件需要审查,把太长的改动列表拆分成多个小组,匹配预先设定好的代码规则,精确定位评论该放在哪一行,最后还会校验AI生成的评论是不是真的正确。这些事情全部由代码逻辑保证正确性,不需要大模型来发挥。

上层才是一个AI Agent。这个Agent不是用来做那些精确工作的,它的任务是需要理解能力的事情。比如理解一段代码的真实逻辑、判断这个改动到底想干什么、动态地去代码库里找相关的上下文、调用各种工具来获取更多信息、最后用人类能看懂的话写出审查意见。

这套设计的好处很明显。Agent可以自由发挥它的理解能力,但它的发挥被限制在了工程系统划定的框架里。它不会乱跑,不会漏看文件,不会把评论标错地方,因为那些事情根本轮不到它来做。这就好比让一个很有创造力的人坐在一个固定的工位上干活,他可以在工位里随便折腾,但不能离开这个工位去干别的。既保留了创造力,又保证了稳定性。

对付超大仓库有一套

现代软件开发里,有一个东西叫Monorepo,就是一个代码仓库里放了上百个甚至上千个项目。你改了一个最底层的工具函数,可能会影响到上面几十个服务。你一次提交可能涉及几百个文件的改动。在这种场景下,普通的AI审查工具直接就崩了。

为什么崩呢?因为你一次提交改了五百个文件,普通的AI Agent需要把所有这些文件的内容都读进上下文里。大模型的上下文窗口再大也有限,而且你把五百个文件的内容全塞进去,token费用高得吓人,速度也慢得要命。更糟糕的是,大模型在处理这么多信息的时候,注意力会分散,前面的东西后面就忘了,审查质量直线下降。

OCR对付这个问题的方法很聪明。它不会傻乎乎地把所有文件都扔给同一个AI Agent。它会先让工程系统做一次拆分。把五百个文件按照它们之间的关系分成若干个小组,比如改了同一个模块的文件分到一起,改了同一份配置的分到一起。然后它启动多个子Agent,每个Agent只负责审查自己那一组文件。这些子Agent是并发跑的,同时工作,最后再把所有人的审查结果汇总起来。

这个思路翻译成人话就是,你有一个超级大的图书馆要检查,你不找一个管理员从头看到尾,而是找五十个管理员,每人负责一排书架。大家同时开工,速度快了几十倍,而且每个人只需要关注自己那一排书架,看得更仔细、更不容易出错。

所以OCR对于企业级的大仓库特别友好。你改了一千个文件也好,改了两千个文件也好,对OCR来说无非就是多开几个子Agent的事情,不会因为仓库变大而崩溃或者质量下降。

它本身不是模型,是个搭积木的框架

很多人会有一个误解,以为Open Code Review是一个像GPT-4或者Claude那样的大模型。其实不是。OCR本身不包含任何模型,它是一个调用模型的框架。

它支持两种主流的接口格式,一种是OpenAI的那种,一种是Anthropic的那种。所以你手里有什么模型,就能接什么模型上去用。GPT-4o可以,GPT-5系列可以,Claude的Sonnet、Opus也可以。国内的DeepSeek、通义千问也能接。谷歌的Gemini,如果你通过一个兼容网关转一下,同样能跑。

这意味着你不需要重新训练任何模型,也不需要购买什么专用的AI硬件。你只要有一个能通过标准接口调用的模型,OCR就能拿过来用。你觉得哪个模型审查代码的效果好,就用哪个模型。哪天出了更强的模型,你换上去就行了,OCR本身不用改。

这就像你买了一个很厉害的厨房料理机,它不关心你用什么牌子的食材,你往里头放牛肉它帮你绞肉馅,你往里放面粉它帮你和面。模型就是食材,OCR就是那台机器。

怎么装怎么用

装这个东西很简单,你的电脑上只要有Node.js环境,一行命令就能装好。

打开终端,敲这行:

bash
npm install -g @alibaba-group/open-code-review

装完之后,你的系统里就多了一个叫ocr的命令。你可以用它来做各种审查操作。

但在用之前,你需要先告诉它用什么模型。比如你想用Claude Opus,就敲这几行配置:

bash
ocr config set llm.url https://api.anthropic.com/v1/messages
ocr config set llm.auth_token 你的API密钥
ocr config set llm.model claude-opus-4-6

你也可以用环境变量来配,怎么方便怎么来。

配好之后,最基础的用法就是直接审查当前代码工作区。你站在项目根目录下敲:

bash
ocr review

它就会自动看你当前改了哪些文件,然后开始审查。

如果你想审查两个分支之间的差异,比如你要把main分支合并到feature分支,想知道从main到feature中间改了什么,就敲:

bash
ocr review --from main --to feature

如果你只想看某一个具体的提交,比如有人告诉你某个commit可能有问题,你就敲:

bash
ocr review --commit abc123

把abc123换成真正的commit哈希值就行了。

输出结果是直接标在代码行上的,就像你在GitHub的Pull Request页面上看到的评论那样,哪一行有什么问题,建议怎么改,都写得清清楚楚。

它跟市面上其他工具比有什么不一样

市面上现在有好几款比较流行的AI代码审查工具。比如CodeRabbit,比如Claude官方出的Code Review Skill,比如Cursor编辑器自带的Review功能。这些工具各有各的优点,但它们的核心思路都差不多,就是让AI主导整个审查过程,代码进去,评论出来。

OCR的路线跟它们明显不一样。它走的是工程规则加AI的混合路子。不是让AI从头干到尾,而是让工程系统先把那些需要精确性的脏活累活干了,再让AI去做那些需要理解能力的活。

这个区别在实际使用中体现得很明显。全AI主导的工具,当你面对一个很大的Pull Request的时候,可能会出现漏看文件的情况。因为AI在处理大量信息的时候,注意力是有限的,它可能会自然地忽略一些看起来不重要的文件。但OCR不会,因为文件筛选是工程系统干的,程序会老老实实把每个文件都检查一遍,不会偷懒。

另一个区别是评论位置的准确性。全AI主导的工具在定位评论的时候,有时候会算错行号。你改了第50行到第60行,它可能把评论标到第55行到第65行。因为行号这东西对语言模型来说就是个数字,模型对数字的精确性本来就不如程序。OCR的评论定位是工程系统算出来的,精确定位哪一行哪一列,不会偏。

还有一个很重要的区别是结果的一致性。你用全AI主导的工具,同样的代码提交两次,两次的审查结果可能不一样。因为大模型有随机性,你第一次问和第二次问,输出会有一点差异。这在一些需要稳定规范的团队场景里是个问题。OCR因为用了工程规则来约束,结果的一致性要好很多,同样的代码跑出来的审查结果基本上是一样的。

所以OCR更适合那些对稳定性、可预测性要求高的企业场景。你不是在做一个酷炫的AI演示,你是在给团队建一个可靠的代码质量护栏,这个护栏不能今天在明天不在,不能上午说对下午说错。

到底适合什么样的人用

如果你是一个Java后端开发团队的成员,你们维护着一个很大的代码仓库,每次Pull Request都有几十上百个文件的改动,团队里代码审查的负担很重。那OCR就是为你准备的。它对Java的支持特别好,内置了大量针对企业级Java代码的审查规则,像是空指针、SQL注入、XSS漏洞、并发安全这些问题,都是阿里内部踩过无数坑之后总结出来的经验,直接写进了OCR的规则库里。

如果你在维护一个大型Monorepo,里面放了多个项目,代码量非常庞大。那你更需要OCR的大仓库处理能力了。它能自动拆分任务、并发审查,不会因为仓库大就卡死或者崩溃。

如果你的团队运行在GitHub或者GitLab上,已经把CI/CD流水线搭好了。你可以很容易地把OCR集成到你的CI流程里,每次有人提交Pull Request,就自动跑一次OCR审查,把结果直接贴回Pull Request的评论里。这样代码审查就从人工强依赖变成了自动化检查加上人工确认。

如果你的团队想要统一代码审查的规范,但又不想给每个程序员增加太多负担。OCR可以帮助你落地一套统一的审查标准,不管是谁写的代码,都经过同一套AI审查系统的检查,保证质量的一致性。

反过来,如果你是一个个人开发者,自己写一些小项目,仓库里的文件很少,每次改动也就两三个文件。那你直接用Claude Code或者Cursor的Agent功能可能更方便,不需要专门去搭一套OCR的系统。OCR的优势在大仓库和大团队场景下才明显,小场景下它的复杂度可能超过了它能带来的好处。

还有一点,如果你用的是JavaScript、Python、Go这些语言,OCR也能用,但它内置的规则库主要是针对Java的,在其他语言上的深度可能不如在Java上那么强。所以如果你是Java之外的生态,可能需要自己多配置一些东西。

用一句话把这事说清楚

Open Code Review的核心本质是阿里巴巴开源的一套企业级AI代码审查系统。它最厉害的地方不是用了多聪明的大模型,而是用一套确定性的工程流程把AI的行为约束住,让代码审查在大型仓库和多人团队里变得稳定、可控、能扩展。它不是那种花里胡哨的AI玩具,它是阿里内部真刀真枪用了好多年、验证过效果的生产力工具。