DeepSeek Harness 插件:dsh-history-fold

前言

在 DeepSeek Harness(DSH)中,随着会话轮次增加,每轮请求都需要重新发送完整的可见历史。这不仅增加了 Token 消耗,还会因为注意力机制必须处理整个 KV 缓存,导致解码速度下降。本插件旨在解决这一问题。

插件定位

dsh-history-fold 是一个 DSH 插件,用于将会话中最旧的部分可见历史折叠为单条消息,该消息由一个无损本地归档支持。它不生成模型的摘要,而是提供可恢复的提取式索引。

核心功能

  1. 默认惰性运行:安装后默认不读取、不写入、不记录日志,需配置后生效。
  2. 无损归档:在执行折叠操作前,会将所有被折叠的消息逐字写入本地归档文件。
  3. 无需修改 node_modules:使用与 DSH 内置压缩器相同的公共接口替换机制,升级 DSH 不会破坏此插件。
  4. 提取式索引:折叠后的消息包含索引而非摘要,指向具体的归档路径。
  5. 层级路径索引:当索引过长时,会自动生成多层索引文件(tier files),每层指向更早的层级,直至原始文本。
  6. 可恢复性:归档文件是可见历史的超集,包含所有模型推理过程,内容完全可还原。

安装与启用

使用官方命令安装,安装后必须重启 DSH。

dsh plugin add --profile web github:mili1360/dsh-history-fold

若希望从本地克隆安装:

git clone https://github.com/mili1360/dsh-history-fold.git
dsh plugin add --profile web ./dsh-history-fold

重启 DSH 后插件才会生效。

工作机制

当可见历史超过阈值(由 triggerRatio × contextWindow 或绝对 triggerSurfaceTokens 决定)时,插件会执行以下步骤:

  1. 选择节点:选取最旧的节点范围进行折叠,保留最近的节点,并将表面历史缩减至目标大小(默认约为 0.18 × contextWindow)。
  2. 归档写入:将折叠范围内的所有消息 verbatim(逐字)写入 $DSH_HOME/history-fold/archive/<session>.jsonl。如果写入失败,折叠操作将被放弃。
  3. 替换消息:使用 session.append('user/message', ...) 替换原范围,surfaceOp 设为 replace,并保留时间线顺序。

折叠后的消息内容通常如下:

[dsh-history-fold] 614 earlier messages (surface seqs 223995..387899) were folded out of the
visible history so this session stays fast.
NOTHING WAS DELETED. Their full text is archived at:
  /…/.dsh/history-fold/archive/session-….jsonl
To read any of it verbatim, search that file with the pwsh or grep tools...
(sampled: every 3th of 614 folded messages)
[0] user/message (plugin) seq=223995: ...

注意事项

  1. 版本要求:仅支持 DSH 0.2.0。
  2. 重启必要性:安装或更新后必须重启 DSH 进程。
  3. 数据安全:所有折叠内容均先写入本地磁盘,再从上下文中移除,确保数据不丢失。
  4. 许可证:MIT 许可证。

总结

该插件通过将最旧的历史折叠并归档,显著减小了每次请求的上下文体积,从而提升解码速度并降低 Token 成本。由于其无损归档和提取式索引的特性,历史内容在需要时依然可以被完整还原。

羽毛球分组比赛记分
小程序二维码

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

小夜