跳到正文
北京时间
原文
Hacker News 热门(buzzing.cc 中文翻译)· geoffbp·· 2026-06-05精选AI 评分76

Open Code Review – 一款基于人工智能的代码审查命令行工具

AI 导读

Open Code Review 是一个基于人工智能的代码审查命令行(CLI)工具,旨在帮助开发者通过自动化的方式提升代码审查效率。

推荐理由

阿里巴巴把内部用了两年、审查了数百万缺陷的AI代码审查工具开源,它不走纯Agent路线,用确定性工程保证覆盖和位置准确,想落地AI代码审查的团队可以直接用。

正文 · AI 翻译

OpenCodeReview logo

OpenCodeReview

English | 简体中文 | 日本語 | 한국어 | Русский


什么是 Open Code Review?

Open Code Review 是一款 AI 驱动的代码审查 CLI 工具。它最初是阿里巴巴集团内部的官方 AI 代码审查助手——在过去两年里,它已服务了数万名开发者,并识别出数百万个代码缺陷。经过大规模充分验证后,我们将其孵化成了一个面向社区的开源项目。只需配置一个模型端点即可开始使用。

它会读取 Git diff,通过一个具备工具调用能力的智能体将变更文件发送给可配置的 LLM,并生成具有行级精度的结构化审查评论。该智能体可以读取完整文件内容、搜索代码库、检查其他变更文件以获取上下文,并产出深度审查——而不仅仅是表层的 diff 反馈。除了 diff 审查之外,ocr scan 还能审查整个文件,用于审计不熟悉的代码库或没有有意义 diff 的目录。

访问官方网站了解更多详情。

基准测试

与通用型智能体(Claude Code)相比,在相同底层模型下,Open Code Review 的精确率和F1显著更高,同时仅消耗约 1/9 的 token,并且完成审查的速度更快。需要注意的是,它的召回率低于通用型智能体——这是有意为之的权衡,优先保证精确率而非减少噪声。

一个基于50个热门开源代码仓库、200个真实 Pull Request 以及10种编程语言构建的真实世界代码审查基准——由 80 多位资深工程师交叉验证(1,505个标注的基准问题)。

指标 它衡量什么 为什么重要
F1 精确率与召回率的调和平均数 衡量整体审查质量的最佳单一数值
精确率 所报告问题中属于真实缺陷的比例 越高 = 需要人工分诊的误报越少
召回率 发现的真实缺陷所占比例 越高 = 越少问题在审查中漏过
平均时间 每次审查的实际耗时 影响 CI 流水线的延迟
平均 Token 每次审查消耗的 Token 总量 直接影响 API 成本

为什么要做 Open Code Review?

通用型智能体的问题

如果你用过 Claude Code 这类通用型智能体配合 Skills 做代码审查,很可能遇到过这些痛点:

  • 覆盖不完整——面对较大的变更集时,智能体倾向于“偷工减料”,只选择性地审查部分文件,而遗漏其他文件。
  • 位置漂移——报告的问题经常与实际代码位置不符,行号或文件引用偏离目标。
  • 质量不稳定——自然语言驱动的技能难以调试,审查质量会随提示词的细微变化而大幅波动。

根本原因在于:纯语言驱动的架构对审查流程缺乏硬性约束。

核心设计:确定性工程 × 智能体混合

Open Code Review 的核心理念是将确定性工程与 AI 智能体相结合,各司其职、各展所长。

确定性工程——硬性约束

对于绝不能出错的审查步骤,由工程逻辑——而非语言模型——来保证正确性:

  • 精确文件选择——准确判定哪些文件需要审查、哪些应被过滤,确保不遗漏任何重要变更。
  • 智能文件打包 — 将相关文件归入同一个审查单元(例如 message_en.properties 和 message_zh.properties 被打包在一起)。每个包作为一个拥有隔离上下文的子智能体运行——这是一种分而治之的策略,在超大型变更集上保持稳定,并天然支持并发审查。
  • 细粒度规则匹配 — 将审查规则与每个文件的特征进行匹配,使模型的注意力保持高度集中,从源头消除信息噪声。与纯粹由语言驱动的规则引导相比,基于模板引擎的规则匹配更加稳定且可预测。
  • 外部定位与反思模块 — 独立的评论定位与评论反思模块系统性地提升了 AI 反馈的定位准确度和内容准确度。

智能体 — 动态决策

智能体的优势集中在最关键的地方——动态决策与动态上下文检索:

  • 场景调优提示词 — 针对代码审查深度优化的提示词模板,在提升效果的同时降低 token 消耗。
  • 场景调优工具集——通过对大规模生产数据中工具调用轨迹的深度分析提炼而成——包括调用频率分布、各工具重复调用率,以及新工具对整个调用链的影响——从而打造出一套专用工具集,在代码审查方面比通用智能体工具包更稳定、更可预测。

