Tools

工具速评:Open Code Review 用确定性流水线给代码审查 Agent 装护栏

DOC
N°003
DATE
Sep 16, 2026
READ
6 min read
TAGS
Open-Code-Review, CodeReview, CodeAgent, AACR-Bench, Alibaba

代码审查是 Agent 落地最自然的场景之一:输入是结构化的 diff,输出是结构化的评论,判据(这段代码有没有 bug)看起来也很明确。于是大量团队的做法是写一段比较长的提示词,把 diff 丢给一个通用编码 Agent,让它产出审查意见。

阿里开源的 Open Code Review 走了另一条路。它源自阿里内部的 AI 代码审查助手,据项目方说明已服务数万名开发者、发现数百万个缺陷,经过两年内部验证后才开源。它最值得看的不是提示词写得如何,而是它对**「哪些事不能交给模型」**的判断。

一、核心论点:把确定性还给代码

项目的设计哲学可以压缩成一句话:确定性工程负责绝不能错的步骤,Agent 负责动态决策与上下文检索。

拆开看,被划入「确定性」一侧的有四项:

确定性职责解决什么问题交给模型会怎样
精确文件选择决定哪些文件必须审、哪些过滤漏审,且漏审原因不可复现
智能文件捆绑相关文件归组(如中英文资源文件)跨文件关联断裂,上下文错配
细粒度规则匹配基于模板引擎匹配规则规则命中随提示词漂移
评论定位与反思独立模块校正位置与内容评论指向错误行号

而划入「Agent」一侧的是两块:针对代码审查优化的场景化提示词模板(据项目方说明可降低 token 消耗),以及从生产数据中提炼出的场景化工具集。

这个划分的工程意义在于可归因性。当审查结果不理想时,你能区分是「文件选错了」(确定性问题,可修复)还是「模型判断错了」(概率性问题,不可修复),而不是面对一个黑箱输出猜测原因。

二、上手:三条命令的路径

安装走 npm,装完得到全局命令 ocr。前提是 Git 版本不低于 2.41。

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

ocr config provider      # 选择内置或自定义 provider
ocr config model         # 为当前 provider 选模型

配置是交互式的,会引导填 API key 并自动测试连通性。之后按审查范围选命令:

cd your-project

# 工作区模式:审查已暂存、未暂存、未跟踪的全部变更
ocr review

# 分支范围:审查 feature-branch 自 main 分叉以来的变更
ocr review --from main --to feature-branch

# 单个提交
ocr review --commit abc123

两个容易被忽略但很实用的能力:

# 全文件扫描,不需要 git 历史,适合审计陌生代码库
ocr scan
ocr scan --path internal/agent

# 中断后恢复,长审查不必从头再来
ocr session list
ocr review --from main --to feature-branch --resume <session-id>

输出格式上有一个设计值得注意:

ocr review --format json --output result.json

把审查结果以 JSON 输出,明显是给宿主 Agent 消费的。这暗示了它的定位不是终端的终点,而是流水线中的一环。

三、AACR-Bench:一份像样的基准

工具类项目愿意公开基准并且公开数据集,本身就值得肯定。它公布的口径如下:

仓库数            50 个流行开源仓库
真实 PR           200 个
覆盖语言          10 种
问题标注          1505 个真实问题
标注方式          80+ 高级工程师交叉验证
数据集            AACR-Bench(已发布在 Hugging Face)

对照通用 Agent(同底层模型)的关键结论:

指标表现
精确率 / F1显著更高
Token 消耗约为通用 Agent 的九分之一
审查速度更快
召回率更低(刻意权衡)

九分之一 token 这个数字比精度提升更值得关注,因为它直接决定这套东西能不能放进 CI。如果审查一次 PR 的成本高到需要斟酌,那它只能作为按需调用的工具;成本降到九分之一,才有机会变成每次推送都跑的默认环节。

关于召回率更低,项目方的表述是刻意的取舍——优先精度而非噪声。这个取舍可以理解,但使用方必须自己算一遍代价:日常业务代码里误报让开发者疲劳、进而忽略全部评论,这确实是真实损失;但在支付、鉴权、加密这类路径上,一条漏报的代价远高于十条误报。同一个默认配置不可能同时适合这两种场景。

四、delegate 模式:从竞品变成增强层

如果团队已经在用 Claude Code、Codex 或 Cursor,最该看的是委托模式:

ocr delegate preview
ocr delegate rule src/main.go src/handler.go

这个模式下 Open Code Review 不调用自己的 LLM,只负责文件选择与规则解析,实际审查交给宿主编码 Agent,因此不需要额外配置 LLM 端点,直接使用宿主已有的订阅。

这是一个聪明的定位。它把「要不要换掉现有工具链」这个高摩擦决策,换成了「要不要给现有工具加一层确定性前置」,后者几乎没有迁移成本。对已经为编码 Agent 付了订阅费的团队来说,这条路径的增量成本接近零。

