返回部落格
指南·2026年5月23日·閱讀約 6 分鐘

使用 OpenAI SDK 呼叫 Claude — 只改一行,保留你的程式碼庫

Anthropic 的 SDK 很出色,但生態系已標準化採用 OpenAI SDK。以下說明如何使用未修改的 OpenAI Python 與 Node SDK 呼叫 Claude Opus 4.7、Sonnet 4.6 與 Haiku 4.5 — 包含串流、工具使用與視覺能力。

Anthropic 自己的 SDK 很優秀,但整個 AI 生態系已標準化採用 OpenAI 的用戶端形式——每個範例、每個框架介面卡,以及每篇「hello world」教學都假設您手邊有一個 OpenAI(...) 實例。將程式碼遷移為直接呼叫 Anthropic SDK 是一項實質性的重構。

其實不必如此。本文章說明如何在不修改 OpenAI SDK 的情況下,透過 Kunavo 呼叫 Claude Opus 4.7、Sonnet 4.6 與 Haiku 4.5——將呼叫經由 Kunavo 路由。相同的 SDK、相同的型別、相同的串流、相同的工具使用。唯一變更的行是 base_url。

最小變更

只要已安裝 Python 的 openai 套件,完整遷移如下。

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com/v1",   # the only line that changes
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # a Claude slug, not gpt-4o
    messages=[
        {"role": "system", "content": "You are a senior platform engineer."},
        {"role": "user",   "content": "Critique this SQL migration..."},
    ],
)
print(resp.choices[0].message.content)

api_key 會成為您的 Kunavo 金鑰(在 /app/keys 建立)。base_url 指向我們的閘道。模型 ID 從 gpt-4o 切換為 Claude slug——claude-opus-4-7、claude-sonnet-4-6、claude-haiku-4-5。請求主體、回應格式,以及 SDK 中的每個輔助工具,都會如同使用 OpenAI 時完全照常運作。

串流

串流的運作方式完全相同。Kunavo 會將 Anthropic 的 SSE 區塊轉送為 OpenAI 的 chat.completion.chunk 格式,因此現有的非同步迭代模式無需修改即可運作。

stream.py
for chunk in client.chat.completions.create(
    model="claude-opus-4-7",
    messages=[{"role": "user", "content": "Explain Raft in 200 words."}],
    stream=True,
):
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

工具使用/函式呼叫

Anthropic 的工具使用協定在語意上與 OpenAI 的函式呼叫相同——差異只存在於線路層級。Kunavo 會雙向轉換 tools 陣列、回應 tool_calls 與後續的 tool 訊息。使用 tool_choice="auto"、"none" 或具名工具都可以——它們都會進行對應。

tools.py
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather in a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["city"],
            },
        },
    }
]

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=tools,
    tool_choice="auto",
)
print(resp.choices[0].message.tool_calls)

視覺功能

Claude 從 3.5 起便支援多模態;傳送影像時使用標準的 OpenAI content: [{ type: 'text' }, { type: 'image_url' }] 陣列。image_url.url 可以是 https URL 或 data: base64 URI。

vision.py
resp = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What's in this image?"},
            {"type": "image_url",
             "image_url": {"url": "https://example.com/cat.jpg"}},
        ],
    }],
)

何時應使用原生 Anthropic SDK

有些 Anthropic 專屬功能無法用 OpenAI 格式表達——最重要的是用於 prompt 快取的 cache_control 指示詞,以及延伸的 thinking token。如果您需要其中任一項,請切換 SDK,但保留相同金鑰:Kunavo 也提供原生 /v1/messages 端點,因此 Anthropic SDK 同樣只需變更 base_url 即可使用。

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-kn-...",
    base_url="https://api.kunavo.com",     # SDK appends /v1/messages
)

resp = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system="You are a senior platform engineer.",
    messages=[{"role": "user", "content": "What is a hot standby?"}],
)
print(resp.content[0].text)

請參閱 原生 Messages API 文件 查看完整的直通參數清單,並參閱 /docs/caching 了解 prompt 快取如何在重複提示中節省最高 90% 的輸入成本。

prompt 快取本身不需要切換 SDK。對於較長的提示詞,Kunavo 會在 OpenAI 格式路由上替您設定快取斷點:設定在系統提示詞、工具定義,以及已有 assistant 回合的對話的最後一則訊息上。您自行加在系統訊息、使用者訊息或工具定義上的 cache_control 會轉送給 Claude。

您放棄的功能,以及獲得的功能

OpenAI 格式路由是轉換,而非原生協定。有兩項小功能無法跨越這個界線:

  • 思考控制——在此路由上,thinking 和 reasoning_effort 不會轉送給 Claude。若要啟用或調整延伸思考,請使用原生 Messages API。
  • 思考輸出——模型進行思考時,回應不會包含這些思考內容,usage 物件也沒有為此提供個別計數:思考 token 會計入 completion_tokens。

您獲得的功能相當可觀:在 Claude、GPT、GPT-Image、Veo 與其他目錄模型間使用單一 SDK;視模型而定,低於上游官方價格;使用本地貨幣進行 Stripe 原生計費;不會默默替換模型——故障切換只會變更供應商,不會變更模型,而儀表板會逐筆列出每次呼叫的模型、token 與成本。

兩分鐘完成確認

在 kunavo.com/app/signup 註冊——$10 儲值即可支付數千次 Claude 呼叫,按量付費,餘額永不過期。填入您的 base_url,將模型 ID 替換為 Claude slug,然後對其執行現有測試套件。如果有任何功能無法順利轉換,請寄信至 contact@kunavo.com——我們會閱讀每一封訊息。