概览

{{NAME}} 是一个组织内部的 API 中转与分发平台。你无需直连各家大模型厂商,只要把请求发到本平台,平台会完成鉴权、限流、配额校验与转发,并统一记录用量与日志。

一句话接入 把 base_url 改成 {{BASE}}/v1,把 api_key 改成平台下发的 sk-hub-... 即可,其余调用方式与 OpenAI 完全一致。
项目值
接口地址(Base URL){{BASE}}/v1
鉴权方式Authorization: Bearer sk-hub-...
协议HTTP/HTTPS,兼容 OpenAI Chat Completions
管理面板{{DASHBOARD}}
关于可用路径 平台按「路由规则」匹配请求路径,具体支持哪些路径由管理员在管理面板「路由模型」页中定义。本页示例统一使用 POST /v1/chat/completions;若你的平台配置了其它路径(如 /v1/embeddings),替换路径即可。

快速开始

三步即可完成第一次调用:

1. 获取 API Key

登录管理面板 {{DASHBOARD}},进入「API Key」页面创建。创建后密钥 仅展示一次,请立即保存。

2. 配置客户端

把 Base URL 指向 {{BASE}}/v1,密钥填入你的 sk-hub-...。任何兼容 OpenAI 的 SDK / 工具都可直接使用。

3. 发起请求

bash
curl {{BASE}}/v1/chat/completions \
  -H "Authorization: Bearer sk-hub-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "你好"}]
  }'

接入信息

项说明
Base URL{{BASE}}/v1
完整示例POST {{BASE}}/v1/chat/completions
请求头Authorization: Bearer <API Key>
备用请求头x-api-key: <API Key>
Content-Typeapplication/json
密钥格式 平台密钥以 sk-hub- 开头(区别于任意第三方厂商的密钥)。请在请求中只使用平台下发的密钥,不要使用厂商原始密钥。

认证方式

平台支持两种等价的鉴权头,任选其一即可:

方式一:标准 Bearer(推荐)

http
Authorization: Bearer sk-hub-xxxxxxxxxxxxxxxx

方式二:x-api-key 头

http
x-api-key: sk-hub-xxxxxxxxxxxxxxxx
安全提醒 请勿把 API Key 提交到代码仓库或前端页面。密钥泄露时请立即在管理面板禁用并重新创建。

调用示例

cURL

bash
curl {{BASE}}/v1/chat/completions \
  -H "Authorization: Bearer sk-hub-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "system", "content": "你是一个乐于助人的助手"},
      {"role": "user", "content": "用一句话介绍你自己"}
    ],
    "temperature": 0.7
  }'

Python(OpenAI 官方 SDK)

python
from openai import OpenAI

client = OpenAI(
    base_url="{{BASE}}/v1",
    api_key="sk-hub-你的密钥",
)

resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

Node.js

javascript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "{{BASE}}/v1",
  apiKey: "sk-hub-你的密钥",
});

const resp = await client.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "你好" }],
});
console.log(resp.choices[0].message.content);

流式(Python)

python
from openai import OpenAI

client = OpenAI(base_url="{{BASE}}/v1", api_key="sk-hub-你的密钥")

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)

请求参数

请求体与 OpenAI Chat Completions 保持一致,平台原样透传给你的上游供应商。常用字段:

字段类型必填说明
modelstring是模型名。平台会按此字段匹配「模型路由」(见下节),未命中时透传给上游。
messagesarray是对话消息列表,元素含 role 与 content。
streamboolean否为 true 时以 SSE 流式返回。
temperaturenumber否采样温度,透传上游。
max_tokensinteger否回复最大 token 数,透传上游。
用量统计说明 流式请求时,平台会自动向上游补发 stream_options.include_usage=true 以获取真实用量;你的客户端无需额外设置。

流式响应

当请求体包含 "stream": true 时,平台以 text/event-stream 返回 SSE,逐块透传上游内容:

sse
data: {"id":"chatcmpl-...","choices":[{"delta":{"content":"你"}}]}

