/ API 文档
← 返回控制台

小鸣中转站 API 文档

多上游 OpenAI 兼容中转服务,聚合百炼(通义千问 + 万相绘图)、MiniMax、火山方舟(豆包),带 token 鉴权、限流、计费配额与完整管理后台。

Base URLhttps://aigcbox.com.cn/relay/v1 · 管理后台https://aigcbox.com.cn/relay · 健康检查GET /relay/healthz

快速开始

0. 拿一个 token

向管理员申请,或登录管理后台创建。token 形如 sk-xm-xxxx...

1. 列出可用模型

curl https://aigcbox.com.cn/relay/v1/models \
  -H "Authorization: Bearer sk-xm-你的密钥"

2. 文本对话

curl https://aigcbox.com.cn/relay/v1/chat/completions \
  -H "Authorization: Bearer sk-xm-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen-plus","messages":[{"role":"user","content":"你好"}]}'

3. 流式输出

curl https://aigcbox.com.cn/relay/v1/chat/completions \
  -H "Authorization: Bearer sk-xm-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen-plus","stream":true,"messages":[{"role":"user","content":"写一首诗"}]}'

4. 图片生成

curl https://aigcbox.com.cn/relay/v1/images/generations \
  -H "Authorization: Bearer sk-xm-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{"model":"wanx2.1-t2i-turbo","prompt":"一只戴墨镜的柴犬","size":"1024x1024","n":1}'
图片生成是异步的,返回约需 3~120 秒(万相后台任务轮询)。

认证

用户端(调用 API)

Authorization: Bearer sk-xm-你的密钥

管理端(后台管理)

x-admin-token: 你的管理密钥

或通过 query 参数:?token=你的管理密钥

可用模型

文本 / 对话

模型上游说明
qwen3-coder-plus百炼通义千问 Coder,代码能力强
qwen-plus百炼通义千问 Plus,性价比高
qwen-max百炼通义千问 Max,最强
MiniMax-M2MiniMaxMiniMax M2
MiniMax-M1MiniMaxMiniMax M1
doubao-seed-1-6-250615火山方舟豆包 Seed 1.6
doubao-seed-1-6-flash-250615火山方舟豆包 Seed 1.6 Flash(快/便宜)

图片

模型上游说明
wanx2.1-t2i-turbo百炼万相文生图 Turbo
wanx2.1-t2i-plus百炼万相文生图 Plus

API 参考

GET /relay/v1/models

列出可用模型。需 Bearer token。

{"object":"list","data":[
  {"id":"qwen-plus","object":"model","created":0,"owned_by":"xiaoming-relay"},
  {"id":"wanx2.1-t2i-turbo","object":"model","created":0,"owned_by":"xiaoming-relay-image"}
]}

GET /relay/healthz

健康检查,无需鉴权

{"ok":true,"ts":"2026-09-07T22:46:14","uptime":"28.7s","models":7,"image_models":2}

POST /relay/v1/chat/completions

OpenAI 兼容的对话补全。

参数类型必填说明
modelstring模型名
messagesarray对话消息
streambool是否流式
temperaturenumber采样温度
max_tokensnumber最大输出 token

非流式响应:标准 OpenAI chat.completion 结构。流式响应:text/event-stream,标准 OpenAI SSE 格式。

POST /relay/v1/responses

Responses API(OpenAI 新协议),Codex CLI 0.147+ 专用

参数类型必填说明
modelstring模型名
inputstring/array输入文本或消息列表
instructionsstring系统指令
streambool流式
toolsarray工具定义(function calling)
temperaturenumber采样温度
max_output_tokensnumber最大输出
中转内部把 Responses 请求翻译为 chat.completions 调上游,再翻译回 Responses 格式返回。store / previous_response_id 不支持。

POST /relay/v1/images/generations

文生图(万相)。

参数类型必填说明
modelstring默认 wanx2.1-t2i-turbo
promptstring图片描述,最长 800 字符
sizestring默认 1024x1024
nnumber生成张数,1~4,默认 1
{"created":1234567890,"data":[{"url":"https://...","revised_prompt":null}]}

管理后台

独立 Web 入口:https://aigcbox.com.cn/relay,登录后五个页面:概览 / Token 管理 / 用量统计 / 扣费流水 / API 文档。

管理 API(供脚本调用)

以下接口需 x-admin-token header。

方法路径说明
GET/relay/admin/tokens列出所有 token
POST/relay/admin/tokens创建 token
POST/relay/admin/tokens/{id}/recharge充值
POST/relay/admin/tokens/{id}/update编辑
POST/relay/admin/tokens/{id}/toggle禁用/启用
POST/relay/admin/tokens/{id}/delete删除
GET/relay/admin/stats统计(tokens + 今日 + 7 天)
GET/relay/admin/billing扣费流水