CI 集成方面,仓库里有 GitHub Action 的 action.yml,支持 effort、max_tokens_budget(转发为对应的 CLI 参数)、stream_progress(默认关闭的实时进度输出)、以及 llm_reasoning_effort 等输入。max_tokens_budget 这个显式的预算参数值得单独表扬——把成本上限做成可配置项而不是任其浮动,是把它放进自动化流水线的前提。

五、什么时候该用,什么时候别用

适合的场景:仓库体量大、PR 数量多、审查人力是瓶颈;团队已经在用某个编码 Agent 并希望提升审查质量而不更换工具链;需要定期审计不熟悉的代码库(用 ocr scan 可以不依赖 git 历史)。

不适合的场景:以漏报为零为目标的合规或安全审查,低召回率会是硬伤;单体小项目、PR 一周几个,人工审查的收益仍然高于引入一套配置;需要审查非代码资产(文档、配置文件语义)的场景,规则集不覆盖。

接入前应当自己验证的三件事:在你的技术栈上跑一遍基准之外的真实 PR,量一下误报率能不能被团队接受;确认 effort 与 token 预算的实际分布,避免长 PR 上成本和延迟失控;检查内置规则集与你团队的规范是否冲突,冲突的规则要显式关掉而不是靠提示词压。

六、局限

第一,基准是自建的。AACR-Bench 由项目方发布,虽然包含了交叉验证与公开数据集两个加分项,但自建基准天然存在选择偏差,九分之一 token 这类对比数字应当在自家代码上复核。

第二,规则集的能力边界不完全透明。内置规则以 NPE、线程安全、XSS、SQL 注入等多语言问题为主,这些都是可形式化程度较高的缺陷类型;对架构层面的问题(抽象泄漏、边界划分错误、并发模型不一致)能覆盖多少,公开材料里没有明确说明,而这类问题恰恰是资深审查者最有价值的部分。

第三,不开源 LLM 时依赖 provider 质量。审查质量仍然受底层模型能力约束,混合架构解决的是稳定性与成本,不是判断上限。同模型下它比通用 Agent 更准,但换一个更弱的模型,天花板同样会降。

结语

Open Code Review 值得作为「Agent 工程化」的一个正面样本来看。它没有试图用一个更长的提示词去解决所有问题,而是先做了一次职责划分:把有确定答案的判断从模型手里拿走,交还给代码。

这个思路的适用面远不止代码审查。任何一个「Agent 表现不稳定」的场景,都值得问一遍同样的问题——这里面有多少步骤其实是有确定答案的,只是被顺手交给了模型?

Frequently asked questions

纯 Agent 方案做代码审查,问题出在哪里?
问题在于把「绝不能错」的步骤交给了概率性决策。哪些文件必须审查、哪些可以过滤、哪些文件应该放在一起看、某条规则该不该报——这些是有确定答案的工程判断,交给语言模型驱动会随提示词、模型版本和上下文长度漂移。结果是同一个 PR 在不同时间审查出不同结果,误报与漏报都无法归因。
混合架构具体是怎么分工的?
确定性一侧负责四件事:精确文件选择(决定哪些必须审、哪些过滤)、智能文件捆绑(把相关文件如英文与中文资源文件分到一组,每组作为子 Agent 隔离上下文以支持大变更集与并发)、基于模板引擎的细粒度规则匹配、以及独立的评论定位与反思模块。Agent 一侧负责场景调优的提示词与工具集,在隔离的上下文里做动态检索与判断。
基准测试的规模和结果是什么?
基准叫 AACR-Bench,由 50 个流行开源仓库、200 个真实 Pull Request、10 种编程语言构成,问题标注经过 80 多位高级工程师交叉验证,共 1505 个真实问题。与通用 Agent(如 Claude Code)在相同底层模型下对比,Open Code Review 的精确率与 F1 显著更高,token 消耗约为其九分之一,审查速度更快,但召回率刻意做得更低。
召回率更低是缺陷还是设计?
是设计,但需要按场景判断。项目方明确说这是刻意权衡:评论者宁可少报也不要制造噪声,因为代码审查里一条误报的代价往往高于一条漏报。这个取舍适合「不想被吵」的日常审查,但不适合安全审计或合规检查这类漏报代价极高的场景,后者应当把规则集调严并把 recall 作为首要指标。
它和 Claude Code 这类编码 Agent 是什么关系?
既有竞争也有协作,而且项目为此专门提供了 delegate 委托模式。委托模式下 Open Code Review 只负责文件选择与规则解析,实际审查交给宿主编码 Agent,因此不需要单独配置 LLM 端点,直接用宿主已有的订阅。这让它可以充当 Claude Code、Codex、Cursor 等工具的一个审查增强层,而不是替代品。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.