TL;DR: 這篇寫給不想被雲端 API 掏空錢包、又怕 AI Agent 盲目重構改爆 Codebase 的開發者。我們用 Radeon RX 9060 XT 16GB、Linux ROCm (HIP) 硬體加速,加上 Rust 寫的確定性 2PC 防禦門衛,手刻一套符合 PRM(Process Reward Model)規格的地端零成本 AI 外骨骼系統。
1. 痛點:Agent 狂歡背後的帳單破產與程式碼毀滅
Autonomous Coding Agent(OpenCode、Claude Code 等)大幅改變了開發流程,但附帶兩大噩夢:
- Token 黑洞與 API 帳單爆表:為了確保程式碼品質,Agent 需要頻繁自我思考、多方案比較(Best-of-N)與長鏈修復。幾輪對話下來,雲端 API 帳單直接失控。
- 確定性缺失(Non-determinism):沒有 Guardrail 攔截的 Agent 就像沒導航的賽車——隨時在背景修改全域 Interface、弄爛 DB Schema,甚至產生語法幻覺。
解答:我們需要 Verifier(過程監督者)。但大廠論文動輒用 A100 叢集配 vLLM 預分配幾十 GB VRAM,一般開發者負擔不起。我們需要一套在地端 16GB VRAM 上順暢跑的「窮人版 Process Supervision 體系」。
2. 硬體與驅動層:為什麼選 Radeon RX 9060 XT 16GB + ROCm (HIP)?
在 Homelab / Linux (CachyOS) 環境下,配 Radeon RX 9060 XT 16GB 搭 ROCm Backend 是 CP 值很高的搭配:
- HIP 矩陣加速與 VRAM 吞吐:透過 ROCm 原生 HIP 加速,16GB VRAM 能穩穩咬住 Qwen3.5-9B with mmproj(程式碼語意 + 多模態視覺)。
- 逃離 vLLM 的 VRAM 黑洞:vLLM 預分配 90% VRAM 的機制在單機多任務環境是災難。改用 ROCm 版的 llama-server(GGUF 量化),模型權重只吃 5~9 GB VRAM,剩下的空間還能動態分配 KV Cache,主機照樣順跑其他服務。
- 0 API 成本:2PC(兩階段提交)觸發一萬次
/v1/directed評分,消耗的只有幾塊錢電費,沒了 Token 焦慮。
3. 架構哲學:三層確定性防禦外骨骼 (Tri-Layer Harness)
核心思想:把 LLM 從掌控系統寫入權的執行者,降級成必須提交合法提案的實習生。
┌────────────────────────────────────────────────────────────────────────┐
│ omo-slim / OpenCode Orchestrator │
└───────────────────────────────────┬────────────────────────────────────┘
│ 1. 2PC Proposal (Diff / AST Delta)
▼
┌────────────────────────────────────────────────────────────────────────┐
│ guardrail-mcp (確定性 2PC 閘門 Gateway) │
│ │
│ Track 1: Hard Guard (Rust / graphify-core AST 結構檢查) │
│ └── 毫秒級短路攔截(Short-Circuit),語法錯誤/違規直接退回(0 VRAM) │
│ │
│ Track 2: Soft Guard(地端多模態語意審查) │
└───────────────────────────────────┬────────────────────────────────────┘
│ 2. POST /v1/directed
▼
┌────────────────────────────────────────────────────────────────────────┐
│ docker-llm-as-a-verifier(地端 ROCm Backend / llama-server) │
│ └── Qwen3.5-9B with mmproj (GGUF) │
└────────────────────────────────────────────────────────────────────────┘
- graphify (AST & Context Manager):Rust 寫的,負責程式碼拓撲分析與動態 Token 剪枝,只餵給 Agent 資訊密度最高的 Minimal Sub-graph。
- guardrail-mcp (State Machine & 2PC Gateway):獨立 MCP 門衛,強制執行兩階段提交(Phase 1: Proposal → Phase 2: Guard Check → Issue commit_token)。
- docker-llm-as-a-verifier (PRM Evaluation Server):Docker 包裝的本地審查容器,透過 ROCm 加速提供細粒度評分。
4. 實作拆解:REST API 規格對齊 PRM 過程監督
docker-llm-as-a-verifier 提供 7 隻完整的 REST API,實現高階 Process Supervision 原語:
| Endpoint | Method | 2PC 實戰調用場景 |
|---|---|---|
/v1/directed |
POST | [核心] 給定原 Task,比對舊程式碼 A 與新修復 B,回傳 Preference Score 與 accepted 標記 |
/v1/select |
POST | [Best-of-N] 從 Agent 產生的 N 個修復提案中挑分數最高且最安全的 AST 變更 |
/v1/track |
POST | [軌跡監控] 每步 Action 後評估進度,發現 Agent 越改越爛就立刻短路中斷 |
/v1/compare |
POST | 快速 A/B Testing 雙案評分 |
/v1/score-pairs |
POST | 批次跑迴歸測試與評測 |
/health |
GET | 系統健康度檢查 |
/v1/usage |
GET | 地端 Token 累積統計 |
5. 實測閉環:從 Proposal 攔截到 Micro-Patching
當 Agent 提出帶有隱患的程式碼修改時,系統的防禦閉環如下:
- Coder Agent 發起變更提案(Proposal)。
guardrail-mcp觸發 Track 1:graphify-core掃描發現 Interface 斷層。- 通過 Track 1 後觸發 Track 2:打 HTTP POST 到 Docker
/v1/directed(Qwen3.5-9B with mmproj)。 - Verifier 判定 REJECTED,回傳 Payload:
{ "status": "REJECTED", "reason": "Signature mismatch on UserRepositoryInterface", "ast_node_id": "Node#402" } - Orchestrator 擷取
ast_node_id,指示 Agent 只針對Node#402做局部 Micro-patching,不用重讀整份長檔!
雙重驗證:前端 UI 變更可進一步讓 Qwen3.5-9B with mmproj 直接審查 Playwright 渲染截圖(Visual Guard),確保沒有跑版或 CSS 斷層。
6. 結語:把主控權與算力奪回地端
不用幾十萬的 A100 顯卡叢集,也不用每月給雲端 API 巨頭交保護費。透過 Rust 確定性圖譜 + 2PC 狀態機閘門 + AMD ROCm 本地多模態 Verifier,我們在不到一萬五的消費級顯卡上,打造了一套完全私有化、零隱私洩漏、具備 PRM 審查能力的 AI 防禦外骨骼。
相關開源儲存庫:
留言
張貼留言
回應不用錢,請多多益善!懶得寫字按個讚也是相當感謝!