如何使用

前置条件

  • Git >= 2.41——Open Code Review 依赖 Git 进行差异生成、代码搜索和仓库操作。

CLI

安装

通过 NPM 安装(推荐)

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

安装完成后,ocr 命令即可全局使用。

更新

如果你是通过 NPM 安装的,请手动更新到最新版本:

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

通过 NPM 安装的版本默认还会在后台检查新版本并自动升级。要禁用自动更新,请设置 OCR_NO_UPDATE=1。

如果你是通过安装脚本或手动下载的二进制文件进行安装的,请重新运行相同的安装/下载命令,用最新版本替换本地二进制文件。当你需要固定到某个特定的发布标签时,请使用 OCR_VERSION。

来自 GitHub Release

用一条命令为你的操作系统/架构安装最新的二进制文件(macOS / Linux):

curl -fsSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh | sh

该脚本会挑选正确的发布二进制文件,验证其 SHA-256 校验和,并将其作为 ocr 安装到 /usr/local/bin 中。可用 OCR_INSTALL_DIR 覆盖目标位置,或用 OCR_VERSION 固定某个发布版本:

OCR_INSTALL_DIR="$HOME/.local/bin" OCR_VERSION=v1.3.13 \
  sh -c "$(curl -fsSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh)"

在 Windows 上(PowerShell 5.1+):

irm https://raw.githubusercontent.com/alibaba/open-code-review/main/install.ps1 | iex

该脚本会挑选正确的 Windows 发布二进制文件,验证其 SHA-256 校验和,并将其作为 ocr.exe 安装到 %LOCALAPPDATA%\Programs\ocr 中。可用 OCR_INSTALL_DIR 覆盖目标位置,或用 OCR_VERSION 固定某个发布版本:

$env:OCR_INSTALL_DIR = "$env:USERPROFILE\bin"
$env:OCR_VERSION = "v1.3.13"
irm https://raw.githubusercontent.com/alibaba/open-code-review/main/install.ps1 | iex

将远程脚本通过管道传给 shell 会执行来自互联网的代码。建议先下载并检查:

curl -fsSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh -o install.sh
less install.sh && sh install.sh
irm https://raw.githubusercontent.com/alibaba/open-code-review/main/install.ps1 -OutFile install.ps1
notepad install.ps1   # review, then: .\install.ps1

手动下载(所有平台,包括 Windows)

从 GitHub Releases 下载适合你平台的二进制文件:

# macOS (Apple Silicon)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-arm64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# macOS (Intel)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-amd64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Linux (x86_64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-amd64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Linux (ARM64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-arm64
chmod +x ocr && sudo mv ocr /usr/local/bin/ocr

# Windows (x86_64) — move ocr.exe to a directory in your PATH
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-amd64.exe

# Windows (ARM64) — move ocr.exe to a directory in your PATH
curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-arm64.exe

从源码构建

git clone https://github.com/alibaba/open-code-review.git
cd open-code-review
make build
sudo cp dist/opencodereview /usr/local/bin/ocr

快速开始

1. 配置 LLM

在审查代码之前,你必须先配置一个 LLM。

OCR 通过统一的 Provider 系统管理 LLM 配置。它内置了许多流行的提供商,同时也支持添加自定义提供商,以连接私有部署或其他兼容端点。配置存储在 ~/.opencodereview/config.json 中。

方式 A:交互式设置(推荐)

ocr config provider          # Select a built-in provider or add a custom one
ocr config model             # Pick a model for the active provider

交互式界面会引导你完成提供商选择、API key 输入和模型配置,然后自动测试连通性。

运行 ocr llm providers 可查看所有内置提供商。内置提供商自带预设的 API URL 和协议——只需提供 API key 即可开始使用。如果相应的环境变量已经设置(例如 ANTHROPIC_API_KEY、OPENAI_API_KEY),API key 会被自动读取。

自定义提供商也可以通过交互式界面添加——你需要提供名称、API URL、协议类型(anthropic 或 openai)以及 API key。

方式 B:CLI 设置(用于 CI/CD 和非交互式环境)

使用 ocr config set 直接写入提供商配置,适合脚本和自动化场景。

使用内置提供商:

ocr config set provider anthropic
ocr config set providers.anthropic.api_key your-api-key-here
ocr config set providers.anthropic.model claude-sonnet-4-6

使用自定义提供商(私有网关或其他兼容端点):

ocr config set provider my-gateway
ocr config set custom_providers.my-gateway.url https://my-llm-gateway.internal/v1
ocr config set custom_providers.my-gateway.protocol openai
ocr config set custom_providers.my-gateway.api_key your-api-key-here
ocr config set custom_providers.my-gateway.model gpt-4o

自定义提供商需要 url 和 protocol。支持的协议:anthropic、openai、openai-responses。

