SAIRouter API 使用指南
这是一份面向开发者与运维团队的实践文档。你可以把 SAIRouter 理解为统一的模型接入层:业务系统只需对接一次接口,就能在多个上游模型供应商之间进行路由、回退、可观测和成本治理。文档内容不仅覆盖 API 调用方式,也包含上线建议、排障路径和支持协作流程。
平台如何工作
SAIRouter 是 OpenAI 兼容网关,核心目标是把"多模型、多供应商、多策略"的复杂度从业务代码中抽离出来。你的应用层只需要维护统一的调用协议与鉴权方式,不再为不同供应商分别维护 SDK、错误处理和参数适配,从而显著降低接入与维护成本。
在请求执行阶段,平台会结合可用性、延迟、策略规则与历史状态选择上游路由;当某条链路不可用、超时或质量不符合预期时,会按配置自动切换到候选路由。对于业务侧来说,这意味着更高的稳定性与更可预测的故障行为。
核心能力
- 统一模型入口:业务代码围绕一个接口抽象,降低多供应商并行接入时的复杂度与变更成本。
- 可观测性:可在平台中查看模型分布、调用趋势、成本结构与状态信息,支持从宏观到请求级别的问题定位。
- 可治理:通过模型启停、限流、策略与回退机制控制风险,减少上游抖动对业务可用性的影响。
- 开发友好:兼容 OpenAI 常见 SDK 和调用格式,便于在已有项目中低成本迁移与灰度验证。
安全
SAIRouter 的安全设计围绕“官方直连、最小暴露、可审计、可回退”展开。业务系统只需要接入统一网关,平台在请求进入、路由选择、上游调用和结果返回的各阶段执行鉴权、策略校验和状态记录,降低多供应商接入带来的密钥扩散与运维风险。
请求通过受控网关转发到模型供应商官方源站,全链路使用 HTTPS/TLS 传输,减少中间层转售、明文传输或非预期代理带来的风险。
建议按环境、业务线或团队拆分 API Key,并在服务端注入密钥。平台侧可结合用户、组织、模型启停和限流策略控制可访问范围。
平台记录模型、供应商、状态码、延迟、用量和关键追踪信息,便于回溯异常调用、排查上游故障,并支撑成本与安全告警。
当上游超时、限流或不可用时,可通过路由策略、候选模型和降级方案减少单点故障影响,避免业务侧直接暴露在供应商波动中。
- API Key 仅保存在服务端或密钥管理系统中,不要写入前端代码、移动端包或公开仓库。
- 为开发、测试、生产环境使用不同密钥,并建立定期轮换和疑似泄露后的快速吊销流程。
- 开启必要的请求日志与告警,至少保留 request-id、模型、状态码、延迟、用量和调用方标识。
- 对高风险业务配置限流、预算阈值和紧急停用开关,避免异常循环调用造成成本或可用性事故。
- 不要在日志中记录完整 API Key、用户隐私数据或完整敏感提示词;确需排障时应做脱敏处理。
说明:安全能力会随部署形态、账号权限和上游供应商能力有所差异。正式上线前建议结合你的合规要求进行密钥管理、日志保留周期、数据脱敏和权限边界评审。
快速开始
建议先用最小链路完成一次"可用性验证":获取 API Key、发送一条最短 Chat 请求、确认返回内容与 usage 字段。跑通后再逐步增加系统提示词、工具调用、流式输出等能力。这样可以快速定位是网络、鉴权、模型配置还是业务逻辑导致的问题。
curl https://api.sairouter.com/v1/chat/completions \
-H "Authorization: Bearer sk-sai-..." \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}'认证方式
Authorization: Bearer sk-sai-...
提示:建议按环境分离密钥(开发/测试/生产),并建立轮换机制。发生疑似泄露时,先停用旧密钥再回溯访问日志,避免风险扩散。
SDK 示例(Node / Python)
下面示例展示了最常见的两种接入方式。实践中建议把 `baseURL` 和 `model` 配置化,并在统一调用层封装重试、超时、日志和错误映射,这样能避免业务代码到处散落重复逻辑。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SAI_API_KEY,
baseURL: "https://api.sairouter.com/v1",
});
const res = await client.chat.completions.create({
model: "openai/gpt-4o-mini",
messages: [{ role: "user", content: "你好" }],
});
console.log(res.choices[0]?.message?.content);from openai import OpenAI
client = OpenAI(
api_key="sk-sai-...",
base_url="https://api.sairouter.com/v1",
)
res = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "你好"}],
)
print(res.choices[0].message.content)请求生命周期
理解生命周期有助于你快速判断问题发生在哪一层。比如 401 多半是鉴权或密钥管理问题,429 往往和配额或并发有关,5xx 可能是上游抖动或网络异常。
- 客户端携带 API Key 发起请求,并附带模型、消息和可选参数。
- 平台完成鉴权、参数校验和策略预检查(例如模型是否可用)。
- 路由层根据策略选择上游并发起调用,必要时进行候选路由切换。
- 响应返回前会记录调用用量、延迟、状态码和关键追踪信息。
- 失败场景下返回标准错误结构,便于业务侧统一处理与告警。
1) Chat Completions API
发送对话请求(OpenAI 兼容)。你只需要指定 model 和 messages,其余由 SAIRouter 负责路由选择、失败回退与状态记录。建议在生产环境明确设置 timeout 和重试策略,避免长尾请求拖垮服务线程。
curl https://api.sairouter.com/v1/chat/completions \
-H "Authorization: Bearer sk-sai-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "Give me a simple Node.js example." }
],
"temperature": 0.7
}'model: string (required)
messages: [{ role, content }] (required)
temperature: number (optional)
max_tokens: number (optional)
stream: boolean (optional)2) Models API(获取模型列表)
用于获取当前可用模型及其能力信息、上下文窗口与价格字段。建议在服务启动时拉取并做短周期缓存,同时定时刷新,以便在模型上下线或价格变更时快速同步。
GET /v1/models Authorization: Bearer sk-sai-...
常见字段:id、provider、type、contextLength、inputPrice、outputPrice、enabled、features。你可以据此构建模型筛选器、默认模型推荐以及成本估算逻辑。
响应结构
Chat 响应兼容 OpenAI 结构,通常包含 id、model、choices、usage。业务实现上建议把响应拆分为"用户可见内容"和"运营统计信息"两层:前者用于展示,后者用于计费、审计和性能分析。
{
"id": "chatcmpl-xxx",
"model": "openai/gpt-4o-mini",
"choices": [{ "index": 0, "message": { "role": "assistant", "content": "..." } }],
"usage": { "prompt_tokens": 20, "completion_tokens": 60, "total_tokens": 80 }
}接入最佳实践
- 模型名使用配置中心统一管理,不要硬编码在多个业务模块,避免模型迁移时全链路改代码。
- 统一处理 401/429/5xx,结合指数退避、幂等重试和最大重试次数,避免无界重试引发雪崩。
- 生产环境配置连接超时、读取超时和熔断策略,防止慢请求挤占线程或连接池。
- 日志中记录 request-id、model、provider、latency 和错误码,便于跨团队快速定位问题。
计费与成本
平台展示与筛选默认以 RMB(¥)为单位。成本核算建议按输入 token、输出 token、模型类型三个维度拆分,避免只看总额而忽略结构变化。对高调用量业务,可按场景建立单独预算池和阈值告警。
你可以结合模型页与使用页观察成本趋势,识别异常峰值与低效调用模式。例如在业务高峰期间,适当调整默认模型或温度参数,通常能在可接受质量下获得更稳定的成本曲线。
3) 错误处理
公开接口使用统一错误结构,建议按 HTTP 状态码 + code 字段双重处理。实践中可先按状态码做大类分流,再按 code 映射业务策略(如提示重试、切换模型、人工介入),从而避免把所有错误都当作同一种失败。
{
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}4) 速率限制
当遇到 429/5xx 时,建议使用带抖动的指数退避(如 500ms、1s、2s,并增加随机偏移),避免同一时刻大量重试冲击上游。
生产环境建议设置连接超时与总超时,并记录 request-id 便于排障。若连续出现限流,可考虑削峰、队列化、降级到更经济模型,或在业务层做优先级控制。
生产检查清单
- 密钥托管在服务端,避免前端泄露,并对不同环境使用独立密钥。
- 设置连接、读取与总超时,防止请求长期挂起并拖慢整体吞吐。
- 401/429/5xx 均有重试与降级策略,并限制最大重试次数。
- 记录 request-id、错误码、模型、provider 与延迟指标,支持问题复盘。
- 对高峰流量设置预算上限、异常告警与应急开关。
5) 调试与文档链接
排障指引
- 先确认 API Key 是否正确、是否过期、是否误用了其他环境密钥。
- 检查目标模型是否启用,以及是否在当前区域或环境可用。
- 查看状态页与用量页,判断是上游波动、流量突增还是限流触发。
- 保留失败时间、request-id、错误码和样例请求,便于快速复现和定位。
帮助与支持
如果你在接入、模型选择、成本治理或故障处理上需要帮助,建议先整理调用样例、日志片段和错误信息再联系支持团队。信息越完整,定位速度越快,也更容易判断是平台问题、上游问题还是业务接入问题。
反馈问题时请附上:时间范围、模型 ID、请求量级、错误码、是否稳定复现、预期行为与实际行为。若有 request-id,请一并提供。
