文件 v0.30.0

供應商

Provider 實作位於外部模組 go-llm-router(v0.4.0),由 Agenvoy 抽出獨立維護。Agenvoy 一律透過 router.New(cfg) 建立 agent,並只呼叫單一 Agent.Send() 介面——本 repo 內已無任何 per-vendor 實作。

支援清單

供應商 ID 認證 說明
OpenAI openai API key Chat Completions / Responses API
OpenAI Codex codex OAuth 使用 ChatGPT / Codex 訂閱,不需 API key;SSE 串流
Anthropic Claude claude API key Messages API;預設啟用平行 tool use
Google Gemini gemini API key gemini-2.x / 3.x 系列
xAI Grok grok API key grok-4 / grok-3 系列
xAI Grok(OAuth) grok-oauth OAuth 以 xAI 訂閱取代按量計費
GitHub Copilot copilot OAuth Device-code 登入流程
DeepSeek deepseek API key deepseek-chat(支援 tool use)與 deepseek-reasoner
NVIDIA NIM nvidia API key Llama、Mistral、gpt-oss 等託管開源權重模型
OpenRouter openrouter API key 聚合器——單一 key 路由到多家供應商的模型
Cloudflare cloudflare API token + account ID Workers AI;可選填 gateway ID
Compat compat 自訂 URL(可選 key) 任何 OpenAI 相容端點——Ollama、LM Studio、vLLM、LiteLLM

新增模型時(TUI /model,或 GET /v1/provider/:provider/models)會即時從各供應商 API 取得模型清單。repo 內不再存放靜態模型目錄。

設定

一切由 TUI 或本機 HTTP API 管理——沒有 agen model CLI 子指令:

工作 TUI HTTP
新增 / 移除供應商或模型 /model POST /v1/modelsDELETE /v1/models/*name
選擇 dispatcher 模型 /model(或以 Shift+W / Shift+S 輪替) GET POST /v1/model/dispatcher
選擇 summary 模型 /model GET POST /v1/model/summary
選擇 session 使用的模型 /model POST /v1/session/:id/model
儲存憑證 /key POST /v1/provider/:provider/key
OAuth 登入 /model GET /v1/provider/:provider/oauth(SSE device code)

憑證(API key、OAuth token)存放於 OS keychain 的 agenvoy 服務,絕不寫入純文字 JSON。

Dispatcher 模型

Dispatcher LLM 決定由哪個 worker 模型處理任務。它在 Execute() 進入迭代迴圈前透過 SelectAgent() 執行,輸入為使用者訊息加上命中的 skill 提示。其路由呼叫本身以 ReasoningNone 發出,讓分派成本維持低廉。

以 TUI /modelPOST /v1/model/dispatcher 設定。未設定 dispatcher 時,第一個成功初始化的 agent 成為 fallback。

Reasoning 等級

go-llm-router 將 reasoning 正規化為單一尺度——nonelowmedium(預設)、highxhighmax——並依供應商映射(Claude thinking budget、Gemini thinking budget、OpenAI effort 等)。超出模型支援範圍的等級會被夾限(clamp),而非直接拒絕。

等級透過每次 Send 呼叫明確傳入;config.json 內沒有全域 reasoning 設定。在 TUI 以 Shift+A / Shift+D 輪替。

Fast 模式

Shift+F 切換 fast 模式,透過 router 傳遞 provider.ModeFast,讓支援的後端要求更快的服務層級。支援與否依模型而定(core.SupportFast)——例如較新的 OpenAI 世代、Claude Opus 世代、多數 Grok 模型與特定 Gemini 系列。不支援的模型會靜默回到預設層級。Fast 模式為行程區域性,不會持久化。

新增自訂 OpenAI 相容端點

使用 compat 供應商類型,指向任何接受 OpenAI Chat Completions schema 的端點。URL 慣例沿用 Zed:輸入到 /v1 為止(例如 http://192.168.1.10:4000/v1,Ollama 預設 http://localhost:11434/v1);router 會自行接上 /chat/completions

儲存拆分(URL 與 key)

項目 位置 API
URL ~/.config/agenvoy/config.jsoncompats[].URL session.UpsertCompat / session.GetCompatURL
API key OS keychain keychain.Set("COMPAT_<NAME>_API_KEY", value)

沒有 COMPAT_<NAME>_URL 這個 keychain key——它在一次「TUI 寫入 config、runtime 卻讀 keychain 導致永遠回退到 localhost」的 bug 後被移除。

已驗證的 compat 目標

目標 可用 說明
Ollama 預設 http://localhost:11434/v1
LM Studio
vLLM tool use 需 --enable-auto-tool-choice --tool-call-parser <name>
llama.cpp server
LiteLLM proxy 以 virtual key 當作 Bearer token
Groq / Together / DeepInfra / Fireworks
Azure OpenAI 需要 api-key header(非 Bearer)與 ?api-version=——不支援

Send timeout 與失敗處理

層級 攔截的問題
Provider HTTP client go-llm-router 各 provider 內部設定 傳輸層卡住
AgentSendTimeoutSec config.jsonlimits.agent_send_timeout_seconds,預設 600 exec 層以 context.WithTimeout 設下的上限

失敗時 exec 層對 timeout 於同一模型重試最多三次、對 rate-limit 類錯誤註冊 30 分鐘 cooldown,接著切換到下一個健康模型。完整升級表見執行引擎頁。

EN