← 返回技术博客

OpenCodeReview AI Code Review 实测:自动检查 Git Diff、Bug、安全漏洞和代码质量,真实项目能发现多少问题?

OpenCodeReview AI Code Review 实测:自动检查 Git Diff、Bug、安全漏洞和代码质量,真实项目能发现多少问题?
先 preview 丢掉 lockfile,再对三个真实变更包跑 ocr review:27 条里留下 13 条该改。

截至 2026 年 9 月 16 日,阿里开源的 OpenCodeReview(命令是 ocr,仓库 alibaba/open-code-review)不是再开一个聊天窗口把 git diff 贴进去。它先用确定性管道筛文件、打包变更、匹配规则,再让带工具调用的 Agent 读完整文件和仓库上下文,给出行级意见。本文按实测顺序写:它审什么、三种审查模式、五分钟怎么跑、三个真实变更包各抓到多少 Bug / 安全 / 质量问题、哪些评论该信、怎么接到 CI。

先对齐:OpenCodeReview 到底审什么

中文圈常把它和 OpenCode(opencode serve 那种编码 Agent)混成一个词。不是同一件事。OpenCodeReview 是阿里内部用了两年的 AI 代码审查助手开源出来的 CLI:读 Git 变更,输出结构化行级评论,内置多语言规则(空指针、线程安全、XSS、SQL 注入等),模型端点兼容 OpenAI 与 Anthropic。官方仓库见 alibaba/open-code-review,文档入口在 open-codereview.ai。

它解决的不是「再找一个会夸你好代码的机器人」。普通聊天模型只看见你贴进去的那一小段 diff,既不读调用方,也不知道隔壁文件有没有同一把锁。OpenCodeReview 的设计是确定性工程做分诊,Agent 做深度:先决定哪些文件该审、哪些该丢掉,再按文件类型注入规则清单,最后让 Agent 自己 file_read、搜仓库、对照其它变更文件。

站内已有一篇讲 OpenCode 自托管时 4GB / 8GB / 16GB 怎么选——那是编码 Agent 的内存账单。这篇只谈 ocr review:自动检查 Git Diff、Bug、安全漏洞和代码质量时,真实项目能发现多少问题。

一句话:OpenCodeReview = Git Diff 分诊 + 规则清单 + 带工具的审查 Agent。它替代不了人,但能把「第一轮该看的坑」摊到行号上。

官方口径是:内部服务过数万开发者、识别过数百万缺陷。那是阿里规模下的累计数字,不是你下一个 PR 的承诺。你要的如果是「合并前多一双眼睛」,它合适;你要的如果是「机器签字就能上生产」,README 和这篇实测都不会帮你签字。

它怎么读 Git Diff:三种审查模式

读者搜「自动检查 Git Diff」,通常只关心「我改了什么」。CLI 把这件事拆成三种互斥模式,混用会直接报错。完整旗标见 CLI Reference。

模式你怎么调它实际看什么适合什么时候
工作区ocr reviewgit diff HEAD(暂存+未暂存)加上未跟踪文件提交前自己扫一遍
范围ocr review --from main --to featuremerge-base(from,to)..to,只看这条分支引入的 diffPR / 功能分支
单提交ocr review --commit abc123git show 那一次提交回看热修、 bisect 之后

范围模式算 merge-base,这一点比「把两个分支硬 diff」更接近人审 PR 的方式:main 上后来合进来的无关提交不会灌进审查。GitHub Action 官方实现也是先算 merge-base,再跑 ocr review --from MERGE_BASE --to HEAD_SHA --format json,把行级评论贴回 PR。

还有第四条路:ocr scan。没有有意义的 Git 历史、或你要审计一整棵不熟悉的目录时,它审完整文件而不是 diff。代价是 token 和噪声都会上去。日常合并审查,先用 diff;接手遗产仓库,再考虑 scan。

审查前一定要先跑 ocr review --preview。它只走过滤管道、不花模型钱,会告诉你每个文件 will_review 还是因为扩展名、删除、测试路径被丢掉。我们实测时,一个带图片和 lockfile 的 PR 会先丢掉一半「看起来改了很多」的文件——那些本来就不该送给 LLM。

五分钟跑起来:安装、配模型、preview

推荐安装是 npm 全局包。也可以用官方 install.sh 或 GitHub Release 静态二进制。Git 要 ≥ 2.41,因为 diff、搜代码、仓库操作都走 Git。配好模型之前,ocr review 不会凭空工作(除非走 Delegation Mode,把审查交给你已经在用的编码 Agent)。

本机最小可运行(先 preview,再审查)
npm install -g @alibaba-group/open-code-review
ocr version
ocr config provider          # 选内置或自定义端点,填 Key
ocr config model
ocr llm test                 # 不通就别往下烧 token

cd /path/to/your-repo
ocr review --preview         # 不花模型钱,看哪些文件会进审查
ocr review --from main --to HEAD --format json --audience agent

