规则模板管理系统 — 优化理解文档

规则模板管理系统 — 优化理解文档

基于 rules-templates-prompts-system.md 的深入理解和优化建议

更新日期: 2026-05-31


1. 闭环核心理解

1.1 正确的数据流

``

AML文件 (SCIOT/*.xml)

├── 导入 → sciot_properties (属性定义)

├── 导入 → sciot_relationships (关系定义)

├── 导入 → sciot_sequences (编号规则)

└── 导入 → sciot_methods (客户端方法)

配置层 (人工维护)

├── sciot_templates (字段分类: llm_fields / auto_fields)

├── sciot_rules_v2 (规则: validate / create_pre / create_post)

└── sciot_business_prompts (业务系统级提示词)

预生成层 (确定性脚本拼接)

└── POST /api/rule-engine/pregenerate-prompt

└── prompt_templates (版本化提示词库)

├── prompt_type='creation' → 用于Create场景

├── prompt_type='identify' → 用于Identify场景

├── prompt_type='repair' → 用于Repair场景

├── prompt_type='optimize' → 用于Optimize场景

└── prompt_type='compare' → 用于Compare场景

消费层 (六大基础能力)

├── Create → 读取creation提示词 + create规则 + 模板字段分类

├── Assemble → 读取creation提示词 + assemble规则 + 模板generation_rules

├── Repair → 读取repair提示词 + repair规则 + 模板字段定义

├── Optimize → 读取optimize提示词 + optimize规则 + 模板字段定义

├── Compare → 读取compare提示词 + compare规则 + 模板字段定义

└── Identify → 读取identify提示词 + identify规则 + item_type列表

反馈修复 (闭环关键)

├── 创建成功 → 规则模板提示词 OK

├── 组装失败 → 检查规则模板定义 → 修改 → 重新预生成 → 重试

├── 修复不准 → 检查repair规则优先级 → 调整 → 重新预生成

└── 优化效果差 → 检查optimize规则条件 → 修正 → A/B测试

`

1.2 关键认知

概念正确理解常见误区
AML文件唯一不变的数据源,变更需重新导入手动修改数据库
规则模板人工维护的配置层,决定系统行为认为是代码写死的
提示词可重复生成的产物,不是AI生成的认为是LLM随机生成的
预生成确定性脚本拼接,相同输入→相同输出认为是非确定性的
组装失败很可能是规则模板定义不对认为是代码bug

2. 当前实现的问题分析

2.1 问题1:AML组装引擎使用旧规则表

现状

  • server/aml-assembly-engine.js 使用 sciot_rules(旧表)
  • server/core/rule-engine.js 使用 sciot_rules_v2(新表)
  • 两套规则不同步,导致组装行为与规则管理脱节

影响

  • 在RulesAndTemplates.vue中修改的规则不生效
  • 组装失败时无法通过规则引擎排查

修复方案

`javascript

// aml-assembly-engine.js 应该调用 UnifiedRuleEngine

const { UnifiedRuleEngine } = require('./core/rule-engine');

const engine = new UnifiedRuleEngine({ db });

// 组装时执行规则

const result = await engine.execute('assemble', {

item_type: type,

properties: fieldsData,

template: templateData

});

`

2.2 问题2:StaffCapabilities.vue 直接组装AML

现状

  • 第1782-1900行直接遍历字段组装AML
  • 使用 propDefMap(后端Schema)判断字段类型
  • 没有使用规则引擎的 createItem 方法

影响

  • 绕过了规则引擎的 validate / create_pre / create_post 流程
  • 内置规则(如自动生成编号)不生效
  • 字段类型判断不准确(goals 被当成string而非text)

正确做法

`javascript

// 应该调用规则引擎

createResultRaw = await engine.createItem({

item_type: 'Project',

properties: standardData.properties,

item_properties: standardData.item_properties,

relationships: standardData.relationships,

applyAML: async (aml) => {

// 通过统一代理提交

return await bomService._SCSAIApiRequest('ApplyItem', aml);

}

});

`

2.3 问题3:字段类型判断不一致

现状

  • 提示词生成使用 templatePropsMap(准确)
  • AML组装使用 propDefMap(不准确,后端Schema)
  • 两者对 goalsdata_type 认知不一致

修复方案

  • 所有字段类型判断统一使用 templatePropsMap
  • propDefMap 仅用于获取 readonly 等元数据

2.4 问题4:item类型字段处理错误

现状

  • wbs_id 是 item 类型,LLM生成对象
  • 预创建逻辑尝试创建WBS Element,但失败
  • 失败后将对象内联到AML,SCSAI拒绝

正确流程

`

  1. LLM生成 wbs_id: { name: "...", ... }
  2. 预创建 WBS Element → 获取 ID
  3. 如果预创建成功 → mainValues.wbs_id = "ID字符串"
  4. 如果预创建失败 → 跳过该字段(SCSAI会使用默认值)
  5. AML组装时 → ID字符串 或 省略

`


3. 正确的组装流程

3.1 理想的数据流

`

用户输入 "创建项目X"

┌─────────────────────────────────────┐

│ 1. 获取Schema和模板 │

│ GET /api/aml/unified/schema/Project

│ GET /api/sciot/type-template/Project

└─────────────────────────────────────┘

┌─────────────────────────────────────┐

│ 2. 获取预生成的提示词 │

│ GET /api/aml/sciot/prompts/Project

│ prompt_type='creation'

└─────────────────────────────────────┘

┌─────────────────────────────────────┐

│ 3. 调用LLM生成JSON │

│ POST /api/llm/chat │

│ 输入: 提示词 + 用户描述 │

│ 输出: { properties, relationships }

└─────────────────────────────────────┘

┌─────────────────────────────────────┐

│ 4. 预创建item类型字段 │

│ 遍历 properties │

│ 如果 field.data_type === 'item' │

│ → 创建嵌套Item │

│ → 成功: 替换为ID │

│ → 失败: 删除该字段(用默认值) │

└─────────────────────────────────────┘

┌─────────────────────────────────────┐

│ 5. 调用规则引擎 createItem │

│ POST /api/rule-engine/create-item │

│ 流程: │

│ validate → 校验必填、格式等 │

│ create_pre → 填充默认值、编号 │

│ 组装AML → 返回AML文本 │

│ create_post → (提交后处理) │

└─────────────────────────────────────┘

┌─────────────────────────────────────┐

│ 6. 提交AML到SCSAI │

│ POST /SCSAI-api/ApplyItem │

│ 输入: 规则引擎返回的AML │

│ 输出: { Item: { id: "..." } } │

└─────────────────────────────────────┘

成功 / 失败

`

3.2 规则引擎在组装中的角色

阶段规则引擎作用输入输出
validate校验数据完整性properties{ blocked: true/false, errors: [] }
create_pre填充默认值、生成编号properties修改后的 properties
AML组装根据模板构建XMLproperties + templateAML文本
create_post创建关联对象、通知item_id + context关联对象创建结果

4. 修复优先级

P0 - 立即修复(阻塞问题)

  1. item类型字段处理
  • 预创建失败时不应内联对象到AML
  • 应该跳过该字段,让SCSAI使用默认值
  1. 字段类型判断统一
  • AML组装统一使用 templatePropsMap
  • 不再依赖 propDefMap.data_type

P1 - 重要修复(功能完善)

  1. StaffCapabilities.vue 接入规则引擎
  • 调用 createItem 而非直接组装AML
  • 让 validate / create_pre / create_post 生效
  1. AML组装引擎使用新规则表
  • 废弃 sciot_rules(旧表)
  • 统一使用 sciot_rules_v2 + UnifiedRuleEngine

P2 - 架构优化(长期)

  1. 数据库连接单例
  • 创建 SciotDatabase 单例
  • 避免多处独立创建连接
  1. LLMBrain 消除硬编码
  • 预生成所有业务提示词
  • 全部迁移到路径1(规则引擎加载)

5. 故障排查速查表(优化版)

现象定位层级检查什么修复方法
LLM生成字段不对Layer 2 模板sciot_templates.llm_fields调整字段分类 → 重新预生成
必填字段未校验Layer 3 规则sciot_rules_v2 scope='validate'添加/修改校验规则 → 重新预生成
编号未自动生成Layer 3 规则sciot_rules_v2 scope='create_pre'检查action_script → 重新预生成
AML提交失败Layer 4 提示词/组装查看实际AML内容检查字段类型定义 → 修改模板 → 重新预生成
关联对象未创建Layer 3 规则sciot_rules_v2 scope='create_post'添加create_post规则 → 重新预生成
提示词内容过时Layer 4 提示词prompt_templates.updated_at运行 pregenerate-prompt

6. 关键文件关系图

`

server/

├── core/

│ ├── rule-engine.js ← 统一规则引擎(核心)

│ │ ├── 规则CRUD

│ │ ├── 规则执行 (execute)

│ │ ├── 对象创建 (createItem)

│ │ └── 内置规则 (builtin-rules)

│ │

│ └── unified-schema.js ← Schema构建器

│ └── 运行时提示词生成

├── routes/

│ ├── rule-engine.js ← 规则引擎API路由

│ │ ├── /api/rule-engine/rules

│ │ ├── /api/rule-engine/execute/:scope

│ │ ├── /api/rule-engine/create-item

│ │ └── /api/rule-engine/pregenerate-prompt

│ │

│ └── aml.js ← SCIOT数据API

│ ├── /api/aml/sciot/types

│ ├── /api/aml/sciot/templates

│ ├── /api/aml/sciot/prompts

│ └── /api/aml/unified/schema/:type

└── aml-assembly-engine.js ← ⚠️ 应接入rule-engine.js

src/

├── views/

│ ├── RulesAndTemplates.vue ← 规则模板管理UI

│ │ ├── Tab3: 在线规则引擎

│ │ ├── Tab6: 模板库

│ │ └── Tab4: 对象提示词

│ │

│ └── StaffCapabilities.vue ← ⚠️ 应调用rule-engine/create-item

│ ├── 识别面板

│ ├── 创建面板

│ ├── 修复面板

│ └── ...

└── composables/

└── useRuleEngine.js ← 前端规则引擎封装

data/

└── sciot_import.db ← 配置主库

├── sciot_rules_v2 ← 统一规则表 ★

├── sciot_templates ← 对象模板表 ★

├── prompt_templates ← 提示词模板库 ★

├── sciot_properties ← 属性定义(从AML导入)

├── sciot_relationships ← 关系定义(从AML导入)

└── ...

``


7. 总结

核心原则

  1. AML是源头 - 所有基础数据从AML导入,变更需重新导入
  2. 规则模板是配置 - 人工维护,决定系统行为
  3. 提示词是产物 - 可重复生成,相同输入→相同输出
  4. 组装失败看规则模板 - 不是代码bug,是配置问题
  5. 修复后重新预生成 - 修改规则/模板后必须重新预生成提示词

当前状态

  • ✅ 规则引擎核心成熟(2268行)
  • ✅ 规则引擎API完整(22+端点)
  • ✅ 前端规则管理UI就绪
  • ⚠️ AML组装未接入规则引擎(使用旧表)
  • ⚠️ StaffCapabilities.vue 直接组装AML(未调用createItem)
  • ⚠️ 字段类型判断不一致(templatePropsMap vs propDefMap)

下一步行动

  1. 修复 item 类型字段处理(预创建失败时跳过)
  2. 统一字段类型判断(全部使用 templatePropsMap)
  3. StaffCapabilities.vue 接入规则引擎 createItem
  4. AML组装引擎接入 UnifiedRuleEngine
  5. 废弃 sciot_rules(旧表)

文档更新时间: 2026-05-31

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