`@dpskh/tool-rewind`:爲 DeepSeek Harness 摺疊探索過程

前言

在 DeepSeek Harness(DSH)裏,智能體做探索時會產生不少中間步驟:讀取、搜索、試驗、工具調用與輸出。這些步驟寫進 durable log 便於審計,但如果繼續留在模型可見的會話表面,後續請求會一直攜帶這些中間過程,佔掉本來可用於當前任務的上下文。

@dpskh/tool-rewind 解決的是這個問題:在保留 durable log 的前提下,把最近一個 checkpoint mark 之後的探索表面摺疊成一份自動生成報告。下一輪請求開始時,模型看到的是報告,而不是探索過程中的每一步。

這是什麼

@dpskh/tool-rewind 是 dpskh 維護的 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
羽毛球分组比赛记分
小程序二维码

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

小夜