dsh-poor-router:为 DeepSeek Harness 做的免费/廉价模型池路由

前言

在 DeepSeek Harness(DSH)里跑智能体工作流时,模型往往不是单一付费 API,而是散落在各处的免费额度:厂商试用积分、活动赠额、OpenRouter 的 :free 路由等。它们常在同一晚里先后掉线——请求写到一半断流,手动换模型又撞上另一个半死不活的端点,时间耗在「救火」而不是开发上。

手工记台账、凭感觉切模型,很难同时处理「谁在当下健康」「失败后是否同档无缝替补」「真花钱时是否有上限和通知」这类问题。下面介绍的 dsh-poor-router(README 亦称 poor-router / 穷鬼路由器)是 DSH 生态里的工作流类插件:把多条免费/廉价入口收成统一资源池,按请求记账、用 Thompson 采样做自适应选路,并在流式失败时自动改道。

这是什么

dsh-poor-router 面向 DeepSeek Harness 的 Budget-LLM pool router:维护可达模型的台账(ledger)、健康度跟踪,并在免费档模型之间用 Thompson sampling 做故障转移;带 Web 设置页仪表盘与输入框旁的实时改道路由徽章。

插件版本在 package.json 中为 1.0.0,许可证 MIT,运行环境要求 Node.js >= 20。仓库在 README 安装说明中指向 GitHub 用户 yishengdaxiaonengjihui 下的 dsh-poor-router;社区目录另有 SkillHub 插件页 可作检索入口。SkillHub 与 DeepSeek / 幻方无官方从属关系,DSH 本身也遵循「一切皆插件」的扩展方式,此文仅从公开 README 与包元数据归纳能力,不表述为官方应用商店条目。

README 写明:若能稳定负担 API 账单,这类「穷鬼向」设计并非目标用户——插件只在全部免费候选都不可用时,才通过逃生口动用带日封顶的最便宜付费模型,并用 SMS 告知花费。

核心功能

以下均出自项目 README 与 package.json 描述,按机制分组说明。

自动台账(pool.json)

每次请求按「条目」计量:调用次数、成功 / 失败 / 中止、TTFT 的 EMA、输入输出 token(含 reasoning token)。首次见到的模型会自动登记进 pool.json。

Thompson 采样自适应路由

每条目维护 Beta 后验(成功/失败),配合高斯近似采样;TTFT 惩罚项为 3000ms/ttft;当前小时桶权重加倍。路由决策在 llm/stream 钩子里完成,逻辑概览如下:

