dsh-plugin-task-budget: Set a RMB Spending Cap for Each DSH Conversation Turn

前言

在 DeepSeek Harness(DSH)里跑智能体,一轮对话里可能连续触发多次模型请求:主对话、压缩、内部标题生成等。费用按 token 和时段累加,若不设边界,单轮成本容易在不知不觉中抬高。社区插件 dsh-plugin-task-budget(维护者 i1537725423-dotcom)的做法是:给每一轮对话设一个人民币上限,默认 5 元;到线后在下一个模型请求发出之前停住,并在输入框下方状态栏最右侧显示开关与本轮累计花费。下面介绍它的定位、计费口径、安装方式与使用注意。

这是什么

任务预算插件给 DSH 的每一轮对话配置 CNY 花费上限(默认 5 元)。超限后不在本轮继续向模型发新请求;开关和「已花 / 上限」显示在 composer 状态栏最右侧(无单独标签、无图标,字体颜色与同排其他条目一致)。分类归属社区目录中的「模型推理」;源码与说明见 GitHub 仓库,许可证 MIT(© 2026 liuzhixian)。DSH 生态强调「一切皆插件」;SkillHub 插件页 是社区目录站点,与 DeepSeek / 幻方无官方从属关系。

界面与操作

状态栏右侧大致形如:

                     ... 这一行其他条目 ...    (开关) ¥0.32/5.00
  1. 点开关:立即开启或关闭限额;开启时轨道为深灰,关闭为浅灰。
  2. 点金额:就地展开输入框,修改上限后点「保存」或回车;Esc 取消。
  3. 超限时金额变红,本轮已被自动停止;调高上限或关闭开关后,下一条消息可照常发送。

核心功能:估算、拦截与配置

花费如何估算

插件按每轮累计的 assistant/message.usage(token 数)× DeepSeek 官方价目表折算人民币:

模型 缓存命中输入 缓存未命中输入 输出
deepseek-flash 0.04 / 0.02 2 / 1 8 / 4
deepseek-v4-pro 0.30 / 0.15 9 / 4.5 27 / 13.5

单位:元 / 百万 tokens;每格为「高峰 / 空闲」。高峰指北京时间周一至周五 9:00–12:00、14:00–18:00,其余时间(含周末)为空闲。

需要知道的口径与限制:

  • 这是按 token 的估算,不是平台出账数字;DeepSeek 的 Search / Fetch 按次计费、以及价目表之外的费用不计入。
  • 法定节假日未内置,仍按工作日高峰价计——只会高估,不会低估。
  • 压缩、生成标题等内部模型调用记账但不拦(拦截会破坏会话),极端情况下可能略超上限。
  • 若最后一个请求发出时未超限、跑完才超,会允许该请求跑完,下一步前再停。

拦截点

  1. agent/pre-step:下一步进入前,若本轮已花 ≥ 上限,直接拒绝(干净停止,不产生报错)。
  2. llm/stream:所有模型请求的必经之路再兜一层;若 pre-step 未拦住(例如压缩触发),此处抛出「已达本轮花费上限 ¥5.00(本轮已花 ¥5.12),已自动停止……」,请求不会发出。

配置文件与本地接口

cordis.patch.yml 里该行的 config 仅为出厂默认值;界面上改过的值写在状态文件里,优先于 config。

- insert:
    - id: task-budget
      name: 'dsh-plugin-task-budget'
      config:
        enabled: true     # 默认开
        limitCny: 5       # 默认 5 元
        rates:            # 可选:覆盖某个模型的单价(元/百万 tokens,[高峰, 空闲])
          deepseek-flash: { hit: [0.04, 0.02], miss: [2, 1], out: [8, 4] }
        # stateFile / diagFile / diag 一般不用写,默认落在 $DSH_HOME/task-budget/

enabled / limitCny 也可通过本机 HTTP 接口修改(需请求头 x-dsh-task-budget: 1,端口替换为当前 DSH 进程端口):

curl -s -H 'x-dsh-task-budget: 1' \
  'http://127.0.0.1:<端口>/task-budget/state?session=<会话id>'
curl -s -H 'x-dsh-task-budget: 1' -H 'content-type: application/json' \
  -d '{"enabled":true,"limitCny":3}' \
  'http://127.0.0.1:<端口>/task-budget/config'

另有 GET /task-budget/status 可查看所有在记的会话。

数据目录(不写插件包内,升级 npm 包不会丢自定义状态):

文件 说明
$DSH_HOME/task-budget/state.json 界面改过的开关与上限;删掉即回出厂默认
$DSH_HOME/task-budget/diag.log 诊断日志:webServer 挂载与非轮询请求

插件不向外发请求、无遥测;接口只监听本机回环地址,且要求上述自定义请求头。

安装与启用

任选一种方式安装,装完刷新页面即可,无需重启 App。

插件市场 / 插件页:搜索 task budget(或 dsh-plugin-task-budget)→ 安装 → 刷新页面。

GitHub 直接装(<profile> 换成你的 DSH profile):

dsh plugin --profile <profile> add github:i1537725423-dotcom/dsh-plugin-task-budget

npm(发布后):

dsh plugin --profile <profile> add dsh-plugin-task-budget

本地开发调试可链到工作目录:

dsh plugin --profile <profile> add link:$(pwd)

运行环境要求 Node.js >= 22(见 package.json engines)。

典型用法

日常使用时,保持默认开启、上限 5 元即可在状态栏观察 ¥已花/上限。需要放宽或收紧单轮成本时,点金额就地改上限;临时关闭限额则点开关。若要通过脚本或外部工具统一改配置,使用上一节的 curl 示例即可。

排查「控件可见但开关灰、点不动」:多为客户端拿不到 /task-budget/state。插件每 2 秒核对 webServer 并补挂路由;可自检:

curl -s -H 'x-dsh-task-budget: 1' http://127.0.0.1:<端口>/task-budget/state   # 200 且有 state 即接口正常
tail -5 "$DSH_HOME/task-budget/diag.log"

适用场景与注意

适合在 DSH 里长时间跑 agent、工具链多、模型调用频繁,又希望单轮成本可预期、可一眼看到的开发者。务必记住:估算是 token 口径,不等于账单;内部调用与「最后一发请求跑完才超」等边界下,实际花费可能略高于显示上限。

插件以当前 DSH 进程的权限运行,会读写 $DSH_HOME/task-budget/ 并在本机暴露 /task-budget/* 接口。安装前建议阅读 仓库源码 与 MIT 许可证,确认符合你的安全与合规要求。

结尾

dsh-plugin-task-budget 用「一轮一价、到线即停」把单轮对话的模型花费框在可配置的人民币上限内,并在 composer 状态栏右侧给出开关与实时累计。目录页:SkillHub · dsh-plugin-task-budget;源码与完整说明:GitHub · i1537725423-dotcom/dsh-plugin-task-budget。

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

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

Xiaoye