運作原理

確定性工程 × Agent 混合,為何比通用 agent 更省 token 又精準

一句話

OCR 讀你的 Git diff,把變更檔交給可呼叫工具的 LLM Agent,產生精確到行的結構化評論。它能讀完整檔案、搜尋 codebase、查看其他變更檔做脈絡,產出「深層評論」而非表面的 diff 回饋。

通用 Agent 的問題

如果你用過 Claude Code 這類通用 agent 的 review skill,一定遇過這些痛點:

問題現象
覆蓋不全較大的變更集,agent 傾向「偷工」——只挑部分檔案審,漏掉其他
位置漂移評論的檔案與行號常對不上實際程式碼
品質不穩自然語言驅動的 skill 難除錯,prompt 微調就會讓品質大幅波動

根因:純語言驅動的架構,對評審流程缺乏硬性約束。

核心設計:確定性工程 × Agent 混合

OCR 把「不能出錯的部分」交給工程邏輯,把「動態決策」交給 Agent。

確定性工程 —— 硬約束

Agent —— 動態決策

結果:同一個底層模型下,OCR 達到顯著更高的 PrecisionF1,同時只消耗約 1/9 的 token、完成得更快。代價是 Recall 較低——這是刻意取捨:優先精準、降低雜訊。

執行流程一覽

ocr review
  → bootstrap         解析 LLM 端點、載入模板/工具/規則
  → diff provider     git diff → []model.Diff(workspace/commit/range)
  → filter & rules    五重門過濾 + 每檔選規則
  → subtask dispatch  每檔一個子 agent(concurrency=8):plan → main 迴圈
  → output writer     行解析 + 評審過濾,渲染 text 或 JSON

每檔子任務:plan + main

每個通過過濾的檔案,OCR 啟動一個子 agent,在自己的 goroutine 中跑,受 --concurrency(預設 8)約束。

記憶壓縮:三分區策略

長的工具呼叫迴圈終會溢出 context。OCR 用 MAX_TOKENS = 58888 的預算管理:

閾值動作
60%啟動非同步背景壓縮,當前迴圈繼續
80%下一個請求前同步執行壓縮

訊息分三區:frozen(前 2 則 system+user)、compress(摘要成一則)、active(最近可裝進預算的完整輪次)。compress 區以 XML 渲染交給 MEMORY_COMPRESSION_TASK,摘要包在 <previous_review_summary> 標籤內。

評論處理流水線

  1. 行解析——existing_code 用滑動視窗與 diff 比對,算出精確 start_line/end_line
  2. 重新定位(可選回退)——行解析在複雜 diff 上失敗時,跑 RE_LOCATION_TASK 請模型重新錨定。
  3. 評審過濾——REVIEW_FILTER_TASK 對照 diff 檢查評論,移除可證明為錯的。
  4. 二輪行解析——頂層命令對完整評論集重跑,捕獲跨檔或重新定位的評論。

什麼不自動化

📖 教學解說:運作原理深度導讀

確定性 × Agent 混合的本質

問自己一個問題:哪些事情是「不能出錯」的?檔案選擇、規則匹配、排除邏輯——這些用工程程式碼(確定性)處理。哪些是「需要動腦」的?理解 diff、判斷缺陷、寫評論——這些用 LLM Agent。混合的關鍵是界線:確定性管線為 Agent 準備好精確的輸入,Agent 只需要專注在推理。

三分區壓縮的實務意義

frozen(前 2 則 system+user)永遠不壓縮——這是 Agent 的「記憶起點」。compress 區是已被摘要的歷史。active 是最近的完整輪次。壓縮發生在 60%(非同步,迴圈繼續)和 80%(同步,阻塞下一次請求)。實務意義:60% 時壓縮幾乎無感,80% 時你會感受到延遲。這就是為什麼 --max-tokens 很重要——越大的預算,壓縮觸發越晚。

「不自動化」的設計哲學

OCR 刻意不做的三件事都有同一個原因:確定性

  • 端點發現不回退 → 避免猜錯 LLM 用什麼
  • 子 agent 失敗不重試 → 避免放大失敗、確保行為可預測
  • 無跨檔推理 → 避免複雜度爆炸、確保 per-file 確定性

這些選擇讓 OCR 的行為可重複成本可預測。重試和跨檔推理是包住它的 CI 管線的責任。

練習 / 驗收清單

  • 能解釋「確定性 × Agent」比純語言 skill 強的原因
  • 能描述 plan+main 兩個階段各做什麼
  • 能解釋三分區壓縮如何避免溢出
  • 能說出 OCR 刻意不自動化的三件事
看完這頁你應該能說出:為什麼「確定性 × Agent」比純語言 skill 強、plan+main 兩個階段各做什麼、三分區壓縮如何避免溢出、以及哪三件事 OCR 刻意不自動化。

延伸閱讀:架構總覽 · 6 個工具 · 評審規則