调模型的两套「插头」:OpenAI 和 Claude 接口协议讲清楚

在这里插入图片描述

关注 AI技趣星球,一起用技术创造乐趣。

本文写作时间:2026 年 6 月 23 日。各家接口字段可能随版本调整,动手前以官方文档为准。

很多人第一次「用代码调 AI」都会卡在一个地方:

同样是大模型,为什么有的教程写 messages,有的写 prompt
为什么有的 Key 放在 Authorization,有的放在 x-api-key

其实你只是撞上了两套不同的接口协议

现在市面上 90% 的模型,调用方式要么遵守 OpenAI 协议,要么遵守 Claude(Anthropic)协议。先搞懂这两套,剩下的基本都能照葫芦画瓢。

难度:⭐⭐⭐ — 需要会发 HTTP 请求、看得懂一小段 Python 或 curl。不用懂模型原理。


先打个比方:协议就是「插头标准」

把大模型想成电器,把你的程序想成插座。

电器能不能通电,不取决于它多贵,而取决于插头形状对不对

  • OpenAI 协议 = 国标两脚插头,普及率最高,几乎家家都兼容。
  • Claude 协议 = 另一种规格的插头,做工讲究、细节不同,需要专门的插孔。

所以你会看到一个现象:很多国产模型(豆包、通义、DeepSeek、Kimi 等)都说自己「兼容 OpenAI 接口」。意思就是——它们把插头做成了国标,你原来的线不用换。

你的程序  ──→  [ 接口协议 ]  ──→  大模型
                 ↑
        OpenAI 标准 / Claude 标准

两套协议,最关键的 4 个区别

不想看长篇的,先记这张表:

对比项 OpenAI 协议 Claude 协议
请求地址 /v1/chat/completions /v1/messages
鉴权方式 Authorization: Bearer <key> x-api-key: <key>
系统提示 放进 messages 里,role: system 单独的 system 字段
max_tokens 可选 必填
版本头 不需要 需要 anthropic-version

下面分开说。


OpenAI 协议:事实上的「通用标准」

最经典的接口叫 Chat Completions,地址是 /v1/chat/completions

它的核心是一个 messages 数组,每条消息有 role(角色)和 content(内容):

curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "你是一个简洁的助手。"},
      {"role": "user", "content": "用一句话介绍长城。"}
    ]
  }'

几个要点:

  • role 有三种system(设定人设)、user(你说的话)、assistant(AI 之前的回答)。
  • 系统提示就是一条 message,role 写 system,放在数组最前面。
  • Key 放 Authorization,前面加 Bearer

返回的内容长这样(截了关键部分):

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "长城是中国古代的军事防御工程。"
      }
    }
  ]
}

取回答就一句话:choices[0].message.content

为什么它最流行? 因为 OpenAI 起步早,大量工具、SDK、教程都按它写。后来者为了省事,干脆「兼容 OpenAI 接口」,于是它成了事实标准。你换一家国产模型,往往只要改 base_urlmodel 两个字段就能跑。


Claude 协议:相似,但有几处一定要改

Anthropic(Claude 的公司)用的是 Messages API,地址是 /v1/messages

骨架很像 OpenAI,但有几个「坑」必须注意:

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4",
    "max_tokens": 1024,
    "system": "你是一个简洁的助手。",
    "messages": [
      {"role": "user", "content": "用一句话介绍长城。"}
    ]
  }'

和 OpenAI 的四个不同

  1. 验证身份的方式不一样:用 x-api-key,不是 Authorization: Bearer
  2. 要带版本号:必须加 anthropic-version 头,否则报错。
  3. 系统提示是独立字段system 单独写在外面,不放进 messages
  4. max_tokens 必填:不写直接报错,OpenAI 里它是可选的。

返回结构也略有差别:

{
  "content": [
    {
      "type": "text",
      "text": "长城是中国古代的军事防御工程。"
    }
  ]
}

取回答是 content[0].text,注意 content 是个数组(为了支持图文混排等多种类型)。


同一段需求,两套写法对照

用 Python 官方 SDK 写「问一句话」,直观感受差异:

OpenAI 版

from openai import OpenAI

client = OpenAI(api_key="你的key")

resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个简洁的助手。"},
        {"role": "user", "content": "用一句话介绍长城。"},
    ],
)
print(resp.choices[0].message.content)

Claude 版

from anthropic import Anthropic

client = Anthropic(api_key="你的key")

resp = client.messages.create(
    model="claude-sonnet-4",
    max_tokens=1024,
    system="你是一个简洁的助手。",
    messages=[
        {"role": "user", "content": "用一句话介绍长城。"},
    ],
)
print(resp.content[0].text)

对照着看,差异就一目了然:system 怎么放、max_tokens 要不要写、取结果取哪个字段。


流式输出:打字机效果怎么来的

你在网页上看到 AI「一个字一个字蹦出来」,靠的是流式(streaming)

  • OpenAI:请求里加 "stream": true,服务器用 SSE(Server-Sent Events)一段段推回来,每段在 choices[0].delta.content 里。
  • Claude:同样加 "stream": true,但事件类型更细,比如 message_startcontent_block_deltamessage_stop,文字增量在 content_block_delta 里。

不想自己处理这些事件?用官方 SDK 就行,它们都封装好了 for chunk in stream 的写法,你只管拼字符串。


实战建议:到底用哪套?

你的情况 建议
接国产模型 / OpenRouter / 本地 Ollama 优先 OpenAI 协议,兼容性最好
直接用 Claude 官方能力 Claude 协议,功能最全
想一套代码切多家 OpenAI 兼容层,改 base_url 即可
已经在用 LangChain 等框架 框架已抹平差异,按它的写法来

一个省心的小技巧:很多平台(火山方舟、OpenRouter、DeepSeek 等)都提供「OpenAI 兼容地址」。你只要把 base_url 换成它给的地址、model 换成它的模型名,原来的 OpenAI 代码几乎不用动。

client = OpenAI(
    api_key="平台给的key",
    base_url="https://你的平台/v1",   # 关键就这一行
)

三个新手最容易踩的坑

坑 1:Claude 不写 max_tokens → 直接 400 报错
坑 2:把 Key 放错头(Claude 用 x-api-key,不是 Bearer)
坑 3:把 system 塞进 Claude 的 messages 里 → 行为不对

记住一句话:OpenAI 把一切塞进 messages,Claude 喜欢把 system 单独拎出来。


小结

记忆点 内容
两大协议 OpenAI(通用标准)、Claude(Anthropic Messages)
最大共性 都用 messages 数组 + role 表达对话
最大差异 验证身份方式、system 放法、max_tokens、版本头
省心做法 优先找「OpenAI 兼容地址」,改 base_url 就能用

搞懂这两套「插头」,你再看任何模型的接入文档,都会有种「原来还是那一套」的踏实感。

想要可直接复制的调用模板?关注 AI技趣星球,回复「接口」获取 OpenAI / Claude 两版示例代码。


技趣星球 · 用技术创造乐趣。本文示例字段以各家官方文档为准。

更多推荐