/v1/chat/completions、/v1/responses、/v1/messages 到底有什么区别?模型不可用很多时候是端点选错了

最近很多人在接 AI API、中转站、OpenAI 兼容接口、Claude API 的时候,会遇到一个很典型的问题:

明明模型列表里有这个模型,但调用的时候提示 model unavailable、endpoint not supported、invalid request body,或者 Claude 模型在 A 工具能用,在 B 工具不能用。

很多人第一反应是:

  • 是不是模型挂了?
  • 是不是 Key 不对?
  • 是不是服务商不支持?
  • 是不是中转站有问题?

但实际排查下来,很大一部分不是模型问题,而是 API 端点选错了。

尤其是这三个端点,最容易混:

/v1/chat/completions
/v1/responses
/v1/messages

它们不是同一个东西,也不是随便换着用的。

一句话总结:

OpenAI 兼容客户端 → /v1/chat/completions
OpenAI Responses API 客户端 → /v1/responses
Anthropic / Claude 原生客户端 → /v1/messages

下面用最实用的方式讲清楚。


先看结论:三个端点怎么选?

端点 属于哪套生态 适合什么场景 请求格式特点
/v1/chat/completions OpenAI 兼容聊天接口 大多数第三方工具、聊天 UI、Cursor 类客户端、LiteLLM、FastGPT、OpenAI SDK 兼容模式 messages: [{role, content}]
/v1/responses OpenAI 新版 Responses API 新版 OpenAI 工具调用、多模态、reasoning、agent 工作流 inputtools、结构化 response item
/v1/messages Anthropic Claude 原生接口 Claude 原生 SDK、Anthropic Messages API 工具 顶层 system + messages,Anthropic schema

如果你不知道该选哪个,优先选 /v1/chat/completions

因为现在绝大多数所谓“OpenAI-compatible API”“自定义 OpenAI Base URL”“OpenAI 兼容中转站”的工具,默认都是走 Chat Completions。


最常见错误:把“模型”和“端点”混在一起

很多人会以为:

我用的是 Claude 模型,那是不是一定要调 /v1/messages

不一定。

如果你是在一个 OpenAI 兼容网关 里调用 Claude 模型,比如工具配置里填的是:

OPENAI_BASE_URL=https://crazyrouter.com/v1

那客户端通常会自动请求:

/v1/chat/completions

这个时候即使模型是 Claude,也可能应该走 OpenAI 兼容格式,而不是 Anthropic 原生 /v1/messages

反过来也一样。

如果一个工具本身是 Anthropic SDK,代码里写死了 Claude Messages API 格式,那你只改模型名、不改端点,也可能还是失败。

记住这个公式:

模型名 + API 端点 + 请求体格式 必须匹配

只要其中一个不匹配,就可能表现为“模型不可用”。


1. /v1/chat/completions:最常用的 OpenAI 兼容聊天接口

这是目前兼容性最广的接口。

典型请求长这样:

curl https://crazyrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $CRAZYROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "用一段话解释 API 端点。"}
    ]
  }'

它的核心字段是:

{
  "model": "模型名",
  "messages": [
    {"role": "user", "content": "用户输入"}
  ]
}

适合这些情况:

  • 工具说自己支持 OpenAI-compatible API;
  • 配置项叫 OPENAI_BASE_URLbase_urlOpenAI Base URL
  • 使用 OpenAI SDK 的兼容模式;
  • 请求体里是 messages 数组;
  • 配置 Cursor、Cherry Studio、Chatbox、FastGPT、LiteLLM、各种聊天 UI;
  • 想用一个 OpenAI 兼容接口调用多个模型。

大多数用户接中转站,默认就该用这个。


2. /v1/responses:OpenAI 新版 Responses API

/v1/responses 是 OpenAI 新一代接口,不只是简单聊天,它更偏向统一处理:

  • 文本输出;
  • 工具调用;
  • 多模态输入;
  • reasoning 输出;
  • 结构化结果;
  • agent 工作流。

典型请求是这样:

curl https://crazyrouter.com/v1/responses \
  -H "Authorization: Bearer $CRAZYROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "input": "解释一下 chat completions 和 responses 的区别。"
  }'

注意,它常用的是:

{
  "model": "模型名",
  "input": "用户输入"
}

而不是传统的:

{
  "messages": []
}

什么时候用 /v1/responses

  • 工具文档明确写了 Responses API;
  • 配置里明确提到 /responses
  • SDK 或工具要求 input 字段;
  • 你需要 OpenAI 新版工具调用、reasoning、多模态 response item;
  • 你确认当前模型和线路支持 Responses API。

如果你的工具只是普通 OpenAI 兼容聊天工具,不要强行换成 /v1/responses


3. /v1/messages:Anthropic Claude 原生 Messages API

/v1/messages 是 Claude / Anthropic 原生风格的接口。

典型请求:

curl https://crazyrouter.com/v1/messages \
  -H "Authorization: Bearer $CRAZYROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "system": "You are a helpful assistant.",
    "messages": [
      {"role": "user", "content": "解释 Claude Messages API。"}
    ]
  }'

