`@dpskh/tool-rewind`:为 DeepSeek Harness 折叠探索过程

前言

在 DeepSeek Harness(DSH)里,智能体做探索时会产生不少中间步骤:读取、搜索、试验、工具调用与输出。这些步骤写进 durable log 便于审计,但如果继续留在模型可见的会话表面,后续请求会一直携带这些中间过程,占掉本来可用于当前任务的上下文。

@dpskh/tool-rewind 解决的是这个问题:在保留 durable log 的前提下,把最近一个 checkpoint mark 之后的探索表面折叠成一份自动生成报告。下一轮请求开始时,模型看到的是报告,而不是探索过程中的每一步。

这是什么

@dpskh/tool-rewinddpskh 维护的 DeepSeek Harness 插件,定位为 exploration fold。挂载后,它提供两个入口:

ctx.rewind
rewind

其中 ctx.rewind 是服务接口,rewind 是面向模型的插件工具。它需要与 @dpskh/tool-checkpoint 配合使用:checkpoint 负责记录 mark,rewind 负责折叠 mark 之后的探索表面。

该插件不修改上游包,也不写自己的 session events;折叠只提交一个 core-vocabulary 的 user/message 替换。当前已核实资料中的包信息如下:

name: @dpskh/tool-rewind
version: 0.2.0
private: true
license: MIT

核心能力

折叠探索表面

它读取 session 中最新的 checkpoint mark,选择该 mark 之后的一段 surface span,通过 ctx.llm 生成报告,然后把这段探索表面替换为报告。

这个替换使用与 DSH compaction seam 相同的机制:

surfaceOp: { op: 'replace' }

替换之后,后续请求不再携带探索过程中的中间步骤;durable log 仍保留完整探索内容,用于审计。

服务调用

文档给出的服务调用方式是:

ctx.rewind.rewind(agent, signal)

这一步会完成三件事:选择最新 mark 之后的 surface span,调用报告生成,然后提交替换后的 user/message 报告。

如果折叠失败,插件不会写入内容:原探索区域保持完整,mark 仍然 active,调用会以 classified RewindError 拒绝。资料列出的失败类型如下:

NO_CHECKPOINT
EMPTY_REGION
UNBALANCED
FOLD_IN_PROGRESS
CHANGED
SHRINK

插件使用 per-session in-process lock 拒绝同一 session 的并发折叠。只要 session 中存在 active checkpoint mark,它会注入一个 turn-stopping warning,使当前 turn 不能结束,直到 rewind 折叠探索。

报告生成

报告由 ctx.llm 生成。报告调用中的 provider/model 解析顺序为:

  1. 配置里的 override;
  2. session 最后一次 routed request/header config;
  3. agent options。

如果这三处都无法解析出 provider/model,报告调用会失败。

当 route 暴露 off reasoning effort 时,报告调用会禁用 thinking。空完成会重试,最多重试次数由配置项 maxSummarizationRetries 决定。

报告调用会复用 session 的 system prompt 和 tool schemas,使其保持为 last routed request 的前缀,从而维持 warm prefix cache。

安装与启用

当前已核实资料没有给出官方安装命令。不要凭包名拼接命令;下面只展示资料中出现的挂载配置。

单独配置 @dpskh/tool-rewind

- id: tool-rewind
  name: '@dpskh/tool-rewind'
  config:
    toolName: rewind
    maxTokens: 1024
    maxSummarizationRetries: 2
    summarizationProvider: deepseek
    summarizationModel: deepseek-chat
    reportLanguage: en

字段含义如下:

toolName: rewind
maxTokens: 1024
maxSummarizationRetries: 2
summarizationProvider: deepseek
summarizationModel: deepseek-chat
reportLanguage: en

实际使用时通常需要和 checkpoint 插件一起挂载:

- id: tool-checkpoint
  name: '@dpskh/tool-checkpoint'    # https://github.com/dpskh/dsh-checkpoint

- id: tool-rewind
  name: '@dpskh/tool-rewind'
  config:
    reportLanguage: en

只挂载 @dpskh/tool-rewind 时,因为没有 checkpoint mark,折叠没有对象,会以 no-checkpoint error 失败。

典型用法

调用服务

在 DSH 代码或插件逻辑中,可以直接调用:

ctx.rewind.rewind(agent, signal)

这个调用负责选择表面范围、生成报告,并提交替换后的报告消息。

模型工具返回

rewind 工具无参数,资料给出的返回对象为:

{ markId, foldedNodes, start, end, foldedChars, reportChars }

模型可见性

替换后的报告从下一次请求开始对模型可见。探索过程中的 durable events 仍留在 log 中,但不再出现在模型可见的表面上。

插件还会加入一个系统提示段落:

tool:rewind

用于建立 fold discipline,也就是在标记后的探索发生后及时折叠,而不是把中间步骤一直留在模型可见表面。

适用场景与注意

适合谁

适合需要同时保留审计日志和压缩模型可见上下文的 DSH 智能体场景。常见做法是:

  1. @dpskh/tool-checkpoint 标记探索起点;
  2. 让智能体完成一段探索;
  3. @dpskh/tool-rewind 把这段探索折叠为报告;
  4. 后续请求只基于报告继续,而不是基于整段中间过程。

需要注意的限制

  1. 必须有 checkpoint mark。
    rewind 单独工作时,会因为缺少 mark 而失败。

  2. 一个 marker 只折叠一次。
    对同一个 marker 再次折叠会被拒绝为空区域。新一轮探索需要新的 checkpoint。

  3. shrink 检查基于字符数,不是 token 数。
    报告必须比被折叠区域的模型可见文本更短。图像块没有文本尺度,会被保守忽略。

  4. 某些 route 下可能出现空完成。
    如果 route 没有暴露 off reasoning effort,默认 thinking 可能耗尽 maxTokens,导致空完成。此时只能依赖 maxSummarizationRetries 的重试预算。

  5. 自动 compaction 可能先于 rewind 发生。
    如果自动 compaction 在 rewind 运行前遮蔽了部分探索,折叠会覆盖表面上仍然剩余的部分;storage-resident mark 仍会保留。

  6. 失败时不写入。
    失败会保留原区域,保留 active mark,并以 classified RewindError 拒绝。

  7. 安装前需要检查源码与许可证。
    插件以当前 DSH 进程权限运行。安装前建议检查源码、依赖和 MIT 许可证是否符合你的使用环境。

链接

目录页:

https://dshfind.com/zh/plugins/dpskh/dsh-rewind?ref=badge

GitHub:

https://github.com/dpskh/dsh-rewind
羽毛球分组比赛记分
小程序二维码

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

Xiaoye