Files
DataMate/docs/knowledge-graph/README.md
Jerry Yan afcb8783aa 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
2026-02-20 19:13:46 +08:00

8.3 KiB

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                         │
└─────────────────────────────────────────────────┘

📊 数据模型

详细定义参见 实体文档关系文档

核心实体(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,知识溯源

节点公共属性

{
  "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": "创建时间"
}

边公共属性

{
  "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. 性能优先:限制遍历深度、使用缓存、离线计算

📚 相关文档

🔗 快速链接

  • Neo4j Browser: http://localhost:7474
  • Bolt URI: bolt://localhost:7687
  • 默认密码: datamate123(生产环境请修改)

📝 更新日志

  • 2026-02-17:完成基础设施搭建(第 0 阶段)
  • 2026-02-17:创建项目文档