可选设置:

键 描述
providers.<name>.auth_header 认证请求头:x-api-key 或 authorization(默认:authorization)
providers.<name>.extra_body 合并到请求体中的自定义 JSON 字段
providers.<name>.extra_headers 以逗号分隔的 key=value 键值对,作为自定义 HTTP 请求头添加到每个请求中
providers.<name>.models 用于交互式选择的模型列表

extra_headers(可选):为每个 LLM API 请求添加自定义 HTTP 请求头。适用于需要额外请求头的代理、网关或企业端点(例如组织 ID、追踪 ID)。格式为逗号分隔的 key=value 键值对。包含逗号的值请使用双引号括起来:

ocr config set llm.extra_headers "X-Org-ID=org-123,X-Forwarded-For=\"1.2.3.4,5.6.7.8\""

你也可以为每个提供商单独设置额外的请求头:

ocr config set providers.anthropic.extra_headers "X-Org-ID=org-123"

环境变量(最高优先级)

环境变量会覆盖配置文件中的设置,这在 CI/CD 中非常有用,因为在这些场景下写入配置文件并不方便:

export OCR_LLM_URL=https://api.anthropic.com/v1/messages
export OCR_LLM_TOKEN=your-api-key-here
export OCR_LLM_MODEL=claude-opus-4-6
export OCR_USE_ANTHROPIC=true

要使用 OpenAI Responses API(GPT-5.x / o 系列),请设置 OCR_LLM_PROTOCOL 而不是 OCR_USE_ANTHROPIC:

export OCR_LLM_URL=https://api.openai.com/v1
export OCR_LLM_TOKEN=your-openai-key
export OCR_LLM_MODEL=gpt-5.4
export OCR_LLM_PROTOCOL=openai-responses

OCR_LLM_PROTOCOL 接受 anthropic、openai、openai-responses,并且当两者同时设置时,其优先级高于 OCR_USE_ANTHROPIC。

同时兼容 Claude Code 的环境变量(ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL),并会为这些导出解析 ~/.zshrc / ~/.bashrc。

CC-Switch 用户须知:如果你正在使用 CC-Switch 并启用了 路由服务,你可以将该提供商的 url 指向 CC-Switch 代理地址,无需额外配置:

  • 对于 Claude 提供商:将 providers.anthropic.url 设置为 http://127.0.0.1:15721
  • 对于 Codex 提供商:将对应提供商的 url 设置为 http://127.0.0.1:15721/v1
  • api_key 可以是任意值;extra_body 设置仍然适用

2. 测试连通性

ocr llm test

3. 审查

cd your-project

# Workspace mode — review all staged, unstaged, and untracked changes
ocr review

# Branch range — compare two refs
ocr review --from main --to feature-branch

# Single commit
ocr review --commit abc123

# Resume an interrupted range or commit review
ocr session list
ocr review --from main --to feature-branch --resume <session-id>

# Full-file scan — review whole files instead of a diff (no git history needed)
ocr scan                          # scan the entire repository
ocr scan --path internal/agent    # scan a directory or specific files

# Delegation mode — let your AI coding agent perform the review itself
# OCR handles file selection and rule resolution; no LLM configuration needed
ocr delegate preview
ocr delegate rule src/main.go src/handler.go

与编码智能体集成

OCR 可以作为一个斜杠命令无缝集成到 AI 编程智能体中,让你直接在智能体工作流内进行代码审查。

方案 1:作为技能安装

使用 npx 将 OCR 技能安装到你的项目中:

npx skills add alibaba/open-code-review --skill open-code-review

这会安装open-code-review来自技能注册表的技能,它会教你的编程智能体如何调用ocr进行代码审查、按优先级对问题分类,并可选择性地应用修复。

委托模式 —— 如果你希望让你的编码智能体自行执行审查(仅使用 OCR 进行文件选择和规则解析,OCR 侧无需配置 LLM):

npx skills add alibaba/open-code-review --skill open-code-review-delegate

详情请参阅 skills/open-code-review-delegate/SKILL.md。

方案 2:作为 Claude Code 插件安装

对于 Claude Code,请在 Claude Code 中通过以下命令安装该命令插件:

/plugin marketplace add alibaba/open-code-review
/plugin install open-code-review@open-code-review

这会注册 /open-code-review:review 斜杠命令,该命令会运行 OCR 并自动过滤和修复问题。它还提供 /open-code-review:delegate-review 用于委托模式(智能体使用自身能力进行审查,而 OCR 负责文件选择和规则)。

方案 3:作为 Codex 插件安装

对于本地 Codex,请从此仓库安装 Open Code Review 插件:

codex plugin marketplace add alibaba/open-code-review
codex
/plugins

对于本地检出或 fork:

codex plugin marketplace add .
codex
/plugins

安装并启用 Open Code Review,然后启动一个新的 Codex 线程并显式调用它:

