前言¶
在 DeepSeek Harness (DSH) 的開發與使用中,重啓進程或加載已有會話後,第一個回合可能會永久阻塞:UI 一直旋轉,日誌中沒有任何報錯。這種“冷啓動回合阻塞”通常發生在 turn/start 和 step/start 之間的 preStep 窗口,其根源是同步的會話日誌全量回放。
dsh-session-rescue 是一個針對這一現象的會話看門狗插件。它不依賴重啓應用,而是通過自動化 /compact 操作,在會話大小達到危險區域前進行壓縮,將回放成本移出用戶回合,確保服務可用。
是什麼¶
dsh-session-rescue 是一個 DeepSeek Harness 插件,用於防止冷啓動回合阻塞。它通過自動化 /compact 操作,在會話增長至危險區域前進行壓縮,並報告會話狀態。
- 維護者: 1622352030
- 許可證: MIT
- 核心功能:
- 防止冷啓動回合阻塞。
- 在會話大小接近危險區前進行壓縮。
- 自動執行
/compact操作。 - 通過
/rescue status報告狀態。
工作原理¶
該插件通過三個核心動作來應對回放成本:
- GUARD(守衛):當會話被加載到當前進程且其
seq(序列號)已超過危險閾值時,在用戶第一個回合(agent/status變爲idle)之前自動壓縮會話。這會將不可避免的回放成本移出回合,同時縮小會話規模。 - COMPACT(壓縮):在回合之間,當代理處於空閒狀態時,如果會話自上次壓縮以來增長了至少
minGrowthSeq,則執行壓縮。這能保持後續冷啓動在秒級範圍內。 - Report(報告):通過
/rescue status指令,顯示每個會話的seq,當前進程是已支付回放成本(“warm”)還是未支付(“cold”),以及插件對turn/start到第一個step/start之間preStep時長的測量數據。
使用方式¶
該插件主要用於在特定時機觸發壓縮,並監控狀態:
- 按閾值壓縮:當會話序列號
seq超過危險閾值時觸發壓縮。 - 空閒期壓縮:在回合之間且代理處於空閒狀態時,若會話增長量達到設定值則觸發壓縮。
- 狀態檢查:使用
/rescue status檢查會話的冷熱狀態及preStep時長。
配置說明¶
在 DSH 的配置文件中啓用該插件,需設置以下參數。默認閾值基於實測數據校準(40k 時冷啓動約 16 秒,80k 時可能永久阻塞)。
- insert:
- id: session-rescue
name: dsh-session-rescue
config:
enabled: true # false = 僅觀察和報告,從不壓縮
warnSeq: 40000 # 從此處開始警告/壓縮
dangerSeq: 80000 # 超過此值冷啓動第一個回合可能永不返回
minGrowthSeq: 20000 # 僅在自上次壓縮增長此數量後觸發
cooldownMs: 60000
maxAttemptsPerSession: 6
maxBusyStreak: 5
pollMs: 30000
compactionTimeoutMs: 600000
技術細節與注意¶
- 環境要求:需要 Node.js 版本 >= 22.15。
- 不可變事實:全量回放是不可避免的,但支付回放的位置(是在用戶回合中還是在空閒期)是可以改變的。一旦執行了壓縮,隨後的冷啓動將保持廉價。
- 觸發機制:壓縮的觸發條件是增長增量(growth delta),而不是絕對大小。這防止了在空閒期間無限重複觸發壓縮。
- 序列號限制:壓縮操作不會減少
session.seq,因爲日誌是追加式的。 - 狀態報告:如果核心返回了
busy狀態(表示已有壓縮在運行或代理非空閒),插件不會將該會話標記爲“warm”,以避免冷會話漏掉守衛檢查。
結語¶
dsh-session-rescue 提供了一種在 DSH 中處理冷啓動阻塞的工程化方案。通過自動化 /compact,它將原本可能導致永久阻塞的同步回放成本分散並前置,配合狀態監控,爲維護長會話提供了必要的保障。
- GitHub 倉庫:https://github.com/1622352030/dsh-session-rescue
- 插件目錄:https://www.skillhub.cn/plugins/1622352030/dsh-session-rescue