You've already forked DataMate
feat(kg): 实现 Phase 3.1 前端图谱浏览器
核心功能: - G6 v5 力导向图,支持交互式缩放、平移、拖拽 - 5 种布局模式:force, circular, grid, radial, concentric - 双击展开节点邻居到图中(增量探索) - 全文搜索,类型过滤,结果高亮(变暗/高亮状态) - 节点详情抽屉:实体属性、别名、置信度、关系列表(可导航) - 关系详情抽屉:类型、源/目标、权重、置信度、属性 - 查询构建器:最短路径/全路径查询,可配置 maxDepth/maxPaths - 基于 UUID 的图加载(输入或 URL 参数 ?graphId=...) - 大图性能优化(200 节点阈值,超过时禁用动画) 新增文件(13 个): - knowledge-graph.model.ts - TypeScript 接口,匹配 Java DTOs - knowledge-graph.api.ts - API 服务,包含所有 KG REST 端点 - knowledge-graph.const.ts - 实体类型颜色、关系类型标签、中文显示名称 - graphTransform.ts - 后端数据 → G6 节点/边格式转换 + 合并工具 - graphConfig.ts - G6 v5 图配置(节点/边样式、行为、布局) - hooks/useGraphData.ts - 数据钩子:加载子图、展开节点、搜索、合并 - hooks/useGraphLayout.ts - 布局钩子:5 种布局类型 - components/GraphCanvas.tsx - G6 v5 画布,力导向布局,缩放/平移/拖拽 - components/SearchPanel.tsx - 全文实体搜索,类型过滤 - components/NodeDetail.tsx - 实体详情抽屉 - components/RelationDetail.tsx - 关系详情抽屉 - components/QueryBuilder.tsx - 路径查询构建器 - Home/KnowledgeGraphPage.tsx - 主页面,整合所有组件 修改文件(5 个): - package.json - 添加 @antv/g6 v5 依赖 - vite.config.ts - 添加 /knowledge-graph 代理规则 - auth/permissions.ts - 添加 knowledgeGraphRead/knowledgeGraphWrite - pages/Layout/menu.tsx - 添加知识图谱菜单项(Network 图标) - routes/routes.ts - 添加 /data/knowledge-graph 路由 新增文档(10 个): - docs/knowledge-graph/ - 完整的知识图谱设计文档 Bug 修复(Codex 审查后修复): - P1: 详情抽屉状态与选中状态不一致(显示旧数据) - P1: 查询构建器未实现(最短路径/多路径查询) - P2: 实体类型映射 Organization → Org(匹配后端) - P2: getSubgraph depth 参数无效(改用正确端点) - P2: AllPathsVO 字段名不一致(totalPaths → pathCount) - P2: 搜索取消逻辑无效(传递 AbortController.signal) - P2: 大图性能优化(动画降级) - P3: 移除未使用的类型导入 构建验证: - tsc --noEmit ✅ clean - eslint ✅ 0 errors/warnings - vite build ✅ successful
This commit is contained in:
298
docs/knowledge-graph/schema/er-diagram.md
Normal file
298
docs/knowledge-graph/schema/er-diagram.md
Normal file
@@ -0,0 +1,298 @@
|
||||
# DataMate 知识图谱 - 实体关系图
|
||||
|
||||
> Schema 版本:1.0.0
|
||||
> 更新日期:2026-02-17
|
||||
|
||||
## 核心实体关系总览
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
%% 实体定义
|
||||
Dataset["<b>Dataset</b><br/>数据集"]
|
||||
Field["<b>Field</b><br/>字段"]
|
||||
LabelTask["<b>LabelTask</b><br/>标注任务"]
|
||||
Workflow["<b>Workflow</b><br/>工作流"]
|
||||
Job["<b>Job</b><br/>作业"]
|
||||
User["<b>User</b><br/>用户"]
|
||||
Org["<b>Org</b><br/>组织"]
|
||||
KnowledgeSet["<b>KnowledgeSet</b><br/>知识集"]
|
||||
|
||||
%% 关系连接
|
||||
Dataset -->|HAS_FIELD| Field
|
||||
Dataset -->|DERIVED_FROM| Dataset
|
||||
Dataset -->|BELONGS_TO| Org
|
||||
|
||||
Job -->|USES_DATASET| Dataset
|
||||
Job -->|PRODUCES| Dataset
|
||||
Job -->|DEPENDS_ON| Job
|
||||
|
||||
Workflow -->|TRIGGERS| Job
|
||||
Workflow -->|USES_DATASET| Dataset
|
||||
|
||||
LabelTask -->|USES_DATASET| Dataset
|
||||
LabelTask -->|ASSIGNED_TO| User
|
||||
|
||||
User -->|BELONGS_TO| Org
|
||||
|
||||
Field -->|IMPACTS| Field
|
||||
|
||||
KnowledgeSet -->|SOURCED_FROM| Dataset
|
||||
|
||||
%% 样式
|
||||
classDef dataAsset fill:#4A90D9,stroke:#2C5F8A,color:#fff,stroke-width:2px
|
||||
classDef task fill:#7B68EE,stroke:#5A4CB5,color:#fff,stroke-width:2px
|
||||
classDef actor fill:#50C878,stroke:#3A9B5B,color:#fff,stroke-width:2px
|
||||
classDef knowledge fill:#FFB347,stroke:#CC8F39,color:#fff,stroke-width:2px
|
||||
|
||||
class Dataset,Field dataAsset
|
||||
class LabelTask,Workflow,Job task
|
||||
class User,Org actor
|
||||
class KnowledgeSet knowledge
|
||||
```
|
||||
|
||||
## 分领域视图
|
||||
|
||||
### 数据血缘视图
|
||||
|
||||
展示数据集之间的派生关系和字段级血缘。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph 源数据层
|
||||
DS_RAW["Dataset<br/>原始数据集"]
|
||||
F1["Field: user_id"]
|
||||
F2["Field: event_type"]
|
||||
F3["Field: timestamp"]
|
||||
end
|
||||
|
||||
subgraph 处理层
|
||||
JOB_CLEAN["Job<br/>清洗作业"]
|
||||
JOB_SYNTH["Job<br/>合成作业"]
|
||||
end
|
||||
|
||||
subgraph 产出数据层
|
||||
DS_CLEAN["Dataset<br/>清洗后数据集"]
|
||||
DS_SYNTH["Dataset<br/>合成数据集"]
|
||||
F1_CLEAN["Field: user_id"]
|
||||
F4["Field: user_segment"]
|
||||
end
|
||||
|
||||
DS_RAW -->|HAS_FIELD| F1
|
||||
DS_RAW -->|HAS_FIELD| F2
|
||||
DS_RAW -->|HAS_FIELD| F3
|
||||
|
||||
JOB_CLEAN -->|USES_DATASET| DS_RAW
|
||||
JOB_CLEAN -->|PRODUCES| DS_CLEAN
|
||||
JOB_SYNTH -->|USES_DATASET| DS_CLEAN
|
||||
JOB_SYNTH -->|PRODUCES| DS_SYNTH
|
||||
|
||||
DS_CLEAN -->|DERIVED_FROM| DS_RAW
|
||||
DS_SYNTH -->|DERIVED_FROM| DS_CLEAN
|
||||
|
||||
DS_CLEAN -->|HAS_FIELD| F1_CLEAN
|
||||
DS_SYNTH -->|HAS_FIELD| F4
|
||||
|
||||
F1 -->|IMPACTS| F1_CLEAN
|
||||
F1_CLEAN -->|IMPACTS| F4
|
||||
|
||||
classDef source fill:#E8F4FD,stroke:#4A90D9,color:#333
|
||||
classDef process fill:#F3E8FF,stroke:#7B68EE,color:#333
|
||||
classDef output fill:#E8FFF0,stroke:#50C878,color:#333
|
||||
|
||||
class DS_RAW,F1,F2,F3 source
|
||||
class JOB_CLEAN,JOB_SYNTH process
|
||||
class DS_CLEAN,DS_SYNTH,F1_CLEAN,F4 output
|
||||
```
|
||||
|
||||
### 任务编排视图
|
||||
|
||||
展示工作流、作业和任务之间的编排关系。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph 工作流定义
|
||||
WF_CLEAN["Workflow<br/>清洗管道"]
|
||||
WF_EVAL["Workflow<br/>评估管道"]
|
||||
end
|
||||
|
||||
subgraph 作业执行
|
||||
JOB1["Job<br/>清洗作业 #1"]
|
||||
JOB2["Job<br/>清洗作业 #2"]
|
||||
JOB3["Job<br/>评估作业"]
|
||||
end
|
||||
|
||||
subgraph 标注任务
|
||||
LT1["LabelTask<br/>人工标注"]
|
||||
LT2["LabelTask<br/>自动标注"]
|
||||
end
|
||||
|
||||
subgraph 人员
|
||||
U1["User<br/>张三"]
|
||||
U2["User<br/>李四"]
|
||||
end
|
||||
|
||||
WF_CLEAN -->|TRIGGERS| JOB1
|
||||
WF_CLEAN -->|TRIGGERS| JOB2
|
||||
WF_EVAL -->|TRIGGERS| JOB3
|
||||
|
||||
JOB2 -->|DEPENDS_ON| JOB1
|
||||
JOB3 -->|DEPENDS_ON| JOB2
|
||||
|
||||
LT1 -->|ASSIGNED_TO| U1
|
||||
LT2 -->|ASSIGNED_TO| U2
|
||||
|
||||
classDef wf fill:#7B68EE,stroke:#5A4CB5,color:#fff
|
||||
classDef job fill:#9B8FFF,stroke:#7B68EE,color:#fff
|
||||
classDef task fill:#B8A9FF,stroke:#9B8FFF,color:#fff
|
||||
classDef user fill:#50C878,stroke:#3A9B5B,color:#fff
|
||||
|
||||
class WF_CLEAN,WF_EVAL wf
|
||||
class JOB1,JOB2,JOB3 job
|
||||
class LT1,LT2 task
|
||||
class U1,U2 user
|
||||
```
|
||||
|
||||
### 组织归属视图
|
||||
|
||||
展示用户、数据集与组织的归属关系。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph 组织
|
||||
ORG1["Org<br/>数据工程部"]
|
||||
ORG2["Org<br/>AI研发部"]
|
||||
end
|
||||
|
||||
subgraph 人员
|
||||
U1["User: 张三"]
|
||||
U2["User: 李四"]
|
||||
U3["User: 王五"]
|
||||
end
|
||||
|
||||
subgraph 数据资产
|
||||
DS1["Dataset: 用户行为日志"]
|
||||
DS2["Dataset: 医学影像集"]
|
||||
DS3["Dataset: 训练数据集"]
|
||||
end
|
||||
|
||||
U1 -->|BELONGS_TO| ORG1
|
||||
U2 -->|BELONGS_TO| ORG1
|
||||
U3 -->|BELONGS_TO| ORG2
|
||||
|
||||
DS1 -->|BELONGS_TO| ORG1
|
||||
DS2 -->|BELONGS_TO| ORG2
|
||||
DS3 -->|BELONGS_TO| ORG2
|
||||
|
||||
classDef org fill:#FFB347,stroke:#CC8F39,color:#fff
|
||||
classDef user fill:#50C878,stroke:#3A9B5B,color:#fff
|
||||
classDef data fill:#4A90D9,stroke:#2C5F8A,color:#fff
|
||||
|
||||
class ORG1,ORG2 org
|
||||
class U1,U2,U3 user
|
||||
class DS1,DS2,DS3 data
|
||||
```
|
||||
|
||||
### 知识溯源视图
|
||||
|
||||
展示知识集与数据集的溯源关系。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph 数据源
|
||||
DS1["Dataset<br/>用户行为日志"]
|
||||
DS2["Dataset<br/>产品文档"]
|
||||
end
|
||||
|
||||
subgraph 知识资产
|
||||
KS1["KnowledgeSet<br/>用户行为知识库"]
|
||||
end
|
||||
|
||||
subgraph 标注
|
||||
LT["LabelTask<br/>知识标注"]
|
||||
end
|
||||
|
||||
KS1 -->|SOURCED_FROM| DS1
|
||||
KS1 -->|SOURCED_FROM| DS2
|
||||
LT -->|USES_DATASET| DS1
|
||||
|
||||
classDef data fill:#4A90D9,stroke:#2C5F8A,color:#fff
|
||||
classDef knowledge fill:#FFB347,stroke:#CC8F39,color:#fff
|
||||
classDef task fill:#7B68EE,stroke:#5A4CB5,color:#fff
|
||||
|
||||
class DS1,DS2 data
|
||||
class KS1 knowledge
|
||||
class LT task
|
||||
```
|
||||
|
||||
## 综合示例:完整数据流
|
||||
|
||||
展示从原始数据到知识资产的完整处理链路。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
%% 组织和人员
|
||||
ORG["Org: 数据工程部"]
|
||||
USER["User: 张三"]
|
||||
|
||||
%% 数据资产
|
||||
DS_RAW["Dataset: 原始日志"]
|
||||
DS_CLEAN["Dataset: 清洗数据"]
|
||||
F_UID_RAW["Field: user_id (原始)"]
|
||||
F_UID_CLEAN["Field: user_id (清洗)"]
|
||||
|
||||
%% 处理流程
|
||||
WF["Workflow: 清洗管道"]
|
||||
JOB["Job: 清洗作业"]
|
||||
LT["LabelTask: 情感标注"]
|
||||
|
||||
%% 知识
|
||||
KS["KnowledgeSet: 行为知识库"]
|
||||
|
||||
%% 组织归属
|
||||
USER -->|BELONGS_TO| ORG
|
||||
DS_RAW -->|BELONGS_TO| ORG
|
||||
|
||||
%% 数据结构
|
||||
DS_RAW -->|HAS_FIELD| F_UID_RAW
|
||||
DS_CLEAN -->|HAS_FIELD| F_UID_CLEAN
|
||||
|
||||
%% 处理链路
|
||||
WF -->|TRIGGERS| JOB
|
||||
JOB -->|USES_DATASET| DS_RAW
|
||||
JOB -->|PRODUCES| DS_CLEAN
|
||||
DS_CLEAN -->|DERIVED_FROM| DS_RAW
|
||||
|
||||
%% 字段血缘
|
||||
F_UID_RAW -->|IMPACTS| F_UID_CLEAN
|
||||
|
||||
%% 任务分配
|
||||
LT -->|USES_DATASET| DS_CLEAN
|
||||
LT -->|ASSIGNED_TO| USER
|
||||
|
||||
%% 知识溯源
|
||||
KS -->|SOURCED_FROM| DS_CLEAN
|
||||
|
||||
%% 样式
|
||||
classDef org fill:#FFB347,stroke:#CC8F39,color:#fff,stroke-width:2px
|
||||
classDef user fill:#50C878,stroke:#3A9B5B,color:#fff,stroke-width:2px
|
||||
classDef data fill:#4A90D9,stroke:#2C5F8A,color:#fff,stroke-width:2px
|
||||
classDef field fill:#87CEEB,stroke:#4A90D9,color:#333,stroke-width:1px
|
||||
classDef process fill:#7B68EE,stroke:#5A4CB5,color:#fff,stroke-width:2px
|
||||
classDef knowledge fill:#FF6B6B,stroke:#CC5555,color:#fff,stroke-width:2px
|
||||
|
||||
class ORG org
|
||||
class USER user
|
||||
class DS_RAW,DS_CLEAN data
|
||||
class F_UID_RAW,F_UID_CLEAN field
|
||||
class WF,JOB,LT process
|
||||
class KS knowledge
|
||||
```
|
||||
|
||||
## 图例
|
||||
|
||||
| 颜色 | 分类 | 包含实体 |
|
||||
|------|------|---------|
|
||||
| 蓝色 | 数据资产 | Dataset, Field |
|
||||
| 紫色 | 任务/流程 | Workflow, Job, LabelTask |
|
||||
| 绿色 | 人员 | User, Org |
|
||||
| 橙色/红色 | 知识 | KnowledgeSet |
|
||||
Reference in New Issue
Block a user