API 参考
协议转换兼容性
一个模型能用哪些接口、NoviaHub 如何在 OpenAI / Anthropic / Gemini 协议之间自动转换,以及转换时会丢失哪些信息。
不同厂商的模型原本说的是不同的「语言」:Claude 用 Anthropic Messages 协议,Gemini 用 Gemini 协议,其他很多模型用 OpenAI 协议。NoviaHub 会在中间做翻译:你用哪种协议发请求,它就把请求转成模型能理解的格式,再把回复转回你用的格式。
这样你可以用同一套代码调用不同厂商的模型。但翻译不是万能的,下面说明哪些组合能用、哪些信息会在转换中丢失。
先看模型的端点标签
Section titled “先看模型的端点标签”在模型&价格页面打开一个模型,可以看到它的端点标签。标签表示「这个模型可以用哪些接口调用」:
| 标签 | 对应接口 |
|---|---|
| Chat | POST /v1/chat/completions |
| Response | POST /v1/responses |
openai-response-compact |
POST /v1/responses/compact |
openai-alpha-search |
POST /v1/alpha/search |
| Anthropic | POST /v1/messages |
| Gemini | POST /v1beta/models/{model}:generateContent |
| 图片 | POST /v1/images/generations |
同样的信息也能从 GET /v1/models 返回的 supported_endpoint_types 字段里查到。
规则很简单:只用标签里列出的接口。 标签是按模型背后的服务类型固定生成的,列出的每一种都有对应的实现。标签以外的组合,有的也能用(例如本地测试中,用 /v1/responses 调用只标了 Anthropic、Chat 的 Claude 模型可以成功),但我们不保证,也可能随时变化。
实测过的转换组合
Section titled “实测过的转换组合”下表是在本地测试环境中,用与线上相同版本的 NoviaHub、配合模拟的上游服务实测的结果,全部返回 200,且响应格式与你调用的接口一致:
| 你调用的接口 | 模型类型 | 结果 |
|---|---|---|
Chat(/v1/chat/completions) |
Claude 模型 | 成功,返回 Chat 格式 |
| Chat | Gemini 模型 | 成功,返回 Chat 格式 |
Anthropic(/v1/messages) |
OpenAI 协议的模型(如 deepseek-v4-flash) | 成功,返回 Anthropic 格式,流式也可以 |
| Anthropic | Gemini 模型 | 成功,返回 Anthropic 格式 |
Gemini(/v1beta/...:generateContent) |
OpenAI 协议的模型 | 成功,返回 Gemini 格式 |
Response(/v1/responses) |
Claude 模型 | 成功,返回 Responses 格式(见上文,不在标签内) |
转换时会丢失或改变的内容
Section titled “转换时会丢失或改变的内容”响应里会多出一些字段
Section titled “响应里会多出一些字段”经过转换的响应,usage 里除了该协议的标准字段,还可能多出 billing_usage、usage_semantic、usage_source、claude_cache_creation_5_m_tokens 等字段。这些是网关内部记账用的,可以直接忽略。
Claude 的思考签名
Section titled “Claude 的思考签名”- 用 Chat 接口调用 Claude 模型时,模型的思考内容会放在
reasoning_content里返回,但 Claude 思考块自带的签名(signature)不会保留。 - 反过来,用
/v1/messages调用非 Claude 模型时,返回的thinking块没有签名。
如果你的程序需要把带签名的思考块原样传回给 Claude(例如同时使用扩展思考和工具调用的多轮对话),请直接用 /v1/messages 调用 Claude 模型。
用 /v1/messages 调用非 Claude 模型
Section titled “用 /v1/messages 调用非 Claude 模型”system如果写成数组(多个文本块),会被合并成一段文字,块上的cache_control会丢失。- 所有工具都会按函数工具(function)处理。
- 图片请用 base64 方式传入(
source.type为base64)。
用 Chat 接口调用 Claude 模型
Section titled “用 Chat 接口调用 Claude 模型”- Anthropic 协议要求必须有
max_tokens。你没传时,网关会自动补一个默认值(程序默认 8192,平台可调整)。想控制输出长度,请自己传max_tokens或max_completion_tokens。 stop会转成stop_sequences,developer角色的消息会并入system,web_search_options会转成 Claude 的网页搜索工具。
流式响应里的 token 数
Section titled “流式响应里的 token 数”用 /v1/messages 流式调用非 Claude 模型时,开头 message_start 事件里的 input_tokens 是网关的估算值,以结尾 message_delta 事件里的 usage 为准。
- 写新代码时,优先用模型标签里排在前面的那种协议,一般就是模型厂商自己的协议,能用到的功能最全。
- 需要用一套代码调多家模型时,用 Chat 接口最省事,几乎所有模型都标了 Chat。
- 用到思考、缓存、工具调用等高级功能时,先在小请求上确认效果,再正式使用。