dsh-experts:把專家團寫成數據目錄,自動註冊爲 dsh 可路由的 skill

前言

做智能體編排時常見的麻煩是:專家的人設、分工和上報規則散落在提示詞和代碼裏,想換一個評審陣容就得改引擎。dsh(DeepSeek Harness)的理念是「一切皆插件」,libinyam/dsh-experts 沿着這個思路把「專家團」做成了用戶可寫的數據目錄:每個團隊自動註冊爲模型可路由的 skill(experts-<團隊名>),引擎與陣容分離。下面介紹它的設計、安裝和用法。

這是什麼

dsh-experts 是 libinyam 維護的 dsh 多專家插件,MIT 協議。一句話定位:把專家人設清單變成 dsh 原生 skills——團隊發現、校驗和工作流協議在插件裏,專家人設與升級路由在團隊目錄裏。設計參照 Qoder 專家團 / WorkBuddy Expert Teams 的產品形態,協作協議繼承自作者此前的 github-project-review-skill(升級路由矩陣、數據門控決策、分層輸出深度),改建於 dsh 原生能力(skills provider、可繼續 child、嵌套 subagent、消息和 report 通道)之上。

工作原理

插件按 rank 分層掃描團隊目錄,同名團隊就近覆蓋:

1、項目 .dsh/experts/(rank 100)
2、config.teamDirs(rank 300)
3、<dshHome>/experts(rank 400)
4、隨包 teams/(rank 600,示例團隊)

發現之後對每個團隊的 team.json 做嚴格校驗(fail loud),通過後組裝工作流模板、花名冊、人設卡與升級矩陣,skill 目錄出現 experts-<團隊名>,模型即可路由到該團隊。

運行期的動作分兩步:當前會話先啓動真實的 lead child,lead 再按任務動態啓動 specialist child——相關的專家才啓動,並且可以繼續或追加派遣。

想魔改官方示例,標準動作是把隨包示例目錄拷到 <dshHome>/experts/ 下改,項目層的同名團隊會自動遮蔽隨包版本。

團隊目錄怎麼寫

一個團隊就是一個目錄:

my-team/
├── team.json     # 機器接線:名稱/描述/工作流/專家/升級路由
├── TEAM.md       # 團隊級約定(可選,注入技能 body)
└── experts/      # 人設卡,由 lead 在 specialist prompt 中全文注入
    ├── lead.md
    └── coder.md

