文件
Claude Agent SDK
Agent SDK 沒有 base URL 選項;它會啟動 Claude Code CLI,並將整個環境交給 CLI。這就是路由的切入點,只需要兩個變數。
在 SDK 中搜尋 base_url 選項卻一無所獲,這不是文件遺漏,而是根本沒有這個選項。SDK 會以子程序執行 Claude Code CLI,而讀取 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 的是 CLI。設定這兩個變數後,代理程式發出的每個呼叫都會經過路由,無須修改代理程式程式碼。
# The SDK has no base_url option. The CLI it spawns reads these, and the
# SDK passes the parent environment straight through — so exporting them
# before your program starts is enough.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...
# Pin models Kunavo serves: the CLI's default and its opus/sonnet aliases
# follow Anthropic's newest models, and the sonnet alias asks for Sonnet 5.5,
# which Kunavo does not serve — unpinned, those requests 404.
export ANTHROPIC_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
python my_agent.pyhttps://api.kunavo.com,不含 /v1。Anthropic 用戶端會自行附加 /v1/messages。這和其他所有 Anthropic 格式用戶端一樣,都是容易出錯的地方,詳情請見 ANTHROPIC_BASE_URL 頁面。為什麼環境變數會傳到 CLI
這點值得用一段說明,因為它關係到這是可能失效的小技巧,還是可據以建置的文件化特性。Python SDK 的子程序傳輸會將父程序的 os.environ 作為子程序環境,並只移除一個鍵——CLAUDECODE,避免子程序誤以為自己正在 Claude Code 工作階段中執行——接著合併 CLAUDE_CODE_ENTRYPOINT、再合併 ClaudeAgentOptions.env,最後加入 SDK 版本。
由此可知兩件事,而第二件正是大家容易搞錯的地方。Shell 中的所有內容都會傳到 CLI,因此匯出這兩個變數就能生效。此外,options.env 會合併覆寫繼承的環境變數,所以明確指定的值會優先於過時的匯出值。程式碼位於 subprocess_cli.py。
明確指定的方式,以及何時應堅持使用
在自己的電腦上匯出變數沒問題,但在其他環境中就不可靠:代理程式的端點會取決於程序的啟動方式;一旦它改在排程器、容器,或未載入個人設定檔的 CI 工作中執行,就會出問題。在 options 物件中傳入 env,就能讓路由成為程式的一部分。
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
# The explicit form. options.env is merged ON TOP of the inherited
# environment, so this wins over whatever the shell happens to hold —
# which is what you want in anything that is not your own laptop.
options = ClaudeAgentOptions(
env={
"ANTHROPIC_BASE_URL": "https://api.kunavo.com",
"ANTHROPIC_AUTH_TOKEN": "sk-kn-...",
"ANTHROPIC_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
},
)
async with ClaudeSDKClient(options=options) as client:
await client.query("Summarise the open TODOs in this repo")
async for message in client.receive_response():
print(message)逐步操作
- 在
/app/keys建立金鑰並複製——金鑰只會顯示一次。 - 決定路由設定的位置:本機作業時使用匯出的變數;任何無人值守的執行環境則使用
ClaudeAgentOptions(env=…)。 - 將
ANTHROPIC_BASE_URL設為https://api.kunavo.com,並將ANTHROPIC_AUTH_TOKEN設為你的sk-kn-…金鑰。 - 將
ANTHROPIC_MODEL、ANTHROPIC_DEFAULT_OPUS_MODEL和ANTHROPIC_DEFAULT_SONNET_MODEL設為已提供的 ID:CLI 內建的預設模型,以及其opus和sonnet別名,會跟隨 Anthropic 的最新模型;而 Kunavo 不提供的模型——Sonnet 5.5(sonnet別名會要求它)——會回傳 404。 - 可選擇設定
ANTHROPIC_DEFAULT_HAIKU_MODEL,讓 CLI 啟動的背景子任務使用最便宜的級別。 - 執行程式即可。代理程式程式碼不必修改。
不同子任務該使用哪個級別
代理程式會分派多個工作——你提出的一個要求會變成多次計費的往返呼叫——因此,級別對應在這裡比在聊天應用程式中更重要。費率以每 1M 個 token 的美元計價,依序為輸入/輸出,並從型錄即時讀取。
| 模型 ID | Kunavo 輸入/輸出 | 適用情境 |
|---|---|---|
claude-haiku-4-5 | $0.70 / $3.50 | CLI 自行產生的背景子任務——頻繁、自動執行,也很容易多花錢 |
claude-sonnet-5 | $1.40 / $7.00 | 代理程式實際推理時的實用預設值 |
claude-opus-5 | $3.50 / $17.50 | 只有在較便宜的級別需要多次嘗試才能完成時才使用 |
開始偵錯 SDK 前先驗證
只要一個請求,就能判斷問題出在金鑰、端點還是 SDK。如果這裡回傳 200,同一組憑證就能用於 SDK 啟動的 CLI;若仍有問題,原因就在變數的設定方式,而不在變數值。
# Settles whether a failure is the key, the endpoint, or the SDK.
# 200 here means the same credential works for the CLI the SDK spawns.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer sk-kn-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","max_tokens":16,
"messages":[{"role":"user","content":"ping"}]}'參考資料
SDK 是開放原始碼專案,位於 anthropics/claude-agent-sdk-python。本文所述的環境變數行為來自 SDK 自身的子程序傳輸機制,查閱日期為 2026-09-04。TypeScript SDK 採用相同架構——它驅動 CLI,而非直接呼叫 API——因此路由變數同樣由 CLI 讀取;其 README 並未記載此選項或行為,所以在依賴明確指定的方式之前,請先在其型別定義中確認選項名稱。Kunavo 提供的是Messages API;採用相同路由方式的其他用戶端列於整合中心。
常見問題
Claude Agent SDK 可以使用自訂 Base URL 嗎?
可以,但不能透過 SDK 選項設定——SDK 沒有 base_url 參數,所以在 README 中找不到它。SDK 會以子程序方式執行 Claude Code CLI,而讀取 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 的正是 CLI。只要在程式執行時的環境中設定這兩個變數,代理程式發出的所有呼叫就會經由指定路由傳送,不必變更代理程式程式碼。
SDK 如何將環境變數傳遞給 CLI?
它會繼承整個父程序的環境變數,只篩除一個指定的金鑰。在 Python SDK 的子程序傳輸機制中,子程序環境會依序建立:從父程序的 os.environ 移除 CLAUDECODE,再合併 CLAUDE_CODE_ENTRYPOINT,接著合併 ClaudeAgentOptions.env,最後加入 SDK 版本。因此有兩個結果:您 shell 中的所有設定都會傳遞給 CLI,而 options.env 會疊加在 shell 設定之上,因此優先採用其中的值。
應該使用環境變數,還是 ClaudeAgentOptions(env=...)?
除了在自己的筆記型電腦上執行之外,其他情況都請使用 options.env。若依賴 shell 中既有的環境變數,代理程式使用的端點就會取決於程序啟動方式;只要程序改由不包含您設定檔的排程器、容器或 CI 工作執行,就會因此失效。將 env 明確傳入 options 物件,可讓路由設定成為程式本身的一部分,而非依賴外部環境;由於它會疊加在繼承的環境之上,也會覆蓋過時的匯出值。
Agent SDK 需要另外申請 Anthropic 帳戶嗎?
它需要 Claude Code CLI 能接受的憑證,但不一定要是 Anthropic 官方憑證。由於路由是透過 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 設定,只要端點提供 Anthropic Messages API 即可;在 Kunavo,只需使用一個 sk-kn- 金鑰連接至 https://api.kunavo.com,費用便會從預付餘額中依 token 用量扣除,而非按方案計費。
Agent SDK 程式應使用哪些模型?
請依子任務選擇對應的層級,因為代理會分派多個工作。Claude Haiku 4.5 的價格為每 1M 個 token $0.70/$3.50,適合 CLI 自行產生的背景工作;Claude Sonnet 5 的價格為 $1.40/$7.00,是工作時的預設選擇;Claude Opus 5 的價格為 $3.50/$17.50,只有在較便宜的層級需要多次嘗試時才值得使用。在設定兩個路由變數的同時設定 ANTHROPIC_DEFAULT_HAIKU_MODEL,只需一行,就能降低每次執行的成本。
TypeScript Agent SDK 的運作方式也相同嗎?
架構相同——SDK 會驅動 Claude Code CLI,而非直接呼叫 API——因此路由變數同樣由 CLI 讀取。本頁根據所查閱的 Python SDK 說明這個機制;如果您使用 TypeScript SDK,請先依據其自身的型別確認選項名稱,再採用明確設定方式;在此之前,請使用匯出的環境變數。
為什麼 SDK 會從環境變數中篩除 CLAUDECODE?
避免 SDK 啟動的 CLI 誤以為自己正在 Claude Code 的父工作階段中執行。這是從繼承的環境變數中移除的唯一鍵值;在此處,它也證明其他所有內容都會完整傳遞,包括本頁依賴的兩個路由變數。