OctaFuse Gateway 2.18.0 可以把网关里的 MCP 服务提供给外部系统。用户不用填写 API Key,用自己的业务账号登录并授权,就能访问这些服务。路由上的 Provider 粘性也可以直接查看当前分配、调整有效期,并手工解绑。

流式请求不再把上游的注释心跳当成模型已经开始输出。目录补上 GPT-6.1 Terra 和百度云模型服务 V2 的四个地域模板。已经导入的模型和供应商不会被新目录覆盖。

01|MCP OAuth

如果要把网关里的 MCP 服务提供给外部 Agent 使用,以前只能把 API Key 交给对方。Key 发出去之后,很难按人或按应用收回,也接不进对方自己的账号体系,还容易泄露引发安全问题。

这一版可以换成登录授权。你在后台填上自己的账户系统。外部用户在 ChatGPT、Cursor 等客户端里打开 MCP 时,会跳到这个账户系统登录并同意授权,然后就能调用网关里的 MCP 服务,不用粘贴 Key。登录页仍是你的业务系统,网关不保管对方的账号密码。

入口在 MCP 服务 → 客户端接入与授权。打开「OAuth 2.0 授权登录(可选)」,填写授权服务器地址并保存。不打开时,原来的 API Key 方式保持不变。地址使用 https;本机开发可以用 http localhost。关闭并保存,就会停用这种登录方式。

MCP 服务的客户端接入页,OAuth 登录已打开,授权服务器地址已遮盖

登录授权已经打开。用户连接 MCP 时会去这里填写的业务账户系统登录。地址已遮盖。

这样授出的权限只用于访问 MCP。拿它去调用聊天或模型列表等其它接口会被拒绝。授权默认 1 小时有效。过期之后,或者你在后台撤销之后,客户端会重新要求登录。费用记在完成授权的那个网关用户上。

同一页的「接入指南」可以在 API Key 和 OAuth 登录之间切换。OAuth 方式给出 ChatGPT 连接器、Cursor、VS Code、Claude Code 和 Codex 的免 Key 步骤,并提示账户系统是否已经配好。

已经授出的连接集中在「OAuth 访问令牌」里,可以按应用或用户查看、撤销。用户详情页也能看到这个人授给了哪些外部应用。请求日志会标出来自哪个应用。

使用上还有几处变化:

  • 客户端需要一次调用一个工具。以前塞在同一批里的多次调用,会绕过按次限流。
  • 上游没有返回可用的工具结果时,不再扣费。
  • 客户端询问有哪些资源模板时,网关会正常回答。目前没有模板,所以列表是空的。

02|粘性绑定

以前要确认某个用户粘在哪个供应商上,得先知道邮箱再反查。这一版在路由页把「Provider 粘性」收成一个弹窗,对着当前入口就能维护。标题下面是这条入口的模型、协议和路由组,例如 Qwen3.7 Plus、OpenAI chat、default。旁边标明「已启用」或关闭。

弹窗分成 配置、分布、明细、其他。

配置用来开关粘性,并选择绑定有效期:1 小时(默认)、2 小时、6 小时或自定义。同一用户在同一模型、路由组和协议下,优先复用上次成功的 Provider。保存后,这项设置对本路由池关联的所有入口生效。还没保存时可以撤销修改。

Provider 粘性的配置页,已启用,有效期选中 1 小时(默认)

配置页。这条入口是 DeepSeek V4.1 Flash、OpenAI chat、default。粘性已启用,有效期选的是 1 小时(默认)。

分布按优先级列出供应商,能看到权重、当前绑定数和全池占比。绑定数不是请求量,同一个用户也可以有多条绑定。点蓝色的绑定数,会打开明细并筛到这个供应商。

Provider 粘性的分布页,优先级 3 有 1 条绑定并占全池 100%

分布页,当前有 1 条有效绑定。优先级 3 里这一条占全池 100%,同层另一条和优先级 1 的阿里云百炼是 0。账户名称已遮盖。

明细列出仍有效的绑定,按最近活跃排序。可以用供应商下拉筛选,也可以按邮箱或用户 ID 精确查询,查询结果包含已经失效的记录。每一行是用户、Provider、剩余有效时间和「解绑」。解绑只作用于这一条,下次请求按现有策略重新选路,仍可能选回原来的 Provider。悬停剩余时间可以看到具体过期时刻。

