🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

免费模型聚合路由 dushaobindoudou/dsh-freeroute

DeepSeek Harnessv0.10.3
dushaobindoudou12 天前有提交已提供中文文档扫描:未发现敏感能力

DeepSeek Harnessdsh的免费模型聚合代理:注册 freeroute…

43.2/100
综合分
17
GitHub 星标
977
npm 周下载
—/5
用户评分

数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-freeroute
npm 源 · dsh-freeroute 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-freeroute @ 0.10.3
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 22:57:24

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-typert-protocol
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 聚合免费额度模型
  • 免费token路由
v0.10.22026-10-21
· Fixed · 模型标注常驻不消失:⚡ 之前靠宿主的动作行显隐,但宿主只对 「非最后一条回复」启用 hover 显隐 —— 最后一条回复的整行是 [data-actions-reveal=always](时间/复制本来就常驻),标注跟着常驻,看起来 像是「鼠标移开也不消失」。现在标注自己按 hover 语义收口:默认隐去,悬停 动作行(或键盘聚焦行内按钮)才露出;触摸设备(@media (hover: none)) 没有悬停,保持常显。
v0.10.12026-10-21
· Fixed · 持续输出的长推理不再被 600s 整次上限砍断:0.10.0 只解决了「出字前排队」, 出字快但推理很长(实测首 token 25s、整段超过 600s)仍会在已出字后被 curl --max-time 600 砍断、无法切换,整轮失败。现在按阶段约束: - 出字前:首 token 超时(默认 90s);链上最后一个候选放宽到 600s(此前 不设限)。 - 出字后:内容空闲检测,连续 120s 没有新内容(只剩心跳也算)才中止, FREEROUTE_CONTENT_IDLE_SECONDS 可调;内容还在流就不砍。 - curl --max-time 提到 3600s,只作失控兜底。 · Changed · auto 链层内按首 token 耗时沉底慢提供方:按「上游|模型」记录首 token 耗时(指数平均,首 token 超时按超时值记入),超过首 token 超时阈值一半 (默认 45s)的提供方沉到所在层的末尾——稳定排序,不跨层、不删除;样本 30 分钟后过期,网关恢复了会回到原位。此前 glm-5.3-flash @ amd-radeon 这类排队数分钟的网关会长期占着链首,每次都要等满首 token 超时才切走。 注意:链首换成同层另一家时,auto 上报窗口取新链首的窗口(仍装得下本次会话)。 · Tests · integration.mjs 第 22b 段:持续出字超过空闲上限不被砍、出字后只剩心跳被 中止且报错/日志说明原因、首 token 慢的提供方第二次请求被同款快提供方超过。
v0.10.02026-10-21
· Added · 每条回复的模型标注(自动模式):回复的时间(如 13:17)右侧多一个小标签 ⚡ ,悬浮显示上游与请求模型(auto)。此前 auto 模式下用户 只能看到「⚡ Auto」,无从知道这一条到底是哪家上游的哪个模型答的;故障转移 之后尤其需要。实现要点: - 适配器成功出字时记录「真正服务的上游 + 模型」,按 (sessionId, turn, step) 暂存;宿主 assistant/message 落地时绑到该消息的 messageId(适配器在消息 落盘前就被调用,拿不到 messageId,只能靠这个事件对齐键)。 - 客户端挂到宿主的 conversation.chat.assistant-actions 动作行,CSS order: 1 把它排到 endInfo(时间)之后 —— 视觉上就在时间右边,并沿用 动作行原有的 hover 显隐,不新增交互。 - 数据经新 RPC freeroute.served 按 messageId 取回,按会话缓存 1 秒(同批 新消息共用一次请求)。归属只存宿主内存,不写会话日志:dsh 的持久化读 路径会拒绝未登记的未知事件类型(写进去会话就读不回来了),合法的 plugin record 又要求与宿主同一份 dsh-session 模块实例,插件拿不到。代价是宿主进程 重启后历史消息不再标注。 - 只标注会话消息:purpose: 'compaction' / 会话标题这类内部调用、以及没有 sessionId 的调用(本地 /freeroute/v1 入口、面板连通测试)不产生归属。 · Fixed · 「本轮运行失败:上游流在结束前中断」高发:0.9.x 的 auto 锚点常落到 glm-5.3-flash @ amd-radeon、nemotron-3-super 这类免费网关,4~5.6 万 token 输入时首 token 要排队 4~7 分钟,期间只发 SSE 心跳——心跳也是字节,绕过了 90s 读空闲检测;之后的慢推理再撞上 600s 整次上限,在已出字后被 curl 砍断,无法切换上游,整轮失败(实测 4 次失败全部在请求发出后 600.0~600.4s)。 - 新增首 token 超时(默认 90s,FREEROUTE_FIRST_TOKEN_SECONDS 可调,0 关闭):出字前超时即中止并抛 TIMEOUT,按普通失败冷却并切下一家候选。 链上最后一个候选不设此限——后面没有退路时,等慢上游好过直接失败。 · 中断原因终于可见:此前在 curl 退出前读 stderr,实测从未读到内容,报错 永远是笼统的「上游流在结束前中断」。现在等 curl 退出(最多 2s)取退出码, 区分「超过整次上限 600s」「连续 90s 无数据」「连接被重置」「关闭但无 [DONE]」,并附已运行时长。 · 出字后中断写入 freeroute.log(含上游、模型、原因):此前这类整轮失败在 日志里一行都没有,只能从 dsh 会话反推。 · 测试的运行日志改写到临时 DSH_HOME,不再把 mock-* 噪音混进真实 ~/.dsh/freeroute/freeroute.log。 · Tests · integration.mjs 第 22 段:只发心跳的慢上游被首 token 超时中止并切到下一 家、末位候选不设限照常等到出字、出字后中断上抛 STREAM_CLOSED 且报错带原 因与时长、日志留痕。 · integration.mjs 第 20 段:turn/step 跟踪 → assistant/message 绑定 → freeroute.served 读回,覆盖多步独立成条、compaction 不占用归属、无 sessionId 不写归属、会话销毁后清理。 · client-integration.mjs 第 8 段:动作行条目注册(id/order)、有归属时渲染 frp-served + 悬浮说明、无归属 / 缺 sessionId 时不渲染。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-freeroute DeepSeek Harness(dsh)的免费模型聚合代理:注册 freeroute 模型提供方,聚合多家免费额度上游(OpenCode Zen / B.AI / OpenRouter / SenseNova 四家内置,外加远程目录与自定义网关;其余厂商经远程目录接入)。配好任意一家 API Key 即可用;上游失效时在出字前自动切换,对会话透明;另提供本地 OpenAI 兼容端点。 "免费"指各家正规的免费额度,密钥由你自己注册提供。本插件不做共享号池,也不会绕过付费 API。 密钥管理 - 多 Key 轮换:免费额度按账号计,每个上游支持最多 8 把 Key(编辑框里用换行/逗号分隔,或环境变量 KEY_2…KEY_8)。鉴权 / 限流失败只冷却这一把 Key 并自动换下一把,不会连累上游整体。当前这把不失效就一直用它(同账号连续请求,上游提示词缓存也能命中),失效后换到的新 Key 同样一直用下去。「这款模型只对某些客户端/地区/套餐开放」这类 403 属于模型级门禁:不换 Key、不冷却上游,只把这款记 30 分钟、期间直接跳过。 - 默认掩码:密钥框隐藏态是不可编辑的 •••••• 掩码,点「显示」才打开编辑器并预填完整 Key 环(一行一把,可直接编辑);保存后自动回到掩码态。
展开完整文档(README 剩余 1 节)
dsh-freeroute

