前言¶
DeepSeek Harness(DSH)的典型用法是给一个任务定义 prompt 和 workspace,然后运行 Agent。如果希望 Agent 在迭代中逐步变强,通常的做法是手动调整 system prompt 或反复重写任务脚本。这种方式对开发者要求高,且难以在多个任务间复用经验。
Recursive Harness 插件引入了两层递归演化机制,在模型权重不变的情况下,让 Harness 自身进化:任务内部做 Propose → Probe → Compose,任务之间通过 Reflector 积累经验库。这套逻辑来自 Google Research 的 Harness² 论文(arXiv:2610.14224)。
下面介绍这个插件如何工作,以及如何安装和配置。
插件定位¶
名称:dsh-plugin-recursive-harness
维护者:Bear0117
状态:实验性(experimental)
适用范围:DeepSeek Harness 0.2.x(测试于 0.2.0-rc.2)
Node.js 要求:22.19 或 24+
插件的目标是:当模型权重固定时,通过演化 Harness(包括 system prompt、guardrails、tool guidance、memory 和 skills)来提升 Agent 表现,并在不同任务间复用成功模式。
核心机制¶
插件在两个维度做递归演化。
任务内:Propose → Probe → Compose¶
对每个任务,插件按以下流程运行:
- Propose:模型提出两个候选 Harness。一个偏通用,用于强化推理和工具纪律;另一个偏领域,增加 memory、guardrails 和一个 skill。每次提出后,运行一轮 baseline(参考运行)。
- Probe:两个候选 Harness 在隔离的 headless dsh 实例中运行,各自拥有独立的任务 workspace。先通过 objective checks 决定是否通过,再通过行为指标(工具错误、步数、token 数)比较,可选模型 judge 做第三级判断。
- Compose:互补的赢家合并后再次验证;如果合并变差,则回退到表现最好的单候选。
每次迭代后,新的 active Harness 会写入 $DSH_HOME/recursive-harness/active/,新 Session 会自动加载。
任务间:Reflector → Experience Library¶
插件维护一个时间顺序的 Experience Library,记录哪些 Harness 配置在哪些任务上有效。每次运行结束后,Reflector 将结果写入 Markdown 条目,供后续任务的 Propose 使用。
演化范围¶
插件可以演化的组件包括:
- systemprompt
- guardrails
- tool_guidance
- longTermMemory
- skills(SKILL.md + 小脚本)
以下内容保持不变:
AGENTS.md.dsh/.git/lockedSurfaces中列出的路径
安装与启用¶
安装命令(以 web profile 为例):
dsh plugin --profile web add dsh-plugin-recursive-harness
安装后重启 dsh web,终端会打印 [recursive-harness] ready: …。
更新插件:
dsh plugin --profile web update dsh-plugin-recursive-harness
如需立即更新到指定版本(因为 pnpm 默认只使用一天前发布的版本),可加版本号:
dsh plugin --profile web add dsh-plugin-recursive-harness@0.1.0
移除插件:
dsh plugin --profile web remove dsh-plugin-recursive-harness
删除残留文件:
- 删除
recursive-harness条目(如果在cordis.patch.yml中添加过) - 删除
~/.dsh/recursive-harness/(如不保留 harness 版本和经验库)
配置说明¶
配置文件位于 profile 的 cordis.patch.yml(web profile 为 ~/.dsh/profiles/web/cordis.patch.yml)。添加 id: recursive-harness 条目后,其 config 会替换插件的默认配置。
一个最小配置示例:
- id: recursive-harness
config:
proposer:
engine: llm
endpoint: http://127.0.0.1:8000/v1/chat/completions
model: my-model
apiKeyEnv: "" # 环境变量名
allowEgress: false # 是否允许访问非回环地址
allowHttpHosts: [] # 允许的 HTTP 主机
judge: true # 启用模型 judge(第三级判断)
jsonMode: false # 是否发送 response_format=json_object
extraBody: {} # 额外的请求体字段
probe:
templateProfile: web # probe 继承此 profile 的模型和凭证
provider: "" # 覆盖 probe 使用的模型提供者
model: "" # 覆盖 probe 使用的模型
blockedTools: [] # 这些工具的任务永不被 probe
lockedSurfaces: [] # 任何 candidate 都不能触碰的路径
protectedPatterns: [] # 正则表达式,匹配则拒绝 candidate
maxConcurrency: 2 # 并行 probe 子进程数
maxTokensPerIteration: 120000
probeTimeoutMs: 600000
注意:proposer 需要一个 OpenAI 兼容的聊天补全服务器(如 vLLM、SGLang、llama.cpp、Ollama 或托管 API)。未配置前 proposer 为固定模板,不会向外部发送文本。
命令行接口¶
插件提供以下命令(可在 dsh 的会话中执行,也可直接用 npx dsh-recursive-harness):
/harness inspect:查看当前 active harness 版本和已挂载的 skills/harness start <task>或/harness start ./my-task.mjs:在后台启动一次演化运行/harness status <runId>:查看运行状态/harness cancel <runId>:停止运行并杀死子进程/harness rollback [versionId]:回退到指定版本(不提供则回退到上一个版本)/harness listExperience:列出 Reflector 保存的经验条目
命令行等效调用示例:
npx dsh-recursive-harness inspect | start | status | cancel | rollback | listExperience
状态默认存储在 ./.dsh-harness 目录下;可通过 --config 指定 JSON 配置文件。
自定义任务示例¶
任务文件是一个 ES Module,导出 task 或 tasks 数组。插件会写入 workspaceFiles 到空 workspace,运行 agent,将最终输出交给 objectiveCheck:
// my-task.mjs
export default {
taskId: 'orders-report',
split: 'dev',
domain: 'general',
prompt: '讀取 orders.csv,輸出 { total, byRegion } 的 JSON,byRegion 依名稱排序。',
workspaceFiles: { 'orders.csv': 'region,amount\nEast,10\nWest,5\nEast,2\n' },
expected: { total: 17, byRegion: { East: 12, West: 5 } },
objectiveCheck(record, task) {
const data = JSON.parse(record.finalOutput.match(/\{[\s\S]*\}/)[0]);
const ok = data.total === task.expected.total;
return {
passed: ok,
score: ok ? 1 : 0,
details: ok ? [] : [`total 應為 ${task.expected.total},實得 ${data.total}`]
};
},
};
注意:objectiveCheck 的结果详情会在传递给 proposer 前被脱敏(隐藏 expected 和具体错误信息),避免 proposer 过拟合。
适用场景与注意事项¶
适合使用此插件的情况:
- 需要在多个任务上持续优化 Agent 的 system prompt、guardrails 和工具使用方式
- 希望在任务间复用成功的 Harness 配置和经验
- 模型权重固定,但希望通过迭代改进 Harness 来提升性能
注意事项:
- 插件以当前 dsh 进程的权限运行,安装前应检查源码和许可证(MIT)
- 插件为实验性功能,当前在 dsh 0.2.0-rc.2 上测试通过
- 每次 probe 是一次完整的 agent 运行,需要根据
maxConcurrency和probeTimeoutMs合理配置资源 - 插件不会向外部发送除 proposer endpoint 以外的数据,无遥测
生态背景¶
DeepSeek Harness 的设计理念是「一切皆插件」,社区目录由 SkillHub 独立维护,与 DeepSeek 或幻方无官方从属关系。本文介绍的插件只是社区项目之一。
总结¶
Recursive Harness 插件通过 Propose → Probe → Compose 和 Reflector → Experience Library 两层递归,让 Harness 在模型权重不变的情况下自我演化,并在任务间复用经验。对于需要在多个任务上持续优化 Agent 行为的开发者,这是一个可用的实验性工具。
- 插件目录页:https://www.skillhub.cn/plugins/Bear0117/dsh-plugin-recursive-harness
- GitHub 仓库:https://github.com/Bear0117/dsh-plugin-recursive-harness