data: {"id":"chatcmpl-...","choices":[{"delta":{"content":"好"}}]}

data: [DONE]
部署提示 若通过 Nginx 反向代理,需关闭响应缓冲(proxy_buffering off;),否则流式输出会被攒批,失去逐字效果。

模型路由

平台支持管理员配置「模型路由」:把某个请求模型名转发到指定供应商的指定模型。你只需按平台约定的模型名调用,实际由哪个供应商处理由管理员配置决定。

示例 管理员配置:请求 gpt-4o → 由 DeepSeek 供应商的 deepseek-chat 处理。此时你仍按如下方式调用:
请求
{ "model": "gpt-4o", "messages": [{"role": "user", "content": "你好"}] }

平台会自动改写为上游模型名并转发,你的代码无需任何改动。若模型名未被任何路由命中,则按默认路由规则透传给对应供应商。

组织隔离(按调用方身份自动生效) 每个组织的用户只会使用本组织提供的供应商:请求先按平台路径命中路由,再按 model 匹配本组织的模型路由; 若未命中本组织的模型路由,则使用本组织内最早创建且启用中的供应商(组织默认供应商),此时不会改写模型名。 本组织没有任何可用供应商时返回 40300。超级管理员不受此限制,可使用全部供应商(含全局)。

配置字段填写指南(管理员)

本节说明管理面板中「供应商」「路由配置」「模型路由」三个表单里每个输入框应该填什么。普通调用方无需关心,由管理员配置一次即可。

先理解解析顺序(含组织隔离) 请求先按「平台路径」命中一条 路由(决定默认供应商与上游路径)→ 再按请求体里的 model 匹配 模型路由 → 最后按调用方身份做组织归属校验: 超级管理员可使用任意供应商;组织用户只能使用 organization 与本组织一致的供应商,否则回退到本组织默认供应商,本组织无可用供应商时报 40300。 最终访问的地址 = 供应商 Base URL + 上游路径(直接拼接)。

一、供应商(「供应商」页)

代表一家上游厂商的连接信息,是整个平台转发的基础。

