aps-agent/docs/product/pi-planner-agent-blueprint.md

249 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pi 调度中心驱动的计划员助手:产品与实施蓝图
日期:2026-09-09。依据:用户对重复排产提示、数据混乱、专业术语、计划员经验学习及工厂系统可插拔接入的要求。
本文中的调度中心、经验学习完整闭环和统一工厂接入层是待实施目标,不代表已经上线。本次已落地的修复和验证见末尾。
## 1. 产品定位与验收口径
一个熟悉本工厂做法的计划员助手。计划员告诉它要排哪些订单、什么时候交货、有哪些变化,助手负责查数据、理解规则、协调计算、解释结果;需要业务判断时提出具体选择。
普通用户面对一个助手。Pi Agent 是任务调度中心,后台按任务调用专业 Agent 和业务工具;用户不需要先选智能体、求解器或内部接口。
完成度按计划员能否完成整件事验收:从真实订单和现有生产安排开始,得到可解释方案,经确认下发,收到执行反馈,出现偏差后能调整。目录有文件、算法返回成功、测试通过,分别只是其中一个步骤。
## 2. 截图反映的问题与当前代码证据
| 问题 | 已核实原因 | 应有行为 |
|---|---|---|
| 已经做过排产,仍不断提示再次排产 | 数据卡只判断 canSchedule;历史卡一直保留操作按钮;guidance 原先只看固定轨版本 | 下一步由当前方案和待确认事项决定;历史检查报告只供回看 |
| 工作簿各类数量对不上 | folder_pack 把首类当作后续 sheet 的汇总类别,又把文件有效总行数回填到该类别 | 每个 sheet 归属一个明确业务类别;总数与分项可核对 |
| 一次确认产生多版 | execute_confirmed 的 folder.schedule 分支先在候选世界求解,提交后又求解一次 | 一次确认只提交一版经过校验的结果,重试不重复执行 |
| 同样的数据铺满对话 | Markdown 正文、folder-pack 和 project-analyze 重复展示 | 一个简短结论、一张主卡;完整数据和诊断可展开 |
| 演示产品和真实数据难区分 | 快捷口令含 PDU、示例料号;数据来源和用途未统一展示 | 正式项目默认空数据;示例、推断、人工确认、系统同步分别标明来源 |
| 很多内部术语直接给计划员 | P2、Plan、虚拟产线、原始字段、算法代码进入默认界面 | 用户看业务意义,技术字段在管理员诊断中查看 |
| “分析”也可能改变项目数据 | analyze_project_deep 会导入记录、调用知识模板补全并保存知识资料 | 后续将纯读取检查、待确认补全、正式入库分开;本次保留既有业务语义并说明数据整理行为 |
截图下部实际呈现的是“等待确认”的卡片,不能据此证明已经生成方案。页面未解释清楚这一区别,正是需要修复的状态表达问题。
当前数据来源隔离还需独立验收。本次只识别 DEMO 前缀并提示,没有根据前缀删除、改写任何用户数据,也不能据此判定所有数据的真实来源。
## 3. 以真实计划员工作流组织应用
### 3.1 首次接入工厂:先学会工厂怎么排
1. 收集最近一段时间的订单、手工排程、班次表、设备台账、工艺卡、缺料记录、插单/延期处理记录。
2. Pi 让数据 Agent 对齐订单、产品、工序、设备与日历;只对影响当前任务的缺项提问。
3. 经验 Agent 归纳计划员做法,逐条附上来源、适用产品/产线、适用条件、例外和置信度。
4. 用计划员的语言确认,例如:“你们是否通常先排同色产品,以减少清洗?遇到急单可以打断吗?”
5. 将确认后的做法转成规则候选,用历史订单回放,比较交期、换型次数、加班和设备负荷。
6. 计划员看懂差异并确认后,规则版本生效;原规则可恢复。
不能把一次手动调整自动固化为长期规则。订单临时偏好、车间制度和不可违反的设备限制应分别管理。
### 3.2 日常排产
用户:“把本周这些订单排一下,急单先保证,尽量别加班。”
- 助手先显示:本次选中的订单、数据更新时间、已有生产安排、已确认规则。
- 发现缺项时只问关键问题:“这两个产品缺加工时间,请提供,或允许用哪份历史记录估算?”
- 信息齐全后展示简短任务计划:“核对库存和在制品 → 计算安排 → 检查交期”,后台自动执行无副作用任务。
- 结果首屏回答四件事:排了哪些单、多少能按时交、哪些有风险、需要用户决定什么。
- 推荐一个方案;需要取舍时最多先给两三个可解释选项,如“交期优先”“少换型”“少加班”。
- 用户可用自然语言调整:“这张单晚一天也行”“这台机明天停半天”,只重新计算受影响部分。
- 发布、下发及下发后的执行状态分开显示;没有工厂回执,不显示“已下发成功”。
### 3.3 状态与唯一推荐动作
| 真实状态 | 用户看到的说明 | 主要操作 |
|---|---|---|
| 缺数据 | 还差哪些信息、会影响哪些单、如何补齐 | 补充信息 |
| 规则待确认 | 从现有做法整理出哪些规则、有何依据 | 确认本次规则 |
| 数据已检查 | 已读到数据,尚未生成方案 | 确认生成方案 |
| 正在排产 | 当前阶段和已完成检查;支持取消 | 查看进度 |
| 方案已生成 | 版本、订单、交期风险、尚未下发 | 检查方案 |
| 有待决策事项 | 清楚列出冲突和取舍 | 选择调整方式 |
| 等待发布确认 | 将影响的订单、范围和版本 | 确认发布 |
| 已发布但未下发 | 哪个车间/系统仍未接收 | 查看下发状态 |
| 已接收/执行中 | 厂商回执与进度,数据更新时间 | 跟踪生产 |
| 发生变化 | 插单、缺料、设备变化及影响 | 查看调整建议 |
| 中断或结果未知 | 哪一步未完成、哪些结果已保存 | 恢复或核对状态 |
状态依据服务器业务事实,不能根据助手文字猜测。实施时引入 SchedulingCase:tenantId/projectId/sessionId/caseId、订单选择、dataSnapshotId、ruleVersion、planVersionId、pendingActionId、revision、stage、allowedActions、来源证据。
旧卡保存当时的快照,主要操作绑定当前 revision。数据或规则变化后,旧推荐失效但原计划不自动改写。阶段只能在动作真实完成后推进。
## 4. 充分发挥 Pi Agent:一个调度中心与六类专业协作者
### 4.1 职责划分
| 角色 | 负责什么 | 交付结果 |
|---|---|---|
| Pi 调度中心 | 理解目标、制定任务图、选择 Agent/工具、追踪依赖、判断何时提问、组织异常恢复 | 任务计划、统一进度、下一步、面向用户的答复 |
| 数据 Agent | 读文件和工厂系统、字段映射、校验来源与关联、识别缺项 | 数据快照、问题清单、待确认映射 |
| 经验与规则 Agent | 整理访谈/SOP/历史排程与调整理由,形成规则候选 | 带依据、适用范围和例外的规则候选 |
| 排产 Agent | 组装标准排产问题、选择算法、调用求解工具、生成候选方案 | 有明确数据和规则版本的排产结果 |
| 方案检查 Agent | 独立验证资源、日历、前后序、齐套和交期,比较现有安排 | 可复核的通过/不通过、风险及调整建议 |
| 系统对接 Agent | 识别插件能力、读取状态、组织字段问题、准备下发/对账任务 | 标准数据、下发草案、回执和差异 |
| 结果讲解 Agent | 将经过验证的结果整理成业务语言、排产表与复盘 | 可追溯解释、表格、需用户决定的事项 |
角色是能力边界,不要求每次都启动六个 LLM 进程。简单任务由 Pi 直接调工具;跨来源核验、复杂规则整理、多方案比较才拆给多个 Agent。
### 4.2 可执行编排方式
Pi 输出受校验的任务图,每步声明 taskId、role、inputRefs、dependsOn、capability、预计副作用、成功条件、超时、重试上限。模型提出计划,由调度服务校验和执行。
1. 订单、库存、设备、规则检索等互不依赖的读取可以并行。
2. 来源对齐完成后冻结输入,各方案求解使用隔离快照,可并行计算。
3. 方案检查依赖求解完成,检查失败自动回到调整任务;重试次数有限。
4. 最终只由一个提交服务写入已选方案,防止多个 Agent 同时修改生产安排。
5. 影响主数据、规则生效、方案采用/发布/下发的动作进入既有确认机制。
6. Pi 不持有人工确认令牌;同一个 Agent 不能靠自报“检查通过”完成批准。
7. 重启恢复读取持久化任务状态和工具回执;副作用结果未知时先查询再决定是否重试。
共享信息采用任务产物引用,不把所有 Agent 的对话互相复制。每次工具调用绑定 tenant/project/case/run/task/call、输入版本、幂等键、输出证据。后台页面可展开 Agent 分工;普通对话只显示“数据检查完成,正在计算方案”等进度。
### 4.3 Pi 的兜底能力
- 文件结构未知:探索表头和样例,提出映射候选;不能自动猜测单位、库存或工时后当真使用。
- 数据不足:检索历史资料和知识库,列出具体可选来源,请计划员确认关键假设。
- 排产不可行:调用约束诊断,分别比较加班、换设备、延交和分批交货的影响。
- 插单或设备故障:先定位影响范围,优先局部调整,展示会改变哪些已有承诺。
- 外部系统断连:保存任务进度,区分本地记录、待同步、外部已接收;恢复后先对账再补推。
- 工具失败:有限重试、切换到明确等价的工具或生成待处理事项,不编造成功结果。
### 4.4 现有代码复用与缺口
| 当前资产 | 可复用部分 | 接入调度中心前必须补齐 |
|---|---|---|
| server/integrations/pi_bridge.py | Pi 运行、工具登记、快照、调用日志与引用校验 | 专业角色的任务输入/输出契约、受控任务委派与任务产物引用 |
| server/agent_core/fallback_lane.py | Pi 主回复、受控计划、检查点、偏差校验、失败处理 | 与 SchedulingCase 统一任务状态,主流程和兜底共用一次任务上下文 |
| server/agent_core/mesh.py | 角色、任务依赖、任务存储、运行线程、看门狗 | 当前模板含自动批准 P2 和固定下达步骤;须改成待人工确认/显式授权,才能接到正式生产主流程 |
| server/agent_core/plan_runtime.py、plan_orchestration.py | 计划节点、执行记录、确认关联 | 和 Pi 任务图对齐,避免再造一套互不一致的任务状态 |
| server/agent_core/tool_runtime.py、harness.py | 统一业务执行与确认机制 | 所有 Agent 经过该入口,禁止新建旁路写通道 |
| server/aps_domain/sop_rules.py | 已审批 SOP 到规则补丁的预览/应用 | 当前为模板与关键词编译;补全真实经验提取、规则冲突检测与历史回放 |
Round 85 的完整外部 Pi 接入仍需与当前主线受控整合。其历史验收不能代替修改后主线的真实 Pi 多任务验收。
## 5. 从经验到可执行知识和约束
知识库保存“为什么”,规则库保存“怎么计算”。同一条经验同时关联出处和可执行约束,不能只做文本检索。
RuleCandidate 至少包含:自然语言描述、sourceRefs、适用产品/工厂/产线、触发条件、硬约束或偏好、参数及单位、例外、有效期、置信度、确认人、回放结果。
示例:“换颜色要清洗半小时,同色尽量连续排。”拆成:同设备异色切换增加 30 分钟;同色连续为优化偏好。工艺员确认清洗时长,计划员确认偏好优先级;急单是否允许打断单独确认。
规则生命周期:候选 → 待核对 → 回放验证 → 已确认 → 生效 → 停用/替换。每个排产版本冻结使用的规则版本。
计划员移动工单时,记录移动前后、原因、适用范围和结果,供后续归纳;积累案例后提出“是否将这一做法用于同类订单”,不悄悄修改通用规则。
上线验收:同一规则在历史数据上可复现;相互矛盾的规则能定位到来源;无法执行的自然语言规则标为待澄清,不能显示已生效。
## 6. ERP / MES / WMS 标准模型与可插拔接入
### 6.1 分层
```text
ERP / MES / WMS / 文件
↓ 厂商适配器:鉴权、分页、增量读取、字段和状态映射
标准业务模型 + 来源与版本 + 数据质量校验
↓ 冻结本次输入
Pi 调度中心 → 数据/规则/排产/检查 Agent → 标准排产问题与结果
↓ 人工确认后的下发请求
连接器调用 → 厂商回执 → 执行反馈 → 对账 → 调整建议
```
MCP 是工具发现与调用机制;还需要统一业务语义、映射、同步和回执,才构成标准接入层。
### 6.2 内部标准对象
| 对象 | 关键字段 | 常见权威来源 |
|---|---|---|
| CustomerOrder / OrderLine | 外部订单/行号、产品、数量/单位、交期、优先级、状态 | ERP |
| Product / Material / BOM | 编码、规格、单位换算、版本、生效日期、用量、替代关系 | ERP / PLM |
| Routing / Operation | 工序顺序、标准工时/单位、批量、前后序、资源要求 | MES / 工艺系统 |
| Resource / Capability | 设备/人员/模具、可加工能力、容量、维护状态 | MES / 设备系统 |
| Calendar | 时区、班次、休息、加班、停工窗口 | MES / 排班 |
| Inventory / Reservation / Supply | 实物库存、预留、可用量、仓库/批次、在途量与预计到达 | WMS / ERP |
| WorkOrder / WIP | 生产工单、已完成量、在制位置、实际开始/结束、冻结标记 | MES |
| SchedulePlan / Assignment | 排产版本、订单/工序、资源、时间、输入快照、规则版本 | APS |
| DispatchRequest / Receipt | 幂等键、外部单号、接受/拒绝/部分接受、原因 | APS 请求 / MES 回执 |
| ProductionEvent | 来源事件 ID、顺序/版本、发生与接收时间、报工/停机/缺料 | MES / WMS |
每个对象共有 tenantId、siteId、sourceSystem、sourceRecordId、sourceVersion、observedAt、schemaVersion、qualityIssues。内部 ID 与外部编码通过映射表关联,不能按名称猜测。
### 6.3 插件合同
以下为待实现接口设计,当前未宣称支持任意厂商即插即用:
```text
describe() -> 插件版本、标准模型版本、能力、只读/写入分类
validate_config(configRef) -> 缺少配置项与可操作提示(不返回密钥)
health() -> 配置状态、连通性、最后成功时间
read_snapshot(entity, scope, cursor) -> 标准对象、下一页、来源版本
read_changes(entity, watermark) -> 增量对象/事件、下一水位
validate_mapping(samples, mappingVersion) -> 类型/单位/关联/状态问题
prepare_dispatch(planRef) -> 将写入什么、拒绝项、确认所需证据
dispatch(approvedRequest, idempotencyKey) -> 接受/拒绝/未知及回执
query_receipt(requestId) -> 外部真实状态
```
供应商差异留在适配器中,排产算法只消费标准模型。插件通过 manifest 登记,配置引用受保护凭据,读取和写入能力分别授权。
字段映射必须可预览、可校验、可版本化。库存为 0、库存未知、接口未返回三者分开;分钟与小时、件与套、时区与日期边界必须显式转换。
同一字段有冲突来源时使用工厂确认的权威来源规则。同步失败保留最后成功快照并显示时间和影响;生产计算是否可使用过期数据需明确策略。
### 6.4 正式接入必须验证的语义
- 同一消息重复到达不重复创建工单;乱序和删除事件不覆盖更新状态。
- 一个批次部分成功时逐项保存回执,不能整批标为成功。
- 超时不等于失败:写入结果未知时先查回执,防止自动重发造成重复生产单。
- 库存预留、在途和在制数量口径与工厂确认;禁止将缺失字段补成“可用”。
- 断点、分页、水位、映射版本和对账差异可追溯;异常不会推进同步水位。
- MES/WMS 等真实接口不可用时显式提示,不自动切换演示数据。
当前已有 mes_http、SAP/WMS stub、MCP 总线及导入 profile。建议先以文件适配器和一家真实工厂的订单/库存/在制接口验证标准模型,再增加厂商适配器;每个新适配器跑同一组合同测试。
## 7. 默认界面与术语规范
默认入口:今日任务、排产方案、订单与数据、排产经验、系统连接。专业设置和算法诊断放到高级设置。
| 内部术语 | 普通用户表达 |
|---|---|
| P2 / P3 | 需要你确认 / 需要双人确认 |
| DRAFT / trial | 待检查方案 / 试排方案,尚未下发 |
| WO / PO / BOM | 生产工单 / 生产计划 / 产品用料表,按真实对象区分 |
| 虚拟产线 / 能力池 | 本次生产分组 / 可用设备;说明它不一定是真实固定产线 |
| 约束、硬约束、软约束 | 排产规则、必须遵守、尽量满足 |
| KPI / makespan | 交期和负荷指标 / 最后一项预计完成时间 |
| sourceManifest / checkpoint | 本次使用的数据 / 可恢复的保存点 |
| MCP / Provider / Adapter | 系统连接 / 接入方式;技术名只在管理员页展示 |
结果页先显示摘要和异常,再显示订单排程;避免默认展示整张原始数据库表。任何“成功”必须说明完成了哪一步,不能将读取成功、生成成功、发布成功和外部接收成功混用。
## 8. 实施顺序与可执行验收
| 顺序 | 交付内容 | 通过标准 |
|---|---|---|
| A:主流程可信 | 修正计数、一次批准一次排产、消除重复卡、按状态推荐 | 165 条混合记录不会显示成 165 台设备;重复确认只有一版;已有方案不推荐首次排产 |
| B:统一任务状态 | SchedulingCase 与现有计划/确认/结果绑定 | 刷新、切会话、数据变化、取消和重启后状态一致;旧操作不会修改新方案 |
| C:Pi 调度中心 | 任务图、角色工具边界、并行读取、隔离候选、持久化恢复 | 真实 Pi 完成数据核验→规则检索→计算→检查→解释;工具失败和并发冲突能恢复;未确认不能写业务 |
| D:计划员经验学习 | 资料归纳、规则候选、确认、回放、版本与效果反馈 | 至少一条真实工厂规则有原始依据、人工确认、历史回放及生效排产结果 |
| E:标准系统接入 | 标准模型、manifest、映射、快照/增量、回执与对账 | 同一排产流程换文件/真实连接器无需改算法;完成一组真实下发与回流、重试/乱序/断连测试 |
| F:全应用体验统一 | 默认入口、术语、渐进明细、异常处理、交付手册 | 计划员无需知道算法/接口名称,能独立完成一次排产和一次插单调整 |
B/C 先复用现有 Plan、Mesh、Pi Bridge 和 Harness,避免重复建设状态存储和执行入口。模型不掌握最终写入权限,用户的业务确认不能由后台角色自动替代。
## 9. 本次交付记录
本次已修改:工作簿按业务类别计数;目录确认后复用候选求解结果;已有方案的状态建议;数据卡概要/明细分层;历史数据卡操作收起;等待确认时停止推荐再次排产;移除默认示例快捷口令;查看结果按当前排产类型定位。
同时保留本轮开始时已有的 7 个文件改动。没有合并 Round 85、提交、推送、发布或修改用户的工厂数据。
已验证:后端聚焦 56 passed / 1 warning;扩展审批、发布、契约、Saga 与 MOM 回归 108 passed / 4 skipped / 1 warning;Node 64 passed(含新增数据卡渲染 4 项);Web TypeScript 和生产构建通过。
浏览器控制通道两次返回 nodeRepl.fetch request failed,当前不能提供本次页面交互与截图验收。13 项依赖外部康尼文件的测试在未配置数据路径时跳过,不能算真实客户数据验收。
本次完成 A 的具体修复及 B–F 的可实施设计。Pi 多专业 Agent 调度中心、经验学习全闭环、任意 ERP/MES/WMS 标准插件和全应用术语统一尚未实现,不以本文或本次局部测试替代完整交付。