配置落在 ~/.opencodereview/config.json。CI 里用 ocr config set 写 provider / model / api_key,或直接复用已有的 ANTHROPIC_* / OCR_LLM_* 环境变量。评论语言用 ocr config set language 中文,不设则默认英文。项目规则可以提交 .opencodereview/rule.json;全局规则在家目录,别把 Key 写进仓库。

npm 安装默认会后台自更新(大约 18 分钟冷却)。CI 镜像里请 export OCR_NO_UPDATE=1,并钉死版本号,避免周一和周五审出来的规则不是同一套。会话记录在 ~/.opencodereview/sessions/,ocr viewer 默认开在 localhost:5483,用来回放某一次审查,而不是对外提供服务。

本机内存怎么估,不要照搬那篇 OpenCode 自托管文。OpenCodeReview 的重活在 LLM API 和并发 Git 子进程,CLI 本身不常驻一套 LSP。--concurrency 默认 8,--timeout 默认每文件 10(单位见当期 CLI)。笔记本合盖、key 跟日常聊天抢同一把额度时,审查会半路断;需要常开、可复现的 runner,比在出差电脑上赌一次 ocr review 更诚实。

真实项目实测:三个变更包发现了什么

我们用同一套配置(OpenAI 兼容协议、中等体量对话模型、系统规则 + 项目规则合并)对照了三类真实会进 PR 的变更,不是玩具仓库里的十行示例。每包先 --preview,再 ocr review --from --to --format json,人工把评论标成:必须改、应该改、风格/建议、误报。数字是一次快照,换模型或换规则会漂,但类别比例比「总共几条」更有用。

变更包进审查的文件评论总数必须改应该改风格/建议误报
A. 后端接口:查询参数拼进 SQL + 会话校验6113332
B. 前端表单:把接口字段写进 DOM592241
C. 后台 worker:共享 map + 错误包装472131
合计152776104

必须改(7 条)里,安全 3、缺陷 4。安全侧是:字符串拼接查询、未转义输出进 HTML、以及一处把内部错误文本直接回给客户端。缺陷侧是:空值当对象用、并发写 map 没锁、错误没有 %w 包一层导致上层丢原因。这三类正好落在官方宣传的规则集里——NPE、线程安全、XSS、SQL 注入——不是模型「灵光一现」写出来的散文。

应该改(6 条)多数是:超时没设、重试会把非幂等请求打两遍、日志里带了邮箱或请求体。人审也该提,但周五下午容易被「先合再说」压掉。AI 的价值在这里:它不累,也不看你脸色。

风格/建议(10 条)是最大的桶。命名、提前返回、某段可以抽函数。有用,但会稀释信号。不治理的话,团队会在第三周开始把整段审查折叠掉——这和业界对 CodeRabbit 一类工具的抱怨同一病理:召回高、信噪比掉。

误报(4 条)很典型:把测试夹具里的拼接 SQL 当成生产注入;把已经参数化的查询再骂一遍;把 Go 1.22 之后已修复的循环变量问题又提一次。四条里有三条,用 ocr review --preview 加一条排除测试目录的项目规则就能消掉。别先怪模型,先看规则有没有把测试文件送进去。

实测口诀:15 个文件、27 条评论,人工留下 13 条该改(约 48%)。安全类少但重,风格类多但轻。先信带行号和补丁的那几条,再决定要不要听「可以重构」。

和官方文档里的示例规模对得上:一次范围审查常见是「9 个文件、十几条评论、一两分钟、两万 token 量级」。我们这三包合计大约这个量级的三倍,因为是三个独立范围,不是一个巨型 PR。单文件 diff 超过模型窗口约 80% 会被直接丢掉——超大生成文件、锁文件、打包产物,preview 阶段就该消失,不该出现在账单上。

Bug、安全、质量:哪些抓得住、哪些抓不住

把 27 条按题目里的四个词切开,比只报「发现了多少问题」更接近你怎么用它。

你在搜的词它实际擅长这次抓到的信号别指望它替你做的事
Git Diff算 merge-base、打包关联文件、丢掉不支持的扩展名lockfile / 图片 / 纯删除文件没进 LLM替你设计「这次 PR 该不该拆」
Bug空指针、错误链、明显的并发、漏掉的边界4 条必须改里的缺陷都能指出行号跨服务的业务算错、需求理解错
安全漏洞XSS、拼接 SQL、把内部错误回显给用户3 条必须改,都带建议补丁完整威胁建模、密钥是否已泄露到别的系统
代码质量可读性、重复、小重构10 条建议,信噪比最低架构分层、领域模型对不对

Agent 能读完整文件,所以比「只看绿色行」的审查强一档。官方示例里那条「map 写入没加锁」就是典型:diff 只改了一行赋值,真正的问题在文件上头已经存在的共享状态。纯 diff 机器人经常放过;带 file_read 的审查会把上下文拉进来。这也是它和「只看 PR 补丁的 Copilot Review」在宣传上的差别——后者快、噪声低,跨文件是弱项。

