调模型的两套「插头」:OpenAI 和 Claude 接口协议讲清楚
调模型的两套「插头」: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_url和model两个字段就能跑。
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 的四个不同:
- 验证身份的方式不一样:用
x-api-key,不是Authorization: Bearer。 - 要带版本号:必须加
anthropic-version头,否则报错。 - 系统提示是独立字段:
system单独写在外面,不放进messages。 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_start、content_block_delta、message_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 两版示例代码。
技趣星球 · 用技术创造乐趣。本文示例字段以各家官方文档为准。
更多推荐



所有评论(0)