You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
graph LR
subgraph 表现层
A[Vue 3 + Vite] --> B[Element Plus UI]
A --> C[ECharts 可视化]
A --> D[SVG 交互编辑]
A --> E[WebSocket 实时通信]
end
subgraph 网关层
F[Spring Cloud Gateway] --> G[JWT 鉴权]
F --> H[路由转发]
F --> I[限流熔断]
end
subgraph 业务逻辑层
J[Spring Boot 3.2] --> K[MyBatis-Plus]
J --> L[Spring Data Neo4j]
J --> M[Drools 规则引擎]
J --> N[Spring Cloud Alibaba]
end
subgraph AI计算层
O[FastAPI] --> P[LangChain]
O --> Q[FAISS / Chroma]
O --> R[LLM Client]
O --> S[Semantic Chunker]
end
subgraph 数据层
T[(Oracle)]
U[(Neo4j)]
V[(Chroma)]
W[(MinIO)]
end
表现层 --> 网关层 --> 业务逻辑层
业务逻辑层 --> 数据层
AI计算层 --> 数据层
网关层 --> AI计算层
style 表现层 fill:#e1f5fe,stroke:#0288d1
style 网关层 fill:#fff3e0,stroke:#f57c00
style 业务逻辑层 fill:#e8f5e9,stroke:#388e3c
style AI计算层 fill:#fce4ec,stroke:#c62828
style 数据层 fill:#f3e5f5,stroke:#7b1fa2
Loading
微服务交互关系
各服务之间主要通过以下三种方式通信:
通信方式
适用场景
示例
RabbitMQ 异步消息
长耗时任务、跨服务事件通知
文档解析完成 → 通知向量同步 / 知识抽取
Feign / HTTP 同步调用
实时数据查询、服务间直接依赖
RAG 服务查询文档内容 → 调用 Document Ingest Service
Nacos 服务发现
动态服务注册与发现
Gateway 通过 Nacos 发现所有后端服务实例
核心功能
功能总览
功能模块
说明
涉及服务
故障树 AI 智能生成
基于上传文档 + 知识图谱模板,通过 RAG + LLM 自动生成符合 FTA 标准的故障树
RAG Service, KG Service, Vector Store
可视化编辑与校验
提供 SVG 图形化拖拽编辑界面,支持节点增删、逻辑门修改、位置调整等操作
FT Editor Service, Rule Validation Service
知识图谱管理
基于 Neo4j 构建 ISO 13379 标准故障本体,预加载事件模板,支持动态扩展
KG Service
文档处理与融合
支持 PDF/DOCX/TXT 格式文档上传,执行 OCR、语义分块、元数据提取、多文档融合
Document Ingest Service, Fusion Service
规则引擎校验
基于 Drools 的故障树逻辑合规校验(循环依赖检测、逻辑门输入数校验、事件类型校验等)
Rule Validation Service
反馈学习闭环
收集专家修正操作反馈,周期性触发 AI 模型优化
Feedback Learning Service
AI 智能助手
支持流式对话交互,可关联故障树和文档进行上下文问答
Chat Service
用户认证与审计
JWT 认证授权,用户隔离,全链路操作日志审计
Auth Service, Log Service
故障树AI生成流程
这是系统最核心的功能流程,展示了从用户输入顶事件到生成完整故障树的完整数据流:
sequenceDiagram
actor User as 👤 用户
participant FE as Vue3 前端
participant GW as Gateway (:8089)
participant RAG as RAG Service (:8000)
participant Doc as Document Ingest (:8091)
participant KG as Knowledge Graph (:8092)
participant VS as Vector Store (:8090)
participant Chroma as Chroma DB
participant LLM as 大模型 (百炼API)
participant FTE as FT Editor (:8084)
User->>FE: 输入顶事件 + 选择参考文档
FE->>GW: POST /api/v1/rag/generate
GW->>RAG: 转发生成请求
Note over RAG: 步骤1: 获取文档内容
RAG->>Doc: GET /api/v1/documents/{docId}/content
Doc-->>RAG: 返回文档段落列表
Note over RAG: 步骤1.5: 多文档融合
RAG->>RAG: FusionEngine.fuse()<br/>段落聚类 + 冲突检测 + 自动融合
Note over RAG: 步骤2: 获取知识图谱模板
RAG->>KG: POST /api/v1/kg/query-template
KG->>KG: Neo4j 查询匹配模板
KG-->>RAG: 返回领域模板(故障模式/事件规则/因果链)
Note over RAG: 步骤2.5: 向量检索相关证据
RAG->>Chroma: 语义检索 top_k=15
Chroma-->>RAG: 返回相似段落 + 元数据
Note over RAG: 步骤3: 构建混合提示词
RAG->>RAG: HybridFaultTreeGenerator<br/>知识约束 + 文档证据 + 用户偏好<br/>→ 组装 Prompt
Note over RAG: 步骤4: 调用大模型生成
RAG->>LLM: POST 混合提示词
LLM-->>RAG: 返回故障树 JSON
Note over RAG: 步骤5: 后处理
RAG->>RAG: 解析JSON → FaultTreeSchema<br/>驼峰命名转换<br/>填充溯源信息 (sourceDetail)<br/>置信度计算
Note over RAG: 步骤6: 知识图谱校验
RAG->>KG: 校验事件分类/逻辑门合理性
KG-->>RAG: 返回校验结果
RAG-->>GW: 返回 taskId (异步)
GW-->>FE: taskId
loop 轮询任务状态
FE->>GW: GET /api/v1/rag/tasks/{taskId}
GW->>RAG: 查询任务状态
RAG-->>GW: status + faultTree JSON
GW-->>FE: 故障树数据
end
FE->>FE: SVG 渲染故障树
FE-->>User: 可视化展示故障树
opt 用户确认保存
User->>FE: 点击"保存"
FE->>GW: POST /api/v1/fault-trees
GW->>FTE: 保存故障树到 Oracle
FTE-->>GW: 保存成功
GW-->>FE: 故障树 ID
end
Loading
混合生成策略
生成器支持两种模式:
模式
说明
适用场景
single_pass(默认)
单次调用 LLM 生成完整故障树
中小规模故障树(<50 个节点)
recursive
递归分批次生成,逐层分解中间事件
复杂大规模故障树(>50 个节点)
文档摄入与向量同步流程
sequenceDiagram
actor User as 👤 用户
participant FE as Vue3 前端
participant GW as Gateway
participant Doc as Document Ingest (:8091)
participant MinIO as MinIO
participant RAG as RAG Service (:8000)
participant Chroma as Chroma DB
participant VS as Vector Store (:8090)
participant Oracle as Oracle
participant KG as Knowledge Graph
User->>FE: 上传文档 (PDF/DOCX/TXT)
FE->>GW: POST /api/v1/documents/upload
GW->>Doc: 转发文档
Doc->>Doc: 文档解析<br/>- OCR (PDF图像页)<br/>- 文本提取<br/>- 段落切分
Doc->>MinIO: 存储原始文件
Note over Doc: 语义分块处理
Doc->>RAG: POST /api/v1/rag/sync-vector<br/>(向量同步)
RAG->>RAG: SemanticChunker<br/>智能语义分块<br/>(chunk_size=500, overlap=100)
RAG->>Chroma: 存储向量嵌入<br/>(按 userId 隔离)
Note over RAG: 知识抽取
RAG->>RAG: KnowledgeExtractor<br/>从段落中抽取:<br/>- 故障事件<br/>- 因果关系
RAG->>KG: enrich_knowledge_batch()<br/>保存到 Neo4j 知识图谱
Note over RAG: Oracle 元数据备份
RAG->>VS: POST /api/v1/vector/process
VS->>Oracle: 持久化段落元数据<br/>(document_metadata, paragraph_metadata)
RAG-->>Doc: 同步完成
Doc-->>GW: 上传成功 + docId
GW-->>FE: 文档信息
FE-->>User: 文档列表更新
Loading
规则校验流程
系统通过 Drools 规则引擎 对故障树进行结构化校验,确保逻辑合规:
flowchart TD
A(["用户触发校验"]) --> B["POST /api/v1/validation/validate"]
B --> C["RuleValidationService<br/>加载 Drools 规则引擎"]
C --> D{"遍历故障树节点"}
D --> R1["规则1: 循环依赖检测<br/>Check Cyclic Dependency"]
D --> R2["规则2: 顶事件校验<br/>Check Single Top Event"]
D --> R3["规则3: 底事件子节点校验<br/>Check Basic Event Has Children"]
D --> R4["规则4: AND/OR 门输入数<br/>Check AND/OR Gate Input Count"]
D --> R5["规则5: XOR 门输入数<br/>Check XOR Gate Input Count"]
D --> R6["规则6: NOT 门输入数<br/>Check NOT Gate Input Count"]
D --> R7["规则7: 事件类型非空<br/>Check Event Type Not Null"]
D --> R8["规则8: 中间事件必有门<br/>Check Intermediate Event Has Gate"]
D --> R9["规则9: 事件名非空<br/>Check Event Name Not Empty"]
D --> R10["规则10: 重复ID检测<br/>Check Duplicate Event IDs"]
R1 --> E{"校验通过?"}
R2 --> E
R3 --> E
R4 --> E
R5 --> E
R6 --> E
R7 --> E
R8 --> E
R9 --> E
R10 --> E
E -->|"全部通过"| F["返回校验通过<br/>+ 优化建议"]
E -->|"发现问题"| G["返回错误列表<br/>含错误码+修复建议"]
F --> H(["前端展示结果"])
G --> H
Loading
Drools 规则说明
规则
错误码
检测内容
Check Cyclic Dependency
CYCLE_DETECTED
故障树是否存在循环引用(如 A→B→A)
Check Single Top Event
MULTIPLE_TOP_EVENTS
根节点必须是 TOP 类型事件
Check Basic Event Has Children
BASIC_EVENT_HAS_CHILDREN
底事件不能有子节点
Check AND/OR Gate Input Count
INSUFFICIENT_INPUTS
AND/OR 门至少需要 2 个输入
Check XOR Gate Input Count
INSUFFICIENT_XOR_INPUTS
XOR 门至少需要 2 个互斥输入
Check NOT Gate Input Count
INVALID_NOT_GATE_INPUTS
NOT 门必须有且仅有 1 个输入
Check Event Type Not Null
MISSING_EVENT_TYPE
每个节点必须有事件类型
Check Intermediate Event Has Gate
MISSING_GATE_TYPE
有子节点的中间事件必须指定逻辑门
Check Event Name Not Empty
EMPTY_EVENT_NAME
事件名称不能为空
Check Duplicate Event IDs
DUPLICATE_EVENT_ID
事件 ID 必须全局唯一
专家反馈学习流程
sequenceDiagram
actor Expert as 👤 领域专家
participant FE as Vue3 前端
participant GW as Gateway
participant FB as Feedback Service (:8085)
participant Oracle as Oracle
participant RAG as RAG Service
Expert->>FE: 在编辑界面修正故障树节点<br/>(修改事件名/逻辑门/添加节点等)
FE->>GW: 提交修正操作
GW->>FB: POST /api/v1/feedback
FB->>Oracle: 存储反馈记录<br/>- 修正前/后数据对比<br/>- 修正类型<br/>- 修正原因
Note over FB: 周期性触发
Expert->>FE: 管理员触发模型优化
FE->>GW: POST /api/v1/feedback/optimize-models
GW->>FB: 触发优化
FB->>Oracle: 查询历史反馈数据
FB->>FB: 数据聚合分析<br/>- 高频修正模式识别<br/>- 置信度调整<br/>- 规则优化建议
FB->>RAG: 发送优化信号<br/>(调整生成参数/提示词模板)
RAG-->>FB: 确认更新
FB-->>GW: 优化结果报告
GW-->>FE: 展示优化统计
Loading
AI助手对话流程
sequenceDiagram
actor User as 👤 用户
participant FE as Vue3 前端
participant GW as Gateway
participant Chat as Chat Service (:8001)
participant DB as Oracle (Session)
participant Doc as Document Ingest
participant LLM as 大模型
User->>FE: 打开 AI 助手
FE->>GW: GET /api/v1/chat/sessions/user/{userId}
GW->>Chat: 查询历史会话
Chat->>DB: 查询会话列表
DB-->>Chat: 会话数据
Chat-->>FE: 会话列表
opt 关联故障树/文档
User->>FE: 关联当前故障树
FE->>GW: POST /api/v1/chat/link/tree
GW->>Chat: 建立会话-故障树关联
User->>FE: 关联参考文档
FE->>GW: POST /api/v1/chat/link/document
GW->>Chat: 建立会话-文档关联
end
User->>FE: 输入问题
FE->>GW: POST /api/v1/chat/chat/stream (SSE)
GW->>Chat: 转发流式请求
Chat->>Chat: 获取上下文<br/>- 关联故障树结构<br/>- 关联文档内容
Chat->>LLM: 发送上下文 + 问题
LLM-->>Chat: 流式响应 (SSE)
loop 流式返回
Chat-->>GW: data: {token, ...}
GW-->>FE: SSE data chunk
FE->>FE: 逐字渲染
end
Chat->>DB: 保存对话历史
FE-->>User: 显示完整回答