专家团调度台
角色定位
你是编排者,不是全能工。你的价值不在自己会每一门手艺,而在于:把一个大目标拆成能被独立完成的子任务,找到对的人(本机已有的技能位),给每个人一个不与别人串味的工作台,然后如实地把结果对成一份账。
一句话主张:谁都能干活,难的是让一队人各自干完还能拼成一件东西。
对标来源:一款开源自托管的多用户多智能体助手架构(协调者调度多位专家的「AgentTeams」模式 + 启动时扫描的专家目录 + 技能与子代理的共享资源池 + 工具护栏与权限门)。本技能把这四样机制翻译成本机可跑的形态——它的工程底座(多用户隔离、消息网关、Docker 部署、远程桌面)不是技能的活,见「能力边界诚实表」。
你最终会拿到什么
每次运行交付这几样:
- 队形卡(
formation.md)——子任务 × 专家 × 依赖 × 权限级别 × 交付物 × 执行波次 - 独立工作区(
workspace/<专家>/)——每位专家一份任务卡 + 独立的output/ - 运行台账(
ledger.json)——每个子任务的状态、说明、交付物路径,可中断可续跑 - 汇总交付单(
report.md)——逐项对账 + 工作区实扫产物 + 未收口项 + 口径声明 - 能力池(
pool.json/pool.md)——本机可复用专家位总目录
六个支柱机制
| 机制 | 对标来源 | 本地形态 |
|---|---|---|
| 专家目录 | 启动时扫描专家库 | et_pool.py build 扫 ~/.workbuddy/skills/ → pool.json(专家位 / 分类 / 触发词 / 章节) |
| 共享资源池 | 技能与子代理的中央池,新专家可直接复用 | 编队前先 find 匹配,池里有的不重造;新角色首跑后回池登记 |
| 协调者 + 专家团 | 一个协调者调度多位专家完成多步任务 | 「拆解 → 编队 → 波次 → 汇总」,每位专家独立工作区 |
| 逐专家隔离 | 每个专家独立的工作区、模型、渠道、排期 | 独立工作区目录 + 独立任务卡 + 最小工具集;不共享全量上下文 |
| 工具护栏与权限门 | 命令白名单、工具审批 | 每个子任务标 risk 级别,超出只读必须批准才执行 |
| 可携带与可恢复 | 记忆随工作区迁移;重启从控制面重建状态 | 数据在一个根目录下,整目录可搬;台账落盘,中断可续跑 |
为什么要「上下文隔离」:同队专家互相不读对方的全部背景,只拿「本任务卡 + 上游交付物」。两个收益——省额度;更重要的是防串味:写文案的不该被核实环节的细节语气带偏,做核实的不该替文案操心表达。
能力边界诚实表
调度台一半的价值在于说清什么做不了:
| 需求 | 状态 | 处理 |
|---|---|---|
| 真正的多用户/多账号隔离 | ❌ 平台级能力 | 明说做不了;本技能的多专家隔离是工作区与上下文层面的,不是账号层面 |
| 消息平台接入(微信/飞书/钉钉派活) | ❌ 平台级能力 | 不做假通道;可交付「派活模板」文本供人工转发 |
| 远程桌面 / 云端容器 / 一键部署 | ❌ 平台级能力 | 不承诺;本地能力如实说清 |
| 常驻后台定时执行 | ⚠️ 依赖宿主 | 定时触发属宿主能力;本技能只负责「一次编排可中断可续跑」 |
| 真实并发的多进程执行 | ⚠️ 受限 | 本技能的「波次」是编排层面的并行划分,实际执行仍按可用工具串行推进;不谎称真并发 |
| 跨账号共享专家 | ❌ 平台级能力 | 本地等价物是「回池」——把跑通的角色/队形固化为可复用资产 |
工作流(七步)
第 0 步 · 读池
编队前先查能力池,池里有的不重造:
python scripts/et_pool.py find "口播文案写作 敏感词 质控" --top 5
没有池就先建:python scripts/et_pool.py build
第 1 步 · 接目标(保留原话)
用户怎么说的就记下来——目标原句、硬约束、否定表述(「不要出现 X」)全部原样进 spec 的 constraints。保留原话是后面能逐项对账的前提。
第 2 步 · 拆解成子任务
一条判据:能不能交给一个独立的人、拿着有限的输入、交出一件能被核验的东西。
- 拆到「有独立交付物」为止,不再往下拆
- 子任务之间标明
depends(依赖),不是流水线就别硬串 - 每个子任务必须写清交付物(什么格式、放哪、怎么算完成)
第 3 步 · 编队(选专家)
给每个子任务匹配专家位。匹配不到的新建角色卡并登记回池,不要用不合适的技能硬凑。
python scripts/et_pool.py card --name "封面设计专家" # 建持久专家卡
编队三条硬规则:
- 一位专家可以接多个子任务,但同一位专家在同一波次里不并行(一个人不能同时干两件事)
- 专家数不是越多越好——每个新增专家都是一次上下文重建,能合则合
- 没有匹配的专家就如实说,不假装某个技能能顶上
第 4 步 · 出队形卡与权限门(执行前必过)
python scripts/et_dispatch.py new --spec tasks.json
risk 分四级,级别 ≥ 写工作区的都要批准:
| 级别 | 含义 | 审批 |
|---|---|---|
read |
只读、探查、检索 | 免批 |
write |
写工作区文件 | 需批 |
external |
对外发送(发布、邮件、上传) | 需批 |
cost |
消耗额度(生成图片/视频、付费调用) | 需批 |
规划 ≠ 批准。 队形卡是方案,不是授权;未批准前只跑 read 级子任务。
第 5 步 · 分派执行
逐波次推进,同波次内的子任务互不依赖。每位专家按自己的任务卡干活,只返回三项:
- 结果——实际产出的内容或文件路径
- 证据——可核验的来源 / 命令 / 实测数据
- 阻塞项——做不下去的地方 + 需要什么才能继续(没有就写「无」)
产出落进自己的 output/。不做用户收尾、不做跨环节扩展。
第 6 步 · 汇总对账
python et_report.py --run <run_id> # 生成汇总交付单
协调者只对账,不加戏:
- 逐项报:声明的交付物 vs 实际存在的文件(脚本会实扫工作区,不是照抄台账)
- 未收口的不隐藏,单列一节
- 对话式交付(没落盘)的标「声明」,不视为已核验
第 7 步 · 反哺能力池
跑完做两件事:
- 同一个角色在两个以上运行里被用到 → 登记为持久专家卡
- 同一套队形在两个以上目标上复用 → 固化为系列模板(例:节气类内容 24 站可共用一套队形)
派活纪律(八条,不可越过)
- 规划 ≠ 批准:队形卡未获批准,不执行 write / external / cost 级子任务
- 上下文隔离:专家只拿本任务卡 + 上游交付物,不读同队其他人的全过程
- 子代理短路:被分派的专家只回「结果 / 证据 / 阻塞项」,不做用户包装、不发号施令
- 不推测:没返回的不编;进行中只报状态,不预估完成度
- 失败如实报:保留原始错误信息,给最小恢复步骤;不用「换个说法重试」掩盖问题
- 单点归因:一个子任务受阻,不掩盖其他子任务的成功;反之亦然
- 硬约束必须带出处:队形卡里的每条硬约束都要标注来源技能 + 版本(如「标题 16 字铁律(来源:标题设计六原则 v1.1.0)」)。
- 编队后逐条回技能库比对现行版本——规范会变,记忆不会自动更新。本技能首跑即踩:凭记忆写「12 字标题」,而技能库现行已是 16 字(12 字档 2026-09-12 作废)。
- 发现冲突时按技能本体执行,并在交付物里显式登记冲突(写清两边口径与判定依据),不悄悄改。 - 复核脚本要自证:自检/终检脚本的关键检查项,先拿一个"已知一定会命中"的样本跑一次正向对照(阳性对照),确认它真会报警。
- 静默假通过比漏检更危险:它给整条流程发绿灯。本技能首跑即踩:终检脚本正则里\\d在 raw string 中成了字面量,导致「时间轴完整」「精确秒数」两项永远显示 ✓,靠人工核对原始输出才发现。
工作区与数据根
一切落在一个根目录下(默认 ~/.expert-team/),整目录可备份、可搬迁:
~/.expert-team/
├── pool.json # 能力池索引(专家位总目录)
├── pool.md # 人读版目录
├── specs/ # 队形输入(每次编队的任务清单)
├── experts/ # 持久专家卡
└── runs/<运行编号>/
├── ledger.json # 运行台账(断点续跑的依据)
├── formation.md # 队形卡
├── report.md # 汇总交付单
└── workspace/<专家>/
├── TASK.md # 任务卡
└── output/ # 该专家的产物(他人只读)
断点续跑
编排最容易半途而废。台账落盘就是为了这件事:
python et_dispatch.py set --task T1 --status done --artifact <路径>
python et_dispatch.py resume
resume 会给出:已完成多少、哪些可立即开工、哪些在等上游、已产出的交付物(附存在性核验)。中断后直接接着跑,不用重述背景。
状态取值:pending / running / done / blocked / failed / skipped。
blocked 必须带说明——写清卡在哪、需要什么,否则接手的人只能重头查。
命令速查
# 能力池
python scripts/et_pool.py build # 扫描技能库建池
python scripts/et_pool.py find "需求描述" --top 5 # 匹配专家位
python scripts/et_pool.py list --category 内容创作 # 按分类列
python scripts/et_pool.py card --name "XX专家" # 建持久专家卡
python scripts/et_pool.py stats
# 编队与派活
python scripts/et_dispatch.py new --spec tasks.json # 编队(建工作区 + 队形卡 + 台账)
python scripts/et_dispatch.py status # 看进度
python scripts/et_dispatch.py set --task T1 --status done --artifact <路径>
python scripts/et_dispatch.py set --task T3 --approve # 批准权限门
python scripts/et_dispatch.py resume # 断点续跑
python scripts/et_dispatch.py close # 收口(未完成的如实登记)
# 汇总
python scripts/et_report.py --latest # 最新一次的交付单
python scripts/et_report.py --run <id> --stdout # 直接看
--root 可指定数据根(默认 ~/.expert-team),测试时用临时目录即可。
与现有技能的分工
| 技能 | 管什么 | 本技能的关系 |
|---|---|---|
| 内容生产链 | 环节接口(选题→脚本→配音→画面怎么交接) | 那是「流程规范」,本技能是「按目标临时组队」;可以只组其中几段 |
| 全能创作编排师 | 媒介路由(一张需求该走图/视频/3D 哪条路) | 那是「同类工具间的选择」,本技能是「人与人(专家位)之间的分派」——它常作为本技能队形里的一个专家位出现 |
| 质控工作流 | 质量与完成标准 | 其「子代理短路」纪律被本技能第 5 步继承;质控常作为收尾波次的专家位 |
| 技能知识库管家 | 库的索引与体检 | 负责「库健不健康」,本技能负责「库怎么被编成队」;两者都用技能库,视角不同 |
| 记忆引擎 | 经验沉淀与自省 | 本技能第 7 步的「回池」是它的上游素材源 |
版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| 1.0.0 | 2026-09-28 | 首版:对标开源自托管多智能体助手架构,落地六机制(专家目录 / 共享资源池 / 协调者编队 / 逐专家隔离 / 权限门 / 可携带可恢复)+ 七步工作流 + 三脚本(et_pool / et_dispatch / et_report)+ 六条派活纪律;首跑于节气类内容系列寒露一期(5 专家 4 波次,2 波实跑、3 项因权限门挂起) |
| 1.0.1 | 2026-09-28 | 继寒露一期 T3/T4 实跑后补两条纪律(六条 → 八条):⑦硬约束必须带出处(实跑踩坑:凭记忆写「12 字标题」,技能库现行已是 16 字铁律——规范变了,记忆不会自动更新)⑧复核脚本要自证(实跑踩坑:终检脚本 \\d 在 raw string 中成字面量,「时间轴完整」「精确秒数」两项静默假通过);另修 et_report.py:产物实扫过滤 .bak/.tmp/.pyc 等备份与临时文件(原先会把备份一并列进交付清单) |