dsh-context-offload:DeepSeek Harness 上下文卸載

前言

DeepSeek Harness (DSH) 在構建智能體時,智能體在每一步都會重發整個歷史記錄。其中大部分是工具輸出(文件讀取、命令執行等)。這會佔用上下文窗口。該插件釋放模型可見歷史中已不再需要的工具調用及其結果,用簡短的存根替換它們。

插件概述

這是 DeepSeek Harness 的一個插件,用於上下文卸載。由 Hanochhu 維護,使用 MIT 許可證。它將模型可見歷史中的工具調用及其結果替換爲簡短的存根,同時保留原始記錄在會話日誌中以便重放。

安裝與啓用

安裝命令如下:

dsh plugin --profile web add dsh-context-offload

重啓 dsh web 後,插件會自動掛載到 profile composition 並覆蓋該 profile 下的所有 agent。

若要禁用而不卸載,可在 profile 的 cordis.patch.yml 中添加以下內容:

- id: context-offload
  disabled: true

工作原理

插件通過兩種路徑實現上下文卸載:
1. 基於策略的批量釋放:在 agent/pre-step 階段,策略會檢查當前累積的未卸載內容。當新產生的完整工具單元數量超過 retainUnits,或者累積的字符數達到 flushChars 時,會執行一次批量替換。每次批量替換最多替換 maxUnitsPerFlush 個單元,且每 flushEverySteps 步最多觸發一次。
2. 模型主動卸載:插件提供了 offload_context 工具,允許模型在請求中主動卸載已完成的調用。該請求會在工具調用時記錄,並在下一個步驟邊界應用。

模型可見的歷史中,每個被卸載的工具單元(包含助手消息和所有回答結果)會被一個 user/message 類型的存根替換。存根內容如下:

[tool context offloaded — 2 tool call(s) removed from model context; 39,045 characters released]
- bash(command=cd /Users/me/proj && ls -la && for d in */; do echo …)
- read(path=src/harness/loop.ts)
The original arguments and results remain in the session log. Re-read a file or re-run a command if you need the content again.

配置

所有字段均爲可選。默認值如下:

字段 默認值 說明
enabled true 設置爲 false 時僅保留模型可見的工具調用。
retainUnits 8 模型可見歷史中保持完整內容的最近完整工具單元數量。
minUnitChars 4000 小於此字符數的單元不值得替換。
flushChars 20000 累積的可釋放字符數達到此值才觸發刷新。
flushEverySteps 10 每隔最多這麼多步觸發一次刷新。
maxUnitsPerFlush 40 單次刷新中替換的單元數量上限。

作用範圍與限制

該插件通過 dsh.bundle.patch 掛載到配置文件中。默認情況下,它掛載到 profile composition 中,覆蓋該 profile 下的所有 agent。

若需將其限制到單個 preset,不要啓用 bundle 行,而是安裝包以便 node_modules 能夠解析,然後將配置添加到自己的 preset 複製中:

- id: context-offload
  name: dsh-context-offload

必須啓用以下兩種方式之一,且不能同時啓用。

該插件與 compaction-basic 上下文壓縮插件配合使用,兩者不衝突,且不會相互覆蓋。

需要注意的是:
* 人類對話記錄中不會顯示被替換的內容,因爲轉錄是從追加事件渲染的。
* 未完成的步驟或系統提示(surface node 0)不會被處理。
* 插件依賴 Node.js >= 20 和 DSH >= 0.1.5-rc.1。

總結

該插件通過替換模型可見歷史中的冗餘工具輸出爲存根,在不丟失原始日誌的前提下,有效減少了模型上下文的佔用,適合在處理長對話或複雜任務流時使用。

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

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

小夜