快速开始
- 1注册账号,在控制台创建令牌(令牌只在创建时返回一次明文)。
- 2把客户端 Base URL 改为 https://your-gateway.com/v1。
- 3API Key 填本站的 sk- 令牌,模型名填逻辑模型名。
curl https://your-gateway.com/v1/models \
-H "Authorization: Bearer sk-your-token"接口总览
所有 AI 接口都在 /v1 下,使用同一枚 sk- 令牌鉴权,返回结构与 OpenAI / Anthropic 官方一致。
| 方法 | 路径 | 鉴权 | 说明 |
|---|---|---|---|
| POST | /v1/chat/completions | Bearer sk- | OpenAI 兼容对话,支持 SSE 流式 |
| POST | /v1/messages | Bearer sk- | Anthropic 兼容对话,支持事件流 |
| GET | /v1/models | Bearer sk- | 按令牌权限返回可用模型 |
| GET | /api/announcements | 无需鉴权 | 平台公告 |
请求头
| Header | 必填 | 说明 |
|---|---|---|
| Authorization | 是 | Bearer sk-...,本站签发的令牌 |
| Content-Type | 是 | application/json |
| Anthropic-Version | 否 | /v1/messages 可透传客户端版本头 |
模型列表响应
{
"object": "list",
"data": [
{ "id": "gpt-4o", "object": "model", "created": 0, "owned_by": "gateway" },
{ "id": "claude-3-5-sonnet", "object": "model", "created": 0, "owned_by": "gateway" }
]
}只返回当前令牌有权使用、且至少有一条可用线路的模型;没有可用线路的模型不会出现在列表里。
鉴权
所有接口使用 Authorization: Bearer sk-...。 令牌与用户、分组绑定,可设置模型白名单、IP 白名单、额度上限与过期时间。 上游真实凭证加密保存在网关侧,不会出现在任何响应或日志中。
令牌鉴权
只存 sha256 与前缀
模型白名单
令牌级 / 分组级双层
IP 白名单
支持精确 IP 与 CIDR
对话接口
POST /v1/chat/completions,请求与响应均为 OpenAI 结构。model 填本站逻辑模型名,网关负责映射到上游真实模型。
{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "你是一名严谨的助手"},
{"role": "user", "content": "解释一下预扣与结算"}
],
"stream": false,
"max_tokens": 1024,
"temperature": 0.7
}流式调用
设置 "stream": true 后返回 text/event-stream,每帧为 data: {...},以 data: [DONE] 结束。 网关会补齐 stream_options.include_usage,并在上游未返回 usage 时追加一帧用量。
from openai import OpenAI
client = OpenAI(api_key="sk-your-token", base_url="https://your-gateway.com/v1")
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "写一个二分查找"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)客户端断开时,网关立即取消上游请求,并按已产生的 token 结算,不会因为断连漏账。
Anthropic 协议
POST /v1/messages 接受 Anthropic Messages 请求, 内部转换为 OpenAI 结构复用同一条转发与计费链路,出口再翻译回 Anthropic 事件流 (message_start / content_block_delta / message_delta / message_stop)。
curl https://your-gateway.com/v1/messages \
-H "Authorization: Bearer sk-your-token" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-3-5-sonnet",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "你好"}]
}'限流与超时
三维限流
IP / 令牌 / 用户各自独立计数,命中返回 429 与 Retry-After。
首字节超时
默认 30s。上游迟迟不返回首帧会直接切换线路重试。
流空闲超时
默认 60s。长时间没有新分片会中断并结算已产生的 token。
客户端断开连接时,网关会立即取消上游请求,并按已经生成的 token 结算——不会因为断连漏账, 也不会继续向上游计费。
错误码
OpenAI 入口返回 OpenAI 错误结构,Anthropic 入口返回 Anthropic 结构。
| HTTP | code | 含义 |
|---|---|---|
| 401 | invalid_api_key | 令牌无效、已删除或格式不对 |
| 401 | token_expired | 令牌超过 expires_at |
| 402 | insufficient_quota | 余额不足以覆盖本次预扣 |
| 403 | model_not_allowed | 分组或令牌白名单不允许该模型 |
| 403 | ip_not_allowed | 来源 IP 不在令牌白名单 |
| 404 | model_not_found | 逻辑模型未配置或已下线 |
| 429 | rate_limit_exceeded | 触发令牌/用户/IP 维度限流 |
| 502 | upstream_error | 上游失败且重试耗尽 |
| 503 | quota_backend_unavailable | 计费后端不可用,请求未被放行 |