DeepSeek Harness(dsh)的免费模型聚合代理:注册 freeroute 模型提供方,聚合多家免费额度上游(OpenCode Zen / B.AI / OpenRouter / SenseNova 四家内置,外加远程目录与自定义网关;其余厂商经远程目录接入)。配好任意一家 API Key 即可用;上游失效时在出字前自动切换,对会话透明;另提供本地 OpenAI 兼容端点。

"免费"指各家正规的免费额度,密钥由你自己注册提供。本插件不做共享号池,也不会绕过付费 API。

密钥管理

- 多 Key 轮换:免费额度按账号计,每个上游支持最多 8 把 Key(编辑框里用换行/逗号分隔,或环境变量 KEY_2…KEY_8)。鉴权 / 限流失败只冷却这一把 Key 并自动换下一把,不会连累上游整体。当前这把不失效就一直用它(同账号连续请求,上游提示词缓存也能命中),失效后换到的新 Key 同样一直用下去。「这款模型只对某些客户端/地区/套餐开放」这类 403 属于模型级门禁:不换 Key、不冷却上游,只把这款记 30 分钟、期间直接跳过。
- 默认掩码:密钥框隐藏态是不可编辑的 •••••• 掩码,点「显示」才打开编辑器并预填完整 Key 环(一行一把,可直接编辑);保存后自动回到掩码态。
密钥只经 credentials 服务存取,绝不以明文写入配置。
- 失效可见:轮换中检测到某把 Key 失效时,面板会提示 「第 N 把 Key 失效」(哪一把、什么原因),坏账号一眼可见,不必翻日志。