创建 token

curl -X POST https://aigcbox.com.cn/relay/admin/tokens \
  -H "x-admin-token: 你的管理密钥" \
  -H "Content-Type: application/json" \
  -d '{"name":"my-token","note":"给 XX 项目用","grp":"default","rpm":60,
       "billing":0,"balance":0,"quota_tokens":0,"expires_in_days":30}'

响应(完整 token 只返回这一次):

{"token":"sk-xm-...","name":"my-token","rpm":60,"billing":0,"balance":0,"quota_tokens":0}
字段说明
name名称,必填,唯一标识
note备注
grp分组,默认 default
rpm每分钟请求上限
billing0=免费,1=计费
balance余额(元)
quota_tokenstoken 总配额,0=不限
expires_in_days有效期(天),0=永久

计费与配额

定价(每 1K tokens,元)

模型输入输出
qwen3-coder-plus0.0040.016
qwen-plus0.00080.002
qwen-max0.020.06
MiniMax-M20.0020.008
MiniMax-M10.0040.016
doubao-seed-1-6-2506150.0010.004
doubao-seed-1-6-flash-2506150.00030.0012

图片(按张,元)

模型单价
wanx2.1-t2i-turbo0.12
wanx2.1-t2i-plus0.20

规则

错误码

状态码含义
400模型不支持 / JSON 无效
401token 无效 / 已撤销 / 已过期
402余额不足 / 配额耗尽(计费 token)
403管理密钥无效
413请求体过大(>256KB)
422prompt 必填(图片)
429限流(超出 RPM)
502上游错误
504图片生成超时

客户端接入

Codex CLI

base_url: https://aigcbox.com.cn/relay/v1
api_key: sk-xm-你的密钥
model: qwen3-coder-plus        # 或 doubao-seed-1-6-250615

Codex 0.147+ 走 /v1/responses,中转已兼容该协议。

Python(OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://aigcbox.com.cn/relay/v1",
    api_key="sk-xm-你的密钥",
)
resp = client.chat.completions.create(
    model="qwen-plus",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

Node.js

const resp = await fetch("https://aigcbox.com.cn/relay/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk-xm-你的密钥",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "qwen-plus",
    messages: [{ role: "user", content: "你好" }],
  }),
});

WorkBuddy

base_url: https://aigcbox.com.cn/relay/v1
api_key: sk-xm-你的密钥

本地开发

cd xiaoming-relay
pip install -r requirements.txt
RELAY_SKIP_DB=1 RELAY_ADMIN_TOKEN=local-admin RELAY_PORT=8892 python server.py

访问:http://127.0.0.1:8892/relay

环境变量

变量说明
RELAY_DB_HOST/PORT/USER/PASSWORD/NAME数据库连接
RELAY_BAILIAN_KEY百炼密钥
RELAY_MINIMAX_KEYMiniMax 密钥
RELAY_ARK_KEY火山方舟密钥
RELAY_ADMIN_TOKEN管理密钥
RELAY_ALERT_WEBHOOK告警 webhook(可选)
RELAY_LOW_BALANCE余额告警阈值(默认 5 元)
RELAY_SKIP_DB1=内存模式(本地开发)
RELAY_PORT端口(默认 8892)

生产部署

/home/ubuntu/relay/
├── server.py           # 中转站主程序
├── relay_secrets.py    # 独立密钥(gitignore)
├── webroot/relay.html  # 独立管理入口
├── webroot/relay-docs.html  # 本文档页
├── ecosystem.config.js # pm2 配置
└── requirements.txt

# pm2 启动
pm2 start ecosystem.config.js
pm2 save

# nginx 反代(/relay/ → 127.0.0.1:8892/relay/)
location /relay/ {
    proxy_pass http://127.0.0.1:8892/relay/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Connection "";
    proxy_read_timeout 300s;
    proxy_buffering off;
}

启动时自动执行数据库迁移(幂等):新建缺失的表和字段,不删数据。

数据库结构

relay_tokens

字段类型说明
idint PK自增主键
token_hashvarchar(64) UNIQUESHA-256(token),不存明文
namevarchar(64)名称
notevarchar(255)备注
grpvarchar(32)分组
rpmint每分钟限流
balancedecimal(12,4)余额(元)
billingtinyint0=免费,1=计费
quota_tokensbiginttoken 总配额,0=不限
used_tokensbigint已用 tokens
disabledtinyint0=启用,1=禁用
expires_atdatetime过期时间,NULL=永久
created_atdatetime创建时间

relay_logs

字段类型说明
idbigint PK自增主键
tsdatetime时间
token_namevarchar(64)所属 token
modelvarchar(64)模型
prompt_tokensint输入 tokens
completion_tokensint输出 tokens
costdecimal(12,6)本次费用(元)
ipvarchar(64)来源 IP

安全说明