前言¶
跑长回合的 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/result 与 turn/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