前言¶
DeepSeek Harness (DSH) 的設計理念是「一切皆插件」。在使用 DSH 構建智能體工作流時,智能體可能會執行長時間運行的任務(例如開發自己的插件)。如果承載 DSH 進程的服務(如因崩潰重啓或手動重啓)發生中斷,處於活躍狀態的目標會保持持久化,但其「激活狀態」會丟失。這意味着回合驅動程序(goal-round driver)會停止工作,直到人工介入執行 /goal resume。
dsh-goal-restart 插件解決了這個問題。它旨在讓智能體在服務重啓後能夠自動恢復工作,無需人工干預。
插件簡介¶
- 名稱:dsh-goal-restart
- 所有者:joshryandavis
- 類別:工作流
- 許可證:MIT
該插件的作用是在 DSH 服務重啓時,自動檢測並重新激活仍然處於活躍狀態且有餘量預算的持久化目標。它會調用 ctx.goals.resume,讓目標回合驅動程序能夠無縫接管並繼續執行後續回合。
安裝與啓用¶
安裝插件需要使用 DSH 的插件管理命令,並指定配置文件(profile)。
- 執行安裝命令:
dsh plugin --profile <profile> add dsh-goal-restart
*說明:將 `<profile>` 替換爲你當前使用的配置文件名稱。*
- 重啓 dsh 服務以加載新插件。
禁用插件¶
如果需要臨時關閉此功能,可以通過修改配置文件中的補丁來禁用。
在 profile 的 cordis.patch.yml 文件中添加以下配置:
- id: goal-restart
disabled: true
工作原理¶
插件的核心邏輯位於 agent/session-start 事件處理中。只有當會話恢復源(payload.source)爲 'resume' 時,插件纔會介入。
檢查條件¶
插件會根據策略表決定是否重新激活目標:
- 觸發條件:
agent/session-start且payload.source === 'resume'(會話剛從持久化存儲加載)。 - 動作:調用
ctx.goals.resume(agent, ref)。 - 持久化:重新激活會向會話日誌寫入一次持久化的
resumemutation(revision +1),這與人工執行/goal resume的寫入一致。
驅動程序職責¶
需要注意的是,回合驅動程序(goal-round driver)已經內置了持久化和取消安全機制。此插件僅負責決定「是否需要繼續」,具體的執行邏輯和回合調度由驅動程序處理。
限制與策略¶
插件並非對所有場景都生效,它會跳過以下情況:
- 會話全新啓動(
source: 'startup')。 - 會話是由其他進程派生的(如 forked session 或 subagent session,此時 lineage 在進程中)。
- 目標狀態爲
paused、blocked或complete(由持久化的階段狀態決定)。 - 目標已處於
armed狀態(冪等操作,跳過)。 - 目標回合數已達到上限(
roundsStarted >= maxGoalRounds)。
驗證與測試¶
該策略經過了充分的驗證。代碼庫中包含了 13 個內存單元測試(npm test),以及一個無需網絡和實時進程即可運行的冒煙測試腳本(npm run smoke)。
總結¶
dsh-goal-restart 插件通過在服務重啓後自動調用 resume,消除了人工干預的必要步驟。對於需要長時間運行或自主開發的智能體工作流,這是一個關鍵的「自愈」機制。