@Open Code Review review my current changes
@Open Code Review review this branch against main
@Open Code Review review and fix high-confidence issues

这会注册一个运行本地 OCR CLI 的 Codex 技能:

ocr review --audience agent

此集成不会更改 OCR 内部的 LLM 后端,也不要求为 Codex 配置 OpenAI Responses API 端点。OCR 本身仍需要按照 CLI 设置部分所述安装并配置 ocr CLI。

韩语指南:plugins/open-code-review/CODEX.ko-KR.md

选项 4:作为 Cursor 插件安装

对于 Cursor,从此仓库安装 Open Code Review 插件:

cursor-plugin marketplace add alibaba/open-code-review

或者手动添加市场。在 Cursor 中,打开 /plugins,搜索 Open Code Review,然后安装它。

对于本地检出或 fork:

cursor-plugin marketplace add .

安装后,在 Cursor 中调用它:

@Open Code Review review my current changes
@Open Code Review review this branch against main
@Open Code Review review and fix high-confidence issues

这会注册一个 Cursor 技能,用于运行本地 OCR CLI:

ocr review --audience agent

此集成不会改变 OCR 内部的 LLM 后端。OCR 本身仍然需要按照 CLI 设置部分所述安装并配置 ocr CLI。

选项 5:直接复制命令文件

如果不想使用任何包管理器进行快速设置,只需复制命令文件,即可在 Claude Code 中使用 /open-code-review 斜杠命令。

项目级(通过 git 与团队共享):

mkdir -p .claude/commands
curl -o .claude/commands/open-code-review.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/claude-code/commands/review.md

用户级(在所有项目中个人全局使用):

mkdir -p ~/.claude/commands
curl -o ~/.claude/commands/open-code-review.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/claude-code/commands/review.md

对于委托模式(OCR 侧无需 LLM 配置):

# Project-level
mkdir -p .claude/commands
curl -o .claude/commands/open-code-review-delegate.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/claude-code/commands/delegate-review.md

# User-level
mkdir -p ~/.claude/commands
curl -o ~/.claude/commands/open-code-review-delegate.md \
  https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/claude-code/commands/delegate-review.md

前提条件:所有集成方式都要求安装 ocr CLI。标准模式还额外要求配置 LLM——参见上文的 安装 和 配置 LLM。委托模式在 OCR 侧不要求配置 LLM。

CI/CD 集成

OCR 可以集成到 CI/CD 流水线中,在合并请求 / 拉取请求上自动执行代码审查。

CI 集成的核心命令:

ocr review \
  --from "origin/main" \
  --to "<commit_sha>" \
  --format json

--from 标志接受分支引用(例如 origin/main)或提交 SHA 作为基准,而 --to 接受提交 SHA 或分支引用作为头部。在 CI 环境中,建议为 --to 使用提交 SHA,以便正确处理源分支在 origin 远程上不存在的 fork PR/MR。

--format json 标志输出适合在 CI 脚本中解析的机器可读结果。

每条发现都带有两个结构化字段,以便 CI 集成能够对构建进行排序、分组、过滤或门控,而无需重新解析评论文本:

字段 允许的值 说明
category bug、security、performance、maintainability、test、style、documentation、other 该问题所属的类别。
severity critical、high、medium、low 该问题的重要性。

在 JSON 输出中,这两个字段与 content、start_line 等字段以同级形式出现。在终端中,它们会以行内 [category · severity] 徽章的形式渲染在评论之前,并根据严重程度着色。

请参阅 examples/ 目录以获取集成示例:

GitHub Action

对于 GitHub,该仓库还在仓库根目录提供了一个开箱即用的复合 Action(action.yml)。无需自己编写 ocr review 脚本,直接引用它即可处理完整流水线——检出、安装 OCR、运行审查、发布行内评论和摘要评论、上传产物,以及重试/幂等处理:

- uses: alibaba/open-code-review@main
  with:
    llm_url: ${{ secrets.OCR_LLM_URL }}
    llm_auth_token: ${{ secrets.OCR_LLM_AUTH_TOKEN }}
    llm_model: ${{ vars.OCR_LLM_MODEL }}
    llm_use_anthropic: ${{ vars.OCR_LLM_USE_ANTHROPIC }}

固定到某个版本标签或提交 SHA 以确保可复现性。请查看 examples/github_actions/ 目录,获取完整的工作流演示以及输入、输出和评论发布模式(置顶摘要、增量非破坏性发布)的完整列表。

命令

