请输入管理密码

WebUI 受密码保护,登录后才能查看与修改配置

忘记密码?在服务器上执行 python migrate.py password 重设
API Console
多渠道混合 · 统一模型名
网关运行中
—

总览仪表盘

主渠道 + 经济渠道统一调度,对外统一模型名
总请求数
0
成功 0 · 失败 0
经济渠道占比
0%
主渠道 0%
已节省成本
$0
实际支出 $0 / 全主渠道 $0
平均延迟
0ms
故障切换 0 次

渠道分流实况

主渠道池0
经济渠道池0
对外统一模型名 —
当前策略 —
近 24 小时请求量

各渠道路由情况

可添加任意数量的主渠道与经济渠道。同类渠道按权重随机分配;某渠道连续失败会被临时熔断, 自动切到同类其它渠道,仍不行才跨类兜底。
还没有渠道,点上面的按钮添加一个。

网关服务设置

调用方看到的 model 字段 / /v1/models 返回值
单个渠道可在编辑里单独覆盖

调度策略

决定哪些请求落到经济渠道池

策略干跑(不发真实请求)

输入一段 prompt,模拟 200 次决策,看分流结果
估算 tokens
—
走经济池
—
走主渠道池
—
判定依据
—

模型目录(对外暴露 /v1/models)

目录内的模型才会被 GET /v1/models 列出;请求目录外的模型一律返回 400。每条可选「扮演角色」,把该模型名强制路由到对应渠道进行模拟。
目录为空,请在右侧添加至少一条。空目录时 /v1/models 与旧逻辑一致,且不做 400 拦截。

新增模拟模型

指定后,请求该模型名一律走所选渠道模拟
经济渠道的模型常在回答里自曝真实名字(「我是 xxx,由 xxx 开发」)。这里给它注入一条最高优先级的 system 身份设定,并对回包做兜底替换。请用于自有业务的品牌统一,面向终端用户时请先确认上游条款允许转接。

注入规则

可用变量:{public_model} 对外模型名、{provider} 提供方、{date} 当天日期
各渠道的真实模型名会自动加入,无需重复填写

效果预览

不发真实请求,只看注入后的 messages 与替换结果
注入状态
—
替换词条
—
注入后的 messages
—
兜底替换效果
—

实测

保存后去「在线测试」问一句「你是谁」,看它还会不会自曝。

对话测试(真实走调度链路)

发送一条消息,观察它究竟落到了哪个渠道 —— 返回内容里的模型名始终是主渠道那个。

本次调用透视

对外模型
—
渠道类别
—
命中渠道
—
真实模型
—
判定依据
—
延迟
—
Token
—
本次成本
—
若渠道配置有误,这里会看到错误详情;开启失败切换后会自动换到其它渠道。

请求日志

每次调用的来源 IP、调用方、落点与耗时;点击任意一行可展开查看本次提问与回复内容。
时间IP调用方类别渠道对外模型 in/out延迟状态
暂无请求记录,去「在线测试」发一条试试

访问密钥与专属线路

为每个使用方发放独立密钥:绑定固定渠道即「专属线路」(不走轮询、失败也不切换到别的渠道);可为单个密钥单独设置每分钟限额。绑定留空则走统一调度。
名称密钥专属线路RPM状态操作
还没有访问密钥;未配置时按全局策略开放或校验。

全局限流

来源 IP 与黑名单

按最近记录聚合的调用来源,可一键封禁可疑 IP。
IP调用次数关联调用方最近请求操作
暂无来源记录

导出备份

把渠道配置、身份策略、请求日志、统计数据打包成一份 JSON,换机器时直接带走。
导出内容里不含密码,但包含各渠道的 API Key 明文,请妥善保存。

导入备份

粘贴备份 JSON,或选择文件导入。

版本迁移状态

配置版本
—
渠道数量
—
旧版残留
—
从旧版(只有单个主渠道 + 单个经济渠道)升级时,config.json 会在启动时自动迁移为多渠道结构, 原字段备份在 _legacy_backup 里。也可手动执行: python migrate.py check / upgrade / export / import / password

WebUI 登录密码

—
关闭登录保护后,任何能访问该端口的人都能看到和修改全部配置,仅限纯内网自用。 忘记密码时可在服务器执行 python migrate.py password。

网关调用密钥(/v1 接口)

—
客户端调用 /v1/chat/completions 时需带 Authorization: Bearer <该密钥>
这里的密钥管的是「谁可以调用网关」,与上面的 WebUI 登录密码是两套,互不影响。

接入方式

OpenAI SDK
from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8000/v1",
    api_key="你设置的访问密钥",   # 未设置则任意字符串
)
r = client.chat.completions.create(
    model="gpt-4o",                # 对外模型名
    messages=[{"role": "user", "content": "你好"}],
)
print(r.model)                     # 永远显示 gpt-4o
print(r.choices[0].message.content)
curl(含流式)
curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Authorization: Bearer 访问密钥" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","stream":true,
       "messages":[{"role":"user","content":"讲个笑话"}]}'

# 调试:强制本次走经济渠道池
#   -H "X-Blend-Force: cheap"
# 调试:锁定某个具体渠道(填渠道 id)
#   -H "X-Blend-Force: cheap-1"

工作原理

  1. 业务方请求 /v1/chat/completions,模型名写对外统一名。
  2. 网关按策略判定本次走「主渠道池」还是「经济渠道池」。
  3. 在池内按权重挑一个健康渠道转发;被熔断的渠道跳过。
  4. 拿到结果后把响应里的 model 改写为对外统一模型名(流式逐片改写)。
  5. 渠道报错 → 先换同池其它渠道,仍不行才跨池兜底,调用方无感。
  6. 记录渠道、真实模型、token、成本与延迟,供本界面统计省钱效果。

文件与路径

配置文件
config.json
日志文件
data/logs.jsonl
统计文件
data/stats.json
迁移工具
migrate.py
自检脚本
selftest.py
接口文档
/docs
本工具面向自有业务的成本优化。若面向终端用户,请确认上游渠道服务条款允许转接, 并在需要时开启响应头透出真实渠道,避免对最终用户造成误导。

编辑渠道