输入框字段必填填写说明
标识provider_name是(仅新增时) 唯一英文标识,小写字母 / 数字 / 下划线,如 xiaomi_mimo。创建后不可修改。
显示名称display_name是 界面上展示的名字,如 小米 MiMo,可随意填写。
Base URLbase_url是 上游接口前缀,只写到版本号为止(如 https://api.deepseek.com/v1),不要带 /chat/completions 这类具体接口路径,结尾不要加 /。
上游 API Keyapi_key新增必填;编辑留空=不改 厂商控制台申请的原始密钥。不要带 Bearer 前缀,不要有空格或换行(平台转发时会自动加 Bearer)。
状态status编辑时 启用 可被转发;禁用 后该供应商不会被选中。
限速 RPMrate_limit_rpm否(0 = 不限) 该供应商每分钟最大请求数,由代理层实时生效。
限速 TPMrate_limit_tpm否(0 = 不限) 该供应商每分钟最大 token 数。
可用模型models否 逗号分隔的模型名清单,如 mimo-v2.6-pro,mimo-v2.6-flash。仅用于展示与「模型路由」下拉候选,不参与路由匹配。
备注notes否自定义说明。
归属组织organization否 供应商归属的组织;留空表示全局(不限组织)。已归属某组织的用户只能使用归属本组织的供应商,因此为某组织配置供应商时必须填该组织名。
订阅表单的额外字段 从「厂商目录」订阅时,另有 Token 套餐 下拉:按量计费 / Token Plan。选择后会自动切换该套餐对应的 Base URL 并写入限速。注意部分厂商两套地址不同——例如小米 MiMo:按量计费为 https://api.xiaomimimo.com/v1,Token Plan 为 https://token-plan-cn.xiaomimimo.com/v1,密钥必须与所选套餐匹配,否则上游会返回 401。

二、路由配置(「路由模型」页)

把「对外平台路径」映射到「某供应商的某个上游路径」。

输入框字段必填填写说明
平台路径route_path是 对外暴露的路径,如 /v1/chat/completions;支持结尾通配 /v1/chat/*。同一平台路径全局唯一——它代表该路径的「默认去向」。
供应商provider_id是 该路径的默认供应商。未命中任何「模型路由」的请求都走这里。组织用户例外:会按组织隔离规则改用本组织的供应商。
上游路径upstream_path是 拼在供应商 Base URL 之后的真实接口路径,如 /chat/completions。配了通配路由时,这里要写成同样带 /* 的形式。
方法method是 GET / POST / PUT / DELETE / PATCH / *(不限)。Chat Completions 用 POST。
模型名model_name否 仅供日志与统计展示使用,不会改写请求里的 model。要做模型改写请用「模型路由」。
单价cost_per_1k_tokens否 每千 token 单价(元),用于成本统计。
标签tags否逗号分隔,仅用于分类筛选。
启用enabled是禁用后该路由不参与匹配,请求会返回 40400。
关于「该平台路径已存在」 平台按「路径 + 方法」匹配路由,同一路径存在多条会导致无法确定去哪个供应商,因此平台路径必须唯一。 若你要让同一路径下的不同模型走不同厂商(例如 gpt-4o 走 OpenAI、mimo-* 走小米),不要新建同路径的路由:先在此处配好一条默认路由,再到「供应商 → 模型路由配置」按模型名添加映射。

三、模型路由(「供应商」页底部「模型路由配置」)

把「请求模型名」覆盖路由到另一家供应商,并改写为上游支持的模型名。

输入框字段必填填写说明
请求模型source_model是 用户请求体里 model 的值,如 gpt-4o;支持结尾 * 通配,如 gpt-*、mimo-*。
目标供应商provider_id是 命中后实际转发到的供应商(须已启用)。
目标模型target_model是 转发给上游时改写成的模型名,必须是目标供应商真实支持的模型,如 deepseek-chat、mimo-v2.6-flash。
状态enabled编辑时禁用后该映射不生效,请求回落到默认路由。
备注notes否自定义说明,如「临时降级用」。
归属组织organization否 该模型路由归属的组织;留空表示全局。组织用户只会命中本组织的模型路由(全局模型路由对其不生效),且目标供应商也须同属本组织并启用。
匹配优先级 ① 精确匹配优先于通配(gpt-4o 优先于 gpt-*);② 同为通配时前缀更长者优先; ③ 同一模型同时存在「本组织」与「全局」映射时,本组织的优先。普通管理员只能看到并维护本组织的供应商与模型路由。
组织隔离:非超管调用方只会命中「本组织 + 目标供应商同属本组织且启用」的模型路由;未命中则用本组织默认供应商,本组织无可用供应商时报 40300。

完整示例:接入小米 MiMo,并让 mimo-* 走它

步骤位置填写值
1供应商标识 xiaomi_mimo;Base URL https://token-plan-cn.xiaomimimo.com/v1(Token Plan)或 https://api.xiaomimimo.com/v1(按量计费);上游 API Key 填小米密钥;可用模型 mimo-v2.6-pro,mimo-v2.6-flash
2路由配置平台路径 /v1/chat/completions;供应商 小米 MiMo;上游路径 /chat/completions;方法 POST
3模型路由请求模型 mimo-*;目标供应商 小米 MiMo;目标模型 mimo-v2.6-flash

配好后,调用方使用 model: "mimo-v2.6-pro" 或 "mimo-v2.6-flash" 均会被路由到小米 MiMo,最终地址为 https://token-plan-cn.xiaomimimo.com/v1/chat/completions。

组织归属别忘了填 若要给某个组织专用,请把「供应商」与「模型路由」的归属组织都填成同一组织名(如 遵理)。只填供应商、不填模型路由时,该组织的用户仍能使用该供应商(走本组织默认供应商兜底),但不会触发模型名改写。

错误码

失败时返回 JSON,结构与 OpenAI 兼容:

json
{
  "error": {
    "code": 40100,
    "message": "API Key 无效"
  }
}
codeHTTP含义处理建议
40000400请求参数错误检查请求体格式与必填字段
40100401未认证 / Key 无效、被禁用或过期确认使用 sk-hub- 密钥且未过期
40300403无权限访问 / 本组织暂无可用的上游供应商联系管理员开通权限,或为本组织配置启用中的供应商
40400404没有匹配的路由规则核对请求路径是否已在平台配置
40900409资源冲突更换唯一标识后重试
42900429触发限流按响应头 Retry-After 退避重试
50000500平台内部错误稍后重试,持续失败请联系管理员
50200502上游供应商不可用稍后重试
50400504上游请求超时稍后重试或缩短请求内容

限流与配额

平台有两层限制,均由管理员配置:

类型维度超限返回
速率限制(RPM)按 API Key、按供应商42900,响应含 Retry-After
用量配额按月 Token / 请求数业务错误提示(配额不足)
建议 客户端遇到 429 时读取 Retry-After 秒数后重试,并配合指数退避,避免持续打满限流。

常见问题

Q:能用任何 OpenAI SDK 吗?

可以。只要支持自定义 base_url 与 api_key 即可,本平台保持 OpenAI 兼容。

Q:为什么会返回 40400「没有匹配的路由规则」?

说明请求路径未被平台定义为路由。请确认路径(如 /v1/chat/completions)已在管理面板「路由模型」页中配置,或联系管理员添加。

Q:管理员新增路由时提示「该平台路径已存在」,但我想让同一路径走不同厂商?

这是设计使然:同一平台路径只能有一条路由(它是该路径的默认去向)。要让同一路径下不同模型走不同供应商,请保留这条默认路由,改在「供应商 → 模型路由配置」中按模型名添加映射(见 配置字段填写指南)。

Q:为什么会返回 40300「本组织暂无可用的上游供应商」?

平台按组织隔离路由,组织用户只会使用本组织的供应商。出现该提示说明本组织尚未配置启用中的供应商(或供应商的「归属组织」与本组织不一致)。请联系管理员在本组织下新增并启用供应商;超级管理员不受此限制。

Q:为什么我的请求没有走我组织配置的供应商?

请检查两点:① 该供应商的 organization 是否与你所在组织一致且处于启用状态;② 若你要按模型名改写并指定供应商,对应「模型路由」的归属组织也须是本组织(全局模型路由对组织用户不生效)。本组织内存在多个可用供应商时,未命中模型路由的请求会走最早创建且启用中的那个。

Q:模型名应该填什么?

填写平台约定或管理员告知的模型名即可。若配置了模型路由,平台会自动改写到你实际使用的那家模型。

Q:密钥只显示一次,忘了怎么办?

出于安全考虑,平台不保存明文密钥。请在管理面板重新创建一个,并禁用旧的。

Q:如何查看我的用量?

登录管理面板,在「用量统计」与「请求日志」中查看调用明细与 token 消耗。

域名适配与扩展

本页为可移植文档:当平台部署到新域名时,只需修改页面顶部的一处配置即可全量替换。

修改方式

用文本编辑器打开本文件,找到顶部的 SITE 配置块:

javascript
const SITE = {
  base: "https://ai.muvocal.com",    // 网关对外域名(含协议,不要以 / 结尾)
  name: "API Gateway Hub",           // 平台名称
  dashboard: "https://ai.muvocal.com" // 管理面板地址
};

把 base 改为新域名(例如 https://api.example.com)后保存,页面内所有示例(Base URL、cURL、SDK 代码)会自动同步更新。

多域名并存 若平台同时服务多个域名,可为每个域名各部署一份本文件(内容仅 SITE.base 不同),或由后端在返回页面时按请求 Host 动态替换。

当前文档默认域名为 {{BASE}}。