命令 别名 描述
ocr review ocr r 启动基于 diff 的代码审查
ocr scan ocr s 审查整个文件(无需 diff)
ocr delegate preview ocr d preview 预览可审查文件,附带 mode/ref 元数据(无需 LLM)
ocr delegate rule <path...> ocr d rule 输出按内容分组的已解析审查规则(无需 LLM)
ocr rules check <file> — 预览某条审查规则适用于哪个文件路径
ocr config provider — 交互式提供商设置(内置、自定义或手动)
ocr config model — 为当前激活的提供商交互式选择模型
ocr config set <key> <value> — 设置配置值
ocr config unset custom_providers.<name> — 删除自定义提供商
ocr llm test — 测试 LLM 连接
ocr llm providers — 列出内置 LLM 提供商
ocr session list ocr sessions list, ocr session ls 列出已保存的审查会话
ocr session show <id> ocr sessions show <id> 查看单个会话及其逐文件检查点
ocr viewer ocr v 在 localhost:5483 上启动 WebUI 会话查看器
ocr version — 显示版本信息

ocr review 标志

标志 简写 默认值 描述
--repo — 当前目录 Git 仓库根目录
--from — — 源引用(例如 main)
--to — — 目标引用(例如 feature-branch)
--commit -c — 单个提交供审查
--exclude — — 以逗号分隔的 gitignore 风格模式用于跳过;与 rule.json 的 excludes 合并
--preview -p false 预览哪些文件将被审查,而不运行 LLM
--resume — — 从之前兼容的范围或提交审查会话中恢复
--format -f text 输出格式:text 或 json
--concurrency — 8 最大并发文件审查数
--timeout — 10 并发任务超时时间(分钟)
--audience — human human(显示进度)或 agent(仅摘要)
--background -b — 审查的可选需求/业务背景;使用 --commit 时从提交信息自动填充
--background-file -B — 来自 Markdown 文件的可选需求/业务上下文;与 --background 结合使用时,内联值优先给出
--model — — 选择或覆盖用于本次审查的 LLM 模型
--rule — — 自定义 JSON 审查规则的路径
--max-tools — 内置 每个文件的最大工具调用轮数;仅在大于模板默认值时才生效
--max-git-procs — 16 最大并发 git 子进程数
--tools — 内置 自定义 JSON 工具配置的路径

可恢复的审查与会话

每次 ocr review 运行都会在 ~/.opencodereview/sessions/ 下持久化保存一份本地会话日志。成功时的文本输出仍聚焦于审查结果,不会打印会话 ID;可使用 ocr session list/show 查找已保存的会话,或使用 --format json 在机器可读输出中包含 session_id。如果某个范围或提交的审查被中断,请列出已保存的会话,并从与同一审查目标匹配的那个会话恢复:

ocr session list
ocr session show <session-id>
ocr review --from main --to feature-branch --resume <session-id>
ocr review --commit abc123 --resume <session-id>

恢复是有意设计得严格的:它仅支持分支范围和单提交审查,不支持工作区审查,并且当前的 --from/--to 或 --commit 必须与已保存的会话匹配。--preview 不能与 --resume 组合使用。

当使用 --format json 时,恢复的运行会包含:

  • session_id — 当前运行的会话 ID
  • resume.resumed_from — 源会话 ID
  • resume.reused_files — 从已保存检查点复用的文件
  • resume.rerun_files — 在当前运行中再次审查的文件

ocr session 标志

命令 标志 默认值 描述
ocr session list --repo 当前目录 应列出其会话的仓库
ocr session list --json false 以 JSON 形式输出会话摘要
ocr session list --limit 20 限制列出的会话数量;使用 0 表示不限制
ocr session show <id> --repo 当前目录 需要检查其会话的仓库
ocr session show <id> --json false 以 JSON 形式输出会话元数据和逐文件条目

ocr scan 标志

ocr scan 审查整个文件而非差异——适用于审计不熟悉的代码库、迁移前的全面排查,或任何没有有意义差异的目录。它也能在非 git 目录中工作(会回退到遵循 .gitignore 的文件系统遍历)。

标志 简写 默认值 描述
--path — 整个仓库 以逗号分隔的要扫描的目录/文件
--exclude — — 以逗号分隔的 gitignore 风格跳过模式;与 rule.json 的排除项合并
--preview -p false 列出将要扫描的文件,而不运行 LLM
--max-tokens-budget — 0(无限制) 限制总 token 用量;一旦超出即停止调度
--no-plan — false 跳过逐文件规划预扫描
--no-dedup — false 跳过对相似评论的逐批次去重
--no-summary — false 跳过项目级摘要
--batch — by-language 批处理策略:none、by-language 或 by-directory
--format -f text 输出格式:text 或 json(JSON 包含一个 project_summary 字段)
--concurrency — 8 最大并发文件扫描数
--rule — — 自定义 JSON 审查规则的路径
--repo — 当前目录 要扫描的仓库或目录根路径

每次运行前,ocr scan 会打印一份粗略的 token 成本估算。先用 --preview 查看文件列表,再用 --max-tokens-budget 限制在大型仓库上的花费。

ocr delegate 标志