team.json 裏的幾個關鍵字段:

  • experts[]:1-8 位專家,{id, role: coordinator|specialist, card, modelHint?},恰好一位 coordinator 作爲 lead child 啓動;
  • escalations[]:升級路由 {from, to, when, priority(P0|P1|P2)},from/to 必須引用專家 id 且不許自指;
  • TEAM.md:團隊級約定,可選,注入技能 body;experts/*.md 人設卡由 lead 在 specialist prompt 中全文注入;
  • reportLanguage:zh(默認)或 en。

校驗是 fail loud 的,下面這些都會被直接拒絕:未知字段、路徑逃逸(../、絕對路徑、盤符、符號鏈接出目錄、NUL)、懸空升級引用、多位協調者、自由文本含換行或管道符(防 markdown 結構注入)、卡片含 4+ 反引號圍欄、TEAM.md 超 64KB 等。錯誤消息帶精確文件路徑與字段名。同名團隊先按名字去重再對勝者全量校驗——有效的低 rank 團隊可以遮蔽同名的壞團隊;沒有遮蔽時,任何一個壞團隊都會讓本提供方整體報錯,修復該團隊即恢復。

安裝與啓用

推薦方式是加入 dsh profile:在 profile 的 package.json 中把本包加入 dependencies 與 bundles。

{
  "dependencies": {
    "dsh-experts": "github:libinyam/dsh-experts"
  },
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-experts"]
    }
  }
}

本地開發可用 "dsh-experts": "file:<到本倉庫的路徑>"。

方式二是手動放置:克隆本倉庫到 profile 的 node_modules/dsh-experts,並把 "dsh-experts" 追加進 bundles 列表。插件無外部依賴,無需安裝步驟。

環境要求:Node ≥18;零運行時依賴、零 devDependencies;plain ESM JavaScript,無構建步驟。

典型用法

安裝後 skill 目錄會出現內置示例團隊 experts-web-review(5 位專家:協調者 tech-lead + 前端 + 後端 + 測試 + 安全)。對 dsh 說:

用 experts-web-review 評估 owner/repo 的推廣就緒度

創建自己的團隊,用配套腳本從內置 web-review 複製:

node node_modules/dsh-experts/scripts/new-team.mjs --name my-team

默認複製到 <dshHome>/experts/my-team。編輯 my-team/team.json(描述、專家、升級路由)和 experts/*.md 人設卡,然後離線校驗:

node node_modules/dsh-experts/scripts/validate-team.mjs <dshHome>/experts/my-team

校驗通過後,skill 目錄會自動多出 experts-my-team。注意 v0.1 沒有文件 watcher,新增或修改團隊後需要重載插件刷新目錄。

開發側的常用命令:

npm test                                  # 全量測試(單元 + 守護)
npm run guard                             # 只跑憲法守護測試
npm run validate-team teams/web-review    # 校驗內置示例團隊

配置

配置寫在 cordis.patch.yml,全部可選:

鍵 默認 說明
providerName dsh-experts skills 註冊表中的提供方名
includeDefaultRoots true 是否掃描項目/用戶根(關閉後僅 teamDirs + 隨包)
dshHome $DSH_HOME 或 ~/.dsh 覆蓋 dsh 主目錄
teamDirs [] 額外團隊根(rank 300)
includeBundledTeams true 是否暴露隨包示例團隊

等價的環境變量:DSH_EXPERTS_PROVIDER_NAME、DSH_EXPERTS_INCLUDE_DEFAULT_ROOTS=0、DSH_HOME、DSH_EXPERTS_TEAM_DIRS(分號/逗號分隔)、DSH_EXPERTS_INCLUDE_BUNDLED_TEAMS=0。

已知問題(v0.1)

  • 無文件 watcher:新增/修改團隊需重載插件。
  • 每次 list() 全量重掃並重校驗所有團隊(無緩存),團隊數量上千時目錄刷新開銷可觀。
  • 僅 review 工作流模板;develop 模板(patch 化輸出 + 綠燈門禁 + 人工 PR)在路線圖上。
  • 未掃描 .agents 系根目錄。
  • modelHint 只是模板提示,不強制路由模型。

適用場景與注意事項

適合需要在 dsh 裏搭多專家評審流程、希望陣容像數據一樣可版本化可魔改、不想爲換人設改引擎的智能體開發者。

用之前留意幾點:

  • 一個壞團隊(且無低 rank 同名遮蔽)會讓本提供方整體報錯,這是 fail loud 設計,按錯誤消息修復即恢復。
  • 無 subagent 或 report 工具時,插件會明確標記團隊運行時不可用,不會僞裝成專家已經工作。
  • 排查入口:dsh 控制檯日誌看 skills.registerProvider 相關錯誤,或跑 scripts/validate-team.mjs <目錄> 離線定位。
  • 插件以當前 dsh 進程權限運行,安裝前建議自行檢查源碼與許可證(MIT)。

結語

dsh-experts 的價值在於把「換陣容」從改代碼變成改目錄:嚴格校驗兜住低級錯誤,rank 分層支持就地覆蓋,skill 自動註冊讓模型按需路由。倉庫與目錄頁:

  • GitHub:https://github.com/libinyam/dsh-experts
  • 目錄頁:https://www.skillhub.cn/plugins/libinyam/dsh-experts(社區站點,與 DeepSeek / 幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