原理

1. 适配器注册:llm.registerAdapter(['freeroute'], adapter) 注册成 dsh 模型路由。模型选择器出现 freeroute/auto(自动故障转移)与 freeroute/<上游id>/<模型id>(指定模型)。
2. 请求翻译:dsh 内部消息 ⇄ OpenAI Chat Completions SSE;reasoning、 tool_calls、usage 全量透传。密钥只经 credentials 服务存取。
3. 健康与故障转移:失败按类别冷却(鉴权/配置 10 分钟、限流 60 秒、其他指数退避封顶 10 分钟)。auto 的候选链分四层:锚点模型(「多少家上游都有这款模型」的交集家数最多者,目录声明的 quality 只在打平时裁决)在各家装得下本次会话的提供方,窗口大的在前(同款换厂商,能力不变、最无损)→ 窗口不低于链首的其他模型 → 装得下本次会话的其他模型 → 其余兜底(沉底不删除)。窗口按每一家的实际值判断,同款模型在不同网关的窗口可能差很多。未出字的请求失败即切下一家(含空响应检测),已出字的直接抛错。上游 90 秒内没吐出首个 token (排队、只发心跳)也视为失败并切下一家(链上最后一个候选放宽到 600 秒),首 token 慢的提供方在所在层内沉底;已出字后只要内容还在流就不中断,连续 120 秒没有新内容才中止。
环境变量 FREEROUTE_FIRST_TOKEN_SECONDS(0 关闭)/ FREEROUTE_CONTENT_IDLE_SECONDS 可调整。Key 在鉴权/限流失败时单独轮换,并把失效的那一把提示到面板。
4. 配置三层合成:内置目录 → 远程目录(Cloudflare 托管 JSON,免发版更新;兼容 native 格式与 models.dev api.json,自动筛 0 成本模型)→ 用户 patch (free-proxy 设置命名空间持久化)。
5. 本地端点:/freeroute/v1/chat/completions + /freeroute/v1/models,任意 OpenAI 工具指向它即用同一套免费池。
6. 全局代理(默认关闭):设置 → 模型 → 免费 → 高级设置 里配置一条 http://127.0.0.1:7890 型代理,所有未单独配置代理的上游(对话请求与模型探测)自动走它;上游自定义或目录声明的 proxy 优先于全局;远程目录同步始终直连。大陆网络用户把 Clash/v2ray 端口填一处即可,无需逐个上游配置。

设置面板

dsh 内置的 设置 -> 模型 页被可逆地包装增强:标题与介绍保持原位,
介绍之后多一排 「默认 | 免费」页签(结构对齐「设置 -> 插件」页:下划线页签、aria 角色、方向键导航、访问过的面板保持挂载):

- 默认:原有模型设置原样保留;
- 免费:完整 freeroute 面板,形态与「设置 → 插件」页一致——每家上游一张可展开卡片(卡片头:名称 + 状态摘要 + 优先级 + 启停开关,点击就地展开密钥 / 连通测试 / 探测模型 / 申请链接),「模型」与「高级设置」(全局代理 + 远程目录)也是同款卡片。

设置导航里没有独立的 freeroute 平级项(仅当宿主没有可包装的模型页时才退回独立设置页)。/freeproxy 命令输出文本状态。

每条回复的模型标注

auto 模式下界面上只显示「⚡ Auto」,看不出这一条到底是谁答的。现在每条回复的 时间右侧(13:17 之后)多一个小标签 ⚡ <实际服务模型>,悬浮显示上游名与请求模型(auto);动作行沿用宿主的 hover 显隐,不新增交互。故障转移换过上游时,一眼就能看出这一条落到了哪家、哪个模型。

归属只存宿主内存、不写会话日志(dsh 的持久化读路径拒绝未登记的事件类型),所以 dsh web 进程重启后,历史消息不再显示标签;新消息不受影响。

让其他 Agent / 工具接入(一直用 auto)

dsh web 启动后,本插件在同一端口上暴露一个 OpenAI 兼容端点,任何
支持自定义 base URL 的 agent / 工具都能直接复用这套免费池:

