乐于分享
好东西不私藏

你每天调的 AI 接口,后缀到底是什么

你每天调的 AI 接口,后缀到底是什么

调用大模型 API,URL 里总带着这些东西:

/v1/chat/completions
/v1/messages
/v1/responses
/v1/embeddings
/v1/models
/v1beta/models/{model}:generateContent

很多开发者把它们当路径名,换个 base_url 就完事了。但这些后缀其实是不同的接口协议,规定了你怎么发请求、怎么收响应、错误怎么报、流式怎么收。同一模型可以走不同协议,同一协议可以被不同厂商支持,兼容程度各不相同。

下面按协议逐个拆解。


/v1 不是模型版本

/v1 管的是接口规范,不是模型能力。

常见的误解:/v1 = 第一代模型,/v2 = 第二代。实际上 /v1 约束的是请求字段叫什么、响应字段叫什么、错误格式是什么、流式事件怎么发、工具调用怎么表达、鉴权方式是什么。模型版本是 gpt-5.5、claude-sonnet-4-8 这样的独立概念。

厂商通常不会在同一个稳定 API 版本下修改核心结构。要改就新开 /v2,或者新增一套接口(比如 /v1/responses),否则存量应用全得崩。


/v1/completions:已经淘汰的文本续写

早期大模型是补全模式,给一段文字,接着往下写:

POST /v1/completions
{

  "model"
: "chatgpt",
  "prompt"
: "Translate this into Chinese: Hello"
}

模型没有角色概念,不区分谁是用户、谁是助手。想做对话得自己拼字符串:

System: You are a helpful assistant.
User: Hello.
Assistant: Hi, how can I help?
User: Explain API suffixes.
Assistant:

问题在于:模型得从文本里猜各部分的角色归属,多模态输入和工具调用也没法结构化表达。这个接口已经被更结构化的协议取代了。


/v1/chat/completions:目前兼容性最好的协议

过去几年的事实标准。OpenAI、Mistral、xAI、DeepSeek、Groq、OpenRouter 都支持。

POST /v1/chat/completions
{

  "model"
: "gpt-5.5",
  "messages"
: [
    {
 "role": "system", "content": "You are a concise technical explainer." },
    {
 "role": "user", "content": "Explain /v1/chat/completions." }
  ]

}

核心变化是 messages 数组。每条消息带 role(system / user / assistant / tool),上下文从一坨字符串变成了有结构的消息对象。

切换厂商时通常只改三样:

base_url
api_key
model

业务代码基本不用动。

"兼容 OpenAI" 不等于全部兼容。

基础部分(model、messages、temperature、stream)大多没问题,但高级功能各家支持程度不同:

Level 1:文本聊天
Level 2:流式输出
Level 3:工具调用
Level 4:结构化输出
Level 5:多模态输入
Level 6:复杂 agent 事件流

接入前确认目标厂商支持到哪一层。


/v1/messages:Claude 的消息协议

Anthropic 走了自己的路。接口路径是 /v1/messages,细节差别不小。

两个最明显的差异:

system 位置不同。 OpenAI 把 system 放在 messages 数组里当一个 role,Claude 把它提到顶层当独立参数:

{
  "system"
: "You are helpful.",
  "messages"
: [{ "role": "user", "content": "Hello." }]
}

响应结构不同。 OpenAI 的文本在 choices[0].message.content,Claude 在 content[0].text。Claude 的 content 是 block 结构,文本、图片、工具调用各自是不同类型的 block。

两者不能直接通用,需要做协议转换。


/v1/responses:OpenAI 的新接口

/v1/chat/completions 名字里带着 chat 和 completions 两个历史包袱。设计初衷是"给聊天历史,补全下一条回复"。但当前模型要做的事远不止聊天:搜网页、读文件、调函数、跑代码、处理图片音频,全往里塞的话结构越来越拧巴。

Responses API 把输入输出都抽象化了:

