You've already forked DataMate
核心功能: - 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
224 lines
8.3 KiB
Markdown
224 lines
8.3 KiB
Markdown
# DataMate 知识图谱实现方案
|
|
|
|
## 📋 项目概述
|
|
|
|
DataMate 知识图谱旨在构建企业级数据处理平台的知识网络,通过图结构揭示数据资产之间的关系,支持智能推荐、影响分析、血缘追踪等高级功能。
|
|
|
|
## 🎯 核心目标
|
|
|
|
1. **数据血缘追踪**:追踪数据从源到目标的完整流转路径
|
|
2. **影响分析**:评估数据变更对下游任务的影响范围
|
|
3. **智能推荐**:基于历史使用模式推荐相关数据集和工作流
|
|
4. **知识发现**:挖掘隐藏的数据关系和模式
|
|
|
|
## 🏗️ 技术架构
|
|
|
|
### 技术栈
|
|
|
|
```
|
|
存储层:MySQL (元数据) + Neo4j (图结构) + Milvus (向量)
|
|
后端:Spring Boot (kg-service) + FastAPI (kg-ingestion)
|
|
前端:React + AntV G6
|
|
抽取:LangChain LLMGraphTransformer
|
|
```
|
|
|
|
### 架构设计
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ 前端层 │
|
|
│ React + AntV G6 (图谱可视化 + 编辑) │
|
|
└─────────────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────┐
|
|
│ 服务层 │
|
|
│ kg-service (Spring Boot) │
|
|
│ - 图查询 API │
|
|
│ - 权限过滤 │
|
|
│ - 缓存层 (Redis) │
|
|
│ │
|
|
│ rag-query-service (增强) │
|
|
│ - 混合检索 (Milvus + Neo4j) │
|
|
│ - GraphRAG │
|
|
└─────────────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────┐
|
|
│ 摄入层 │
|
|
│ kg-ingestion (FastAPI) │
|
|
│ - LangChain LLMGraphTransformer │
|
|
│ - 实体对齐 │
|
|
│ - 关系生成 │
|
|
└─────────────────────────────────────────────────┘
|
|
↓
|
|
┌─────────────────────────────────────────────────┐
|
|
│ 存储层 │
|
|
│ MySQL + Neo4j + Milvus │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## 📊 数据模型
|
|
|
|
> 详细定义参见 [实体文档](./schema/entities.md) 和 [关系文档](./schema/relationships.md)
|
|
|
|
### 核心实体(8 类)
|
|
|
|
- **Dataset**:数据集
|
|
- **Field**:字段
|
|
- **LabelTask**:标注任务
|
|
- **Workflow**:工作流
|
|
- **Job**:作业
|
|
- **User**:用户
|
|
- **Org**:组织
|
|
- **KnowledgeSet**:知识集
|
|
|
|
### 核心关系(10 类)
|
|
|
|
- **HAS_FIELD**:Dataset → Field,数据集包含字段
|
|
- **DERIVED_FROM**:Dataset → Dataset,数据集血缘派生
|
|
- **USES_DATASET**:Job/LabelTask/Workflow → Dataset,使用数据集
|
|
- **PRODUCES**:Job → Dataset,作业产出数据集
|
|
- **ASSIGNED_TO**:LabelTask/Job → User,任务分配给用户
|
|
- **BELONGS_TO**:User/Dataset → Org,组织归属
|
|
- **TRIGGERS**:Workflow → Job,工作流触发作业
|
|
- **DEPENDS_ON**:Job → Job,作业执行依赖
|
|
- **IMPACTS**:Field → Field,字段级影响
|
|
- **SOURCED_FROM**:KnowledgeSet → Dataset,知识溯源
|
|
|
|
### 节点公共属性
|
|
|
|
```json
|
|
{
|
|
"id": "UUID,全局唯一标识符",
|
|
"name": "实体名称",
|
|
"type": "实体类型(Dataset / Field / LabelTask 等)",
|
|
"description": "实体描述",
|
|
"graph_id": "所属图谱 ID(多租户隔离)",
|
|
"source_id": "来源记录 ID",
|
|
"source_type": "来源类型:SYNC / EXTRACTION / MANUAL",
|
|
"confidence": "置信度 0.0-1.0",
|
|
"created_at": "创建时间"
|
|
}
|
|
```
|
|
|
|
### 边公共属性
|
|
|
|
```json
|
|
{
|
|
"id": "UUID,关系唯一标识符",
|
|
"relation_type": "语义关系类型",
|
|
"graph_id": "所属图谱 ID",
|
|
"weight": "关系权重 0.0-1.0",
|
|
"confidence": "置信度 0.0-1.0",
|
|
"source_id": "来源记录 ID",
|
|
"properties_json": "扩展属性 JSON",
|
|
"created_at": "创建时间"
|
|
}
|
|
```
|
|
|
|
## 🚀 实施路线图
|
|
|
|
### 第 0 阶段:基础设施(1周)✅ 已完成
|
|
|
|
- ✅ 搭建 Neo4j(docker-compose)
|
|
- ✅ 更新 Makefile
|
|
- ✅ 创建 knowledge-graph-service(Spring Boot)
|
|
- ✅ 创建 kg_extraction 模块(Python)
|
|
- ✅ 代码审查和修复(3 轮审查,2 轮修复)
|
|
|
|
**成果**:
|
|
- Neo4j 配置:`deployment/docker/neo4j/docker-compose.yml`
|
|
- Java 服务:`backend/services/knowledge-graph-service/`(11 个文件)
|
|
- Python 模块:`runtime/datamate-python/app/module/kg_extraction/`(3 个文件)
|
|
- Makefile 命令:`neo4j-up`, `neo4j-down`, `neo4j-logs`, `neo4j-shell`
|
|
|
|
### 第 1 阶段:MVP(2-3周)⏳ 进行中
|
|
|
|
**目标**:实现基础的图谱构建和查询功能
|
|
|
|
**任务**:
|
|
1. 实现 Python 抽取器的 FastAPI 接口
|
|
- 创建 `/api/kg/extract` 端点
|
|
- 支持文本输入,输出节点和边
|
|
- 集成到 FastAPI 路由
|
|
|
|
2. 实现 Java 服务的关系(Relation)功能
|
|
- 补充 Relation 的 Repository/Service/Controller
|
|
- 实现关系的 CRUD 操作
|
|
- 支持关系查询和遍历
|
|
|
|
3. 定义核心实体和关系模型
|
|
- 确定 5-8 类核心实体
|
|
- 定义实体之间的关系
|
|
- 设计 Schema 版本管理
|
|
|
|
4. 实现基础的图谱构建流程
|
|
- 从 MySQL 同步元数据到 Neo4j
|
|
- 实现增量更新机制
|
|
- 支持手动触发构建
|
|
|
|
**验收标准**:
|
|
- ✅ 能够从文本抽取实体和关系
|
|
- ✅ 能够存储到 Neo4j
|
|
- ✅ 能够查询和遍历图谱
|
|
- ✅ 支持基础的权限控制
|
|
|
|
### 第 2 阶段:GraphRAG 融合(3-4周)
|
|
|
|
**目标**:将知识图谱与现有 RAG 系统深度融合
|
|
|
|
**任务**:
|
|
1. 在 rag-query-service 中增加"混合检索"模式
|
|
2. 查询时同时检索 Milvus(向量)+ Neo4j(图结构)
|
|
3. 将 2-hop 子图的三元组文本化后作为 Context 喂给 LLM
|
|
4. 实现 GraphRAG 的评估和优化
|
|
|
|
**验收标准**:
|
|
- ✅ 混合检索性能优于单一检索
|
|
- ✅ 支持可配置的检索策略
|
|
- ✅ 有完整的评估指标
|
|
|
|
### 第 3 阶段:可视化与优化(4-6周)
|
|
|
|
**目标**:提供友好的图谱可视化和编辑功能
|
|
|
|
**任务**:
|
|
1. 前端图谱浏览器(React + AntV G6)
|
|
2. Human-in-the-loop 编辑功能
|
|
3. 性能优化(索引、缓存、离线计算)
|
|
4. 监控和运维(Prometheus + Grafana)
|
|
|
|
**验收标准**:
|
|
- ✅ 支持大规模图谱可视化(10000+ 节点)
|
|
- ✅ 支持实时编辑和反馈
|
|
- ✅ 查询响应时间 < 1s
|
|
|
|
## 🔑 核心原则
|
|
|
|
1. **先做"窄而深"的场景**:不追求"大而全本体",先聚焦 2-3 个高价值场景
|
|
2. **最终一致性**:MySQL 为主库,Neo4j 为专用存储,通过对账机制保证一致性
|
|
3. **双重防御**:Controller 格式校验 + Service 业务校验
|
|
4. **权限隔离**:所有操作都在正确的 graph_id 范围内
|
|
5. **性能优先**:限制遍历深度、使用缓存、离线计算
|
|
|
|
## 📚 相关文档
|
|
|
|
- [架构设计](./architecture.md)
|
|
- [数据模型 - 实体定义](./schema/entities.md)
|
|
- [数据模型 - 关系定义](./schema/relationships.md)
|
|
- [数据模型 - ER 图](./schema/er-diagram.md)
|
|
- [实施计划](./implementation.md)
|
|
- [Gemini 分析结果](./analysis/gemini.md)
|
|
- [Codex 分析结果](./analysis/codex.md)
|
|
- [Claude 分析结果](./analysis/claude.md)
|
|
|
|
## 🔗 快速链接
|
|
|
|
- Neo4j Browser: http://localhost:7474
|
|
- Bolt URI: bolt://localhost:7687
|
|
- 默认密码: datamate123(生产环境请修改)
|
|
|
|
## 📝 更新日志
|
|
|
|
- 2026-02-17:完成基础设施搭建(第 0 阶段)
|
|
- 2026-02-17:创建项目文档
|