ocr delegate 是 AI 编程智能体的委派模式。它提供确定性的文件选择和规则解析,不调用任何 LLM——由宿主智能体使用自身能力执行实际审查。

子命令 描述
ocr delegate preview 输出可审查文件列表,附带模式/引用元数据
ocr delegate rule <path...> 输出按内容分组的已解析审查规则

两个子命令共享以下标志:

标志 简写 默认值 描述
--repo — 当前目录 Git 仓库根目录
--from — — 源引用(例如 main)
--to — — 目标引用(例如 feature-branch)
--commit -c — 单个提交供审查
--exclude — — 以逗号分隔的 gitignore 风格模式,用于跳过
--rule — — 自定义 JSON 审查规则的路径
--background -b — 可选的 需求/业务上下文
--background-file -B — 来自 Markdown 文件的业务上下文
--max-git-procs — 16 最大并发 git 子进程数

示例

# Interactive provider and model setup
ocr config provider
ocr config model
ocr llm providers

# Delete a custom provider
ocr config unset custom_providers.my-gateway

# Preview which files will be reviewed (no LLM calls)
ocr review --preview
ocr review -c abc123 -p

# Review workspace changes with default settings
ocr review

# Review branch diff with higher concurrency
ocr review --from main --to my-feature --concurrency 4

# Review a specific commit with verbose JSON output
ocr review --commit abc123 --format json --audience agent

# Resume an interrupted range or commit review
ocr session list
ocr session show <session-id>
ocr review --from main --to my-feature --resume <session-id>
ocr review --commit abc123 --resume <session-id>

# Select or override model for this review
ocr review --model claude-opus-4-6
ocr review --commit abc123 --model claude-sonnet-4-6

# Provide requirement context for more targeted review
ocr review --background "Adding rate limiting to the login API"

# Provide requirement context from a Markdown file
ocr review --background-file ./docs/my_business_context.md

# Combine inline context with a local context file (both are used)
ocr review --background "Focus on auth" --background-file ./docs/my_business_context.md

# Use custom review rules
ocr review --rule /path/to/my-rules.json

# Preview which rule applies to a file
ocr rules check src/main/java/com/example/Foo.java
ocr rules check --rule custom.json src/main/resources/mapper/UserMapper.xml

# Full-file scan: preview the file list first (no LLM calls)
ocr scan --preview

# Scan the whole repo, cap spend at ~500k tokens
ocr scan --max-tokens-budget 500000

# Scan a subdirectory, skipping generated/test files
ocr scan --path internal --exclude '**/*_test.go,**/generated/**'

# Scan a non-git directory with JSON output (includes project_summary)
ocr scan --repo /path/to/plain/dir --format json

# Fastest scan: skip planning, dedup, and the project summary
ocr scan --no-plan --no-dedup --no-summary

# Delegation mode — let your AI agent drive the review (no LLM config needed)
ocr delegate preview
ocr delegate preview --from main --to feature-branch
ocr delegate preview --commit abc123
ocr delegate rule internal/handler.go internal/service.go cmd/main.go

# View review session history in browser
ocr viewer
ocr viewer --addr :3000

查看器安全性

查看器通过 HTTP 提供会话 JSONL 内容(LLM 请求消息与响应)。它对每个请求都强制执行 Host 头允许列表:回环名称(localhost、127.0.0.0/8、::1)以及具体的绑定主机始终被允许。通配符绑定(--addr :3000、--addr 0.0.0.0:3000)以及其他非回环主机名必须通过 OCR_VIEWER_ALLOWED_HOSTS 环境变量添加(以逗号分隔):

OCR_VIEWER_ALLOWED_HOSTS=review.internal,ocr.lan ocr viewer --addr :3000

这可以阻止针对本地查看器的 DNS 重绑定攻击。

审查规则

OCR 使用四层优先级链来解析审查规则。每一层都采用首个匹配即胜出:如果某个文件路径匹配某个模式,就使用该规则;否则继续向下落到下一层。

优先级 来源 路径 描述
1(最高) --rule 标志 用户指定的路径 CLI 显式覆盖
2 项目配置 <repoDir>/.opencodereview/rule.json 按项目划分的规则,可提交到 git
3 全局配置 ~/.opencodereview/rule.json 用户范围内的个人偏好
4(最低) 系统默认 内嵌的 system_rules.json 覆盖常见语言和文件类型的内置规则

规则文件格式

第 1–3 层共享相同的 JSON 格式:

{
  "rules": [
    {
      "path": "force-api/**/*.java",
      "rule": "All new methods must validate required parameters for null values",
      "merge_system_rule": true
    },
    {
      "path": "**/*mapper*.xml",
      "rule": "Check SQL for injection risks, parameter errors, and missing closing tags"
    }
  ]
}
  • path 支持 ** 递归匹配和 {java,kt} 花括号展开。
  • merge_system_rule 是可选的。当 true 时,匹配到的内置系统规则会与此用户规则合并;否则用户规则将替换系统规则。
  • 在每一层内,规则按声明顺序依次求值——第一个匹配的规则生效。
  • 如果某个规则文件不存在,则会被静默跳过。

