SCSAI PLM 三层架构优化总结 v1.0

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/templatesGET返回全部 470 模板aml.js:2484
/api/aml/sciot/promptsGET返回全部 470 提示词aml.js:2492
/api/aml/sciot/rulesGET规则列表(支持筛选)aml.js:2456
/api/aml/sciot/rules/statsGET规则统计数据aml.js:2470
/api/aml/sciot/business-promptsGET46 个业务系统提示词aml.js:3488
/api/aml/assemblePOST完整汇编流水线aml.js:2424 (内联)
/api/aml/assemble/templates/:nameGET查看指定模板aml.js:2460 (内联)
/api/aml/assemble/validatePOST只验证不生成aml.js:2435 (内联)
/api/aml/auto-allGET数据统计总览aml.js:2614
/api/aml/auto-indexGET模板索引列表aml.js:2582
/api/aml/auto-template/:nameGET单个模板详情aml.js:2589
/api/aml/auto-rules/:nameGET单个类型规则aml.js:2598
/api/aml/auto-prompt/:nameGET单个类型提示词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.js3KBJSON→SQLite 批量导入
scripts/import-full-templates.js1.5KB全量模板导入
scripts/import-v3-templates.js1.5KBv3 模板导入
scripts/extract-all-itemtypes.js8KB全量 ItemType 提取器 v3
scripts/extract-full-aml.js9KBAML 完整提取器
scripts/fix-core-templates.js7KB核心模板补全 v1
scripts/fix-core-templates-v2.js6KB核心模板补全 v2(递归扫描)
server/aml-assembly-engine.js9KBAML 组装引擎(备用实现)
server/aml-assembler.js已存在(692行)AML 组装引擎(主动实现)
server/routes/assemble.router.js3KB独立汇编路由(已弃用)
generated/full-aml-extract.json3.3MB完整 AML 提取输出
generated/all-itemtypes-v3.json0.6MBv3 ItemType 数据
generated/all-templates-v3-db.json0.5MBv3 数据库导入格式
generated/full-templates-db.json0.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
核心类型必填字段为 0P2Part 等类型的 is_required 均未被标记(AML Property 文件使用 is_required 但 V2 提取已支持,需排查提取逻辑)排查 fix-core-templates-v2 的 Property 提取是否对 is_required 字段处理正确
生命周期未关联P2中的生命周期名未提取到 lifecycle 字段在提取 ItemType 时同时解析 revisions 属性
无业务规则(仅语法规则)P23,489 条规则全是语法级验证(必填/格式/类型),缺少业务级规则(如"BOM 不能循环引用")需通过 LLM 分析 AML Method 文件提取业务规则
digital-staff-logs.json 写入失败P3数字员工日志文件路径不存在导致崩溃自动创建目录
数字员工同步 SCSAI 失败P3data 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.jsassemble/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 执行
smartBusinessOperationcreate 走组装流水线,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

← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