npm install -g @alibaba-group/open-code-review
ocr version
ocr config provider
互動式 TUI 引導你:選擇內建或自訂 provider → 填入 API key → 挑選 model → 自動存檔並跑 ocr llm test 驗證端點。之後換模型:
ocr config model
在 CI 或無 TUI 的環境裡,用 ocr config set 直接寫入同一份配置:
ocr config set provider anthropic
ocr config set model claude-opus-4-6
ocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx
ocr llm test
若報 no valid LLM endpoint configured,重查 Step 2 的配置。401/403 表示 token 錯誤或過期。
cd path/to/your-repo
# 工作區模式 —— 評審 staged + unstaged + untracked 變更(預設)
ocr review
# 分支區間 —— 評審 feature-branch 自與 main 分叉以來的變更
ocr review --from main --to feature-branch
# 單一 commit
ocr review --commit abc123
ocr review --preview # 工作區
ocr review -c abc123 --preview # commit
--preview 跑過濾管線但跳過 LLM,印出檔案清單與排除原因——不花 token。
ocr review --format json --audience agent > review.json
--audience agent 屏蔽人性化進度 UI,讓 stdout 只剩 JSON / 最終摘要——正是上游 agent 或 CI 腳本所需。
從零開始的完整流程:
npm install -g @alibaba-group/open-code-review → 安裝 CLIocr config provider → 互動式選 provider + 填 API keyocr llm test → 確認連通性ocr review --preview → 先看會審什麼(不花 token)ocr review → 真正跑評審第 ④ 步是新手最容易跳過的——--preview 是你的安全網。
CI 腳本中必須傳 --audience agent——它屏蔽進度列 UI,讓 stdout 只剩 JSON / 最終摘要。不傳的話 stdout 混雜 ANSI 轉義碼,JSON 解析會失敗。
不要糾結——模式由你手上的變更決定:
ocr review(工作區模式)ocr review -c <sha>ocr review --from main --to feature--audience agent 與 --format json 各控制什麼(前者控 UI、後者控結構)。你剛接手一個別人的 legacy 專案,壓根不懂它的結構,但明天就要上線一個功能。你想在動任何東西之前,先知道「這個 repo 現況的風險水位」。這是「審陌生 codebase」的典型開場——先摸底、再決定動刀。
ocr review --preview
但注意:如果這是「整個 repo 的現況」,ocr review(工作區模式)可能因為「沒有變更」而零檔可審。陌生 repo 正確的摸底工具是 ocr scan:
ocr scan --preview
ocr scan --path src,internal --exclude '**/generated/**,*.pb.go' \
--format json --audience agent > audit.json
用 --path 限定到「你打算動的地方」,--exclude 擋掉生成碼——陌生 repo 最容易混入大量生成檔。
jq -r '.comments[] | "\(.severity // "UNK") \(.path)"' audit.json | sort | uniq -c | sort -rn
ocr scan --path internal/auth,internal/payment --max-tokens 150000 \
--format json --audience agent
陌生 repo 的關鍵是「不要一頭栽進 diff」——你連 baseline 都沒有。先用 ocr scan --preview 確認掃描範圍(避免把生成的、vendor 的、含 secrets 的目錄掃進去),再從核心目錄開始分層審。比起「先看懂全部再動手」,「先用 scan 摸出風險水位、再對熱點加深」是接手 legacy 最低成本且最安全的開場。
預期產出
audit.json: 23 files scanned, 8 comments
→ 5 條落在 internal/payment(熱點)
→ 3 條落在 src/legacy(遷移風險)
深掃 internal/payment → 追加 4 條(含 2 條安全)
→ 動手前你就知道:別碰 payment,先補測試再遷移
ocr review 需要 Git 歷史,對照「改前 vs 改後」——它回答「這個改動對不對」。ocr scan 不需要 Git,直接讀工作樹現況——它回答「這個檔案現在健不健康」。陌生 repo 沒有「改前」可對照,所以 scan 才是正確工具;有 diff 的日常開發才用 review。這不是同一命令的兩種用法,而是兩個不同問題。
# 你接手後跑:
ocr review # exit 0, 0 comments → 「這個 repo 很乾淨!」
# 但你不知道: 這個 repo 從沒被 scan 過,bugs 是「積累」的,不是「新引入」的
# review 只看變更 → 沒變更 = 沒評論 = 乾淨(錯覺)
零評論的 review 只證明「最近沒人引進新問題」,不證明「repo 沒問題」。legacy 的隱患是累積的——用 review 摸不出來。防禦:接手 repo 的第一次評審永遠用 ocr scan 做「baseline 審計」,之後日常才用 review 做「增量把關」。把 scan 結果存檔(baseline.json),之後每季重掃比對趨勢。
| 症狀 | 可能原因 | 解決方案 |
|---|---|---|
接手 repo 後 ocr review 零檔可審 | 無變更(工作區乾淨),review 需要 diff | 改用 ocr scan 摸底(不需 Git 歷史) |
| scan 掃到一堆生成碼/ vendor | 沒設 --exclude | 加 --exclude '**/generated/**,*.pb.go,vendor/**' |
| scan 的評論數爆量 | 整庫一次審,token 與評論都放大 | 用 --path 分層;先核心目錄再往外 |
ocr llm test 在陌生環境失敗 | 端點解析鏈沒找到三元組 | 用 ocr config provider TUI 或 set env;確認沒殘留 ANTHROPIC_* |
| 掃到含 secrets 的檔 | 沒先 preview 就掃 | 以後一律先 ocr scan --preview;把 secrets 檔加進 exclude |
scan --preview 到存 baseline,列出 5 步與各自的輸出。你是工程主管,要把 OCR 從「個人玩具」升級成全公司共用的 code review 平台。這不是「跑一條命令」——是「設定規則 → AI review → CI 整合 → 指標追蹤」四階段、跨多個 repo 的完整導入專案。下面是一條可複製的路徑。
# 1a. 建立團隊規則(版本化、可 review)
mkdir -p .opencodereview
cat > .opencodereview/rule.json << 'EOF'
{
"include": ["src/**/*.{go,ts,tsx,py}"],
"exclude": ["**/*.test.*", "**/generated/**", "**/vendor/**"],
"rules": [
{ "path": "**/*", "rule": "Check for hardcoded secrets, SQL injection, and missing auth checks." },
{ "path": "src/api/**/*.go", "rule": "Go-specific: defer tx.Rollback() after db.Begin(); check error wrapping." }
]
}
EOF
# 1b. 確認規則層正確(逐檔驗證)
ocr rules check src/api/handler.go
cd pilot-service
ocr config provider # TUI 選 provider + model
ocr llm test # 確認連通
ocr review --preview # 確認過濾範圍(不花 token)
ocr review --format json --audience agent > review.json
jq '.summary' review.json # files_reviewed / comments / total_tokens
# 3a. 下載官方 GitHub Actions workflow
curl -o .github/workflows/ocr-review.yml \
https://raw.githubusercontent.com/alibaba/open-code-review/main/examples/github_actions/ocr-review.yml
# 3b. 設定 secrets: OCR_LLM_URL / OCR_LLM_AUTH_TOKEN / OCR_LLM_MODEL
# 3c. 加一道「註記檢查」當合併門檻(見 cicd.html 的挑戰三)
# → 沒有 OCR 註記的 PR 不能 merge
# 4a. 在 CI 啟用遙測(OTLP/gRPC → collector:4317)
env:
OCR_ENABLE_TELEMETRY: "1"
OTEL_EXPORTER_OTLP_ENDPOINT: collector:4317
# 4b. Grafana 追蹤: 每週評論數、每 PR token 成本、平均時長、工具錯誤率
# 4c. 用 ocr.session 留存「每顆 PR 的審查軌跡」當品質稽核證據
導入失敗九成不是工具問題,而是「設定、規則、門檻、指標」各自為政。把規則與配置先版本化(Phase 1),是為了讓「改規則」本身走 code review;先試行單 repo(Phase 2),是為了在放大規模前發現「規則太鬆/太嚴」;CI 門檻(Phase 3)確保「AI review 真的被用」;指標(Phase 4)讓你能跟老闆說「省了多少工時、擋了多少缺陷」——這是導入專案能持續的理由。
預期產出
Day 1: pilot-service 跑通,平均 4 條評論/PR、1.2 萬 token/PR
Week 2: 規則 v2 上線(補 React hooks 規則),偽陽性降 30%
Week 4: 12 個 repo 全接 CI,合併門檻生效
Month 2: 儀表板顯示「擋下 47 條 high-severity 缺陷」→ 導入報告可交差
ocr review 的 token 成本 ≈ 每檔 prompt 上限 × 檔數 × (1 + plan/壓縮係數)。50 行以上的檔會多一次 plan 呼叫,長迴圈會觸發壓縮。第一次跑先用 --preview 數檔案數,再用 --format json 看 summary.total_tokens 建立基準——之後每次改動規則/模型都跟這個基準比,成本漂移立刻可偵測。
第一次評審最容易犯的錯是不傳 --background。Agent 不知道這段變更在解決什麼問題,評論就變成「風格層級」的低價值建議。品質順序:--background(語意)> 規則(聚焦)> 模型(推理力)。先窮盡便宜的旋鈕,再花錢換模型。
OCR 把 diff 送到你配置的 LLM 端點——這是唯一會外送的內容。導入前先檢查:① repo 裡有沒有含 secrets 的目錄(config/、.env)——用 --exclude 擋掉;② CI 的 OCR_LLM_AUTH_TOKEN 是 secret 不是一般變數;③ 對內網模型(如 vLLM)優先——如果公司有自架 LLM,diff 就不出內網。遙測(telemetry)不導出 prompt 內容,可安心開。
| 面向 | 本文(快速開始) | 相關文 | 差異說明 |
|---|---|---|---|
| 目標 | 個人 5 分鐘跑通第一次評審 | cicd.html | 本文是「單機可用」,CI/CD 是「自動化到每個 PR」——導入專案從本文出發、以 cicd 收尾 |
| 配置深度 | 只教最基本的 provider + model | configuration.html | 本文跳過端點解析鏈優先級、extra_body、retry_codes——那些在設定頁 |
| 命令範圍 | 只有 review / config / llm test | cli.html | CLI 頁涵蓋 scan、session、viewer、rules check 等全部命令與參數表 |
| 規則 | 不深入,只提「可自訂」 | rules.html | 四層優先級鏈、五重門、glob 語法都在規則頁——本文不重複 |
--format json 評審--preview 驗證過濾範圍並估算 token 成本ocr rules check 驗證summary 建立每 PR 的 token 基準線