dsh-jev-prune:基於 Jev 結構化輸出的 DeepSeek Harness 上下文壓縮插件

前言

DeepSeek Harness (DSH) 自帶的上下文回收機制基於體積和模型摘要。當工具結果超過字符閾值時,中間部分會被截斷;區域壓縮則由模型撰寫摘要來替代舊歷史。前者無法區分“結果很大但依然需要”與“結果已過期”,後者容易引發摘要幻覺。

dsh-jev-prune 插件用 TypeSafe Jev 的結構化輸出(noul / choice)替換了這兩處的決策邏輯。遵循“模型不應生成的內容,模型就不會生成”的設計原則,它只決定保留或丟棄,不改變原始文本。區域壓縮則使用代碼生成的確定性回執,完全不含模型推理。

核心功能

該插件提供兩層上下文壓縮機制:

  • 兩層上下文壓縮:同時處理結果修剪和回執壓縮。
  • 基於 Jev 結構化輸出的結果修剪:判斷每個工具結果是否仍被需要。
  • 確定性回執壓縮:在區域壓縮中生成代碼生成的回執,而非模型摘要。
  • 保留原始文本:決策後的文本保持原樣,不經過模型加工。
  • 工具調用識別:支持對工具調用和結果進行匹配與管理。

工作原理

第一層:結果修剪

攔截點爲 ctx.toolResultPruner.pruneSession。

DSH 默認邏輯是隻要超過閾值就截斷中間。該插件引入 Jev 判斷:
* 需要的結果:無論多大,都不會被修剪。
* 已過期的結果:無論多小(除非短於 minCharsToPrune),都會被修剪。
* 無判斷時:回退到 DSH 原有行爲。

第二層:回執壓縮

攔截點爲 ctx.compaction.summarize 或 compactRegion。

DSH 默認邏輯是讓模型閱讀歷史並寫摘要。該插件將符合條件(見下文“門控”)的只讀步驟移出表面。在並行批次中,僅替換符合條件的結果體爲確定性回執。

確定性回執示例:

[已壓縮 · 確定性回執] 原歷史 s25–s27 是 1 次工具調用(共約 16489 字符輸出),
爲釋放上下文已移出。以下爲事實清單(工具名/入參/字符數/seq 由代碼算出;模型原話逐字引用,不含任何推斷):
· s25 模型原話(逐字引用):identifiers:把版本字符串拆成標識符。Next inc.js.
· s27 read:C:\Users\you\project\src\state.js → 16489 字符輸出
原始事件仍完整保存在會話日誌中(seqs 25–27)。需要內容時重跑相同命令/讀取相同文件即可;本回執不含對內容的解釋。

門控機制

默認策略保守,只有滿足以下所有條件纔會觸發第二層壓縮:
* 交集判斷:結果需要性(result)和無副作用性(effect)均處於會話尾部的 compactQuantile 範圍內。
* 工具白名單:工具不在 neverCompactTools 中(寫類型調用被硬性排除)。
* 證據守衛:匹配 error / assert / fail / todo 的結果不移動。
* 長度限制:助手文本(text)或推理(reasoning)超過 maxStepTextChars / maxStepReasoningChars 不移動。
* 新鮮度:最尾部的 compactPreserveRecent 節點不移動。
* 平衡檢查:兩端需滿足 DSH 工具配對平衡,跨度需節省至少 compactMinChars,回執長度需低於原始內容的 receiptMaxRatio。

依賴與安裝

該插件依賴以下環境與庫:

  • Node.js:^22.19.0 || >=24.0.0
  • DSH Tools:@deepseek-ai/dsh-tools (^0.1.5-rc.2 || ^0.2.0-rc.2)
  • Schemastery:@deepseek-ai/schemastery (^3.18.2)
  • 許可證:MIT

安裝時請確保環境版本符合上述要求。插件通過插件目錄或 GitHub 倉庫引入。

注意事項

  • 運行權限:插件在當前 DSH 進程權限下運行。
  • 源碼審查:安裝前建議檢查源碼與許可證(MIT)。
  • 目錄與源碼:
羽毛球分组比赛记分
小程序二维码

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

小夜