llm/stream hook
├─ aux/small request? ──► executor pool (thickest remaining grant)
│                          └─ every 6th ──► epsilon-explore unused free model
├─ provider cooling? ──► pickAlt(): same tier → down A/B/C → escape hatch (paid, capped, cheapest)
├─ model cooling?   ──► pickAlt()
└─ hour-congested?  ──► pickAlt()      (today's bucket fail-rate > 60% @ n≥4)

pickAlt() samples candidates with Thompson sampling × TTFT penalty;
34% chance to inject an unused newcomer into the same-tier window.
Every decision is logged to the ring buffer; nothing writes back to config.

小时桶 v2

拥塞判断仅使用当天本地键 YYYY-MM-DD:HH 的桶,7 天滚动裁剪,避免陈旧数据造成「永久拥塞」误判。

同质量档位梯队

可为模型打 tier: S/A/B/C。改道时优先同级,再顺降 A→B→C,最后才上档;档位可在面板编辑并即时持久化。

Executor 池

将廉价高配额模型标为 role: executor,琐碎/辅助子请求路由到剩余 grant 最厚的一条;每第 6 次此类请求会对未使用的免费模型做 epsilon 探索(另有 34% 同档采样注入)。

真花钱护栏

付费模型设 paid: true,配置每百万 token 价格与日封顶 dailyCapYuan;它们不会进入普通候选列表,仅当所有免费候选都「死亡」时经逃生口按最便宜优先启用,过半日封顶时通过 text_me 发短信警告。

厂商熔断

AUTH/QUOTA 类失败使 provider 冷却 10 分钟,429 冷却 90 秒;冷却状态跨重启保留。

取证与面板

切换日志(环形 50 条)落盘,保留 Thompson 采样记录与 persist 日志;Web 设置页展示可用性排序(后验均值 × 延迟惩罚)、按厂商分组的台账行(可展开改有效期/grant/tier)、近期切换与 TS picks。输入框左侧 ⚡ 徽章在约 5 秒内显示最近一次请求实际服务的模型及原因(如 aux-explore),悬停可看详情,十分钟后变淡,可开关。

Session 工具

插件注册两个会话工具:pool_status(全量快照)、pool_control(setTier、setRouting、setAdaptive、setBadge、setExpiry、setGrant、setDisabled、clearProviderCooldown、reloadPool 等覆盖项)。无 Web GUI 时工具仍可在 headless 环境使用,面板与徽章无处渲染而已。

FAQ 要点:改道不会改变你在配置里固定的模型——按请求无状态,每次从配置模型出发,仅当次调用可能被替换;全部免费模型同时挂掉时走逃生口 + SMS,任一恢复后恢复正常选路。

安装与启用

README 推荐的 GitHub 安装方式为(须原样使用,勿凭插件名自行拼接 owner):

dsh plugin --profile web add github:yishengdaxiaonengjihui/dsh-poor-router

也可在对应 profile 的 package.json 中加入依赖 "dsh-poor-router": "github:yishengdaxiaonengjihui/dsh-poor-router",在 dsh.profile.bundles 中列出,再执行 pnpm install。

本地联调时,在 <DSH_HOME>/profiles/web/ 的 package.json 里用 link: 指向本机路径,例如:

# in <DSH_HOME>/profiles/web/
# package.json dependencies:
"dsh-poor-router": "link:D:/somewhere/dsh-poor-router"

完成后重启 DSH;Web 客户端相关模块由 client-modules 自动打包。

配置

数据与模型条目集中在 pool.json。插件级路径默认 <cwd>/poor-router/,可在 profile 的 cordis.patch.yml 中覆盖:

- id: poor-router
  name: dsh-poor-router
  config:
    dataDir: 'D:/my-data/poor-router'   # base dir for all three files
    # or individually:
    # poolPath: '...'
    # statePath: '...'
    # importPath: '...'
    layerRules:                          # optional default layers by id prefix
      - { match: 'deepseek-official/', layer: 'backbone' }
      - { match: 'tokenrouter/', layer: 'matchstick' }

常用条目字段:

field meaning
id provider/model — must match what the harness proposes
expiresAt ISO date; urgency sort + panel countdown
grantRemaining / grantUnit executor-pool budgeting
tier S/A/B/C quality ladder (panel-editable)
role "executor" joins the aux-request pool
layer backbone (never burned) / burn / matchstick
paid + priceIn/OutYuanPerM + dailyCapYuan real-money guardrail
escapeHatch allow this paid model as last-resort

先在 DSH 中启用插件并跑通若干真实请求,让未见过的模型自动进入 pool.json;再在面板或 pool_control 中补全 expiresAt、grantRemaining、tier、role 与付费护栏字段,与你在 Harness 里配置的 provider/model id 保持一致。

适用场景与注意

适合:长期混用多条免费或极低价 LLM 额度、希望 DSH 工作流在单点失败时自动同档替补、需要可视化台账与改道原因的场景。

注意:

  1. 插件以当前 DSH 进程权限运行,安装前请阅读源码与 MIT 许可证,并确认 text_me、付费逃生口等配置是否符合你的风控要求。
  2. 安装命令中的 GitHub 坐标以 README 原文为准(yishengdaxiaonengjihui/dsh-poor-router),与目录站展示路径可能不同,以你实际 dsh plugin add 的源为准。
  3. 逃生口会花真钱并可能发短信;免费池全部不可用才会触发,但仍需自行设置 dailyCapYuan 与价格字段。

结尾

dsh-poor-router 把分散的免费额度当成一个池:记账、采样选路、熔断与同级改道,尽量让 Harness 会话在配额抖动时仍能跑完;必要时才动用封顶付费模型。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