- Base URL:http://127.0.0.1:<dsh web 端口>/freeroute/v1 (默认端口 3080;免费面板底部也显示当前完整地址)
- API Key:不需要。端点仅监听本机回环;某些工具强制要求非空 Key,随便填占位符即可(如 sk-freeroute)
- 模型:填 auto 或干脆不传(默认就是 auto)——按优先级自动选已启用的免费上游,失败 / 限流 / 首 token 中断时全链自动切换,单模型失败自动降级为链式 fallback,无需人工干预
- 能力:stream、tools(function calling)、stop、temperature、 max_tokens 均透传;CORS 已开放,浏览器内插件可直连
- 健康检查:GET /freeroute/health;模型列表:GET /freeroute/v1/models (第一项就是 auto)

curl 示例(最简,不带 model 即 auto):

curl http://127.0.0.1:3080/freeroute/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"messages":[{"role":"user","content":"你好"}]}'

常见工具配置:

| 工具 | 配置 |
| OpenAI SDK | baseURL: 'http://127.0.0.1:3080/freeroute/v1',apiKey: 'sk-freeroute',model: 'auto' |
| Codex CLI | ~/.codex/config.toml 里 model_provider 指向该 base URL(wire_api = "chat") |
| Cline / Roo / Continue | OpenAI Compatible,Base URL 同上,模型名 auto |
| 任意 OpenAI 兼容网关 | 把本端点作为上游挂进 uni-api / new-api / LiteLLM 即可 |

注意:端点随 dsh web 进程存活(同机使用);至少在免费页签给一个上游配好 Key,auto 链才有可用节点。

安装

dsh plugin --profile web add dsh-freeroute

要求:Node.js ≥ 18;宿主提供 llm / timer;settings / credentials / subprocess / webServer / commands / agentDefaultModel 缺失时优雅降级。

开发

分层源码(详见 src/README.md):

- src/ 是唯一手改入口,按层拆片:src/host/(20 片:常量 → 目录解析 → 上下文/状态 → 密钥/探测/模型/健康 → 传输/路由/HTTP → 接管/RPC/命令/端点/ 启动)、src/client/(10 片:样式/上下文 → 面板状态/头部/上游/高级/模型 → 模型页/集成/插件尾)。
- npm run build:dynamic 把 src/* 装配成 freeroute-dynamic/ {host,client}.js(动态加载器要求的单函数体形态,版本号从 package.json 注入)。
- freeroute-dynamic/ 带集成测试 137 项: node freeroute-dynamic/test/integration.mjs。
- npm run build:static 从装配产物机械生成 lib/(RPC 层替换为 Typert Remote + Connection 载体),请勿只手改一侧;build:static 会先跑 build:dynamic。
- npm run lint && npm test:lint + 真实 cordis 根上的冒烟测试。
- 模块同一性:@deepseek-ai/dsh-typert-protocol 必须与 dsh 宿主解析到同一份物理副本。宿主网关从它自己那份模块私有的 WeakMap 读取 Remote 方法标记;插件 workspace 自带 pnpm 副本时标记记进了另一份 WeakMap,网关一个方法都扫不到,/api/freeroute/ 静默注册不上(客户端看到 HTTP 404,服务端无任何报错)。v0.7.3 起 lib/index.js 在加载时直接锚定宿主自己的副本(运行中的 dsh CLI 入口 → 全局 npm 布局 → 回退),不再依赖 postinstall、软链或宿主版本。旧版本若出现 transport failure for /api/freeroute/state: HTTP 404,升级到 ≥0.7.3 即永久修复。

诚实的边界

本插件聚合的是「你自己注册的免费额度」。若需多租户 / 计费 / 渠道管理,建议自建 uni-api、new-api 或 LiteLLM,再把它的地址作为本插件的自定义上游接入——两者互补,不重复造轮子。

Web 面板(可选)

lib/client.js 会在 dsh web 设置里注册「免费模型」分区,排行与命令一致,点击即设默认。dsh 的 web 前端是预构建产物,面板需要在 dsh-web-frontend 的 client bundle 里加入本包并重新构建才会出现; free-models-preview.html 是独立镜像预览(把仓库根目录起个 HTTP 服务再打开即可),无需重新构建前端。

License

MIT © dushaobindoudou
预览分享卡片长什么样 ↓dushaobindoudou/dsh-freeroute
分享 · DeepSeek Harness Hub
dushaobindoudou/dsh-freeroute

DeepSeek Harnessdsh的免费模型聚合代理:注册 freeroute…

回到顶部