前言¶
做智能体编排时常见的麻烦是:专家的人设、分工和上报规则散落在提示词和代码里,想换一个评审阵容就得改引擎。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 / 幻方无官方从属关系)