POST /v1/responses
{

  "model"
: "gpt-5.5",
  "input"
: [
    {

      "role"
: "user",
      "content"
: [{ "type": "input_text", "text": "Search and summarize." }]
    }

  ]
,
  "tools"
: [{ "type": "web_search" }]
}

输出不再是一条 assistant message,而是包含多个 output item 的 response object,可以承载文本、工具调用和中间结果。

简单聊天场景继续用 /v1/chat/completions 没问题,生态兼容性最好。做 agent 相关的东西,Responses API 值得优先看看。


models/{model}:generateContent:Google 的风格

POST /v1beta/models/{model}:generateContent

这是 Google API 的标准写法:对某个模型资源执行某个方法。/v1beta 是预览版(可能变化),/v1 是稳定版。

数据结构也不同:

OpenAI:      messages -> role + content
Anthropic:   messages -> role + content blocks
Gemini:      contents -> role + parts

三家三种写法,解析代码各写各的。


/v1/embeddings:文本向量化

POST /v1/embeddings
{

  "model"
: "text-embedding-3-large",
  "input"
: "AI API suffixes"
}

返回一组浮点数向量。语义搜索、RAG 检索、相似度匹配、聚类、推荐都靠它。

RAG 的典型流程:embeddings 把文档切片转成向量存入向量库,用户提问时问题也转成向量检索相似片段,片段塞进聊天接口生成答案。Embeddings 负责找资料,聊天接口负责写答案。


/v1/models:模型列表

GET /v1/models
GET /v1/models/{model}

返回可用模型列表、模型 ID 和消耗信息。调试 404 model_not_found 时第一个查的就是它。


响应结构对比

三家的返回格式不同,解析代码不能混用:

OpenAI Chat Completions:
  text = response.choices[0].message.content

Anthropic Messages:
  text = response.content[0].text

OpenAI Responses:
  text = response.output_text

流式输出格式也不统一。OpenAI 用 data: {"choices":[{"delta":...}]} + data: [DONE],Claude 用 event: message_start / content_block_delta / message_stop 事件流,Responses API 也有自己的事件类型。


/openai、/api 前缀是什么

第三方平台为了兼容 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、/api 表示"这里提供兼容 OpenAI 协议的入口"。开发者继续用 OpenAI SDK,改个 base_url 就行。


Base URL 和 Endpoint 的坑

填 Base URL 时填到 /v1 就停:

✅ https://api.openai.com/v1
✅ https://openrouter.ai/api/v1

别填完整路径。SDK 会自动拼 /chat/completions,填多了就变成:

❌ /v1/chat/completions/chat/completions → 404

填 Endpoint / Full URL 时才需要完整路径。


工具调用

普通聊天只需输出文本,agent 场景需要模型调工具。三家的表达方式各不相同:

Chat Completions:  tools / tool_calls / tool role
Claude Messages:   工具调用作为 content block
Responses API:     工具调用作为 response output item

做复杂 agent 需要考虑:并行调用、流式调用、服务端状态、内置工具、MCP、结构化输出、错误恢复。这些各家差异不小。


怎么选

普通聊天          → /v1/chat/completions
agent + 现代能力  → /v1/responses
接 Claude         → /v1/messages
接 Gemini         → /v1/models/{m}:generateContent
做 RAG            → /embeddings + 任一聊天接口
接第三方平台      → 先确认它兼容哪种协议

厂商路径速查

OpenAI        /v1/chat/completions            传统聊天
OpenAI        /v1/responses                   新一代 agent
OpenAI        /v1/embeddings                  向量化
Anthropic     /v1/messages                    Claude 原生
Google        /v1/models/{m}:generateContent  Gemini 稳定
Mistral       /v1/chat/completions            OpenAI 风格
xAI           /v1/chat/completions            OpenAI 风格
DeepSeek      /chat/completions               兼容 OpenAI
Groq          /openai/v1/chat/completions     高速推理
OpenRouter    /api/v1/chat/completions        多模型聚合

相关学习资料