cd ../back to blog
$Guide//June 4, 2026//6 min read

用原封不動的 OpenAI SDK 呼叫 Claude:只改一行 base_url

不必重構程式碼。透過 Brievio 把 OpenAI Python/Node SDK 的 base_url 改一行,就能以原生客戶端呼叫貨真價實的 Claude,串流、工具、視覺全部照舊。

Anthropic 自家的 SDK 很好用,但整個 AI 生態系早已統一在 OpenAI 客戶端的形狀上 — 每一個範例、每一個框架的轉接層、每一份 OpenAI(...) 物件。把你的程式碼改寫成直接呼叫 Anthropic 的 SDK,是一次相當有份量的重構。

其實不必如此。本文示範如何透過 Brievio,用原封不動的 OpenAI SDK 呼叫 Claude Opus 4.7、Sonnet 4.6 與 Haiku 4.5 — 同一套 SDK、同一組型別、同樣的串流、同樣的 工具呼叫,而且另一端是貨真價實的模型。唯一需要改的一行,就是 base_url

最小幅度的改動

在已經裝好 Python 的 openai 套件的前提下,整個遷移 看起來就是這樣。

main.py
from openai import OpenAI

client = OpenAI(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com/v1",   # 唯一需要改的一行
)

resp = client.chat.completions.create(
    model="claude-sonnet-4-6",              # 一個 Claude 代號,不是 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 換成你的 Brievio 金鑰(在 /app/keys 建立)。base_url 指向我們的閘道。模型 id 從 gpt-4o 改成一個 Claude 代號 — claude-opus-4-7 claude-sonnet-4-6claude-haiku-4-5。請求 主體、回應結構,以及 SDK 裡的每一個輔助方法,行為都和你打 OpenAI 時一模一樣。

串流

串流的運作完全相同。Brievio 會把 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)

工具呼叫 / function calling

Anthropic 的工具呼叫協定在語意上,和 OpenAI 的 function calling 是一樣的 — 兩者只差在傳輸層的格式。Brievio 會在兩個方向上轉換 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 網址,也可以是一個 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 的形狀表達 — 其中 最重要的,就是用於提示快取的 cache_control 指令,以及 擴充的 thinking 權杖。如果你需要其中任何一項,就換一套 SDK、但沿用同一把金鑰:Brievio 同樣有開放原生的 /v1/messages 端點,所以 Anthropic 的 SDK 也只要改一行 base_url 就能運作。

anthropic_native.py
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-brievio-...",
    base_url="https://api.brievio.com",     # SDK 會自動接上 /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 則說明了提示快取 如何在重複的提示上,替你省下最多 90% 的輸入成本。

你會失去什麼 — 又會得到什麼

OpenAI 形狀這條路是一層轉換,而非原生協定。有兩件小事無法跨越 這道邊界:

  • cache_control 提示快取 — 這部分請改用原生的 Messages SDK,或透過 input 這個逃生口傳入。
  • 擴充思考權杖 — 可以在回應的 usage 物件裡讀到, 但無法當成直接的請求參數;若你需要精細控制,就切換到原生。

而你得到的,意義重大:一套 SDK 就能橫跨貨真價實的 Claude、Gemini、 GPT-Image 與 Veo 型錄;每一個模型都比官方參考價低約 15%, 並依真實的權杖數計費;原生整合 Stripe 的帳務;以及透明的路由 — 儀表板永遠會顯示每一次呼叫實際是由哪個上游服務的。

兩分鐘就能確認

brievio.com/app/signup 註冊 — $2 的免費額度足以涵蓋好幾千次 Claude 呼叫。把你的 base_url 填進去,把模型 id 換成一個 Claude 代號,再對 它跑一遍你現有的測試套件。如果有哪裡沒能順利跨越,來信 contact@brievio.com — 我們每一封都會看。