Claude Code 串接 OpenAI 或地端模型研究 1 - 認識 LiteLLM
| | | 0 | |
繼續在 AI 應用的路上緩步而行,聽說 Claude Code / Cowork 可串接第三方非 Anthropic 模型,想說試試看好了。
手邊沒有重裝備,端不出像樣的地端模型,就用 AOAI GPT 模型來試吧。研究了一下,Claude Code 串接第三方推理模型選項雖然有 Foundry 選項,但指的是在 Foundry 上跑 Claude Sonnet 模型,若想使用 OpenAI GPT 模型或是 Ollama 的地端模型,標準做法是用 Gateway,設法模擬出 Anthropic 相容的 API 介面 (如 /v1/messages)。
有這類需求自然有現成的解決方案,AI 推薦了三種:
- LiteLLM
目前 LLM 生態系中最通用的代理工具。它不僅能將各家 API 統一成 OpenAI 格式,也支援反向將任何模型模擬成 Anthropic 的 Messages API,支援 OpenAI, Ollama, Bedrock, Vertex AI 等 100 多種模型來源,也有實作串流輸出(Streaming)與工具呼叫(Tool/Function Calling) - Olla
用 Go 開發,強調輕量、高效能,較適合在邊緣裝置或對延遲極度敏感的環境中,連結 Ollama 或 vLLM - OpenAI-to-Claude-API-Converter-Proxy
目標明確,是一組讓 Anthropic 專用客戶端能使用 OpenAI API 的 Skill,直接轉換不需安裝 Gateway
考慮通用及支援廣度,擁有 46K 星星的 LiteLLM 毫無懸念成為本次首選。
老樣子,我選擇用 Docker Compose 跑以求省事 (也安全些,程式若出問題只能摸到 volumes 有對映的目錄範圍),docker-compose.yml 如下:
services:
litellm:
image: ghcr.io/berriai/litellm:main-latest
container_name: litellm-proxy
ports:
- "4000:4000"
volumes:
- ./config.yaml:/app/config.yaml
- ./cert.pem:/app/cert.pem
- ./cert.key:/app/cert.key
env_file: # 建議將 API Key 放在 .env,chmod 600 限擁有者讀取並在 .gitignores 排除
- .env
command: [ "--config", "/app/config.yaml", "--port", "4000", "--num_workers", "4", "--ssl_certfile_path", "/app/cert.pem", "--ssl_keyfile_path", "/app/cert.key" ]
而 config.yaml 範例如下,基於安全我在 docker-compose.yml 指定用 .env 存環境變數用來存 api_key,並設定限擁有者讀取及 .gitignores 排除降低外流風險。
model_list:
# Claude Code 預期看到的 Anthropic 模型名稱
- model_name: claude-4-6
litellm_params:
# 加 azure/ 前綴,接部署名稱
model: azure/gpt-5.4-deployment-name
# 透過環境變數動態讀取,避免寫死在設定檔中
api_base: "os.environ/AZURE_API_BASE"
api_key: "os.environ/AZURE_API_KEY"
# 根據模型設定適當的 API 版本
api_version: "2024-12-01-preview"
# 確保 LiteLLM 以 Anthropic 格式回應錯誤或特定行為
litellm_settings:
drop_params: true # 自動丟棄 Azure 不支援但 Anthropic SDK 可能傳送的參數
啟動後可以看到畫面,等同為模型加上了各種規的 API 介面:

差不多是這種萬國插頭的概念:

用 curl 送個 Anthropic API 請求測試:
#!/bin/bash
curl -s https://localhost:4000/v1/messages \
--insecure \
-H "Content-Type: application/json" \
-H "x-api-key: sk-my-secure-proxy-key-9527" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 100,
"messages": [
{"role": "user", "content": "Hello, how are you?"}
]
}' | jq
這樣就能把 GPT 模型當 Anthropic 模型用了。

不過呢,我高興太早了。
在 Claude 設定好 Gateway,正要開心測試在 Claude Code 串 GPT 模型,吃了一記悶棍:

冒出 Unknown parameter: 'output_config',感覺是 drop_params: true 沒生效。
API Error: 400
{"error":{
"message":"litellm.BadRequestError: AzureException BadRequestError - Unknown parameter: 'output_config'.. Received Model Group=claude-sonnet-4-6\nAvailable Model Group Fallbacks=None",
"type":"invalid_request_error",
"param":"output_config",
"code":"400"
}}
在 Github 查到相似回報,串小米模型有同樣狀況,目前已有討論但修正無期,此路不通,只能繞道通行... (待續)
Comments
Be the first to post a comment