dsh-task-budget:按任务封顶花销,并把预算写进每一轮提示

前言

在 DeepSeek Harness(DSH)里跑智能体,成本往往按会话累计:多轮工具调用、子任务、峰谷电价差异叠在一起,开发者很难在任务进行中对齐「还能花多少」。仅靠模型自觉节制也不稳定——提示里若只有抽象上限,实际执行仍可能扫全仓、反复调用。

下面介绍维护者 Andromder 的插件 dsh-task-budget(仓库 Andromder/dsh-task-budget)。它在左侧栏展示每个任务(会话)的花费,为每个任务设置独立封顶,超额时硬性拦截工具;同时在每一轮把动态「预算简报」注入模型上下文,把剩余金额换算成可执行的调用次数与文件数上限。社区目录见 Skillhub,与 DeepSeek / 幻方无官方从属关系,属于 DSH「一切皆插件」生态中的第三方扩展。

插件定位

dsh-task-budget 是面向 DSH 的预算护栏插件(package.json 版本 1.0.0,MIT 许可证,要求 Node.js >= 20)。一句话:左侧栏花销看板 + 按任务封顶 + 每轮自动生成的预算简报 + 超额硬停。

每个新任务或对话有各自的封顶金额,默认 ¥0.5,不在任务之间共享。

左侧栏:任务预算面板

启用后,左侧栏出现 任务预算 / Task budget,列出每个任务(会话),包含 token 合计、实际人民币成本、预算进度条和状态。点击某一行可查看:

  1. 每一次模型调用:时间、峰时/谷时档位、模型、input / cache / output tokens、该次费用及累计费用。
  2. 该任务当前轮次模型所见的确切 budget brief(可折叠查看)。

子智能体会话作为独立任务列出,并带 子任务 标识。打开面板时,最新 12 个会话会优先排队加载历史;更早的会话在展开时按需计算,结果缓存在内存中。费用来自已提交的 assistant/message usage 事件,按每次调用时间戳套用峰谷单价,可从日志复现。

按任务封顶与超额硬停

封顶规则要点如下:

  • 每个任务一个数字,默认 ¥0.5,仅作用于该任务。
  • 达到封顶后,下一步被强制转为 ask_user_question;除 ask_user_question 外的工具一律拒绝,直到有人工回复。
  • 用户回复一次后,获得完整延续额度:封顶至少变为 已花费 + continuationStepCny(默认 continuationStepCny 为 0.5)。
  • 已批准的额度写入 $DSH_HOME/budget-guard/grants.json,插件或 Host 重启后不会就对同一任务重复询问。

预算如何进入模型提示

提示分为两块(均本地计算,不额外调用模型):

静态规则(budget-guard:rules)

包含真实费率、金额尺度(例如 ¥0.05 ≈ 一次短答,¥0.15 ≈ 2–3 次调用,¥0.50 ≈ 8–10 次调用等),以及最短路径纪律。

动态任务简报(budget-guard:brief)

每个回答智能体、每一步重建,示例形态如下:

【本任务预算简报 · 自动生成,优先级高于其他计划】
上限 ¥2.306|已花 ¥1.306|剩余 ¥1.000|谷时|平均每次调用 ¥0.050(约可再调用 20 次)
本轮请求:把左侧栏入口的价格显示改成“元/百万 token”…
判定:小改动(精简执行)|本轮上限:4 次调用 / 1 个文件
策略:精简执行。直接改完并做 1 次最小验证;最多 4 次调用、 1 个文件。
硬约束:以上次数/文件数是硬上限…;不扫描全仓库…

简报生成算法(本地)

  1. 分类:根据最近一条实质用户消息的长度、关键词(如「重构/迁移/全量」权重 2,「新增/实现/修复/测试/文档」权重 1)、是否涉及多文件、是否为纯提问,得到 answer | small | feature | large。
  2. 测算 burn rate:用本任务已提交用量的平均每次调用人民币成本(首次调用前默认 ¥0.06)。
  3. 换算工作包:affordable = floor(remaining / avg),选择策略 full、lean、minimal、diagnose(只诊断不改)、answer(不用工具)或 stop(不够一次调用)。
  4. 写入硬上限:最大模型调用次数、最大文件数、搜索/阅读限制、一行预算估计,以及不足一次调用费用时的停止规则。

