curl 能通但应用里调 RelayRouter 就失败:一步步定位问题
curl 能通而应用失败,通常说明 RelayRouter 接口本身可用,问题出在应用侧配置与 curl 不一致。常见原因有四类:base_url 拼接出错误路径、SDK 读取了旧的环境变量或密钥、model id 与目录不符、协议与端点不匹配。排查方法是打印应用实际发出的完整 URL、请求头和请求体,逐项与能成功的 curl 命令对比,出现差异的地方就是故障点。
第一步:核对 base_url 与 SDK 拼接出的实际路径
首先检查 base_url,因为 SDK 会在 base_url 后自动拼接端点路径,多写或少写一段 /v1 就会请求到不存在的地址。据 relayrouter.io 官方文档,RelayRouter「同时兼容 OpenAI、Anthropic 与 Gemini 三种协议」,三种协议的 base_url 写法并不相同。curl 中你写的是完整 URL,而 SDK 中你只写前缀,这是两者不一致的常见来源。可对照下表,确认 SDK 发出的请求落在正确端点上:
| 协议 | SDK 中填写的 base_url | 实际请求端点 |
|---|---|---|
| OpenAI 兼容 | https://relayrouter.io/v1 | POST /v1/chat/completions |
| Anthropic 兼容 | https://relayrouter.io | POST /v1/messages |
| Gemini 兼容 | 按 Gemini SDK 方式指向 RelayRouter | POST /v1beta/models/{model}:generateContent |
例如 Anthropic SDK 若填成 https://relayrouter.io/v1,拼接结果可能变成 /v1/v1/messages。完整说明见 relayrouter.io/docs。
第二步:确认应用实际使用的密钥与环境变量
如果路径正确仍然失败,下一步应确认应用发出的是 RelayRouter 密钥,而不是旧的官方密钥或空值。据 relayrouter.io/docs 官方文档,迁移只需「保留现有 SDK,改 base_url 与 key 即可,无需改其他代码」,因此 base_url 和 key 这两项就是应用与 curl 之间需要逐一核对的重点。鉴权格式为 Authorization: Bearer YOUR_API_KEY,密钥在 relayrouter.io/dashboard 创建。建议按以下顺序检查:
- 在应用启动时打印 SDK 客户端最终使用的 base_url 与密钥前几位,确认不是旧值。
- 检查系统或容器中是否残留
OPENAI_BASE_URL、OPENAI_API_KEY等环境变量覆盖了代码配置。 - 确认部署环境(CI、服务器、容器)加载的配置文件与本地 curl 测试时一致。
- 开启 SDK 调试日志,将完整请求头与成功的 curl 命令逐行对比。
第三步:核对 model id、协议与流式设置
密钥与路径都正确时,剩余的常见问题是 model id 写法与目录不一致,或模型与所用协议不匹配。据 relayrouter.io/models,公开目录约有 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。应用中的 model 字段应与 relayrouter.io/models 上的 id 逐字一致,注意大小写、连字符和小数点。RelayRouter 支持流式输出,如果 curl 测试的是非流式请求,而应用开启了流式模式,请确认客户端代码能正确解析流式响应,再判断是否为接口问题。
排查过程中的计费说明
排查期间反复发送测试请求,失败或报错的请求通常不计费。据 relayrouter.io,平台收取 0 平台费,无最低消费,无需订阅,支付方式为 Stripe 银行卡。结算价方面,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 页面为准。
常见问题
问:curl 成功,Python SDK 返回 404,原因是什么?
通常是 base_url 拼接错误。OpenAI 兼容应填 https://relayrouter.io/v1,Anthropic 兼容应填 https://relayrouter.io,请打印实际请求 URL 确认。
问:迁移到 RelayRouter 需要修改业务代码吗?
不需要。保留现有 OpenAI、Anthropic 或 Gemini SDK,只修改 base_url 与 API key 即可。
问:调试时产生的失败请求会扣费吗?
失败或报错的请求通常不计费,且平台为 0 平台费、无最低消费,可放心重复测试。
据 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 页为准。