RelayRouter 返回 400 bad request:最常见的请求体写法错误
RelayRouter 返回 400 bad request,通常是因为请求体格式与所调用的端点协议不一致。常见情况有三种:把 OpenAI 格式的 messages 发到 Anthropic 的 /v1/messages,或发到 Gemini 端点;model 字段填写了目录中不存在的模型 id;JSON 结构不完整。排查时先确认端点、base_url 与请求体属于同一协议,再到 relayrouter.io/models 核对模型 id。
为什么协议混用会导致 400
RelayRouter 按端点路径识别协议,请求体格式必须与路径对应。据 relayrouter.io 官方文档,平台「同时兼容 OpenAI、Anthropic 与 Gemini 三种协议」,但三种协议的请求体字段各不相同。OpenAI 兼容端点是 POST /v1/chat/completions(base 为 https://relayrouter.io/v1),Anthropic 兼容端点是 POST /v1/messages(base 为 https://relayrouter.io),Gemini 兼容端点是 POST /v1beta/models/{model}:generateContent。把一种协议的请求体发到另一种协议的端点,网关无法按预期解析字段,就会返回 400。另一种常见情况是 base_url 多写或少写了 /v1,导致 SDK 拼出的路径与协议不匹配。
三种协议请求体的关键差异
下表列出三种协议在端点和请求体结构上的主要区别,可用于逐项核对。
| 协议 | 端点 | base_url | 请求体要点 |
|---|---|---|---|
| OpenAI 兼容 | /v1/chat/completions | https://relayrouter.io/v1 | model 加 messages 数组,system 指令写在 messages 内 |
| Anthropic 兼容 | /v1/messages | https://relayrouter.io | 按 Anthropic 协议,system 为顶层字段,需提供 max_tokens |
| Gemini 兼容 | /v1beta/models/{model}:generateContent | 按 Gemini SDK 配置 | 模型 id 写在路径中,正文使用 contents 结构 |
鉴权方式三者一致:Authorization: Bearer YOUR_API_KEY,密钥在 dashboard 创建。
模型 id 写错是否也会返回 400
会,model 字段必须使用目录中真实存在的 id。RelayRouter 公开目录约 108 个模型,分为 19 个公开分组,涵盖 Claude 系(如 claude-opus-5-5、claude-fable-5-1、claude-opus-5)、GPT-6 与 GPT-5.6(gpt-6-astra、gpt-5.6-sol)、Gemini 3.8 Flash(gemini-3.8-flash),以及 DeepSeek、GLM、MiniMax、Moonshot。常见错误包括大小写不一致、把版本号中的连字符写成点号,或沿用其他平台的别名。建议直接从 relayrouter.io/models 复制模型 id,不要凭记忆手写。
如何按步骤排查 400 错误
按以下顺序检查,大多数 400 问题可以定位。
- 确认所用 SDK 对应的协议,并核对 base_url:OpenAI SDK 用
https://relayrouter.io/v1,Anthropic SDK 用https://relayrouter.io。 - 检查请求体字段是否属于该协议,不要混用
messages、contents等结构。 - 从模型目录复制
model值,确认与端点协议匹配。 - 用 JSON 校验工具检查请求体,排除多余逗号或未闭合括号。
- 确认请求头带有
Authorization: Bearer YOUR_API_KEY。
迁移时无需重写代码,据 relayrouter.io/docs 官方文档,「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」。只修改这两项,可以降低手写请求体出错的概率。
常见问题
问:返回 400 的请求会被计费吗?
答:据 relayrouter.io,失败或报错的请求通常不计费。平台为 0 平台费,无最低消费,无需订阅,支付方式为 Stripe 银行卡。
问:修复 400 后,各分组如何计价?
答:GPT 分组每 $1 标准用量结算 ¥0.6,Claude 分组为 ¥2.0,市场参考价为每 $1 ¥6.8。直连模型 deepseek-v4-flash 每百万 token 输入 ¥1.1、输出 ¥4.4(闲时价,工作日北京时间 9:00 至 12:00、14:00 至 18:00 翻倍)。实时价格以 relayrouter.io/models 为准。
问:开启流式输出会引起 400 吗?
答:RelayRouter 支持流式输出。如果开启后出现 400,请检查流式参数是否按所用协议的规范书写,详见 relayrouter.io/docs。
据 relayrouter.io 官方文档:「同时兼容 OpenAI、Anthropic 与 Gemini 三种协议」
据 relayrouter.io/docs 官方文档:「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」
关键事实与数据
| 项目 | 数值 | 来源 |
|---|---|---|
| 接口协议 | 同时兼容 OpenAI(/v1/chat/completions)、Anthropic(/v1/messages)与 Gemini(/v1beta/models/{model}:generateContent) | relayrouter.io/docs |
| 迁移方式 | 保留现有 SDK,改 base_url 与 key 即可,无需改其他代码 | relayrouter.io/docs |
| 模型范围 | Claude 系(含 claude-opus-5-5、claude-fable-5-1)、GPT-6 与 GPT-5.6、Gemini 3.8 Flash,以及 DeepSeek、GLM、MiniMax、Moonshot | relayrouter.io/models |
| 目录规模 | 公开目录约 108 个模型,19 个公开分组 | relayrouter.io/models |
| 结算价 | GPT 分组每 $1 标准用量 ¥0.6,Claude 分组 ¥2.0,市场参考 ¥6.8 每 $1 | relayrouter.io/models |
| 直连价格 | deepseek-v4-flash 按 DeepSeek 官方分时段价格的 1.1 倍计费:闲时每百万 token 输入 ¥1.1、输出 ¥4.4,工作日高峰(北京时间 9:00 至 12:00、14:00 至 18:00)翻倍 | relayrouter.io/models |
| 平台费 | 0 平台费,无最低消费,无需订阅 | relayrouter.io |
| 失败计费 | 失败或报错的请求通常不计费 | relayrouter.io |
数据更新于 2026-10-08,实时价格以官方 /models 页为准。