前言¶
在 DeepSeek Harness(DSH)中,當智能體運行長時間任務並宣佈“完成”時,這通常只是基於自身判斷的自我聲明。模型容易在測試未通過的情況下就關閉目標,或者試圖跳過驗證直接結束回合。
dsh-verify-judge 插件通過攔截 update_goal(complete) 調用,將“完成”變爲一個有條件的動作:在目標關閉前,必須先運行項目的測試套件。如果測試失敗,插件會拒絕關閉目標並將失敗信息反饋給智能體。此外,它還會在回合邊界時檢查並強制重新驗證,確保智能體持續工作直到真正完成。
插件定位¶
這是一個用於 DeepSeek Harness 的驗證插件,由 zriyox 維護。它通過運行工作區的驗證命令(通常是測試套件)來驗證智能體是否真正完成了任務,而不是僅僅在日誌中聲明完成。
核心功能¶
該插件主要實現以下能力:
- 攔截與驗證:攔截
update_goal(complete)調用,在目標關閉前執行項目測試套件。 - 回合邊界檢查:在回合結束時檢查並強制重新驗證,防止智能體通過在聊天中僅說“完成”來跳過測試。
- 命令自動檢測:自動檢測測試命令。
package.json中的scripts.test。go.mod文件(運行go test ./...)。Cargo.toml文件(運行cargo test)。
- 自定義配置:支持配置自定義的驗證命令。
- 未檢測命令處理:當未檢測到命令時,支持
allow(默認)或deny策略。 - 超時與反饋:支持命令超時控制,並在失敗時截取輸出尾部作爲反饋信息。
安裝與啓用¶
使用官方提供的命令安裝插件。安裝後需要重啓 dsh web 或等待補丁重載。
dsh plugin --profile web add github:zriyox/dsh-verify-judge
配置說明¶
在插件的配置行(profile 或 home cordis.patch.yml)中添加以下內容:
- id: verify-judge
config:
commands: ['pnpm test', 'pnpm run lint'] # 指定運行命令
onUndetected: deny # 未找到命令時拒絕完成
timeoutMs: 300000 # 單個命令超時時間
outputTailChars: 4000 # 失敗輸出截取字符數
gateTurnEnd: true # 在回合結束時重新驗證
maxTurnEndRetries: 2 # 每回合最大重試次數
配置項說明¶
commands:顯式指定的驗證命令,優先級高於自動檢測。必須在會話工作區中運行。onUndetected:當未檢測到命令時的策略,默認爲allow。timeoutMs:單個驗證命令的超時時間限制。outputTailChars:驗證失敗時發送給智能體的輸出尾部最大字符數。gateTurnEnd:當目標激活時,是否在回合結束時觸發重新驗證。maxTurnEndRetries:在回合內因驗證失敗而強制繼續工作的最大次數。
依賴與要求¶
插件運行需要滿足以下依賴條件:
- Node.js 版本:
^22.19.0或>=24.0.0 - 核心依賴:
@deepseek-ai/cordis(^4.0.1)@deepseek-ai/dsh-agent(^0.1.0-rc.6)@deepseek-ai/dsh-goal(^0.0.1-rc.1)@deepseek-ai/dsh-llm(^0.0.1-rc.1)@deepseek-ai/dsh-session(^0.0.1-rc.1)@deepseek-ai/dsh-shell(^0.1.0-rc.5)@deepseek-ai/dsh-tools(^0.0.1-rc.1)
- 開發依賴:
@types/node(^22.20.0),typescript(^5.9.3)
插件通過 tools/pre-execute waterfall 攔截調用,不修改非 update_goal 調用。
適用場景¶
該插件適合需要嚴格驗證智能體工作成果的場景,特別是使用 DSH 的 autonomous goal loop(自主目標循環)時。它確保智能體不能通過“自我聲明”來結束任務,而是必須通過實際代碼驗證(如測試通過)。
總結¶
dsh-verify-judge 將智能體從“自我聲明完成”轉變爲“證明完成”。通過運行測試套件和回合邊界檢查,它提供了強制的驗證機制。如果配置得當,插件對誠實的工作流是透明的;只有在驗證失敗時纔會介入。