它和 OpenAI Chat Completions 最大区别是:

  • system 通常是顶层字段;
  • messages 的内容结构是 Anthropic 风格;
  • 工具调用、content block、图片输入等格式和 OpenAI 不完全一样。

什么时候用 /v1/messages

  • 你使用的是 Anthropic SDK;
  • 工具文档明确写 Claude Messages API;
  • 请求体里有顶层 system
  • 工具要求 Anthropic 原生 schema;
  • 你不是在走 OpenAI-compatible 模式,而是在走 Claude-native 模式。

重点:

不要因为模型名字里有 Claude,就一定用 /v1/messages

如果客户端是 OpenAI 兼容客户端,Claude 模型也可能应该通过 /v1/chat/completions 调用。


Base URL 和完整 endpoint 不要混

还有一个特别常见的坑:

很多工具让你填的是 Base URL,不是完整 endpoint。

如果工具配置项叫:

Base URL
OPENAI_BASE_URL
base_url
OpenAI API Base

通常应该填:

https://crazyrouter.com/v1

而不是:

https://crazyrouter.com/v1/chat/completions

因为 SDK 会自己在后面拼:

/chat/completions

如果你把完整 endpoint 填进 Base URL,最后可能变成:

https://crazyrouter.com/v1/chat/completions/chat/completions

这种就会直接 404 或报不支持。

简单规则:

配置项叫 Base URL → 通常填到 /v1 为止
配置项叫 Endpoint / Full URL → 按工具要求填完整路径

常见错误对照表

错误做法 可能现象 正确处理
把 Chat Completions 的 messages 请求发到 /v1/responses invalid request body、字段不识别 改用 /v1/chat/completions,或把 body 改成 Responses API 格式
把 Anthropic 的 system + messages 请求发到 /v1/chat/completions schema mismatch、模型不可用 改用 /v1/messages,或转换成 OpenAI messages 格式
OpenAI SDK 里硬填 /v1/messages SDK 拼路径/解析响应失败 OpenAI 兼容模式用 /v1 + Chat Completions
Base URL 少了 /v1 404、unknown route https://crazyrouter.com/v1
Base URL 填成 /v1/chat/completions 路径重复 Base URL 只填到 /v1
API endpoint 后面加 UTM 认证或路由异常 UTM 只能加在人点击的网页链接上,不能加 API endpoint

Crazyrouter 推荐配置

如果你是在普通 OpenAI 兼容工具里配置 Crazyrouter,推荐这样填:

API Key: 你的 Crazyrouter API Key
Base URL: https://crazyrouter.com/v1
Model: 从模型列表里选择模型名

国内/内地网络环境如果 global endpoint 不稳定,可以用:

Base URL: https://cn.crazyrouter.com/v1

注意:API endpoint 不要加 UTM。

网页链接可以加 UTM,比如:

https://crazyrouter.com/models?utm_source=csdn&utm_medium=article&utm_campaign=api_endpoints

但 API 地址不能这样写:

https://api-endpoint.example.invalid/v1?utm_source=csdn

出现“模型不可用”时怎么排查?

建议按这个顺序查:

1. 模型名是否写对

大小写、版本号、短横线都要一致。

比如:

gpt-5.5
claude-sonnet-4-6

不要凭感觉改模型名。

2. 工具到底是 OpenAI 兼容模式,还是 Anthropic 原生模式

如果工具让你填 OPENAI_BASE_URL,大概率是 OpenAI 兼容模式。

如果工具让你填 Anthropic API Key,或者文档里写 Claude Messages API,大概率是 Anthropic 原生模式。

3. endpoint 是否匹配

OpenAI 兼容 → /v1/chat/completions
Responses API → /v1/responses
Claude 原生 → /v1/messages

4. 请求体格式是否匹配

Chat Completions:

{
  "model": "xxx",
  "messages": []
}

Responses:

{
  "model": "xxx",
  "input": "xxx"
}

Anthropic Messages:

{
  "model": "xxx",
  "max_tokens": 1024,
  "system": "xxx",
  "messages": []
}

5. Base URL 是否只填到 /v1

大多数 SDK 配置里,Base URL 应该是:

https://crazyrouter.com/v1

而不是完整 endpoint。


最后总结

如果你只记一张表,就记这个:

你的工具类型 应该使用
OpenAI-compatible API 工具 /v1/chat/completions
OpenAI Responses API 工具 /v1/responses
Anthropic / Claude 原生工具 /v1/messages

如果模型明明存在,却提示不可用,不要只盯着模型名。

先检查:

模型名 + endpoint + 请求 schema

这三者是否一致。

很多所谓“模型不可用”的问题,本质上只是端点选错了。


原文参考:

https://crazyrouter.com/zh/blog/chat-completions-vs-responses-vs-messages-api-zh?utm_source=csdn&utm_medium=article&utm_campaign=api_endpoints

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