它抓不住的,我们刻意放进变更包里对照过:错误的折扣计算公式、把人民币当美元的字段、以及「这个接口不该在未审核状态可调」。这三处零评论。模型没有你们的领域词典,--background 把 PR 说明和验收标准喂进去会好一点,但替代不了人审需求。

安全类评论要当线索,不当判决书。它指出「这里在拼 SQL」,你还是要自己确认驱动、权限和数据分级。文章不会示范怎么利用这些漏洞,只记录审查器有没有把风险行标出来。需要把 Agent 改文件的边界也收紧时,对照站内 AI Agent 如何安全修改文件——审查是只读的,编码 Agent 才写盘。

接到 CI:GitHub Actions、规则与误报

本地跑通之后,团队要的是 PR 上自动出现行级评论。官方 composite Action 会:检出可信的 base(不是把 fork 的工作树直接铺开)、拉 head 的 git 对象、算 merge-base、跑 ocr review --format json、再通过 Pull Request Review API 贴行评和一条 sticky 摘要。触发词可以是 PR 打开/同步,也可以是评论里的 /open-code-review。

权限给最小集:contents: read,真要写评论再开 pull-requests: write。模型 Key 进 Secrets,模型名进 Variables。Fork 默认拿不到仓库 Secrets——这是保护,不是故障。不要为了「让外部贡献也能自动审」就把不信任的代码检出来和 pull_request_target 拼在一起;那是泄密组合,不是集成技巧。GitHub 自己的加固说明见 Security hardening for GitHub Actions。

规则是四层:自定义 --rule、项目 .opencodereview/rule.json、全局家目录、内置系统规则。用 ocr rules check path/to/File.java 看某一文件到底吃了哪一层。项目规则设 merge_system_rule: true,避免你写了两条「关注日志」就把 Java 空指针清单整个盖掉。排除测试、生成代码、vendor,比事后抱怨误报便宜。

macOS 上要给 iOS / Xcode 变更做同一套审查,runner 本身比 ocr 更难养。自托管怎么搭、怎么验收,走 GitHub Actions macOS 自托管 Runner;机器不睡、密钥不跟笔记本抢额度,审查才稳定。

把 Code Review 放到不休眠的 Mac 上

OpenCodeReview 同时吃三样东西:Git ≥ 2.41 的完整历史、一次能跑完的 LLM 额度、以及不能写进前端的 API Key。笔记本合盖,范围审查断在一半,session 还在 ~/.opencodereview 里等人 --resume。Nuvcloud 云端 Mac mini 是独享 Apple Silicon 裸金属:统一内存适合并行 --concurrency 和 Git 子进程,SSH 常在,钥匙串能按仓库放 Key,待机功耗低,适合把「提交前的 ocr」和「PR 上的 Action」放在同一台不睡觉的机器上。

若你要让 Git Diff、Bug、安全漏洞和代码质量检查 24/7 可复现,先看 Nuvcloud 套餐与节点,让审查跑在常开的 Mac 上,而不是在出差合盖的轻薄本上赌一次 token 账单。

延伸阅读

常见问题

OpenCodeReview 和 OpenCode 是同一个项目吗?

不是。OpenCodeReview 是阿里开源的 ocr 审查 CLI;OpenCode 是另一套编码 Agent(常见入口是 opencode serve)。站内那篇 4GB/8GB/16GB 讲的是后者的内存,不是这篇的审查质量。

不配模型 Key 能审查吗?

默认不能。ocr review --preview 可以看文件过滤;真正出评论需要已配置的 LLM。Delegation Mode 可以把审查交给你已经在用的编码 Agent,那时用的是那套 Agent 的额度。

真实项目一次审查大概多少条评论?

我们三个中等变更包合计 27 条,人工留下 13 条该改。官方示例常见是单次范围审查约 9 个文件、十几条评论。超大 PR 会被拆成文件包并发审,但风格类评论会先淹没你。

它能替代安全扫描和人工审查吗?

不能。它擅长把 XSS、拼接 SQL、空指针、丢错误链标到行上,不替代 SAST/依赖扫描,也不替代懂业务的人。安全评论是线索,要你自己核实。

误报多怎么办?

先 ocr review --preview 和 ocr rules check,把测试、生成代码、vendor 排除掉,并打开 merge_system_rule。再在 --background 里写清本次 PR 的验收标准。别一上来就换更大的模型。

GitHub 外部 fork 的 PR 为什么不自动审?

Fork 默认读不到仓库 Secrets。这是安全设计。不要用「检出不信任代码 + pull_request_target」去硬开自动审查。

审查中断了能续跑吗?

范围审查和单提交可以:ocr session list 找到 id,再 ocr review --from … --to … --resume <id>。工作区模式不能 resume,preview 也不能和 resume 一起用。

一定要买新 Mac 才能跑吗?

不必。较新的笔记本就能跑 ocr。要 24/7 给 PR 自动审查、不跟办公软件抢 Key 和 Git 对象,用一台常开的云端 Mac mini 比全员换机更合适。

限时优惠 →