dsh-ctx:用檢查點讓任務狀態熬過 DSH 上下文壓縮

前言

在 DeepSeek Harness(DSH)裏做長會話時,宿主會把較早的對話歷史壓成一條摘要。壓一次往往還能接受,多次壓縮之後,原先定過的參數、否決過的方案、測試是否跑過這類細節會從上下文裏消失,模型有時還會否認剛纔確認過的結論。

常見補救是在項目裏手寫 AGENTS.md 或讓模型「自己記得寫筆記」,但筆記若只留在對話裏,照樣會被壓縮捲走;若寫進工作區,又會污染倉庫、牽涉權限與協作習慣。下面介紹社區插件 dsh-ctx(維護者 Saretheya,GitHub:Saretheya/dsh-ctx),它把檢查點放在插件自有目錄,並在每次壓縮後重新注入系統提示詞,讓里程碑狀態留在壓縮碰不到的位置。

這是什麼

dsh-ctx 的定位是:讓模型在任務里程碑處寫入檢查點(目標、已定結論、否決方案、待辦與證據等),由插件持久化並在上下文壓縮後自動回填到 DSH 系統提示詞的首段(該段不參與壓縮)。數據全部落在 <DSH_HOME>/plugins/dsh-ctx/data/,不會在你的工作區新增文件。

插件在社區目錄中的分類爲「記憶」;許可爲 MIT,目標 DSH 版本爲 0.2.x(README 記載在 0.2.1-rc.5 上實測)。它不修改你的 cordis.patch.yml,也不寫入 settings.yaml,卸載後隨插件目錄一併移除。

它解決什麼問題

情況 沒有檢查點機制時 有 dsh-ctx 時
壓縮後模型否認剛確認的結論 需要人重新說明 從檢查點續寫
反覆討論已否決的方案 方案被再次提出 檢查點中保留「已否決及原因」
記不清測試是否執行 重跑或空口聲稱 在 Evidence 等字段保留要點
新會話接手同一任務 從零對齊目標 跨會話時可注入摘要卡片或指針

核心功能

四檔注入策略

插件不會每輪都把整份檢查點塞進上下文,而是按檢查點與會話的關係選擇體量:

情形 注入內容 README 記載的實測體積
同一會話 全文(單份注入上限 12000 字符) 起約 240 字符
跨會話、7 天內且主題相關 摘要卡片(≤900 字符) 約 175 字符
跨會話、過期或主題不相關 一行指針 約 95 字符
尚無檢查點 不注入 0 字符

跨會話的「主題相關」依賴寫入檢查點時的 topic 與 keywords;README 強調這兩個字段務必填寫,否則跨會話時往往只會得到一行提示。

模型工具

工具 作用
checkpoint_write 寫入或更新檢查點;舊代自動歸檔,保留最近 20 代
checkpoint_read 讀回全文,或按關鍵詞過濾行
context_status 查看 token 佔用、窗口,以及當前檢查點爲何被注入或未注入
context_compact 在宿主提供壓縮服務時預約主動壓縮;若服務不可用則只落盤並告知

何時寫檢查點:提醒而不只靠自覺

README 說明插件在四個層面推動紀律:

  1. 上下文越線提醒:按真實佔用跨檔位時向會話注入提醒(同檔只提醒一次)。例如佔用 ≥ 窗口 50%(warm)時建議先 checkpoint_write 再 context_compact;≥80%(near)、≥90%(over)時要求立刻更新檢查點。
  2. 常駐系統提示詞段:本會話已有檢查點時,每輪可讀到的規則包括:以本段爲會話權威副本(與 repo 衝突以 repo 爲準);上下文緊張時先落盤再壓縮。
  3. 隨包 skill context-checkpoint:聲明裏程碑、壓縮後對賬、明確壓力信號、溢出類報錯等觸發條件。
  4. 壓縮後的喚醒消息:壓縮完成後注入後續消息,提示檢查點已落盤、歷史已壓縮,直接接着做、勿重述已完成工作。

若任務長期不到 50% 佔用且從不壓縮,上述自動提醒可能不會出現;README 建議在 AGENTS.md 中約定里程碑紀律(例如每個模塊改完調用一次 checkpoint_write)。

與 DSH 壓縮的關係

DSH 壓縮是有損摘要,細節會被丟棄。dsh-ctx 不改壓縮邏輯,而是把檢查點放在 systemPrompt.section——系統提示詞首節點不參與壓縮,因此可跨越多次壓縮仍被重注入。

安裝與啓用

需要 DSH 0.2.x。在 desktop 配置下安裝:

dsh plugin --profile desktop add dsh-ctx

安裝完成後重啓 DSH。插件以當前 DSH 進程的權限運行;安裝前請自行查閱 倉庫源碼 與 MIT 許可證,確認符合你的安全與合規要求。

典型用法

經過上面的步驟啓用插件後,長任務中可以按 README 推薦的節奏操作:

  1. 在根因確定、方案拍板、模塊改完、測試通過或用戶確認決策等里程碑,調用 checkpoint_write,填寫 topic、keywords,以及目標、結論、否決項、待辦與 Evidence 等正文。
  2. 上下文佔用升高時,按插件注入的提醒先更新檢查點,再在支持的環境中調用 context_compact。
  3. 壓縮出現新的 <compacted-summary> 後,利用壓縮後喚醒消息與已注入的檢查點繼續執行,必要時用 checkpoint_read 取全文或按關鍵詞過濾。
  4. 用 context_status 覈對當前窗口占用以及檢查點被全文、卡片還是指針注入的原因。

單份寫入上限默認 60000 字符(超出拒絕);注入上限 12000 字符(超出截斷並提示,全文仍可通過 checkpoint_read 讀取)。context_compact 在檢查點落盤超過 10 分鐘新鮮度窗口時會拒絕預約。

數據存放與已知限制

檢查點目錄結構(均在插件目錄內):

<DSH_HOME>/plugins/dsh-ctx/data/
├── checkpoints/<工作區標識>/
│   ├── current.md
│   ├── current.meta.json
│   └── gen-NNN.md
├── active-variant.lock
├── tmp/
└── logs/

README 列出的限制包括:不會自動總結對話,寫什麼由模型決定;跨會話相關性爲關鍵詞級而非語義 embedding,誤判時保守地只給一行指針;主動壓縮依賴 DSH 裝配,不可用時核心落盤與重注入仍可用;同一 data/ 目錄僅允許一個插件實例生效(鎖文件仲裁)。

結尾

dsh-ctx 的價值在於:把「壓縮沖走的細節」變成系統提示詞裏可重複注入的檢查點,且不佔工作區文件。社區目錄頁:skillhub.cn/plugins/Saretheya/dsh-ctx;源碼與完整說明:github.com/Saretheya/dsh-ctx。DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