岗位助手三层模型架构(行业 → 岗位 → 员工)· 2026-08-10
本文锁定「岗位助手」的目标架构与本次已实现的核心,作为后续增量改进的对齐基准。
设计要点(来自产品定义):
- 行业是死的(固定集合,不可随意增删)。
- 岗位是可调的(绑定行业、内含多员工、可配岗位级/角色级参数)。
- 员工是通用的(同一员工服务多岗位;按 行业 + 岗位 动态调参)。
- 岗位 = 多智能体协同:一个岗位可同时调度多名员工并行/串行完成任务。
- 任何调用都收敛到对话框,结果统一呈现。
一、三层模型
┌─────────────────────────────────────────────────────────────┐
│ 行业 industry(死 / 固定) │
│ phos_chem · baijiu · aerospace_machinery · general_machinery │
│ · electronics_manufacturing (来源: industry-profile-loader) │
└───────────────────────────┬─────────────────────────────────┘
│ 行业匹配岗位(industries 字段)
┌───────────────────────────▼─────────────────────────────────┐
│ 岗位 position(可调) │
│ 含多个员工 agents[],每个有 role;可配 params(岗位级默认) │
│ 例: 操作工助手 / 质量管理员助手 / 工艺工程师助手 ... │
└───────────────────────────┬─────────────────────────────────┘
│ 岗位匹配员工 + 调参
┌───────────────────────────▼─────────────────────────────────┐
│ 员工 staff(通用) │
│ 基础 params ⊕ 行业上下文 ⊕ 岗位级 params ⊕ 角色专属 params │
│ → 执行时拿到"适配后参数",无需为每个行业写一份员工 │
└──────────────────────────────────────────────────────────────┘
参数适配合并顺序(后者覆盖前者)
- 员工基础
params(staff 定义里) - 行业上下文
industry(critical_inspect_marks / kb_topics / ncr_root_cause_mapping / spc_rules…) - 岗位级默认
position.params(本岗位全员共享) - 角色专属
agent.params(该员工在此岗位内的覆盖,最高优先级)
合并后同时写入 _industryId / _positionId / _positionRole,worker 可直接读 parameters.industry 聚焦查询。
二、本次已实现(可运行,已验证)
1. 核心运行时 server/boss-scheduler/position-runtime.js
listIndustries()— 固定行业集合getPositions(industry?)— 按行业过滤岗位(未声明 industries = 服务全部行业,渐进迁移默认)resolveStaffParams(staffId, {industry, positionId})— 三层级联合并getOrchestrationPlan(positionId, industry)— 岗位协同计划(执行前预览)runPosition(positionId, intent, {industry, mode})— 岗位多智能体编排(并行/串行,结果统一合并)runStaffAdaptive(staffId, intent, {industry})— 直接调用员工(仍按行业调参;不带 industry 则仅基础参数=精度较低)normalizeResult(result)— 统一结果契约(前端对话框统一渲染)
2. 行业绑定样板 server/boss-scheduler/profiles/local.yaml
POS-OPERATOR 已加 industries: [phos_chem, baijiu] + 岗位级 params + 角色专属 params(monitor_target/equip_focus),作为后续岗位的填写模板。
3. HTTP 入口 server/routes/digital-staff-routes.js(已挂载于 server.js)
GET /api/digital-staff/industry/listGET /api/digital-staff/position/list?industry=GET /api/digital-staff/position/:id/plan?industry=POST /api/digital-staff/position/:id/run{ industry, intent, mode }POST /api/digital-staff/staff/:id/adaptive-run{ industry, intent }
路径刻意避开 /api/digital-staff/:id 单段详情路由,防止被误匹配为员工 id。
验证结果:三层参数合并正确(行业上下文+岗位级+角色专属);行业过滤正确(POS-OPERATOR 在 electronics 不可见);岗位编排扇出+合并正确(mock 验证);真实员工 DS-SYS-001@phos_chem 自适应执行成功;5 个端点路由分发全部命中。回归脚本:scripts/test-position-runtime.cjs。
三、统一结果契约(前端渲染基准)
normalizeResult(result) =>
{
type, title, summary,
status: 'ok' | 'partial' | 'error' | 'confirm',
blocks: [...], // 卡片/结构化数据,员工返回 cards/blocks/data 原样承载
staffId?, role?,
raw // 原始结果,便于调试
}
// 岗位编排结果额外包裹:
{ type:'position', positionId, positionName, industry, intent, mode,
agents:[ normalizedResult... ], summary }
四、后续增量(一点一点做)
- [ ] 前端收敛(核心体验):行业选择器 → 岗位卡片 → 对话框;岗位内"一键协同"调用
position/:id/run;所有结果走normalizeResult统一卡片(StaffResultCard已存在,需对接契约)。 - [ ] 岗位行业绑定铺开:其余 9 个岗位补
industries+ 岗位级/角色级params(参照 POS-OPERATOR 模板)。 - [ ] worker 消费行业上下文:让各 worker 真正读取
parameters.industry(如知识检索按kb_topics聚焦、质检按critical_inspect_marks聚焦),使"调参"落到查询而非仅透传。 - [ ] 多智能体协同视图:复用
CollaborationChainGraph.vue在对话框渲染岗位编排的 Agent 链路与各自结论。 - [ ] 精度提示:直接调用(无岗位)vs 经岗位调用,前端标注"本次未带入岗位上下文,结果可能不够精确"。
- [ ] 事件驱动触发(可选):支持"新 NCR 建好 → 自动跑根因分析岗位"等,补上 cron/对话之外的第三类触发。
五、模型回答用户之问
| 用户之问 | 本架构如何回答 |
|---|---|
| 设计对吗 | 对。行业(死)→岗位(可调)→员工(通用+调参) 解耦清晰,岗位即多智能体编排器 |
| 用户是谁 | 业务角色人员(按行业+岗位进入)+ 企业数字化/IT(配置监管) |
| 怎么用 | 选行业 → 选岗位 → 对话框提问(岗位精确派单);或直接问(员工自适应,精度略低) |
| 达成什么目的 | 把"发现+报告"升级为"按岗位协同、带行业上下文的精准执行" |
| 帮到企业吗 | 能。前提是岗位级闭环+行业调参真正落到 worker 查询(增量 3) |
BossAgents