前言¶
用 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。
核心功能¶
插件管两件事,满足任意一条就会介入(且都要求该步同样没有写正文;若思考很长但已写出结论,不会打扰)。
- 连续几步没有正文:默认连续 3 步。这里的「正文」指对话里你能看见的部分,模型的思考过程不算。
- 单步思考过长:默认单步思考上限 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