前言¶
在使用 DeepSeek Harness(DSH)進行對話調試或智能體開發時,回退對話步驟是常見需求。大多數現有的回退插件通過 sessions.fork 將歷史前綴複製到新會話中,這會導致側邊欄出現冗餘會話,且原會話與 fork 會話的上下文管理變得複雜。
dsh-plugin-undo 提供了另一種方案:它直接在當前會話表面進行撤銷操作。這種方式不需要分叉會話,也不會修改項目文件,保持了會話 ID 的唯一性。
插件簡介¶
名稱:dsh-plugin-undo
作者:wang-xudong
類型:客戶端插件
協議:MIT
該插件的核心價值在於“原地撤銷”。它通過修改會話表面(surface),將最後 \(n\) 輪對話從模型可見的歷史中移除,同時在 Web UI 中將這部分內容摺疊爲緊湊的頁眉。原始會話日誌保持追加寫入(append-only)狀態,未被重寫。
核心功能¶
- 撤銷最後 \(n\) 輪:支持撤銷最近 1 輪、多輪或全部可見輪次。
- 無分叉會話:操作在當前會話進行,Session ID 保持不變,側邊欄不會出現重複會話。
- 日誌追加寫入:底層的原始會話日誌僅追加新內容,不進行重寫。
- UI 摺疊展示:Web 界面將已撤銷的輪次摺疊爲
↩ 第 N 輪已撤銷 · 點擊展開的緊湊頭部,點擊即可展開或摺疊。 - 模型上下文隔離:僅重置模型可見的對話歷史,項目文件不受影響。
安裝與啓用¶
插件通過本地文件路徑安裝。請將下載好的插件文件放置在目標路徑。
dsh plugin --profile <profile> add file:/path/to/dsh-plugin-undo
安裝完成後,重啓 profile 即可生效:
dsh --profile <profile>
典型用法¶
在會話處於空閒狀態時,在輸入框輸入以下命令:
/undo:撤銷最後 1 輪對話。/undo 1:同上。/undo 3:撤銷最後 3 輪對話。/undo all:撤銷當前模型可見的所有對話輪次。
注意:命令執行時,會話必須處於空閒狀態。如果 UI 顯示當前有正在運行的輪次,需先停止該輪次再執行撤銷。
實現細節¶
插件通過以下機制工作:
- 表面操作:主機根據
turn/start和turn/end推導當前模型可見的輪次,對尾部輪次應用surfaceOp: { op: 'replace', start, end }。 - 檢查點機制:在輪次邊界外創建一個空的助手消息作爲檢查點。由於消息推導會跳過空內容,模型將只看到保留的歷史。
- UI 摺疊:客戶端讀取
/undo命令節點,利用 DOM 和 CSS 將已撤銷的輪次摺疊,隱藏命令卡片本身,僅保留摺疊後的頁眉供用戶交互。
適用場景與注意¶
該插件適合需要在單一會話流中快速修正對話走向的場景。使用時需注意:
- 僅支持撤銷連續的尾部輪次,不支持任意中間輪次的撤銷。
- 僅影響模型可見的對話歷史,不會修改或刪除項目文件。
- 必須在會話空閒時執行命令。
生態背景¶
DeepSeek Harness 採用插件化架構,允許開發者通過社區目錄或本地文件擴展功能。該插件收錄於社區目錄,與 DeepSeek 或幻方無官方從屬關係。