Skip to content
所有標籤

#llm-agents

6 篇文章

跟成熟 coding agent 學設計(6):ModelProvider 抽象——為什麼不能直接包 SDK 就好

直接包 SDK 三個月就會後悔:每家的 usage 欄位、tool call 格式、錯誤語意都不一樣,換模型等於重寫迴圈。五家參考專案都把「wire protocol」從「provider 身分」裡拆出來當獨立維度;rivumi 更進一步,用 pydantic canonical contract(Message/ToolCall/Usage/ModelTurn)加六種 protocol adapter,把 OpenAI SDK 的內建 retry 關到 0,所有錯誤先分類成 ProviderErrorKind 再交給統一的重試政策。provider 表本身是跟 pi 的 packages/ai 對著抄的——這是血統,不是巧合。

跟成熟 coding agent 學設計(7):Provider retry policy——從單次 5xx 到有界 retry 與 fallback

NVIDIA NIM 間歇 500 暴露了 rivumi 早期只有錯誤分類、沒有重試消費者的缺口。現在 SDK retry 關閉,harness 對每個候選最多嘗試 5 次,使用帶 jitter 的指數退避並尊重有上限的 Retry-After;耗盡後可依明確設定切到 fallback model,model.retry 與 model.fallback 都進 event log。

跟成熟 coding agent 學設計(22):Gateway 模式——把任何 provider 變成 OpenAI 相容端點

生態系都把 /v1/chat/completions 當共通語,但你手上的 provider 不一定講這個方言。五家的答案分三派:pi 和 OpenCode 讓 client 本身講多種方言所以不做 gateway;OMP 做了真正的 protocol translator(foreign wire → 中立 context → provider adapter,禁止 raw passthrough);Codex 和 Claude Code 的 proxy 不翻譯,只負責強制流量管控。rivumi 抄 OMP 的邊界但收斂成一進一出:只收 OpenAI Chat,嚴格解析成 canonical contract,後面接任何 ModelProvider——順便踩掉一個 cross-event-loop client close bug,教訓是 provider 的生命週期必須交給 ASGI lifespan。

跟成熟 coding agent 學設計(12):小模型能寫程式嗎——能力邊界與 eval 紀律

小模型卡的不是『不會想』而是『格式不穩』:tool call JSON、diff hunk 計數、context 預算都會爆。五家參考專案的共識是把評測建立在真實模型行為上(pi 的 model-backed eval、OMP 從真實 session log 校準編輯基準、Codex 甚至為弱模型放寬 parser),rivumi 則選最窄但最硬的路:一個 fixture、五次真實 Ollama 執行、manifest 宣告改哪些檔案和哪些 patch 片段才算過,並且把 M2 的失敗原封不動留成證據——不把 mock 當 E2E,不把部分成功講成全過。

跟成熟 coding agent 學設計(8):訂閱的正道與邪路——OAuth 與 credential 邊界

五家在「訂閱認證」上分成三派:Codex 和 Claude Code 只為自己官方 client 做 OAuth 並把 token 收進 OS keyring;pi 和 OMP 直接重用 Claude Code 的 client ID 實作 Pro/Max OAuth(技術可行但 Anthropic 文件明文禁止第三方未經核准提供 claude.ai 登入);OpenCode 則把內建 Pro/Max plugin 整組移除,是生態系最乾淨的政策先例。rivumi 的原則:自己的 grant 自己做、絕不刮別家 CLI 的 credential 檔、第三方 client 要 provider 明確支援才接 OAuth、credential 不複製不轉發。

跟成熟 coding agent 學設計(5):Verification gate——改了檔案不算成功,驗過才算

五家參考專案裡沒有任何一家在 harness 層強制「宣告的驗證指令全過才算成功」:pi 靠模型自覺、OpenCode 和 Codex 把驗證寫進 system prompt、Claude Code 用獨立的對抗式驗證 subagent 但仍是軟性合約、只有 OMP 的 cleanse 真的由 harness 跑檢查。rivumi 選最硬的一條路:改過檔案就必須重跑所有宣告的驗證指令,全過才給 terminal_reason=verified;沒動任何檔案就不重跑(no_changes),把「跑不跑」變成程式碼決定,不是模型決定。