把 coding agent 的「腦」換成地端本地模型,實測下來的一句話結論:選對 agent 比選對模型更重要。同一顆開源模型,Claude Code 撞牆、aider 卻順順跑通。
flowchart LR
M[("本地 / 開源模型
ollama · Cerebras
gpt-oss-120b")]:::data
M --> CC(["Claude Code
深度綁定 Claude 格式"]):::result
M --> AI(["aider
OpenAI 格式"]):::result
CC --> X["thinking_blocks 不相容
第二回合被拒"]:::proc
X --> STOP(["撞牆:多回合崩潰
檔案寫不出去"]):::result
AI --> OK["多回合順跑"]:::proc
OK --> P[("你的專案 repo
檔案真實落地")]:::data
classDef data fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#78350f
classDef proc fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#17335e
classDef decision fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#4c1d95
classDef result fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d
classDef infra fill:#e5e9f0,stroke:#475569,stroke-width:2px,color:#1e293b
同一顆 gpt-oss-120b 餵給兩個 agent:紅色路是 Claude Code,綠色路是 aider。爆掉的不是模型,是 agent 對格式的處理方式。
| 面向 | Claude Code(撞牆) | aider(跑通) |
|---|---|---|
| 訊息格式 | Claude 專屬,把推理存成 thinking_blocks | 天生走 OpenAI 格式,不產生也不預期 thinking_blocks |
| 單回合 | 成功(能認出自己跑在地端模型上) | 成功 |
| 多回合 | 崩潰:第二回合把 thinking_blocks 連歷史送回非 Claude 模型,直接被拒 | 順跑,不中斷 |
| 寫檔 | 寫不出去 | 檔案真實落地 |
| 想繞過 | 用 drop_params 剝欄位失效——thinking_blocks 藏在訊息結構裡,不是 top-level 參數。硬關推理等於「買跑車拆引擎」 | 不需要繞 |
腦 (LLM) 預測下一字的模型 → 換成開源 120B 平台 模型跑在哪 → Cerebras 雲 / DGX 本地 Agent 驅動工具迴圈的程式 → 為特定模型調校 ★ 常被忽略 Harness/UI 遠端介面 → 中繼那層
CC + gpt-oss-120b 單回合 ✓ / 多回合 ✗ aider + 同一顆腦 多回合 ✓ / 寫檔 ✓ → 爆掉的是 CC 的處理方式,不是模型
腦是 Claude 級 (Opus) → 用 Claude Code 最順 腦是本地 / 開源 → 用 model-agnostic 的 aider / OpenHands 鐵律:CC 深度綁定 Claude,任何非 Claude 的腦都會被綁手綁腳
換腦決定成敗的,不是腦有多聰明,而是「腦到手之間的管線」對不對。本地/開源模型要配 model-agnostic 的 agent(aider / OpenHands),換腦幾乎只是改一行 --model,agent、UI、流程全不用動。反過來,把地端模型硬塞進為 Claude 綁定的殼裡,再強的模型也只能單回合跑一下就卡死。先選對 agent,再談換哪顆腦。
📺 對應單集:雲端 vs 地端:AI 跑在哪裡,跟以前有什麼不一樣 | 📚 回課綱總表 →