Provider 粘性的明细页,筛到千问 AI 平台,剩余 59 分钟,可逐条解绑

明细筛的是千问 AI 平台(Token Plan)。这条绑定还剩 59 分钟,右边可以解绑。用户和账户名称已遮盖。

其他用来一次让本路由池的全部有效绑定失效。确认框会写出影响条数。粘性开关和有效期保持不变,用户下次请求重新选路。

升级前已经存在的有效绑定会继续使用。用户名要等下次成功调用才补上,在那之前显示为「未记录用户」,不用单独回填。

03|流式等待与目录

有的上游会先不断发心跳,很久才真正出字。以前这种请求会一直挂到大约 10 分钟。现在只有真正的内容才算开始输出,心跳不再把等待时间往后推。

默认大约 60 秒还没等到第一个有效内容,就会换下一个供应商。如果这已经是最后一个可用供应商,会继续等到首包超时,避免过早失败。连响应头都等不到时,同样会换下一家;全部失败,调用方才会收到失败。想关掉这种提前换路,把 STREAM_FIRST_EVENT_TIMEOUT_MS 配成 0。没有单独指定路由组时,这个超时对所有路由组生效。以前只在 default 组试用过的部署,升级后范围会变大。

Gemini 对话如果因为历史思考签名对不上而失败,网关会清掉这些签名,并向同一个上游再试一次。其它失败仍直接返回。

排障时,日志会写明试了哪一家、为什么失败、还有没有下一家。调用方看到的错误内容不变。

路由列表按可用宽度使用上下分区或左右分区。宽屏保留名称、模型、配置摘要这一层,状态、权重、粘性和参数分开排列。

目录变化 说明
GPT-6.1 Terra gpt-6.1-terra。Standard 短上下文为每百万 token 输入 $1、输出 $5,缓存读取 $0.05、30 分钟缓存写入 $1.25。输入超过 272K 时整单按长上下文计价:输入 $2、输出 $7.5,缓存读取 $0.10、30 分钟缓存写入 $2.50。人民币价是美元刊例 ×7 的占位价。导入后需要自己配置供应商和路由。
百度云模型服务 V2 广州、新加坡、加利福尼亚、法兰克福四个模板,与百度千帆分开,地域 Key 不能混用。广州只含对话(OpenAI Chat / Responses、Anthropic Messages)。其余三地另含图片生成与编辑,以及 Bearer 鉴权的 Gemini 文本和生图。不含向量、音频和视频。已导入的供应商不会被改写。

升级到 2.18.0

这个版本需要执行数据库迁移 0034 和 0035。 0034 为粘性绑定增加可空列 affinity_key。0035 新增表 oauth_access_tokens,并为请求日志增加可空列 oauth_access_token_id。D1、Postgres、MySQL 的脚本语义一致,详见 0034 迁移说明 和 0035 迁移说明。

建议按以下顺序操作:

  1. 备份数据库。
  2. 使用 v2.18.0 的 migrate 镜像,或按编号先执行 0034,再执行 0035。
  3. 再滚动更新同版本的 Proxy 和 Admin。

0034 还没执行时,新版写入粘性绑定会失败。请求仍会路由,但这一次不会记下绑定。0035 还没执行时,新版写入请求日志会失败。旧版 Proxy 和 Admin 可以配合已经迁移过的库。

兼容性方面:

  • 不填写授权服务器时,MCP 仍用 API Key,不会改成必须登录。
  • MCP 需要一次调用一个工具,不能再把多次调用塞进同一批请求。
  • 流式首事件超时在路由组配置为空时作用于全部路由组。以前只在 default 组灰度过的部署,升级后范围会扩大。配成 0 可以关闭。
  • 已有粘性绑定继续有效。用户信息在后续成功调用续期时补全,补全前显示为「未记录用户」。
  • 已经导入的模型价格和供应商不会被新目录覆盖。GPT-6.1 Terra 和百度云模板需要手工导入,并自己配置路由。

完整变更与升级说明见 GitHub Release v2.18.0 和 更新记录。

如果 OctaFuse 对你的项目有帮助,欢迎在 GitHub 上点一个 Star 支持一下。如果您对该项目感兴趣,也欢迎 PR 贡献,我们也正在持续寻找感兴趣的伙伴兼职/全职加入。