rule 字段同时支持内联内容和文件路径。 系统会自动检测你指的是哪一种:

  1. 如果该值包含换行符 → 内联内容(多行规则绝不会被当作文件路径)。
  2. If the value is a single line, contains no spaces, and ends with .md / .txt / .markdown → file path.
    • 绝对路径(以 / 开头)会被直接使用。
    • 相对路径会相对于项目根目录进行解析。路径穿越(例如 ../../etc/passwd.md)会被阻止。如果未找到,则会发出一个 [WARN],并清除该规则(不会回退到内联内容)。
    • 该文件必须通过校验:扩展名在白名单内、≤ 512 KB,且解析后的符号链接目标也必须具有白名单内的扩展名。如果校验失败,该规则将被清除。
  3. 否则 → 内联内容。
{
  "rules": [
    {
      "path": "**/*mapper*.xml",
      "rule": "docs/sql-rules.md"
    },
    {
      "path": "**/*.java",
      "rule": "Always check for null safety and resource leaks"
    },
    {
      "path": "**/*.go",
      "rule": "shared/go-concurrency.md"
    },
    {
      "path": "**/*.py",
      "rule": "/Users/me/team-rules/python.md"
    }
  ]
}
  • docs/sql-rules.md — 相对路径,从 <project>/docs/sql-rules.md 解析。
  • Always check for null safety… — 内联字符串,直接使用。
  • shared/go-concurrency.md — 相对路径,解析方式相同。
  • /Users/me/team-rules/python.md — 绝对路径,直接使用。

绝对路径可以访问项目目录之外的文件——这是有意为之。rule.json 由项目维护者编写,即受信任的输入。团队可以将共享规则存储在公共路径(例如 /opt/company-rules/),而无需将其复制到每个项目中。

路径过滤

规则文件还支持 include 和 exclude 字段,用于控制哪些文件进入审查范围:

{
  "rules": [
    {"path": "**/*.java", "rule": "Check for null safety"}
  ],
  "include": ["src/main/**/*.java", "lib/**/*.kt"],
  "exclude": ["**/generated/**", "vendor/**"]
}

过滤决策优先级(从高到低):

步骤 条件 结果
1 文件为二进制 已排除
2 路径匹配用户 exclude 模式 已排除
3 文件扩展名不在支持列表中 已排除
4 include 已配置且路径匹配 已审查(跳过步骤 5)
5 路径匹配内置默认排除模式(测试文件等) 已排除
6 以上均不匹配 已审查
  • include 和 exclude 遵循与审查规则相同的优先级链(--rule > 项目配置 > 全局配置)。配置了 include/exclude 的最高优先级层整体生效——模式不会跨层合并。
  • exclude 始终优先于 include——同时匹配两者的文件会被排除。
  • include 充当内置默认排除模式的旁路(例如测试文件),而非独占式允许列表——不匹配任何 include 模式的文件仍会正常通过默认过滤检查。
  • 模式语法:支持 ** 递归匹配、* 单段匹配以及 {a,b} 花括号展开。匹配不区分大小写。

内置默认排除模式(过滤测试文件等——可通过 include 覆盖):

