dsh-agent-speedup: Reducing DeepSeek Harness Waiting Time at the Tool Execution Layer

前言

在 DeepSeek Harness(DSH)里跑智能体时,一轮对话往往要经历多次模型推理和大量工具调用。README 中基于 6 次真实会话(2,517 次工具调用)的测量表明:关键路径上模型延迟(首 token、思考、生成)约占 87.2%,工具执行约占 22.1%。本插件只作用于后者,不能减少模型往返次数。

若你的瓶颈是重复的 read/glob/grep、glob 之后紧跟着的一串读文件,或只读 shell 被串行排队,可以在不改模型侧逻辑的前提下,用缓存、预取和可选的 shell 并发缩短工具窗口。若工具本身已是毫秒级,或 Harness 已把并发安全工具并行发出,增益会很小——作者也在文档里明确写了这些边界。

这是什么

dsh-agent-speedup 是维护者 HJ1H 发布在 npm 上的 DSH 工作流类插件(GitHub:HJ1H/dsh-agent-speedup)。定位是「工具执行效率套件」:在有限、可测量的范围内提供只读结果缓存(含进行中去重)、基于 glob 的投机预取,以及可选的只读 shell 并发调度。

与同样面向 DSH 的 HarnessMM 不同:HarnessMM 通过回放受 guard 的决策减少模型推理调用;本插件只减少或合并工具执行,不碰推理层。两者可叠加使用。

核心功能

只读缓存(Cache)

对 read、glob、grep、read_image 等只读工具,按工具名与规范化参数缓存结果;命中时不再调用真实 dispatch。

  • 条目带 size + mtimeMs 指纹,每次命中校验;文件被任意方式修改即失效(含 bash/pwsh 写入,无 fs 事件时亦然)。
  • fs/write-intent、fs/edit-intent 会对编辑路径立即失效。
  • 相对路径相对 agent 会话工作目录解析,与 dsh 自带 read 一致。
  • LRU,默认 maxEntries: 512;读过程中文件发生变化的结果不写入缓存。
  • 自定义或 MCP 只读工具需在 readonlyTools 中显式列出,否则不会假定安全。

作者给出的串行重复读示例:约 2023 ms → 7 ms。

进行中去重(In-flight merge)

同一轮并行批次里若出现两次相同只读调用,在都未完成前缓存无法命中。插件让相同进行中的调用共享一次执行。测量示例:3 次同时读总耗时约 2027 ms,而非串行 6 s 量级。

投机预取(Prefetch)

glob 返回后,在后台对前 N 个路径预执行同族 read,结果进入同一缓存;模型随后真正请求时可直接命中。预取走与普通工具相同的 pipeline(上下文、工作目录、guard)。作者测量:工具时间约 10.08 s → 2.07 s(−79.4%),单次 read 中位数约 2016 ms → 11 ms。在 deepseek-v4.1-flash 上方向与量级类似(文档称 prefetch/cache 约 −79.0% 工具时间、70% 命中率)。

触发 glob 的工具名默认在 speculateOn: [glob];预取数量由 prefetchN 控制( bundled 默认 3)。

Shell 并发(默认关闭)

dsh 的 bash/pwsh 未声明 isConcurrencySafe 时,shell 会互斥执行。启用后,对通过保守分类器的只读命令允许并行。作者在一组 4 条只读命令上测得窗口约 13.81 s → 4.65 s(−66.3%);且在该次对比中关闭 cache 与 speculate,仅改调度。

分类器故意严格:npm test、cargo build、未知命令、命令替换、${VAR}、NAME=value cmd、PowerShell 脚本块等一律拒绝或视为有副作用。误分类可能导致带副作用的命令并行——因此 默认 shellConcurrency: false,需自行在 patch 中开启并接受风险。

安装与启用

环境要求(README):Node 22+、dsh 0.2.x、PATH 上有 pnpm(Windows 上文档建议 pnpm 10;pnpm 12 在部分环境 store lock 会失败)。

官方安装命令:

dsh plugin --profile web add dsh-agent-speedup

插件随附 cordis.patch.yml,安装后默认开启缓存与预取;shell 并发需手动配置。

覆盖配置时注意:dsh 里相同 id 的 patch 整对象替换,不 merge。改一个键时要写全你关心的字段,默认值见仓库内 cordis.patch.yml。npm 包当前版本为 0.3.1(以 package.json 为准)。

启用 shell 并发时,README 示例(须重复全部相关键):

- id: agent-speedup
  config:
    cache: true
    readonlyTools: []
    validateStat: true
    maxEntries: 512
    speculate: true
    prefetchN: 3
    speculateOn: [glob]
    speculateRootPrefix: ""
    shellConcurrency: true
    shellTools: [bash, pwsh]

主要配置项默认值(README 表格,截断处已省略的扩展字段以仓库为准):

Key Default 含义
cache true 只读结果缓存
readonlyTools [] 额外视为只读、可缓存的工具名
validateStat true 命中时校验文件 stat
maxEntries 512 LRU 容量
speculate true 是否预取
prefetchN 3 glob 后预读路径数
speculateOn [glob] 触发预取的工具
shellConcurrency false 只读 shell 并行

peer 依赖:@deepseek-ai/cordis >= 4.0.0、@deepseek-ai/dsh-tools >= 0.2.0-rc.0(optional)。

典型用法

  1. 在 web profile 下执行上述 dsh plugin --profile web add dsh-agent-speedup,保持 bundled patch 即可体验缓存 + glob 预取。
  2. 智能体反复读同一文件、或在同一 turn 里并行重复 grep/read 时,依赖缓存与 in-flight merge,无需改 prompt。
  3. 工作流常为「glob 找文件 → 连续 read」时,预取会在 glob 结果返回后后台读前几条路径。
  4. 若大量只读 PowerShell/git branch/find -print 类命令被 shell 串行拖慢,在理解分类器风险后,将 shellConcurrency 设为 true 并保留完整 config 块。

更完整的基准方法、置信区间与「不适合安装」的情形见仓库 docs/BENCHMARK.md。

适用场景与注意

适合:远程或慢磁盘上的 read/glob/grep 较多、调用重复或 glob 后紧跟批量读、只读 shell 被互斥锁拉长窗口的 DSH 会话。

不适合或增益有限:本地毫秒级工具(作者测得工具仅占墙钟 0.1–9.4% 的会话);baseline 中 Harness 已在约 19 ms 内并行发出 7 个工具且无本插件时,相邻结果常在 100 ms 内返回——插件无法替代模型侧优化。

安全与信任:插件在 dsh 进程权限下拦截/调度工具。安装前应阅读源码与许可证,自行评估 shell 分类器与缓存失效策略是否匹配你的仓库与工作流。社区目录 SkillHub 插件页 与 GitHub 无 DeepSeek / 幻方官方从属关系,属社区生态。

结尾

dsh-agent-speedup 把优化范围 honest 地限定在工具执行约占的那部分路径:缓存与去重、glob 预取、可选只读 shell 并发,并有公开基准说明边界与与 HarnessMM 的分工。若你的 agent 会话工具耗时可测且重复明显,可按官方命令安装并在 patch 中按需打开 shell 并发。

  • 目录页:https://www.skillhub.cn/plugins/HJ1H/dsh-agent-speedup
  • 仓库:https://github.com/HJ1H/dsh-agent-speedup
羽毛球分组比赛记分
小程序二维码

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

Xiaoye