cd ../返回博客
$Guide//2026年6月4日//6 min read

用 OpenAI SDK 调用 Claude —— 改一行,代码照旧

只改 base_url 一行,未经改动的 OpenAI SDK 就能调用真正的 Claude Opus 4.7、Sonnet 4.6、Haiku 4.5。流式、工具调用、视觉、JSON 模式均一致,经由 Brievio 转发。

Anthropic 自家的 SDK 很好用,但整个 AI 生态都已经统一围着 OpenAI 客户端的 形态来设计 —— 每一份示例、每一个框架适配器、每一篇「hello world」教程,都 默认你手边有一个现成的 OpenAI(...) 实例。要把你的代码改成 直接调用 Anthropic 的 SDK,是一次相当可观的重构。

其实大可不必。本文会演示如何在不改动 OpenAI SDK 的前提下 调用 Claude Opus 4.7、Sonnet 4.6 和 Haiku 4.5 —— 办法就是 把你的调用经由 Brievio 转发。同一个 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 指向 我们的网关。模型名从 gpt-4o 换成 Claude 的模型名 —— claude-opus-4-7claude-sonnet-4-6 claude-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)

工具调用 / 函数调用

Anthropic 的工具调用协议,在语义上和 OpenAI 的函数调用是一回事 —— 两者 只在传输层的细节上有差别。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(思考)token。如果你需要其中任意一项,就换用 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 文档;至于提示缓存 如何在重复提示上为你省下高达 90% 的输入成本,请看 /docs/caching

你会失去什么 —— 又会得到什么

走 OpenAI 形态的这条路是一层翻译,而非原生协议。有两个小东西跨不过这道 边界:

  • cache_control(提示缓存)—— 这一项请改用原生的 Messages SDK,或者通过 input 这个后门参数传进去。
  • 扩展思考 token —— 它能在响应的 usage 对象里读到,但 没法作为请求参数直接传;要精细控制,就切到原生那一套。

而你得到的则相当可观:一个 SDK 就能打通货真价实的 Claude、Gemini、 GPT-Image 和 Veo 全套目录;每一个模型都 比官方报价低约 15%,并按真实 token 数计费;原生对接 Stripe 的账单;以及透明的路由 —— 仪表板始终显示每一次调用究竟是由哪个 上游真正服务的。

两分钟就能验证

brievio.com/app/signup 注册 —— 赠送的 2 美元额度,足够跑上几千次 Claude 调用。把你的 base_url 填进去,把模型名换成 Claude 的,再用你现有的测试 套件对着它跑一遍。要是有哪一处没能干净地跨过来,写邮件到 contact@brievio.com —— 每一封我们都会读。