对象创建功能分析文档
一、整体架构
用户输入 "创建..."
│
├── 业务对象列表(硬编码 itemType)
│ └── AiCapabilityBar → useCapabilityCreate.create(itemType, description)
│ ├── GET /api/aml/unified/schema/:itemType (获取字段定义)
│ ├── GET /api/sciot/type-template/:itemType (获取模板)
│ ├── POST /api/llm/chat (调用LLM生成数据)
│ ├── POST /api/private-library/objects (双库查重)
│ ├── POST /SCSAI-api/ApplyItem (创建主对象)
│ ├── POST /SCSAI-api/ApplyItem (创建关系)
│ └── POST /api/rule-engine/execute-create-post (后置规则)
│
├── 对话框(硬编码 itemType)
│ └── 同上
│
├── 小程序(用户手选类型)
│ └── POST /api/unified/create → handleCreate()
│
└── 数字员工(关键词匹配)
└── executePipeline() → createObject()
二、已验证的基础核心:useCapabilityCreate.create()
位置: src/composables/useCapabilityCreate.js L448-2045
已验证: Product、BOM、Part、Project、Supplier 等业务对象,含关系、Item属性、List属性、Sequence编号
完整流程(17步)
| 步骤 | API 调用 | 说明 |
|---|---|---|
| 1. 获取Schema | GET /api/aml/unified/schema/:itemType | 获取字段类型、list值、校验规则 |
| 2. 获取模板 | GET /api/sciot/type-template/:itemType | 获取扩展字段元数据、关系定义、生成规则 |
| 3. 获取子类型Schema | GET /api/sciot/type-template/:relatedType × N | 并行获取关系目标类型字段定义 |
| 4. 获取Item属性Schema | GET /api/sciot/type-template/:targetType × N | 获取item/foreign属性目标类型字段定义 |
| 5. 获取系统模板 | GET /api/sciot/system-templates | 获取Permissions/Identities等系统对象模板 |
| 6. 构建Prompt | (本地) 调用 PromptBuilder.buildCreationPrompt() | 组装 LLM 创建指令 |
| 7. 调用LLM | POST /api/llm/chat | 生成对象属性+关系+子对象 |
| 8. 解析JSON | (本地) 兼容3种格式 | 标准/旧版main/扁平 |
| 9. 双库查重 | POST /SCSAI-api/ApplyItem (先查SCSAI精确 → 模糊 → 查标准库) | 精确匹配→suggest→copy→create |
| 10. Sequence编号 | POST /SCSAI-api/ApplyItem (getNextValue / get+edit) | 获取SCSAI原生Sequence或手动自增 |
| 11. item_properties预创建 | POST /SCSAI-api/ApplyItem × N | 先创建子对象再引用(如scheduling_method对应的Method) |
| 12. 关系对象预创建 | POST /SCSAI-api/ApplyItem × N | 递归预创建所有嵌套子对象 |
| 13. 构建AML | (本地) 调用 AmlBuilder.buildAML() | 组装完整 AML XML |
| 14. 创建主对象 | POST /SCSAI-api/ApplyItem (带完整Relationships) | 提交到SCSAI |
| 15. 名称去重重试 | POST /SCSAI-api/ApplyItem | 若 PropertiesAreNotUnique 自动后缀重试 |
| 16. AI纠错重试 | POST /api/llm/chat → 重新创建 | 最多3次,LLM分析错误修正 |
| 17. 创建关系+后置 | POST /SCSAI-api/ApplyItem × N + create_post规则 | 分步创建关系,执行后置规则 |
关键依赖
- Frontend:
AmlBuilder.js(AML构建)、PromptBuilder.js(Prompt构建) - Backend:
/api/aml/unified/schema/,/api/sciot/type-template/,/api/llm/chat,/SCSAI-api/ApplyItem - SCSAI 代理:
/SCSAI-api/ApplyItem→ Node.js 构造 SOAP → SCSAI agentServer.aspx
三、四入口一问题和现状验证
| 入口 | 调用链 | itemType来源 | 已验证? |
|---|---|---|---|
| 业务对象列表 | AiCapabilityBar → useCapabilityCreate.create() | 页面硬编码 | ✅ 已验证 |
| 对话框 | 同上 | 页面硬编码 | ❌ 待测 |
| 小程序 | POST /api/unified/create → handleCreate() | 用户手选 | ❌ 待测 |
| 数字员工 | executePipeline() → createObject() | detectItemType | ❌ 待测 |
当前测试验证
| 测试项 | 结果 |
|---|---|
| 服务 器运行 (port 3006) | ✅ PID 23324 |
| SCSAI 连接 (ai-inspector/itemtypes) | ✅ 返回真实 ItemType 数据 |
| Schema API (/api/aml/unified/schema/Product) | ✅ 返回字段定义 |
| 类型模板 (/api/sciot/type-template/Product) | ✅ 返回属性+关系定义 |
| 双库查重 (/api/private-library/objects) | ✅ 返回私有库数据 |
| 前端 SCSAI-api 代理 (/SCSAI-api/ApplyItem) | ✅ 返回 SCSAI Part 真实数据("Clamp") |
| Sequence API (/api/sciot/apply-item) | ❌ 路由不存在(tocConfigRouter 未注册) |
四、存在的问题
P0 — "类型不存在→创建类型" 完全缺失
detectItemType() (capability-pipeline.js L114-138) 找不到类型时默认返回 Part,没有任何"先创建 ItemType"的逻辑。
object-modeler.defineObject (L44-89) 存在且能通过 LLM 定义新对象类,但:
- 没有任何创建入口调用它
applyDefinition(L95-168) 只写本地 sciot_import.db,不创建 SCSAI ItemType- 意图识别链路中没有 "itemType 不存在 → defineObject → applyDefinition → 创建 ItemType → 再创建对象" 分支
P0 — 四入口三套执行逻辑
| 实现 | 关系处理 | Sequence | AI重试 | 双库查重 | 行数 |
|---|---|---|---|---|---|
| useCapabilityCreate.create() | 预创建→引用 | ✅ getNextValue+fallback | ✅ 最多3次 | ✅ 精确+模糊+标准库 | 2045行 |
| unified-create.handleCreate() | 预创建→引用 | ⚠️ resolveSequences 简易版 | ❌ | ❌ | 250行 |
| capability-pipeline.createObject() | 简易sendAML | ❌ | ❌ | ❌ | 110行 |
P1 — 后端 createObject 缺少多个能力
createObject (capability-pipeline.js L490-600) vs useCapabilityCreate.create():
- 无 AI 纠错重试(LLM 分析错误并修正)
- 无双库查重
- 无 Sequence 自动编号
- 简易的关系处理(只调 sendAML,不预创建子对象)
P2 — 意图识别关键词表太浅
TYPE_CHINESE_MAP 只有 12 个映射,找不到默认 Part。
五、修复方案
目标架构
用户输入 → 意图识别 → 类型存在?→ 是 → useCapabilityCreate.create()
→ 否 → ObjectModeler.defineObject → applyDefinition → 创建SCSAI ItemType → useCapabilityCreate.create()
最小改动(不改 useCapabilityCreate.create())
- capability-pipeline.identifyIntent — 检测到类型不存在时调用
ObjectModeler - object-modeler.applyDefinition — 加 SCSAI ItemType 创建
- AiCapabilityBar — 支持 itemType="auto" 先意图识别再创建
- 小程序和数字员工 — 最终都走
useCapabilityCreate.create()基核
六、测试结论
useCapabilityCreate.create() 依赖的 5 个后端 API 中 4 个已验证正常。前端 SCSAI-api 代理工作正常,SCSAI 连接正常。但无法直接在命令行测试前端 composable——需要浏览器环境。后端 capability-pipeline.createObject() 需要补全多项能力才能对标前端基核。
BossAgents