dsh-think-budget:给单步思考设字数预算,连续无正文时先逼出结论

前言

用 DeepSeek Harness(DSH)跑 agent 时,模型有时会长时间只输出思考过程和工具调用,对话里迟迟看不到正文。你很难判断是在推进还是卡住。

社区插件 dsh-think-budget(维护者 superSizzzz)在 agent 循环里加一层「思考节拍」:单步思考有字数上限,连续多步没有可见结论时,往会话里插入一条提醒,要求模型先用正文写出当前结论再继续。装好后默认生效,不额外调用模型,只在越界时出声。

这是什么

dsh-think-budget 是 DSH 的 Cordis 插件,分类属于模型推理相关能力。它解决的是「思考可见性」问题:对用户而言,看不见的正文等于没发生;插件据此统计步数与思考字数,并在规则触发时推动模型先输出可读的结论片段。

插件当前版本为 0.1.0(见 GitHub 仓库 package.json),采用 MIT 许可。可在社区目录页 skillhub.cn/plugins/superSizzzz/dsh-think-budget 查看条目,源码与文档在 github.com/superSizzzz/dsh-think-budget。

核心功能

插件管两件事,满足任意一条就会介入(且都要求该步同样没有写正文;若思考很长但已写出结论,不会打扰)。

  1. 连续几步没有正文:默认连续 3 步。这里的「正文」指对话里你能看见的部分,模型的思考过程不算。
  2. 单步思考过长:默认单步思考上限 4000 字,且该步仍未写正文。

实现分两层:平时往系统提示里写入节拍规则,让模型自行注意;真正越界时往会话里塞一条提醒。提醒文案示例(标签默认可配置为「思考节拍」):

【思考节拍】你最近连续 3 次回复都没有写正文,只有思考和工具调用。
现在请立即用正文写出你目前的结论 —— 可以很短、可以不完整、可以是
「还不确定,因为…」,但必须写出来。
写完之后如果还需要继续,再继续调用工具。

「还不确定也算结论」是有意留的口子:只要求模型说点什么,不要求想明白,避免为凑数编造答案。

安装与启用

环境要求(来自 README):

项 要求
dsh ≥ 0.1.7-rc.2
Node ≥ 22.6
profile 不限,web / tui / headless 均可
模型 不限;只有会产出思考过程的路由才会触发「思考超预算」相关规则

下面以 web profile 为例安装。一条命令即可,dsh 会读取包内 dsh.bundle.patch 并并入当前 profile,无需手写插件注册:

dsh plugin --profile web add github:superSizzzz/dsh-think-budget

装到其他 profile 时,把 --profile 后的名字换成你的 profile 名,每个 profile 各装一次。

卸载:

dsh plugin --profile web remove dsh-think-budget

装完不用额外操作,插件在流式回复经过时统计字数,README 说明不会拖慢会话。插件以当前 dsh 进程权限运行;安装前建议在 GitHub 上浏览源码与 LICENSE,确认符合你的环境与合规要求。

配置阈值

配置写在安装并入的 patch 逻辑里,没有单独配置文件或设置界面。要调松紧,在对应 profile 的 cordis.patch.yml 末尾追加片段(README 示例路径为 ~/.dsh/profiles/web/cordis.patch.yml),只写需要改的字段:

- id: think-budget
  config:
    maxStepsWithoutConclusion: 5      # 连着几步没正文才提醒,默认 3
    maxReasoningCharsPerStep: 8000    # 单步思考字数上限,默认 4000

保存即生效,无需重启 dsh;字段填错时重载会直接报错,不会悄悄退回默认值。想更严可设为 maxStepsWithoutConclusion: 2、maxReasoningCharsPerStep: 2500。

常用字段(默认值与含义均来自 README):

字段 默认值 含义
enabled true 总开关;false 时不安装监听器
maxReasoningCharsPerStep 4000 单步思考字数上限,仅在没写正文时计数;0 关闭
maxStepsWithoutConclusion 3 连续多少步没正文则提醒;0 关闭
minConclusionChars 12 去空白后多长算「正文」,用于过滤「让我看看」类过渡语
cooldownSteps 2 同一种提醒两次之间至少间隔步数
maxRemindersPerTurn 5 一轮最多提醒条数
includeSubagents true 是否包含子 agent;false 只盯顶层
systemPromptSection true 是否写入系统提示中的节拍规则
downgradeReasoningEffort '' 越界时降推理强度;留空表示不用,文档建议保持留空
reminderTag 思考节拍 提醒文案方括号内标签
logPath '' 事件日志路径;留空表示不记录

典型用法与日志

默认用法:安装后保持安静,仅越界时插入提醒。README 给出的两条 JSONL 风格事件示例(会话 id 已省略):

{"at":"2026-09-26T09:15:30.056Z","kind":"no-conclusion-streak","streak":3,"reasoningChars":1840,"visibleChars":0,"toolCalls":2}
{"at":"2026-09-26T09:43:38.767Z","kind":"reasoning-over-budget","streak":1,"reasoningChars":4432,"visibleChars":0,"toolCalls":2}

第一条对应连续 3 步只有思考与工具调用、正文为 0;第二条为单步思考 4432 字仍无正文。文档称两次触发后,模型下一条回复即带上正文。

排查是否在跑:插件无界面。可在 patch 中开启日志,例如:

- id: think-budget
  config:
    logPath: 'D:/logs/think-budget.jsonl'

启用后文件会先出现装载记录,config 字段为实际生效配置;每次出手再追加一行事件。若始终无行,需检查安装命令是否报错。

权限与适用场景

权限(README 摘要):不发网络请求、不执行命令、不新增或改动工具列表、不改写或删除用户消息;会话侧仅追加消息,不取消轮次、不拦截步骤;磁盘仅可能写入 logPath 指定文件,默认关闭。

适合谁:长链路 agent、工具调用密集、且路由会输出 lengthy 思考过程的任务;希望对话里定期出现可读进展,而不是长时间「静默思考」。

注意:

  • 只有产出思考过程的路由才会触发与思考字数相关的规则。
  • 可与其它使用 dsh 公开扩展点的插件共存。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本插件是其中一条可选增强。

更细的判定规则、dsh 接口与已知限制见仓库内 工作原理;开发加载与测试见 开发与测试。

结尾

dsh-think-budget 用字数与步数两条简单规则,把「先给结论再继续」写进 agent 循环,改善长时间无正文时的可观测性。安装命令固定为 dsh plugin --profile <name> add github:superSizzzz/dsh-think-budget,阈值在 profile 的 cordis.patch.yml 里按需覆盖即可。

  • 目录页:https://www.skillhub.cn/plugins/superSizzzz/dsh-think-budget
  • GitHub:https://github.com/superSizzzz/dsh-think-budget
羽毛球分组比赛记分
小程序二维码

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

小夜