深度解析 AI API 里的 /v1/messages、/v1/chat/completions、/v1/responses:这些后缀到底是什么,为什么要这样设计?
我们经常看到下面这种样子的 URL 后缀
/v1/chat/completions
/v1/responses
/v1/messages
/v1/embeddings
/v1/models
/v1beta/models/{model}:generateContent
/openai/v1/chat/completions
/api/v1/chat/completions总的来说,这些是模型厂商给模型能力规定的一个接口协议。后缀规定了某一模型用哪种具体的协议与它进行沟通。
例如:
https://api.openai.com/v1/chat/completions
└────────────┬────────────┘
API Base URL
└─ /v1 API 协议版本
└─ /chat 聊天
└─ /completions 生成聊天补全这里的 /v1 约束了请求字段、响应字段、错误格式、流式事件格式、工具调用格式等接口规范。
同一个模型也可能支持不同接口协议。比如某个 OpenAI 模型可能既能通过 /v1/chat/completions 调用,也能通过 /v1/responses 调用。
反过来,同一个 /v1/chat/completions 协议也可能被 OpenAI、Mistral、xAI、DeepSeek、Groq、OpenRouter等不同平台支持,但它们的兼容程度并不完全一致。
所以在这里,我打算从协议的设计、GPT 规范的演进,以及工程和主流厂商的不同角度,基于我的理解,解释 API 这个路径到底是什么,以及为什么我们这么写这个东西。
总览一下
/completions 文本续写
/chat/completions 聊天回复
/messages 消息处理
/responses 多模态、多工具、多事件的响应
generateContent 内容生成资源上的一个方法
/embeddings 向量化
/models 可查询的资源从工程角度看,这些接口协议本质上规定了一套请求和响应的数据结构,以及围绕它们的鉴权、错误、流式输出和工具调用规范。
/v1/chat/completions 的核心是 messages 数组和 choices 返回值。
/v1/messages 的核心是 Anthropic 风格的 message 对象、content block、stop_reason。
/v1/responses 的核心是更通用的 input、output、items、tools、stateful response。
Gemini 的 models/{model}:generateContent 则是 Google API 风格:对某个模型资源执行 generateContent 方法。
API 的本质上就是确认调用的平台支持哪一种规范,然后依照这个规范给平台发送你的请求,并收到对应的回复。
/v1/completions
早期的大语言模型是文本补全类型,用户传入一段 prompt,然后让模型继续补全。
一个典型的接口和请求可以如下表示。
POST /v1/completions{
"model": "chatgpt",
"prompt": "Translate this sentence into Chinese: Hello, how are you?"
}模型什么都不知道,它的作用就是看到一段字符串,然后预测后面可能的文本。它并不像现在的模型一样知道什么是系统消息,什么是用户发出的,什么是助手消息。
如果我们要将其作为对话,那么我们需要自行拼接文本,也就是下面这个表示。
System: You are a helpful assistant.
User: Hello.
Assistant: Hi, how can I help?
User: Explain API suffixes.
Assistant:这里有一个弊端,就是模型需要通过输入的文本来猜测哪一部分是系统发出的,哪一部分是用户的输入,这时就给了破限更多的机会。还有一个问题就是,你对话的历史不能结构化的输出。所有的上下文都在这整个输入中。当遇见了工具的调用,或者说多模态(比如视频、图片、声音的输入)时,就很难优雅地进行沟通。
为了将文本续写功能发展成一种能进行操作和对话的助手。/completions 逐渐变成旧式接口。
官方资源:
/v1/chat/completions
/v1/chat/completions 是过去几年最重要、最广泛兼容的 LLM API 协议。
接口和请求如下:
POST /v1/chat/completions{
"model": "gpt-5.5",
"messages": [
{
"role": "system",
"content": "You are a concise technical explainer."
},
{
"role": "user",
"content": "Explain what /v1/chat/completions means."
}
]
}这时接口,从一个整体的 prompt 输入变成了一个可以结构化进行处理的消息数组。
1. messages 是 Chat Completions 的核心
messages 通常包含这些角色:
system 系统指令,定义模型行为边界
user 用户输入
assistant 模型之前的回复
tool 工具调用结果这让对话变得结构化。
也避免了我们需要手动提示 AI 下面这些内容。
User:
Assistant:
System:我们可以把每条消息作为对象传进去。
上下文从字符串变成了一组具有角色和顺序的一串消息组。
2. 兼容 /v1/chat/completions
/v1/chat/completions 算是一种行业上通用的协议。
OpenAI: /v1/chat/completions
Mistral: /v1/chat/completions
xAI: /v1/chat/completions
DeepSeek: /chat/completions 或 OpenAI 兼容路径
Groq: /openai/v1/chat/completions
OpenRouter: /api/v1/chat/completions
Together AI: /v1/chat/completions由于这个基础设施已经很完善了,不管是 SDK 还是 AI 的各种 IDE,前端的一些聊天软件还有一些 RAG 框架都支持了这个 OpenAI 的 Chat Completions,所以我们如果直接用这个基础设施的话,我们就只需要改 Base URL、API key 和模型就好了,也就是下面这些。
base_url
api_key
model例如原来调用 OpenAI:
from openai import OpenAI
client = OpenAI(
api_key="OPENAI_API_KEY",
base_url="https://api.openai.com/v1"
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{"role": "user", "content": "Hello"}
]
)切换到某个 OpenAI-compatible 服务时,常常只需要改成:
client = OpenAI(
api_key="OTHER_PROVIDER_API_KEY",
base_url="https://api.other-provider.com/v1"
)但是这里的兼容并不意味着完全的兼容。只是在一些方面,用户可以比较轻松地使用而已。
3. OpenAI-compatible 的兼容程度有层级
兼容 OpenAI API,通常至少意味着它支持:
POST /v1/chat/completions
model
messages
temperature
max_tokens 或 max_completion_tokens
stream
choices[0].message.content但不一定完整支持:
tools
tool_choice
parallel_tool_calls
response_format
JSON schema strict mode
vision input
audio input/output
logprobs
reasoning tokens
cached tokens
streaming tool-call delta
structured outputs所以兼容可以分层理解:
Level 1:普通文本聊天兼容
Level 2:支持流式输出
Level 3:支持函数调用 / 工具调用
Level 4:支持结构化输出
Level 5:支持多模态输入
Level 6:支持复杂 agent 事件流和状态管理官方资源:
- OpenAI Chat Completions
- Mistral Chat API
- xAI Chat Completions
- DeepSeek Chat Completion
- Groq OpenAI Compatibility
- OpenRouter Chat Completion
/v1/messages,Claude 的消息协议
Anthropic Claude 的核心接口是下面这个,各个模型厂商都希望推出自己的一些协议,让别人来兼容它。
POST /v1/messages{
"model": "claude-sonnet-4-8",
"max_tokens": 1024,
"system": "You are a careful technical explainer.",
"messages": [
{
"role": "user",
"content": "Explain /v1/messages."
}
]
}看起来像,但是不是一个东西。
1. Claude 的 system 通常是顶层字段
OpenAI Chat Completions 常见写法:
{
"messages": [
{
"role": "system",
"content": "You are helpful."
},
{
"role": "user",
"content": "Hello."
}
]
}Anthropic Messages 常见写法:
{
"system": "You are helpful.",
"messages": [
{
"role": "user",
"content": "Hello."
}
]
}Claude 把系统指令作为顶层参数,而 OpenAI 则是将其设为了普通消息数组中的一个 role。
2. Claude 的 content 更强调 block 结构
Claude Messages API 的内容可以是字符串,也可以是 content blocks。例如文本、图片、工具调用结果等都可以作为不同 block 表达。
响应结构也不同。
OpenAI Chat Completions 常见解析路径是:
choices[0].message.contentClaude Messages 常见解析路径更接近:
content[0].text响应里还会有:
type
role
content
stop_reason
usage.input_tokens
usage.output_tokens所以 OpenAI 和 Claude 的接口不能通用,我们必须想一个办法把它进行转换一下才可以。
官方资源:
/v1/responses,统一响应对象
OpenAI 的 /v1/responses 则给出了更现代化的统一接口。
从
POST /v1/responses{
"model": "gpt-5.5",
"input": "Explain why /v1/responses exists."
}转变为更结构化的请求:
{
"model": "gpt-5.5",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Search the web and summarize the result."
}
]
}
],
"tools": [
{
"type": "web_search"
}
]
}1. 为什么需要 Responses API
/v1/chat/completions 的名字里有两个历史词:
chat
completions作为原来的开发者,他们认为用户给一段聊天历史,然后 AI 来补全下一条信息。但是现在的模型并不仅仅只是聊天了,它还有更多的事情需要做。
读取图片
处理音频
查询文件
搜索网页
调用函数
使用代码解释器
调用 MCP 工具
维护服务端上下文
输出结构化 JSON
返回推理摘要
产生多个中间事件如果我们把这些能力全部塞进 chat.completion 这个对象,会越来越别扭。
OpenAI 在 Responses API 中设计了一套更通用的数据结构,用于包含各种文本工具调用、工具返回的结果以及一些状态信息等,让这个内容更加抽象和宽广。
2. Chat Completions 与 Responses 的核心差异
可以这样理解:
Chat Completions:
输入是一组 messages。
输出通常是一条 assistant message。
Responses:
输入是 input / items。
输出是 response object,里面可以有多个 output item。Chat Completions 更像:
用户:这是聊天记录
模型:这是下一条回复Responses 更像:
用户:这是任务、上下文和可用工具
模型:这是我执行后的完整响应,包括文本、工具调用和中间结果这更适合 agent 场景。
3. 为什么新项目更应该关注 /v1/responses
如果只是做简单聊天,/v1/chat/completions 仍然非常实用,因为生态兼容性最好。
但如果涉及以下能力:
工具调用
网页搜索
文件搜索
代码解释器
多模态输入
复杂流式事件
服务端状态
agent workflow那么更应该优先研究 Responses API。
官方资源:
Google Gemini models/{model}:generateContent
Gemini 的 REST API 路径经常长这样:
POST /v1beta/models/{model}:generateContent或者:
POST /v1/models/{model}:generateContent这和 OpenAI、Anthropic 的命名风格明显不同。
拆开看:
/v1beta
API 版本
/models/{model}
模型资源
:generateContent
对这个模型资源执行 generateContent 方法这里反映的是对某个模型的资源执行内容的生成方法,而不是访问某一个服务。
1. v1 和 v1beta 的区别
文档明确区分:
v1 稳定 API 版本
v1beta Beta / 预览能力,可能变化2. Gemini 的数据结构也不同
Gemini 通常使用 contents、parts 这类结构,而不是 OpenAI 风格的 messages。
概念上可以理解为:
OpenAI Chat Completions:
messages -> role + content
Anthropic Messages:
messages -> role + content blocks
Gemini:
contents -> role + parts官方资源:
/v1/embeddings 向量接口
/v1/embeddings 经常和聊天 API 一起出现
POST /v1/embeddings{
"model": "text-embedding-3-large",
"input": "AI API suffixes explained"
}这个会将文本生成一组浮点数向量进行返回。
{
"data": [
{
"embedding": [0.0123, -0.0456, 0.0789]
}
]
}Embedding 的作用是把文本变成向量。它常用于:
语义搜索
RAG 检索
相似度匹配
聚类
推荐
去重
分类例如做 RAG 时,典型流程是:
1. 用 /v1/embeddings 把文档切片转成向量
2. 存入向量数据库
3. 用户提问时,把问题也转成向量
4. 检索最相似的文档片段
5. 把片段塞进 /v1/chat/completions 或 /v1/responses 生成答案embeddings 负责找资料
官方资源:
/v1/models 模型列表
/v1/models 通常用于列出可用模型或查询模型详情。
GET /v1/models
GET /v1/models/{model}这个就很简单,他告诉调用的软件或者程序有哪些模型,哪个模型是不是存在,模型的 ID 是什么,还有它的一些消耗是怎么样的。
列出账号可用模型
检查模型名称是否正确
动态展示模型选择列表
调试 404 model_not_found 问题官方资源:
为什么一定要有 /v1
很多人会误以为:
/v1 = 第一代模型
/v2 = 第二代模型这是错的。
/v1 是 API 版本,不是模型版本。
API 版本约束的是:
请求字段叫什么
响应字段叫什么
错误格式是什么
流式事件怎么发
工具调用怎么表达
鉴权方式是什么
文件上传格式是什么模型版本约束的是:
模型能力
模型大小
上下文长度
推理能力
价格
速度
多模态能力例如:
API 版本:/v1
模型版本:gpt-5.5、claude-sonnet-4-8、gemini-3.5-pro
SDK 版本:openai Python SDK 1.x、2.x
协议风格:OpenAI-compatible、Anthropic-compatible、Gemini-compatible这四个不是一回事。
API 的版本只是为了让后面的新规范兼容前面的规范,而不破坏之前的应用使用。
{
"choices": [
{
"message": {
"content": "Hello"
}
}
]
}如果明天厂商直接改成:
{
"output": [
{
"content": [
{
"text": "Hello"
}
]
}
]
}就会出问题。
所以厂商通常不会随便改变同一个稳定 API 版本的核心结构。要么新开一个版本,比如 /v2,要么新增一套接口,比如 /v1/responses。
/openai、/api、/compatible-mode
很多第三方平台不是 OpenAI,但为了兼容 OpenAI SDK,会设计类似路径:
https://api.groq.com/openai/v1/chat/completions
https://openrouter.ai/api/v1/chat/completions
https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions这些路径里的 /openai、/compatible-mode、/api 通常是平台自己的命名空间。
它们表达的是:
这不是 OpenAI 官方服务
但这里提供一套接近 OpenAI 协议的兼容入口例如 Groq 的 base URL 是:
https://api.groq.com/openai/v1OpenRouter 的 chat completions 路径是:
https://openrouter.ai/api/v1/chat/completions这类平台一般希望开发者继续使用 OpenAI SDK:
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="OPENROUTER_API_KEY"
)然后再调用:
client.chat.completions.create(...)SDK 内部会把 /chat/completions 拼到 base URL 后面。
Base URL 和 Endpoint
1. 如果软件让你填 Base URL
通常应该填到 /v1 为止:
https://api.openai.com/v1
https://api.groq.com/openai/v1
https://openrouter.ai/api/v1不要填完整的:
https://api.openai.com/v1/chat/completions因为 SDK 会自动拼接 /chat/completions。
如果你把完整 endpoint 填进 base_url,实际请求可能变成:
https://api.openai.com/v1/chat/completions/chat/completions然后报 404。
2. 如果软件让你填 Endpoint / Full URL
那就需要填完整路径:
https://api.openai.com/v1/chat/completions3. 判断配置项的经验规则
Base URL / API Base / OpenAI Base URL:
填到 /v1,一般不要带 /chat/completions。
Endpoint / Full URL / Request URL:
填完整路径。
Provider:
选择协议类型,例如 OpenAI、Anthropic、Gemini。
Model:
填模型 ID,不要填 URL。不同接口的响应结构不同,解析代码不能混用
1. OpenAI Chat Completions 常见响应
{
"id": "chatcmpl_xxx",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 5,
"total_tokens": 15
}
}常见解析路径:
text = response.choices[0].message.content2. Anthropic Messages 常见响应
{
"id": "msg_xxx",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello"
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 10,
"output_tokens": 5
}
}常见解析路径:
text = response.content[0].text3. OpenAI Responses 常见响应
{
"id": "resp_xxx",
"object": "response",
"output": [
{
"type": "message",
"content": [
{
"type": "output_text",
"text": "Hello"
}
]
}
]
}常见解析路径取决于 SDK,可能是:
text = response.output_text或者手动遍历:
for item in response.output:
...流式输出也不是统一格式
很多接口都支持:
{
"stream": true
}但流式事件格式并不相同。
OpenAI Chat Completions 通常是:
data: {"choices":[{"delta":{"content":"Hel"}}]}
data: {"choices":[{"delta":{"content":"lo"}}]}
data: [DONE]Anthropic Messages 可能是:
event: message_start
event: content_block_start
event: content_block_delta
event: content_block_stop
event: message_stopResponses API 也有自己的事件类型。
工具调用
普通聊天只需要输出文本,但 agent 应用需要模型调用工具。
例如用户问:
查一下今天武汉天气,再帮我决定要不要带伞。模型可能要:
1. 判断需要天气工具
2. 生成 tool call
3. 工具返回天气数据
4. 模型读取工具结果
5. 生成最终建议在 Chat Completions 里,工具调用通常通过 tools、tool_calls、tool role 表达。
在 Claude Messages 里,工具使用是 content block 的一部分。
在 Responses API 里,工具调用和工具结果更像 response item / output item 的一部分,更适合复杂事件流。
如果你要构建复杂 agent,我们需要考虑到:
工具调用格式
是否支持并行工具调用
是否支持流式工具调用
是否支持服务端状态
是否支持内置工具
是否支持 MCP
是否支持结构化输出
是否支持错误恢复主流 AI 厂商接口路径对照表
| 厂商 / 平台 | 常见接口路径 | 协议风格 | 主要用途 |
|---|---|---|---|
| OpenAI | /v1/responses |
OpenAI 新一代统一响应协议 | 文本、多模态、工具、agent、新项目优先关注 |
| OpenAI | /v1/chat/completions |
OpenAI Chat Completions | 传统聊天、兼容生态、普通对话 |
| OpenAI | /v1/embeddings |
Embeddings | 文本向量化、RAG、搜索 |
| OpenAI | /v1/models |
Models | 查询模型列表 |
| Anthropic Claude | /v1/messages |
Anthropic Messages | Claude 原生对话、工具、多模态 |
| Google Gemini | /v1/models/{model}:generateContent |
Google generateContent | Gemini 稳定接口 |
| Google Gemini | /v1beta/models/{model}:generateContent |
Google beta generateContent | Gemini 预览能力 |
| Mistral | /v1/chat/completions |
OpenAI-like Chat Completions | 聊天、工具调用、结构化输出 |
| xAI | /v1/chat/completions |
OpenAI-like Chat Completions | Grok 文本 / 图像理解聊天 |
| DeepSeek | /chat/completions 或兼容 OpenAI 路径 |
OpenAI-like Chat Completions | DeepSeek 对话模型 |
| Groq | /openai/v1/chat/completions |
OpenAI-compatible | 高速推理,复用 OpenAI SDK |
| OpenRouter | /api/v1/chat/completions |
OpenAI-compatible aggregator | 多模型聚合路由 |
如何选择该用哪个接口
可以按场景判断。
1. 只是普通聊天
优先选:
/v1/chat/completions原因是生态最成熟,SDK、代理、网关、前端工具兼容最好。
2. 新项目接 OpenAI,并且需要现代能力
优先研究:
/v1/responses尤其是涉及:
工具调用
文件搜索
网页搜索
多模态
结构化输出
agent workflow
服务端状态3. 接 Claude 官方能力
用:
/v1/messages不要强行把 Claude 当成 OpenAI Chat Completions。
4. 接 Gemini
用:
/v1/models/{model}:generateContent或者根据需要使用:
/v1beta/models/{model}:generateContent稳定项目优先 v1,实验功能再考虑 v1beta。
5. 做 RAG / 向量搜索
需要组合:
/v1/embeddings
+
/v1/chat/completions 或 /v1/responses 或 /v1/messagesEmbedding 负责检索,聊天接口负责生成答案。
6. 接第三方聚合服务
先确认它兼容哪种协议:
OpenAI-compatible
Anthropic-compatible
Gemini-compatible然后再选择对应 SDK 和路径。
具体官方资源链接整理
OpenAI
- OpenAI Responses API
- OpenAI Chat Completions API
- OpenAI Chat Completions / Responses 迁移指南
- OpenAI Embeddings Guide
- OpenAI Embeddings API
- OpenAI Models API