dsh-turn-budget: Adding fail-closed steps, tools, and token budgets to DeepSeek Harness per turn

前言

跑长回合的 Agent 开发者大概都遇到过这样的情况:模型在一个回合里反复调用工具不肯收手,或者一次响应消耗的 token 远超预期,等察觉时配额已经烧掉一大截。DSH(DeepSeek Harness)的理念是一切皆插件,这类资源上限问题同样可以不改框架代码、交给插件解决。下面介绍的 dsh-turn-budget 做的就是这件事。

这是什么

dsh-turn-budget 是 DeepSeek Harness 的一个 fail-closed 资源治理器,由 Nunchakus888 维护。它按每个 Agent 回合独立设置三类上限:模型步骤数、根/嵌套工具执行次数,以及 provider 上报的精确 token 用量。一旦额度用尽,后续请求会在执行前被拒绝。

当前版本 0.1.0,MIT 许可证,Node 引擎要求 >=22.19.0 <23 || >=24.0.0。实现上只使用 DSH 的公共扩展点:package.json 中 dsh.bundle.patch 指向 cordis.patch.yml

拦截语义

插件通过 DSH 的钩子完成拦截,三项上限的行为各不相同:

上限 拦截时机 计入的工作 超限结果
maxStepsPerTurn 下一次模型请求前 当前回合已进入的请求 拒绝该步骤,回合以 blocked 关闭
maxToolCallsPerTurn 每个工具体执行前 根调用,加上携带 Agent 的 Code Mode/嵌套派发 返回指明超出哪项预算的策略错误,模型仍有一次不借助工具完成的机会
maxProviderTokensPerTurn 下一次模型请求前 每步最新的 provider 用量,含缓存读/写分桶 上报总量达到上限后拒绝该步骤

对应的钩子分工如下:

1、agent/pre-step:拒绝将超出步骤或 provider-token 上限的模型请求。
2、tools/pre-execute:在派发前拒绝已耗尽工具调用额度的工具请求。
3、tool/resultturn/end:借助现有记录,把策略结果保留在标准 Session 日志中,不另起日志通道。

关于 token 上限有两点需要明确:它只在 provider 上报用量时才精确,缺失的用量不做估算;provider 也可能在当前响应内超出上限,插件只能阻止后续请求,因为公共生命周期没有提供可抢占的 token 流预算。

安装与启用

从 checkout 安装:

git clone https://github.com/Nunchakus888/dsh-turn-budget.git
dsh plugin --profile web add ./dsh-turn-budget

接着先查看生效配置,再运行:

dsh --profile web --dump-config
dsh --profile web

内置的 profile 层默认提供一组保守基线:每回合 24 个模型步骤、40 次工具执行。

覆盖上限

经过上面的步骤,插件已经按默认基线工作。如果部署需要不同的上限,在 profile 的 cordis.patch.yml 中覆盖完整配置行:

- update:
    id: turn-budget
    config:
      maxStepsPerTurn: 16
      maxToolCallsPerTurn: 32
      maxProviderTokensPerTurn: 250000

三项均可配置,但每项必须是正的安全整数,且至少需要配置一项。

边界与注意事项

  • 定位是熔断器(circuit breaker),不是计费系统:不估算货币成本、不改写工具参数、不替代沙箱或审批,也不能在步骤中途终止不配合的模型或工具操作。
  • 工具账本是进程内(process-local)的,以活跃 Agent 身份为键;冷恢复会在被中断的回合继续之前将其关闭,也就是说进程重启后无法恢复旧的进行中账本。
  • 集成测试使用已发布的 Harness testkit 启动真实 Agent Loop,覆盖步骤拒绝、派发前工具拒绝、回合重置、最终响应放行、provider-token 记账和重复用量替换。参与开发时,先执行 pnpm install,再执行 pnpm run check
  • 插件以当前 dsh 进程的权限运行。安装任何第三方插件前,建议先阅读其源码并确认许可证;本项目的许可证为 MIT,可直接查看仓库确认。

结尾

dsh-turn-budget 解决的是一个具体问题:让失控的回合在越过上限时尽早停下来,而不是事后人工排查。它把步骤、工具、token 三类额度收敛到每回合独立的三项配置里,行为可在 Session 日志中追溯。适合给自己的 DSH 部署加一道资源底线的运维和开发者。

  • 社区目录页:https://www.skillhub.cn/plugins/Nunchakus888/dsh-turn-budget (独立站点,与 DeepSeek 或幻方无官方从属关系)
  • GitHub 仓库:https://github.com/Nunchakus888/dsh-turn-budget
羽毛球分组比赛记分
小程序二维码

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

Xiaoye