前言¶
在 DSH 里把对话路由到 DeepInfra 时,客户端往往只能改模型名和消息体,很难按会话切换 DeepInfra 的 service_tier(Flex 与 priority/Standard)或 fail_fast(忙时立即 429 还是排队)。若要在每个请求里手写这些顶层字段,或自己实现 Flex 失败后再试 Standard,通常得改客户端或中间层代码。deepinfra-fusion-proxy 在本地起一个无第三方依赖的反向代理,统一注入参数并做带 per-session 冷却锁的自动回落;同时以 DSH profile bundle 形式提供安装、Composer 里的 tier 切换芯片和配置页。
这是什么¶
deepinfra-fusion-proxy 由维护者 citydirector 发布,npm 包名与 DSH 插件标识均为 deepinfra-fusion-proxy。它在 127.0.0.1:8790 转发 OpenAI 兼容请求到 https://api.deepinfra.com/v1/openai,对 POST /v1/openai/chat/completions 注入 service_tier 与 fail_fast,其余路径(如 GET /models、embeddings)原样透传。仓库同时包含 DSH 宿主插件、Composer 切换卡片和 bundle 配置页;许可证为 MIT(见 GitHub 仓库)。
核心功能¶
DeepInfra 文档中,service_tier 取 "flex" 或 "priority":Flex 更便宜、尽力而为,容量满时排队;priority 在支持的模型上优先调度、价格更高,响应里会回显实际 tier。fail_fast 默认为 false(排队);为 true 时容量问题会直接返回 HTTP 429,便于代理检测并触发回落。
下面介绍代理侧已文档化的能力(均可在 README 核对):
- Body 注入 — 仅修改 chat completions 请求体,不改动模型可见的消息文本。
- 按会话路由 — 从请求体读取
prompt_cache_key(客户端在cacheRetention: long时会带上)作为会话 id,路由与冷却锁按会话隔离,无需改客户端逻辑。 - 自动回落 — 非 Standard 模式下若 Flex 尝试得到 429,会再试一次 Standard;之后按
fallbackAction为"stay"(留在 Standard)或"cooldown"(为该会话加冷却锁,N 轮后自动回到 Flex)。 - 等待策略 — 每会话可选 fail-fast(
fail_fast: true,忙即 429 再回落)或 wait(fail_fast: false,在提供商上限内排队,DeepInfra 上约最长 10 分钟)。 - 控制 API — JSON 端点可读写状态、配置、解除冷却锁,便于 GUI 或脚本热更新。
- DSH 集成 — 宿主插件随 DSH 启停代理、带退避重启;Cordis
Config字段声明在插件内,DSH 0.1.7+ 下值落在当前 profile 的cordis.patch.yml,修改后可原地重启受管子进程。Bundle 还提供 Composer 工具行的 Standard/Flex、等待策略、冷却与回落行为芯片,以及 Plugins 下的配置页(状态、baseURL、端口等)。
核心仅依赖 Node 标准库(http/https/fs/path);DSH 宿主侧依赖 harness 的 @deepseek-ai/schemastery,由 bundle 安装解析。
安装与启用¶
环境要求:DSH >= 0.2.1-rc.2 且 < 0.3.0,Node.js >= 24.9.0(见 package.json 的 engines)。
图形界面(推荐):侧边栏 Plugins → Add plugin,填入包名并启用:
deepinfra-fusion-proxy
启用后代理随 DSH 在 127.0.0.1:8790 启动。
命令行(修改 CLI 配置前应先停止对应 DSH 实例,改完再启动;Desktop 用户更宜用 Plugins 页,且 desktop profile 需与该安装的 CLI 及相同 DSH_HOME):
dsh plugin --profile web add deepinfra-fusion-proxy
注意:仅把包装进 profile 的 dependencies(例如手动 pnpm add)不等于激活 bundle;profile 的 package.json 需在 dsh.profile.bundles 里列出 deepinfra-fusion-proxy 才会加载 cordis.patch.yml 中的行。Plugins 面板会写入 bundle 条目;手动安装时需自行补上。
两个 profile 共用同一 $DSH_HOME 时,默认共用 $DSH_HOME/deepinfra-proxy 状态目录;若需独立实例,应在配置里为各 profile 设置不同的 stateDir 与 port。
插件在 DSH 进程权限下运行;安装前应阅读 GitHub 源码与 MIT 许可证,确认可接受其行为与网络转发范围。
典型用法¶
先做路由,再做会话级 tier 选择。
- 把 provider 指到本地代理:使用
openai-completions类型 provider,baseURL设为http://127.0.0.1:8790/v1/openai,并设置cacheRetention: long(以便每会话拥有独立的prompt_cache_key)。DeepInfra API key 仍配置在 provider 上,由代理转发时保留Authorization。 - 在 Composer 选 tier:工具行芯片可在 Standard / Flex、等待策略与回落行为之间按会话切换;状态写入代理的
config.json,DSH 重启后仍保留。 - 在 Plugins 查看状态:路径为 Plugins →
deepinfra-fusion-proxy→deepinfra-proxy→ 配置;可查看核心是否运行、失败原因、建议给 llm 路由用的 baseURL 与版本等。
请求路径示意:
OpenAI 兼容客户端(baseURL → http://127.0.0.1:8790/v1/openai)
→ deepinfra-fusion-proxy(127.0.0.1:8790)
→ https://api.deepinfra.com/v1/openai
SSE 分块转发并保留正确头;上游错误映射为 502。
适用场景与注意¶
适合已在 DSH 或本地 OpenAI 兼容栈中使用 DeepInfra、且需要在会话粒度切换 Flex/Standard、控制忙时排队还是 fail-fast、并在 Flex 容量紧张时自动试 Standard 的开发者。不适合期望完全不改 provider baseURL 或不需要 DeepInfra tier 语义的场景。
社区目录 SkillHub 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系;DSH 生态理念是「一切皆插件」,本介绍仅依据公开 README 与 package 元数据。
结尾¶
经过上面的步骤,你可以在不大改客户端的前提下,把 DeepInfra 的 service tier 与回落策略收到本地代理和 DSH UI 里统一配置。进一步细节与无 DSH 单独运行 server.js 的说明见仓库 README。
- 目录页:https://www.skillhub.cn/plugins/citydirector/deepinfra-fusion-proxy
- GitHub:https://github.com/citydirector/deepinfra-fusion-proxy