模型因此看到的不是孤立的「封顶 ¥0.5」,而是「剩余 ¥1.00、约 20 次调用、本次为小改动、最多 4 次调用和 1 个文件」这类可执行约束。

定价与峰谷

README 给出的参考单价(每百万 token,人民币):

  • 谷时:cache hit 0.02、cache miss 1、output 4。
  • 峰时为谷时两倍。
  • 峰时定义为北京时间周一至周五 09:00–12:00、14:00–18:00;周末及节假日全天谷时。

inputIncludesCache 遵循 DeepSeek 记账方式:inputTokens 已含 cache-hit,miss 计数为 input - cacheRead - cacheWrite。

配置

面板会把设置写入 $DSH_HOME/budget-guard/settings.json,默认结构如下:

{
  "enabled": true,
  "capCny": 0.5,
  "continuationStepCny": 0.5,
  "warnRatio": 0.8,
  "inputIncludesCache": true,
  "peakWindows": [{ "start": 1, "end": 4 }, { "start": 6, "end": 10 }],
  "holidays": [],
  "models": {}
}

说明:

  • peakWindows 使用 UTC 小时;{ "start": 1, "end": 4 } 与 { "start": 6, "end": 10 } 对应北京 09:00–12:00 与 14:00–18:00。
  • warnRatio 用于接近封顶时的提醒比例(0.8 即 80%)。
  • models 可覆盖各模型费率,例如:
{
  "deepseek-flash": {
    "offPeak": { "cacheHit": 0.02, "cacheMiss": 1, "output": 4 },
    "peak": { "cacheHit": 0.04, "cacheMiss": 2, "output": 8 }
  }
}

若某模型条目仅有 cacheHit / cacheMiss / output,则按统一单价计价。

安装与启用

已抓取的 README 与 package.json 未给出固定的 dsh plugin add … 安装命令;请勿凭仓库名自行拼接。插件在 npm 上登记为 dsh-task-budget,并配置 dsh.client 在 web 端即时注入 @deepseek-ai/dsh-client-runtime。

建议按你所用 DSH 版本的插件安装说明操作,并在安装前阅读仓库源码与 MIT 许可证——插件以当前 DSH 进程权限运行,可读写 $DSH_HOME/budget-guard/ 下配置与授权文件。具体安装步骤以 GitHub README 与 Skillhub 目录页 为准。

典型用法

  1. 安装并启用插件后,打开左侧 任务预算,确认列表中出现当前与各历史任务。
  2. 视需要调整 capCny、continuationStepCny 或 models 费率覆盖;峰谷窗口与 holidays 与本地计费习惯对齐。
  3. 正常对话开发:每轮模型自动收到 budget brief;在面板中点开任务可核对单次 app 调用明细与简报正文。
  4. 触顶后按提示通过 ask_user_question 确认是否继续;确认后封顶随 continuationStepCny 放宽,且授权持久化在 grants.json。

适用场景与注意

适合需要在 DSH 中按会话控制 API 花费、并让模型在提示层面感知剩余预算与调用/file 硬上限的团队或个人。硬停机制适合防止无人值守时超额,但会打断全自动流水线,需在「省钱」与「连贯执行」之间接受人工确认。

注意:历史会话较多时,旧行首次展开才计算费用,面板打开瞬间不一定全部就绪;子任务单独计费。计费依赖 usage 事件与时间戳档位,若 Host 记账与 models 配置不一致,显示金额需以实际账单核对。

结尾

dsh-task-budget 把花销可视化、封顶和提示约束绑在同一套按任务预算逻辑里:左侧栏看得清,模型每一轮也收得到可执行的剩余额度与策略。欲了解详情或提交问题,可访问目录页 skillhub.cn/plugins/Andromder/dsh-task-budget 与源码仓库 github.com/Andromder/dsh-task-budget。

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

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

Xiaoye