前言¶
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