前言¶
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 倉庫引入。