前言¶
在 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 将智能体从“自我声明完成”转变为“证明完成”。通过运行测试套件和回合边界检查,它提供了强制的验证机制。如果配置得当,插件对诚实的工作流是透明的;只有在验证失败时才会介入。