**/*_test.go, **/*Test.java, **/*Tests.java, **/*_test.rs,
**/*.test.{js,jsx,ts,tsx}, **/*.spec.{js,jsx,ts,tsx}, **/__tests__/**,
**/src/test/java/**/*.java, **/src/test/**/*.kt,
**/test/**/*_test.py, **/tests/**/*_test.py, **/*_test.py,
**/*_spec.rb, **/spec/**/*_spec.rb, **/oh_modules/**

配置参考

配置文件:~/.opencodereview/config.json

键 类型 示例
provider 字符串 anthropic | openai | dashscope | deepseek | z-ai
providers.<name>.api_key 字符串 特定提供商的 API key
providers.<name>.url 字符串 提供商 base URL 覆盖
providers.<name>.protocol 字符串 anthropic | openai | openai-responses
providers.<name>.model 字符串 提供商的模型名称
providers.<name>.models 数组 用于交互式选择的可选提供商模型列表
providers.<name>.auth_header 字符串 x-api-key | authorization
providers.<name>.extra_body 对象 合并到每个请求体中的 JSON 对象
providers.<name>.timeout_sec 整数 每个请求的 HTTP 超时时间,单位为秒(默认值:300)
providers.<name>.extra_headers 字符串 以逗号分隔的 key=value HTTP 请求头
custom_providers.<name>.* — 与 providers.<name>.* 相同的字段,包括可选的 models
llm.url 字符串 https://api.openai.com/v1/chat/completions
llm.auth_token 字符串 sk-xxxxxxx
llm.auth_header 字符串 仅 Anthropic:x-api-key | authorization
llm.extra_body 对象 合并到每个请求体中的 JSON 对象
llm.timeout_sec 整数 每个请求的 HTTP 超时时间(秒,默认值:300)
llm.extra_headers 字符串 以逗号分隔的 key=value HTTP 请求头
llm.model 字符串 claude-opus-4-6
llm.protocol 字符串 anthropic | openai | openai-responses;优先级高于 llm.use_anthropic
llm.use_anthropic 布尔值 true | false(旧版;建议使用 llm.protocol)
mcp_servers.<name>.command 字符串 启动 MCP 服务器的命令
mcp_servers.<name>.args 数组 MCP 服务器的命令行参数
mcp_servers.<name>.env 数组 KEY=VALUE 格式的环境变量
mcp_servers.<name>.tools 数组 允许的工具名称(留空 = 所有工具)
mcp_servers.<name>.setup string 启动服务器前要运行的安装命令
language string 任意语言名称,例如 English、Chinese(默认:English)
telemetry.enabled boolean true | false
telemetry.exporter string console | otlp
telemetry.otlp_endpoint string OTLP 收集器地址
telemetry.content_logging boolean 在遥测数据中包含提示词

环境变量的优先级高于配置文件。

MCP 服务器

Open Code Review 支持 Model Context Protocol (MCP) 服务器,允许审查智能体在代码审查过程中通过 stdio 传输使用外部工具。

通过 CLI 配置 MCP 服务器:

# Add an MCP server
ocr config set mcp_servers.<name>.command <command>
ocr config set mcp_servers.<name>.args '["arg1","arg2"]'
ocr config set mcp_servers.<name>.env '["KEY=VALUE"]'
ocr config set mcp_servers.<name>.tools '["tool_name"]'
ocr config set mcp_servers.<name>.setup '<setup command>'

# Delete an MCP server
ocr config unset mcp_servers.<name>
字段 必填 描述
command 是 用于启动 MCP 服务器的可执行命令
args 否 传递给服务器的命令行参数
env 否 以 KEY=VALUE 格式表示的环境变量
tools 否 允许的工具名称;如果为空,则服务器中的所有工具均可用
setup 否 在启动服务器之前运行的 shell 命令(例如构建索引)

注意:如果 MCP 工具的名称与内置工具冲突,该工具将被跳过并发出警告。setup 命令有 5 分钟超时限制。

示例:添加 CodeGraph 用于代码结构分析

ocr config set mcp_servers.codegraph.command codegraph
ocr config set mcp_servers.codegraph.args '["serve","--mcp"]'
ocr config set mcp_servers.codegraph.tools '["codegraph_explore"]'
ocr config set mcp_servers.codegraph.setup 'codegraph init && codegraph index'

环境变量

变量 用途
OCR_LLM_URL LLM API 端点 URL
OCR_LLM_TOKEN API 密钥 / 认证 token
OCR_LLM_AUTH_HEADER Anthropic 认证头(x-api-key 或 authorization)
OCR_LLM_EXTRA_HEADERS 以逗号分隔的 key=value HTTP 头
OCR_LLM_MODEL 模型名称
OCR_LLM_PROTOCOL 协议:anthropic | openai | openai-responses;优先于 OCR_USE_ANTHROPIC
OCR_LLM_TIMEOUT 每次请求的 HTTP 超时时间(秒)(覆盖配置文件 timeout_sec)
OCR_USE_ANTHROPIC true = Anthropic,false = OpenAI Chat Completions(旧版;推荐使用 OCR_LLM_PROTOCOL)

遥测

用于可观测性(span、指标)的 OpenTelemetry 集成。默认禁用。

ocr config set telemetry.enabled true
ocr config set telemetry.exporter otlp
ocr config set telemetry.otlp_endpoint localhost:4317

设置 telemetry.content_logging 以在导出数据中包含 LLM 提示词和响应。

协议选择: 设置环境变量 OTEL_EXPORTER_OTLP_PROTOCOL 以选择导出协议:

值 传输方式 说明
grpc(默认) gRPC 默认端口 4317
http/protobuf HTTP 默认端口 4318

端点格式: telemetry.otlp_endpoint期望一个基础 URL,格式为host:port或http://host:port,不带路径部分。SDK 会按照/v1/traces自动追加信号路径(例如OTLP 规范.

贡献

本项目的存在离不开所有贡献者。有关开发环境搭建、编码规范以及如何提交 pull request,请参阅 CONTRIBUTING.md。

许可证

Apache-2.0 — 版权所有 2026 阿里巴巴

来源:Hacker News 热门(buzzing.cc 中文翻译) · github.com