前言¶
在 DeepSeek Harness(DSH)裏跑智能體會話時,工具調用可能拖很久或方向不對。若直接點停止,往往整段任務或會話被硬切掉,模型也拿不到「你爲什麼停」的上下文。社區插件 dsh-tool-interrupt(維護者 wlyzqm,分類:工作流)針對的是:只停當前這一次工具調用,先讓用戶寫(或留空)中斷理由,再把理由當作該次調用的工具結果回傳給模型,同回合繼續、會話不中斷。下面介紹它是什麼、怎麼裝、怎麼用,以及使用時要注意的邊界。
這是什麼¶
dsh-tool-interrupt 是 DSH 的 Web 端插件,實現「單工具級手動中斷」。會話運行時,在會話頂部的「後臺任務」菜單裏點某一行的停止按鈕,不再直接殺任務,而是先彈出「爲何中斷」小窗;確認後只 abort 該次工具調用,理由(或未填理由時的固定文案)作爲工具結果交給模型,回合照常推進。
與「整 job 兩段式確認殺進程」的原生行爲不同:對模型工具調用行,插件接管停止按鈕的第一擊;純後臺 job(非模型工具調用)仍走 DSH 原生確認,行爲不變。
核心功能¶
以下能力均來自插件 README 說明,可按需對照 GitHub 倉庫。
- 單調用粒度:只中斷所選的那次工具調用;同一並行批次裏其他調用不受影響。
- 理由回傳:模型在同一回合讀到
【用戶手動中斷】中斷理由:…;未填理由則回傳【用戶手動中斷】未提供理由。 - 會話不中斷:中斷被轉換爲該調用的錯誤工具結果(而非拋異常),步驟照常提交,回合繼續。
- 原生入口:接管 DSH「後臺任務」菜單行停止按鈕的第一擊;主題使用 DSH token(
--dsw-alias-*),亮暗自動適配。 - 窗體交互:
Esc關閉;Ctrl/Cmd + Enter提交。
安裝與啓用¶
插件通過 DSH 官方插件命令安裝(須使用資料中的完整命令,不要自行拼接):
dsh plugin --profile web add github:wlyzqm/dsh-tool-interrupt
安裝後需要完整重啓 dsh web,並刷新瀏覽器頁面,客戶端腳本纔會生效。
插件以當前 DSH 進程權限運行;安裝前建議閱讀 GitHub 源碼 與 MIT 許可證,確認符合你的環境與合規要求。DSH 生態是「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
典型用法¶
- 會話運行期間,點會話頂部的「後臺任務」(例如「N 個後臺任務運行中」)。
- 點目標行右側的停止小方塊。
- 在「爲何中斷」窗體中填寫理由(可留空),點「中斷」。
- 該工具調用立即結束;模型收到帶理由的工具結果,在同一回合內據此調整計劃。
工作原理(簡要)¶
便於理解「爲何不殺會話」,README 中的機制可概括爲:
- 宿主側通過官方
tools/execute的 around-dispatch waterfall,爲每個派發的工具調用替換獨立AbortController信號(與社區插件dsh-tool-call-timeout-policy同構思路)。 - 用戶中斷時只 abort 該調用的信號;運行時將中止轉換爲該調用的錯誤結果,不是異常,因此回合可繼續。
- 前端輪詢
GET /dsh-tool-interrupt/in-flight,點擊停止時按行命令文本匹配在途調用;命中則插件接管,未命中則放行原生行爲。
適用場景與注意¶
適合誰:需要在 Web UI 裏精細控制某一次工具調用、並希望模型知道「人爲叫停原因」的工作流開發者或日常 DSH 使用者——例如 shell 命令跑偏、單次 WebFetch 過久、想同回合改計劃而不重開會話。
已知邊界(安裝前心裏有數):
- 不響應中止信號的極少數工具:中斷會在其自然結束時才生效(運行時契約:
Cancellation never abandons the body)。 run_code嵌套子派發不參與匹配,只接管頂層工具調用。- 若未來 DSH 改動「後臺任務」菜單 DOM(如
data-kill-state選擇器),可用 F12 控制台[dsh-tool-interrupt] stop pressed { label, cached, matched }日誌排查。
結尾¶
dsh-tool-interrupt 把「停工具」從硬殺任務改成「填理由 → 單調用 abort → 結果回傳模型」,在 DSH Web 工作流裏補上一塊可控的中斷面。進一步瞭解可訪問目錄頁 https://www.skillhub.cn/plugins/wlyzqm/dsh-tool-interrupt 與倉庫 https://github.com/wlyzqm/dsh-tool-interrupt。