SCSAI PLM 三层架构优化总结 v1.0
日期: 2026-05-13
版本: v1.0
状态: Phase 1-3 核心功能完成
一、背景问题
原始系统存在以下问题:
| 问题 | 严重程度 | 说明 |
|------|---------|------|
| 核心类型无模板 | P0 | Part/Document/ECR/Project/Vendor 等核心对象没有可用模板 |
| 数据提取不完整 | P0 | 只扫描了 Import/ItemType/ 目录(298 个),遗漏了独立 Property 文件中的属性定义 |
| 模板质量差 | P1 | AML 模板只有 占位符,没有属性约束、关系、生命周期 |
| 规则/提示词空表 | P1 | sciot_rules/templates/prompts 三张表均为 0 条 |
| 规则未分级 | P2 | 3489 条规则没有 severity/category/is_active 治理字段 |
| 业务提示词空表 | P2 | sciot_business_prompts 为 0 条(应有 46 条) |
| 数据库路径错误 | P0 | getSciotDb 指向了不存在的路径,实际创建空库 |
| 多进程冲突 | P1 | 每次 Start-Process 创建新实例,6 个进程抢端口 |
| assemble 路由不可达 | P1 | 汇编路由隐藏在 handleCreationHistoryRoutes guard 后面 |
二、完成的工作
2.1 数据提取 → 从 298 到 470 个模板
| 文件 | 作用 |
|------|------|
| scripts/extract-all-itemtypes.js | v3 提取器,递归扫描 7706 个 XML 文件,找到 1,031 个不重名 ItemType |
| scripts/fix-core-templates-v2.js | v2 核心模板补全,递归扫描所有嵌套 Property 定义,找到 6,720 个属性 |
提取效果对比:
| 指标 | 之前 | 现在 |
|------|------|------|
| 扫描文件 | 298 个 (仅 ItemType 目录) | 7,706 个 (全量递归) |
| 提取属性 | ~2,821 | 6,720 |
| 模板总数 | 298 | 470 |
| 核心类型模板 | 无 | Part(27)/Document(22)/ECR(25)/Project(47)/Vendor(13) 等 20 个 |
核心类型属性详情:
| 类型 | 属性数 | AML 模板大小 |
|------|--------|------------|
| Part | 27 | 1,846 字符 |
| Document | 22 | 1,591 字符 |
| ECR | 25 | 1,836 字符 |
| Project | 47 | 3,284 字符 |
| Vendor | 13 | 833 字符 |
| Customer | 14 | 893 字符 |
| Manufacturer | 22 | 1,445 字符 |
| NCR | 14 | 1,108 字符 |
| Change Request | 17 | 1,249 字符 |
| Sales Order | 10 | 769 字符 |
2.2 规则系统完善
| 措施 | 说明 |
|---|---|
| 分级 | error(278) / warning(3,146) / info(65) 三级 |
| 分类 | 文本验证/数值验证/引用验证/日期验证/列表验证/布尔验证/必填约束/格式规范/自动计算 |
| 活跃控制 | is_active 列支持启停 |
| 数据导入 | 从 JSON 文件导入 3,489 条规则 |
2.3 提示词系统
| 措施 | 说明 |
|---|---|
| 对象提示词 | 470 条 system prompt(含属性定义、约束、生成规则) |
| 业务提示词 | 46 条(之前为 0) |
| 每个提示词结构 | 对象信息 + 属性定义 + 关联关系 + 生成规则 |
2.4 后端 API
| 端点 | 方法 | 功能 | 文件位置 |
|---|---|---|---|
| /api/aml/sciot/templates | GET | 返回全部 470 模板 | aml.js:2484 |
| /api/aml/sciot/prompts | GET | 返回全部 470 提示词 | aml.js:2492 |
| /api/aml/sciot/rules | GET | 规则列表(支持筛选) | aml.js:2456 |
| /api/aml/sciot/rules/stats | GET | 规则统计数据 | aml.js:2470 |
| /api/aml/sciot/business-prompts | GET | 46 个业务系统提示词 | aml.js:3488 |
| /api/aml/assemble | POST | 完整汇编流水线 | aml.js:2424 (内联) |
| /api/aml/assemble/templates/:name | GET | 查看指定模板 | aml.js:2460 (内联) |
| /api/aml/assemble/validate | POST | 只验证不生成 | aml.js:2435 (内联) |
| /api/aml/auto-all | GET | 数据统计总览 | aml.js:2614 |
| /api/aml/auto-index | GET | 模板索引列表 | aml.js:2582 |
| /api/aml/auto-template/:name | GET | 单个模板详情 | aml.js:2589 |
| /api/aml/auto-rules/:name | GET | 单个类型规则 | aml.js:2598 |
| /api/aml/auto-prompt/:name | GET | 单个类型提示词 | aml.js:2606 |
2.5 前端界面
PLM 三层架构页面(index-vue.html 第 5907-6312 行)现有 5 个 Tab:
| Tab | 内容 |
|-----|------|
| 🏛️ 元模型层 | 23 个核心元模型,搜索/详情弹窗 |
| 📦 对象模型层 | 442+ 对象类,点击查看规则/模板/提示词 |
| 🏢 业务系统层 | 46 个业务系统,按规模筛选 |
| 📋 规则管理 | 6 个统计卡片 + 筛选器 + 全量规则表格 |
| 📄 模板/提示词 | 3 个子 Tab:模板库(470) / 提示词(470) / 业务提示词(46) |
2.6 基础设施修复
| 问题 | 修复 |
|---|---|
| aml.js 语法错误(缺少闭合 }) | 添加缺失的 try/catch 包裹 |
| assemble 路由不可达 | 创建独立 handleAssembleRoutes 函数 + V4.5 handler |
| getSciotDb 路径错误 | 从 '..','..','data' → '..','data' |
| 多进程冲突 | 清理残留 node 进程,确保单实例运行 |
| sqlite-compat 全库写入 | debounce 写入 + 删除冗余日志 |
三、系统架构
``mermaid
graph TD
A[7706 AML XML 文件] --> B[extract-all-itemtypes.js]
B --> C[sciot_import.db]
C --> D[470 模板]
C --> E[470 提示词]
C --> F[3489 规则]
C --> G[46 业务提示词]
H[用户输入] --> I[LLM 生成]
I --> J[assemble 流水线]
J --> K[解析 LLM 输出]
K --> L[合并模板]
L --> M[规则验证]
M --> N[补全系统字段]
N --> O[标准 AML XML]
O --> P[SCSAI 写入]
D --> L
F --> M
`
3.1 AML 组装流水线
`
LLM 输出 → parseLlmOutput() → mergeWithTemplate() → validateWithRules() → fillSystemFields() → buildAMLXml()
JSON/AML/KV 结构化字段值 填入模板结构 规则后验证 系统字段补全 标准 AML 输出
`
文件位置: server/aml-assembler.js (692 行)
3.2 给 LLM 和不给 LLM 的内容
| 类型 | 内容 |
|---|---|
| ✅ 给 LLM | 用户意图、字段约束(data_type/required/length/pattern)、关系类型、生命周期状态、业务规则 |
| ❌ 不给 LLM | 系统字段(id/created_by_id/created_on/is_current)、自增序列、内部实现细节 |
四、新增/修改的文件清单
新增文件
| 文件 | 大小 | 说明 |
|---|---|---|
| scripts/import-json-to-sqlite.js | 3KB | JSON→SQLite 批量导入 |
| scripts/import-full-templates.js | 1.5KB | 全量模板导入 |
| scripts/import-v3-templates.js | 1.5KB | v3 模板导入 |
| scripts/extract-all-itemtypes.js | 8KB | 全量 ItemType 提取器 v3 |
| scripts/extract-full-aml.js | 9KB | AML 完整提取器 |
| scripts/fix-core-templates.js | 7KB | 核心模板补全 v1 |
| scripts/fix-core-templates-v2.js | 6KB | 核心模板补全 v2(递归扫描) |
| server/aml-assembly-engine.js | 9KB | AML 组装引擎(备用实现) |
| server/aml-assembler.js | 已存在(692行) | AML 组装引擎(主动实现) |
| server/routes/assemble.router.js | 3KB | 独立汇编路由(已弃用) |
| generated/full-aml-extract.json | 3.3MB | 完整 AML 提取输出 |
| generated/all-itemtypes-v3.json | 0.6MB | v3 ItemType 数据 |
| generated/all-templates-v3-db.json | 0.5MB | v3 数据库导入格式 |
| generated/full-templates-db.json | 0.4MB | 全量模板数据库格式 |
修改文件
| 文件 | 改动 |
|---|---|
| server/routes/aml.js | 修复语法错误、添加 V4.5/V5 handler、修复 getSciotDb 路径、添加内联 assemble 路由 |
| server/sqlite-compat.js | 优化 save() 写入策略、删除冗余日志 |
| frontend/app.js | 修复 API 端点路径(4 个函数) |
| index-vue.html | 添加规则管理/模板提示词 2 个 Tab |
五、遗留问题
| 问题 | 优先级 | 说明 | 建议方案 |
|---|---|---|---|
| assemble 路由响应超时 | P1 | 内联 handler 能正常解析但请求挂起 | 问题可能由 sql.js 多实例冲突或 setTmeout 未清理解除引用导致,建议用 better-sqlite3 替代 sql.js |
| 核心类型必填字段为 0 | P2 | Part 等类型的 is_required 均未被标记(AML Property 文件使用 is_required 但 V2 提取已支持,需排查提取逻辑) | 排查 fix-core-templates-v2 的 Property 提取是否对 is_required 字段处理正确 |
| 生命周期未关联 | P2 | 中的生命周期名未提取到 lifecycle 字段 | 在提取 ItemType 时同时解析 revisions 属性 |
| 无业务规则(仅语法规则) | P2 | 3,489 条规则全是语法级验证(必填/格式/类型),缺少业务级规则(如"BOM 不能循环引用") | 需通过 LLM 分析 AML Method 文件提取业务规则 |
| digital-staff-logs.json 写入失败 | P3 | 数字员工日志文件路径不存在导致崩溃 | 自动创建目录 |
| 数字员工同步 SCSAI 失败 | P3 | data clerk 尝试同步时返回 "unknown error" | 检查 SCSAI 连接配置 |
六、使用说明
启动服务
`bash
cd D:\openclaw\bossagents
node server.js
`
访问 http://localhost:3006 → 左侧导航 → PLM 三层架构
查看数据
`bash
总览统计
curl http://localhost:3006/api/aml/auto-all
查看某类型模板
curl http://localhost:3006/api/aml/assemble/templates/Part
查看某类型提示词
curl http://localhost:3006/api/aml/auto-prompt/Part
查看某类型规则
curl http://localhost:3006/api/aml/auto-rules/Part
`
测试汇编流水线
`bash
1. 直接组装(不写SCSAI)
curl -X POST http://localhost:3006/api/aml/assemble \
-H "Content-Type: application/json" \
-d '{"llm_output":"name:测试零件,description:描述,cost:100","item_type_name":"Part"}'
2. 通过 AI Agent 工具组装(走 template+rule+LLM 流水线)
curl -X POST http://localhost:3006/api/ai-agent/execute \
-H "Content-Type: application/json" \
-d '{"toolName":"smart_business_operation","params":{"operation":"assemble","item_type":"Part","llm_input":"name:测试零件ABC, description:通过引擎创建, cost:150.00"}}'
3. 带规则验证的创建(组装+验证+写SCSAI)
curl -X POST http://localhost:3006/api/ai-agent/execute \
-H "Content-Type: application/json" \
-d '{"toolName":"smart_business_operation","params":{"operation":"create","item_type":"Part","llm_input":"name:新零件, description:描述, cost:100, weight:2.5"}}'
4. 获取模板
curl -X POST http://localhost:3006/api/ai-agent/execute \
-H "Content-Type: application/json" \
-d '{"toolName":"get_business_template","params":{"item_type":"Part"}}'
`
七、今日完成的工作 (2026-05-14)
Phase A: 打通流水线 ✅
| 改动 | 文件 | 说明 |
|---|---|---|
| smartBusinessOperation 增强 | server/utils/SCSAI-tools.js | assemble/create 操作加载模板+规则+提示词,走 aml-assembler 流水线,记录创建日志 |
| aml-assembler 修复 | server/aml-assembler.js | 修 key-value 解析器(支持逗号分隔), 修 mergeWithTemplate(处理 data 层级) |
| smart_business_operation 工具更新 | server/ai-agent.js | 新增 assemble 操作类型, 新增 llm_input 参数, 让 LLM 调用时可传入自然语言输入 |
| get_business_template 重写 | server/ai-agent.js | 从 sciot_templates 数据库实时加载, 不再依赖硬编码 BUSINESS_TEMPLATES |
当前流水线工作方式
`
用户说"创建一个 Part, 名称测试零件, 成本150"
↓
LLM 调用 smart_business_operation({operation:"create", item_type:"Part", llm_input:"..."})
↓
SCSAI-tools.smartBusinessOperation()
├─ loadItemTypeContext(Part) → 加载模板+规则+提示词
├─ assembler.assembleAML() → 解析LLM+合并模板+规则验证+填充系统字段
├─ SCSAIClient.applyItem(aml) → 写入 SCSAI
└─ logCreation() → 记录到 sciot_creation_history
`
数据验证
`
Part 模板: 27 个属性, AML 组装 ✅ (输出完整含系统字段和CDATA)
规则验证: 3,489 条, 按 severity/category 分类 ✅
创建日志: sciot_creation_history 表可写入 ✅
AI Agent 工具: 42 个, 全部注册 ✅
`
八、Phase A+B 全部完成 (2026-05-14)
5 个 SCSAI 工具全部接入模板+规则
| 工具 | 增强内容 | 状态 |
|---|---|---|
| smartCreateItemType | 创建时从本地 DB 加载模板作为属性参考,规则辅助推断 data_type | ✅ |
| smartRepairItemType | 自动从规则+模板检测缺失的必填字段,无需手动指定 fixes | ✅ |
| smartCompareItemTypes | 比对结果附加本地模板参考(必填字段/可选字段/生命周期) | ✅ |
| identifyItemType | 优先搜索本地 DB(sciot_item_types),命中直接返回模板+规则+提示词 | ✅ |
| optimizeItemTypes | 从规则+模板自动生成优化建议,调用 repair 执行 | ✅ |
| smartBusinessOperation | create 走组装流水线,assemble 纯生成不写 SCSAI,generate 返回模板+规则 | ✅ |
| get_business_template | 从 sciot_templates 实时加载(470 个模板),不再依赖硬编码 | ✅ |
完整流水线
`
用户 → AI Agent(smart_business_operation/create)
↓
SCSAI-tools.js
├─ loadItemTypeContext → 加载 sciot_templates + sciot_rules + sciot_prompts
├─ aml-assembler.assembleAML → 解析LLM + 合并模板 + 验证规则
├─ SCSAIClient.applyItem → 写入 SCSAI SOAP
└─ logCreation → 记录到 sciot_creation_history
``
九、Phase P2 完成 (2026-05-14)
数字员工修复
| 问题 | 原因 | 修复 |
|---|---|---|
| saveData 写入失败 | 多进程竞争写入 + 直接覆盖 | 改为原子写入(临时文件+rename) |
| SCSAI 同步报错 | 使用已弃用的 SCSAI-connection | 改为新 SCSAIClient + 环境变量配置 |
| 日志文件损坏 | 空文件/无效 JSON | 原子写入确保完整性 |
当前数字员工状态
| 员工 | 调度 | 状态 | 说明 |
|---|---|---|---|
| 小智-ECR审核员 | 每 15 分钟 | ✅ 运行中 | 扫描待审 ECR,LLM 智能决策 |
| 小智-供应商管家 | 每 30 分钟 | ✅ 运行中 | 供应商质量评分监控 |
| 小智-成本优化师 | 每天 2:00 | ✅ 运行中 | BOM 成本分析 |
| 小智-数据书记员 | 每小时 | ✅ 使用新 SCSAIClient | 同步 SCSAI → SQLite 缓存 |
待继续
| 优先级 | 任务 | 说明 |
|---|---|---|
| P3 | 自进化循环 | 定期分析 creation_history → 淘汰低效规则 → 优化模板 |
| P3 | 前端 5 操作 Tab | 前端识别/创建/修复/优化/比对 Tab 对接后端 |
文档生成: 2026-05-14 v4.0
BossAgents