文件
OpenHands
OpenHands 會透過 LiteLLM 路由每次模型呼叫,因此端點設定必須讓兩個欄位彼此吻合:帶有 openai/ 前綴的模型 ID,以及保留 /v1 的 base URL。這組合設定正確後,Advanced 分頁就能使用同一把金鑰連接 Claude 和 GPT。
Settings → LLM → Advanced 需要三個欄位 — Custom Model、Base URL、API Key — 模型 ID 帶有 openai/ 前綴,Base URL 保留 /v1。
# Settings → LLM → Advanced (toggle "Advanced" on first)
Custom Model openai/claude-sonnet-5
Base URL https://api.kunavo.com/v1
API Key sk-kn-...
# The "openai/" prefix is the provider, not a vendor: it tells OpenHands to
# speak the OpenAI Chat Completions protocol to the Base URL above. The model
# id after the slash is Kunavo's, and resolves at Kunavo.
#
# Keep the /v1. It belongs to the openai/ prefix — a litellm_proxy/ model
# takes the bare origin instead, which is the opposite convention./v1,也保留 openai/ 前綴——這是一項決定的兩個部分。 OpenHands 的設定頁面只說:「如果你的提供者有專用的 Base URL,請在此指定」,因此欄位本身無法判定格式。前綴才能說明。其「設定模型」頁面規定,OpenAI 相容伺服器使用 openai/<served-model-id>,並指出模型 ID「通常取自其 GET /v1/models 端點」;該頁面對此路徑唯一展示的 Base URL 範例 Base URL,結尾是 /v1——即 LM Studio 操作指南中的 http://host.docker.internal:1234/v1。對照之下即可看出差異:文件為 litellm_proxy/ 模型指定的 Base URL 是 https://your-litellm-proxy.com,完全不含 /v1。兩者混用——將 openai/ 指向不含路徑的來源網址,或是在 litellm_proxy/ 下使用 /v1——是導致 404 而非 401 的常見原因。openai/ 範例都是本機伺服器——LM Studio、Ollama、vLLM、SGLang。其文件沒有提供遠端 OpenAI 相容 gateway 的實際範例,因此上文引用的是前綴規則與欄位值格式,並非專為此情境撰寫的說明。若 OpenHands 日後提供相關文件,應以該頁為準。curl 可在十秒內確認;用戶端行為則取決於你和 OpenHands。LLM_EMBEDDING_MODEL 和 LLM_EMBEDDING_DEPLOYMENT_NAME 保持未設定,並繼續使用目前設定中已支援向量索引或音訊步驟的 provider。sk-kn- 開頭),並從 $10 起新增額度——呼叫會從該餘額扣款,失敗的呼叫不會計費。之後儀表板會開啟 OpenHands 設定。逐步操作
- 在
/app/keys建立金鑰並複製——金鑰只會顯示一次。 - 前往 Settings → LLM,開啟 Advanced 切換鈕。接著會依序顯示三個欄位:Custom Model、Base URL、API Key。
- 輸入帶有前綴的模型 ID——
openai/claude-sonnet-5,而不是claude-sonnet-5。Kunavo 提供的 ID 可透過GET /v1/models取得,這也符合 OpenHands 官方文件指示的自訂 ID 來源。 - 將
https://api.kunavo.com/v1貼到 Base URL,並將金鑰貼到 API Key,然後點選 Save Changes。OpenHands 文件指出,儲存本機設定檔時會先驗證後端設定,驗證失敗就會阻止儲存,因此此處出現的錯誤代表設定確實遭到拒絕,並非單純的介面提示。 - 確認後端可連線的目標,而非瀏覽器可連線的目標。base URL 必須能從執行 Agent Server 的機器解析——文件明確指出,若 Agent Canvas 在 Docker 中執行,
127.0.0.1指的是容器。Kunavo 這類公用端點是簡單情況;若前方有企業 proxy,則較複雜。 - 開始一段新的對話,交給它一項需要讀取並編輯檔案的任務。OpenHands 指出,已儲存的 LLM 設定會套用至新對話,舊對話則必須先重新啟動;實際執行工具的測試,比只打招呼更能驗證這組設定。
已於 2026年9月21日 根據 OpenHands 的 Language Model (LLM) Settings 頁面 進行確認。第三方設定會變動;如果這裡的欄位名稱不再與你看到的內容相符,應以該頁面為準,而不是本頁。
除錯用戶端前先驗證
一個請求就能判斷失敗原因是端點、金鑰還是設定檔。如果這裡回傳 JSON,則相同的基礎 URL 與金鑰在 OpenHands 中也能運作。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."欄位中應填入哪個模型 ID
每個文字模型都能以模型 ID 存取——即時清單位於 GET /v1/models,帶有價格的目錄位於模型頁面。費率是每 1M 權杖的美元價格,輸入/輸出。
| 模型 ID | Kunavo 輸入/輸出 | 它在 OpenHands 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 日常工作的模型——輸入為 openai/ |
claude-opus-4-8 | $3.50 / $17.50 | OpenHands 官方索引表中列於 Claude 系列最前面的模型 |
claude-haiku-4-5 | $0.70 / $3.50 | 用於日常編輯的低成本設定檔,可在對話中途切換回來 |
gpt-5-6-sol | $2.00 / $12.00 | 使用相同金鑰和 Base URL 的另一個模型系列 |
gpt-6-astra | $4.00 / $20.00 | 計畫一再偏離方向時,用來提供另一個觀點 |
除錯前值得了解的三個界線
OpenHands 比單一程序的 CLI 涉及更多元件,其中兩項看起來像 LLM 端點,實際上卻不是。以下內容整理自上述日期查閱的官方文件:
- 沙箱不是模型。 OpenHands 會在 agent-server 沙箱中執行工作,並透過網路呼叫模型;兩者是各自獨立的介面,也使用不同憑證。在此設定金鑰,只能用於模型呼叫。它與沙箱可連線的對象無關,而沙箱網路問題也不會呈現為驗證錯誤。
- ACP 代理完全獨立於此設定。 Agent Canvas 可以委派工作給 Claude Code、Codex 或 Gemini CLI,將它們作為 ACP 代理執行;「設定模型」頁面指出,這些代理「會自行管理模型存取權」,因此 LLM 設定檔不會重新導向該子程序。如果你預期金鑰應有流量,卻看不到任何流量,請確認實際執行的是哪個代理。OpenHands 與 Claude Code 的比較會說明這種差異,包括決定優先使用哪組憑證的規則。
- 設定檔與 10 個的上限。 儲存的設定會成為 LLM 設定檔,最近儲存的設定檔會在新對話中啟用;你也可以在對話中途切換設定檔,而不會遺失 context——因此能在同一把金鑰下使用低價和高價模型。文件規定每個帳戶最多可有 10 個設定檔。Provider Connection 可為多個設定檔儲存一次 provider、API 金鑰和選填的 base URL;同一頁也指出,這個面板只會出現在本機 agent-server 後端,在 OpenHands Cloud 後端中則會隱藏。
常見問題
如何讓 OpenHands 使用自訂 API 端點?
前往 Settings → LLM,開啟 Advanced 切換鈕。OpenHands 文件說明,此設定可用來「設定自訂模型,以及其他 LLM 設定」。畫面會依序顯示三個欄位:Custom Model、Base URL、API Key。輸入帶有 provider 前綴的模型 ID——OpenAI 相容端點請使用 openai/<model-id>——將端點填入 Base URL、貼上金鑰,然後點選 Save Changes。已儲存的設定會成為 LLM 設定檔,並套用至新對話;舊對話必須重新啟動才能套用。
OpenHands 的 Base URL 需要以 /v1 結尾嗎?
若模型 ID 帶有 openai/ 前綴,答案是需要。設定頁本身只說,若 provider 有專用 base URL 就應填入,因此無法單靠該頁判定格式——前綴才是判斷依據。OpenHands 的 Configure a Model 頁面規定,OpenAI 相容伺服器應使用 openai/<served-model-id>,並從其 GET /v1/models 端點取得 ID;該頁在 LM Studio 操作指南中展示的唯一 Base URL 範例為 http://host.docker.internal:1234/v1。litellm_proxy/ 模型則相反:文件所示的 base URL 是不含 /v1 的 proxy 根網址。因此 Kunavo 應填入 https://api.kunavo.com/v1。
為什麼 OpenHands 不讓我儲存 LLM 設定檔?
OpenHands 會在儲存本機設定檔前,先對後端進行驗證;文件指出,若驗證失敗,例如 API key 無效或模型無法使用,就會阻止儲存並顯示錯誤。因此,無法儲存代表設定確實遭到拒絕。請先在用戶端以外確認是哪一部分有誤:使用相同金鑰向端點的 /v1/models 發出一次 curl 請求,若設定正確就會收到 JSON;金鑰錯誤會收到 401,URL 錯誤則會收到 404。不支援驗證的舊版後端會略過檢查並正常儲存。
OpenHands 能透過 OpenAI 相容端點使用 Claude 模型嗎?
可以。`openai/` 前綴標示的是線路協定,而不是供應商:OpenHands 會將 OpenAI 格式的聊天完成請求傳送至您設定的 base URL,並將斜線後的 ID 原樣傳遞,因此 Claude ID 會在該端點解析,而不是在 OpenHands 內解析。請記得,OpenHands 很倚重工具呼叫,其文件也指出它需要功能強大的模型才能正常運作,因此這裡不適合選用您找得到的最便宜 ID。
Kunavo 測試過這套設定在 OpenHands 中的使用情況嗎?
沒有。2026 年 9 月 21 日查核的是 OpenHands 自己的文件——欄位名稱、順序、前綴規則和 base URL 格式均引自該文件。Kunavo 並未讓 OpenHands 對其端點執行對話,因此不對特定固定版本用戶端中的驗證、串流、工具往返或模型路由作出任何聲明。您可以單獨確認的事項是端點和金鑰是否可用,本頁的 curl 指令即可檢查。