多厂商差异
统一入口已经把协议差异吃掉了;这一页只讲你确实需要知道的那部分。
平台上的模型来自不同厂商,各家的原生协议不完全一样。
但你基本不需要关心这件事:经 SciRouter 的统一入口调用时,一律是 OpenAI 格式。 协议差异是我们的问题,不是你的问题。
这一页讲的是那少数几处你确实会碰到的差异。
兼容度标识
每个模型的详情页顶部有一行兼容度标识,三种:
- 完全兼容 —— 现有的 OpenAI 代码改一个
base_url就能用。 - 兼容,专有参数需放 extra_body —— 标准字段照常用;这家厂商特有的参数
放进
extra_body透传。 - 需专用调用方式 —— 经我们的统一入口仍然是 OpenAI 格式; 只有直连厂商时才需要它的原生协议。
厂商专有参数
标准字段(temperature、top_p、max_tokens…)对所有模型都一样。
厂商特有的参数走 extra_body:
pythonresponse = client.chat.completions.create(
model="bio/protein-72b",
messages=[{"role": "user", "content": "..."}],
temperature=0.7,
extra_body={
"beam_width": 4,
},
)哪些参数可用、各自的取值范围,以模型详情页的参数面板为准。 那个面板是由后端下发的能力描述符渲染的,永远和实际可用的参数一致—— 文档里抄一份必然会过期。
不支持的参数会被忽略并在响应里说明,不会静默丢弃。
计价维度不止两个
不要假设「输入价 + 输出价」两个数字。各家口径差别很大:
- 缓存命中的输入单独计价(通常便宜一个数量级);
- 推理(thinking)token 单独计价;
- 图片按张、音频按秒、有些按每次请求收固定费;
- 阶梯价与最小计费单位。
用量响应里的 usage 是按维度返回的,维度名由服务端给。
你的对账代码请按「遍历维度」写,不要硬编码 input_tokens / output_tokens
这两个键——接入新厂商时会出现你没见过的维度。
流式
所有模型都支持流式(stream: true),分片格式与 OpenAI 一致。
一处差异:部分模型会在内容之前先发一个 selection 分片,说明实际命中了哪个模型
(Auto 模式下)。不认识的分片类型请忽略而不是报错——我们会继续往里加。