前言¶
在 DeepSeek Harness 中使用 Fork 功能,會切斷當前會話並創建一個新的空白會話。如果需要在對話的中間某個節點繼續,新的會話無法獲知該節點之後發生了什麼。dsh-message-handoff 解決了這個問題。它爲每條已確認的助手消息添加了一個手柄,允許用戶在該點進行“移交”操作:複製該點之前的對話歷史,同時讓 LLM 總結該點之後發生的內容,從而 fork 出一個帶有上下文的新會話。
插件介紹¶
dsh-message-handoff 是一個爲 DeepSeek Harness 設計的插件,用於實現消息級的會話移交。
- 核心功能:在助手消息旁提供手柄,點擊後 fork 新會話。
- 維護者:antonkoatl。
- 開源協議:MIT。
- 技術特點:零運行時依賴,源碼由人工維護,無需構建步驟。
安裝與啓用¶
安裝過程無需構建環境,lib/client.js 已預編譯。
dsh plugin --profile web add /path/to/dsh-message-handoff
dsh web
安裝後,可通過以下命令確認插件已加載:
dsh --profile web --dump-config | grep message-handoff
核心功能¶
該插件提供以下能力:
- 消息級移交:在每條已確認的助手消息旁,渲染
copy · ✋ handoff · fork控制組。 - 歷史複製與總結:點擊手柄後,將選定消息之前的 verbatim(逐字)歷史複製到新會話;同時調用 LLM 僅總結選定消息之後的對話內容。
- 結構化文檔注入:在 fork 出的新會話中,注入包含“任務目標”、“當前進度”、“關鍵決策”、“文件列表”、“下一步計劃”和“未解決問題”的結構化文檔。
- 自動會話管理:將子會話附加到源會話的工作區,自動重命名標題並打開新會話。
配置¶
插件支持在 cordis.yml 中配置 config: 參數,以控制總結請求的輸入輸出限制:
- id: message-handoff
name: dsh-message-handoff
config:
maxInputBytes: 24000 # 總結輸入的字節上限(UTF-8),超時則丟棄最舊條目
maxTokens: 10000 # 總結輸出的 Token 預算
timeoutMs: 120000 # 總結請求的超時時間(毫秒)
總結所使用的模型,默認取自源會話的最新請求路由,若不可用則回退到部署的默認模型。
使用流程¶
- 在 Web 界面中,找到一條已確認的助手消息。
- 點擊該消息行右側的 Handoff 圖標(位於 Copy 和 Fork 按鈕之間)。
- 系統會自動執行:
- 複製直至該消息的 verbatim 歷史到新會話。
- 發送請求給 LLM 總結該消息之後的內容。
- 將結構化總結文檔注入新會話。
- 新會話會自動打開,源會話保持不變。
注意事項與限制¶
- 隱私:爲了生成總結,選定消息之後的所有對話文本會被髮送到配置的模型中。
- 觸發限制:該手柄僅渲染在已確認的助手消息上,用戶消息不支持此操作。
- 無持久化文件:目前不會在文件系統中生成
HANDOFF.md,總結僅存在於會話日誌中。 - 文本限制:總結僅處理文本內容,不包含工具調用和附件。
- 預設繼承:fork 出的子會話繼承的是源會話創建時的預設配置,而非創建時的最新預設。
總結¶
dsh-message-handoff 是一個實用的工具,旨在解決 DSH 中 fork 會話上下文丟失的問題。它通過自動化的歷史複製和 LLM 總結,讓開發者能夠從任意節點繼續對話,而無需手動複製粘貼。對於需要長期維護多輪對話或需要頻繁從中間切入的開發場景,該插件提供了明確的路徑。