文件

文件

opencode

opencode 透過 Vercel AI SDK 建立 provider,因此要指向新的端點,只需設定一個區塊並指定 npm 套件和 baseURL。指定的套件會決定它使用兩種 wire 格式中的哪一種。

在 opencode.json 中設定一個供應商區塊 — 聊天完成使用 @ai-sdk/openai-compatible,需要 /v1/responses 介面時使用 @ai-sdk/openai。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "kunavo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Kunavo",
      "options": {
        "baseURL": "https://api.kunavo.com/v1",
        "apiKey": "{env:KUNAVO_API_KEY}"
      },
      "models": {
        "claude-sonnet-5": {
          "name": "Claude Sonnet 5",
          "limit": { "context": 200000, "output": 64000 }
        },
        "claude-haiku-4-5": { "name": "Claude Haiku 4.5" }
      }
    }
  }
}
npm 欄位用來選擇 wire 格式。@ai-sdk/openai-compatible 使用 /v1/chat/completions;@ai-sdk/openai 使用 /v1/responses。Kunavo 同時支援兩者,因此任一種都可使用——若要在 GPT 系列模型中保留 reasoning items,請使用 Responses 套件;其他情況則使用 chat-completions 套件。
"apiKey": "{env:KUNAVO_API_KEY}" 會在載入時從環境讀取金鑰。opencode.json 是會進入儲存庫的檔案;若在其中填入明文金鑰,就無法保密。
為每個模型分別設定 limit.context 和 limit.output。opencode 會根據這些數字追蹤剩餘 context,因此未設定這些值的模型會依據並非自身限制的預設值計算。
還沒有金鑰?建立 Kunavo 帳戶,建立金鑰(以 sk-kn- 開頭),並從 $10 起新增額度——呼叫會從該餘額扣款,失敗的呼叫不會計費。之後儀表板會開啟 opencode 設定。

逐步操作

  1. 在 /app/keys 建立金鑰並複製——金鑰只會顯示一次。
  2. 將它匯出:export KUNAVO_API_KEY=sk-kn-...
  3. 將 provider 區塊新增至 opencode.json——若要套用到所有專案,請使用位於 ~/.config/opencode/opencode.json 的全域設定檔;若只套用於此儲存庫,請使用專案根目錄中的設定檔。
  4. 啟動 opencode 並從模型清單中選取模型;provider 會顯示在你為它設定的 name 名稱之下。
  5. 之後若要新增模型,請在 models 下新增另一個 key——ID 是實際傳送的值,name 只是標籤。

已於 2026年9月6日 根據 opencode 的 providers 文件 進行確認。第三方設定會變動;如果這裡的欄位名稱不再與你看到的內容相符,應以該頁面為準,而不是本頁。

除錯用戶端前先驗證

一個請求就能判斷失敗原因是端點、金鑰還是設定檔。如果這裡回傳 JSON,則相同的基礎 URL 與金鑰在 opencode 中也能運作。

# 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 權杖的美元價格,輸入/輸出。

模型 IDKunavo 輸入/輸出它在 opencode 中的位置
claude-sonnet-5$1.40 / $7.00預設建置模型
claude-opus-5$3.50 / $17.50計畫模式;計畫會主導後續所有工作
claude-haiku-4-5$0.70 / $3.50子代理和搜尋工作;請求數量很多
gpt-5-6-sol$2.00 / $12.00搭配 @ai-sdk/openai 使用,讓 reasoning items 在往返過程中保留下來
計費方式是從預付餘額按權杖計費,沒有月費——請參閱 billing。在重複的上下文中——這是編輯器或聊天用戶端傳送內容的大部分——提示快取 對帳單的影響比模型選擇更大。

常見問題

如何在 opencode 中新增自訂 provider?

在 opencode.json 的 "provider" 下新增一個區塊,指定 npm 套件、顯示名稱、options.baseURL、options.apiKey 和 models map。若端點提供 /v1/chat/completions,請使用 @ai-sdk/openai-compatible;若提供 /v1/responses,請使用 @ai-sdk/openai。接著,provider 會以你設定的名稱出現在 opencode 的模型清單中。

如何避免 API 金鑰寫進 opencode.json?

在 options.apiKey 中使用 {env:VAR_NAME} 插值語法,例如 "apiKey": "{env:KUNAVO_API_KEY}",並在 shell 中匯出該變數。opencode 會在載入設定時解析變數,因此設定檔可以安全地與其設定的專案一併提交至儲存庫。

opencode 中的 @ai-sdk/openai 與 @ai-sdk/openai-compatible 有何不同?

兩者會在相同的 base URL 上選用不同端點。@ai-sdk/openai-compatible 會呼叫 /chat/completions,幾乎所有 gateway 都有實作;@ai-sdk/openai 會呼叫較新的 OpenAI 介面 /responses。請依照端點實際提供的介面選擇——使用錯誤的套件會從其他設定正確的 base URL 收到 404。

為什麼 opencode 比預期更早用完 context?

因為模型項目沒有 limit 區塊,所以 opencode 會根據預設值計算用量,而非使用模型的實際 context window。請在 opencode.json 的該模型項目中新增 "limit": { "context": <window>, "output": <max output> },並使用 provider 目錄中的數值,讓 context 顯示和壓縮時機符合實際情況。