模型能力与兼容性
LYRouter 用同一个地址提供 Chat Completions、Anthropic Messages 和 Responses 三种对话接口,以及图像、视频、语音等接口;一次调用能否成功、参数是否生效,取决于所选模型和实际服务它的通道。网关会在 Chat Completions 与 Anthropic Messages 之间自动转换,Responses 请求则原样转发到通道的 Responses 接口。模型不支持请求的接口或输入时,网关直接返回 400;图像、视频接口会丢弃部分模型不支持的参数,并在响应头中列出。
接口与通道协议
每个通道使用一种上游协议:OpenAI 兼容或 Anthropic。网关按通道协议决定是否转换请求:
| 客户端调用的接口 | 网关的处理 | 选择模型时注意 |
|---|---|---|
Chat Completions(/v1/chat/completions) |
OpenAI 兼容通道直接发送;Anthropic 协议通道先转换成 Messages 请求,响应再转换回来 | 对话模型都可以使用 |
Anthropic Messages(/v1/messages) |
先转换成内部的 Chat Completions 结构,再按通道协议发出 | 对话模型都可以使用,不要求模型来自 Anthropic |
Responses(/v1/responses) |
不做协议转换,原样转发到通道的 Responses 接口 | 通道必须提供 Responses 接口,Anthropic 协议通道没有该接口 |
通过 /v1/messages 调用时,错误响应也会转换成 Anthropic 格式,只有 error.type 和 error.message,没有 error.code。
转换时的参数处理
跨协议转换只保留双方都有对应含义的字段,其余字段会被去掉,这类去掉不会写进响应头。依赖下列参数的应用,请确认实际服务的通道协议:
| 方向 | 处理 |
|---|---|
| Chat Completions → Anthropic 协议通道 | 去掉 n、logprobs、top_logprobs、response_format、frequency_penalty、presence_penalty、seed、parallel_tool_calls、logit_bias、reasoning_effort 等字段;stop 转为 stop_sequences;没有 max_tokens 时补 4096;enable_thinking、thinking_budget 转为 Anthropic 的 thinking 设置 |
| Anthropic Messages → OpenAI 兼容通道 | model、messages、system、max_tokens、stop_sequences、tools、tool_choice、thinking 按含义转换;stream、temperature、top_p、top_k、service_tier 原样保留;其他字段去掉,消息和工具上的 cache_control 标记也会去掉 |
reasoning_effort、enable_thinking、thinking_budget 三个推理参数分属不同服务商,网关不在它们之间换算;对已适配的服务商,会去掉它不认识的那几个。同一模型由多个通道提供时,请对每个通道验证 JSON 输出、推理和缓存行为,见应用接入多个服务商。
网关拒绝的请求
网关在发出请求前,按模型目录中声明的能力检查接口和输入,不符合时直接返回 400,不调用上游,也不改用备用模型:
报错原文(error.message) |
error.code |
原因与处理 |
|---|---|---|
This model does not support the <接口> API |
unsupported_model_api |
模型声明的接口不含当前接口,例如对话模型调用 /v1/images/generations,或只声明了 Chat Completions 的模型调用 /v1/responses。<接口> 为 chat_completions、responses、embeddings、rerank、images、videos、audio 之一。换用支持该接口的模型 |
This model does not support the <操作> operation |
unsupported_model_operation |
接口家族支持,但不支持具体操作,例如只会文生图的模型调用 /v1/images/edits |
This model accepts text input only |
unsupported_model_input |
输入和输出都只有文本的模型收到了图片、音频、视频或文件 |
模型目录没有声明接口范围时,网关通常放行,由上游决定是否接受。备用模型应与主模型支持相同的接口和输入类型,见失败重试与备用模型。
视觉输入与图像生成
两者是不同的能力,使用不同的接口:
- 视觉理解:在对话接口的消息中放入图片,模型输出文本。模型的输入模态需要包含图像,只接受文本的模型会返回 400
This model accepts text input only。 - 图像生成与编辑:调用
/v1/images/generations或/v1/images/edits,使用输出模态包含图像的模型,模型输出图片。 - 视频生成:调用
/v1/videos提交异步任务。
在模型广场左侧用「输入模态」「输出模态」筛选,就能区分这几类模型。各模型的接口、参数和计费见多模态能力。
图 1:公开模型广场列出网关已完成适配的模型,可按输入和输出模态筛选;能否调用以工作空间模型广场为准。 截图为演示数据,点击图片可查看原图。
图像与视频接口的参数
在图像、视频接口上,网关会丢弃部分所选模型不支持的参数后照常调用,并在响应头 X-Gateway-Unsupported-Parameters 中列出被丢弃的参数名。希望这类情况直接报错时,在请求中加上:
curl "$LYROUTER_BASE_URL/v1/images/generations" \
-H "Authorization: Bearer $LYROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Gateway-Strict-Parameters: true" \
-d '{"model":"google/gemini-3-pro-image","prompt":"一只坐在窗边的猫"}'
开启严格模式后,出现会被丢弃的参数时返回 400 unsupported parameters for this model: <参数名>,error.code 为 unsupported_parameters,不调用上游。各模型支持哪些参数、会丢弃哪些参数,见多模态能力。环境变量的设置见完成第一次模型调用。
查询模型声明的能力
用 API Key 调用 GET /v1/models,列表中的模型条目在模型目录有相应信息时会带上:
| 字段 | 含义 |
|---|---|
api_types |
模型声明支持的接口,如 chat_completions、responses、images |
input_modalities / output_modalities |
输入、输出模态,如 text、image |
context_length / max_output_tokens |
上下文长度和最大输出长度 |
supported_params |
模型声明支持的参数,仅供参考,网关不据此删减对话请求的参数 |
上下文长度、工具调用和结构化输出由上游最终判定。更换模型、服务商或通道后,请用真实请求重新验证参数、流式事件和工具调用,见模型版本与下线。
常见问题
设置了 response_format,为什么有时没有返回 JSON?
答: 请求被路由到 Anthropic 协议的通道时,response_format 会在转换中被去掉。在请求日志中查看这次请求的「服务商」,并对照「原始报文」中的「上游请求」。需要稳定的 JSON 输出时,在提示词中明确要求输出格式;也可以请账号管理员在模型详情中停用不需要的来源,见应用接入多个服务商。
Codex 调用返回错误,但同一个模型用 Chat Completions 正常,怎么办?
答: Codex 使用 Responses 接口,请求会原样转发给通道的 Responses 接口。返回 400 This model does not support the responses API 时换用声明支持 Responses 的模型;返回上游的 404 等错误时,可能是服务这次请求的通道没有提供 Responses 接口,请换用其他模型,或请账号管理员调整该模型的来源。
