基于知识图谱的检索增强生成(GraphRAG)智能问答系统,融合 MinerU 文档精准解析、LangExtract 实体抽取与 Agentic-RAG 问答,提供从文档上传到知识图谱构建再到智能问答的全链路能力。
┌─────────────────────────────────────────────────────────┐
│ Frontend (React + Vite) │
│ Dashboard │ Documents │ KG Explorer │ QA Chat │ Search │
└──────────────────────────┬──────────────────────────────┘
│ HTTP API
┌──────────────────────────▼──────────────────────────────┐
│ Backend (FastAPI) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │Documents │ │ Indexing │ │ KG │ │ Query │ │
│ │ Router │ │ Router │ │ Router │ │ Router │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └─────┬─────┘ │
│ │ │ │ │ │
│ ┌────▼────────────▼────────────▼──────────────▼─────┐ │
│ │ Service Layer │ │
│ │ document_service │ indexing_service │ kg_service │ │
│ │ qa_service │ search_service │ │
│ └────┬──────────────┬──────────────────┬────────────┘ │
│ │ │ │ │
│ ┌────▼────┐ ┌─────▼──────┐ ┌──────▼──────┐ │
│ │FileStore│ │ Pipeline │ │ NetworkX │ │
│ │ (JSON) │ │ MinerU+LxE │ │ Graph │ │
│ └─────────┘ └────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
┌────▼────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ JSON │ │ MinerU │ │ DeepSeek │
│ Storage │ │ API (PDF) │ │ API (LLM) │
└─────────┘ └─────────────┘ └─────────────┘
- 文档精准解析 — 集成 MinerU API,支持 PDF/Word/PPT/图片等多格式文档的高精度解析,保留页面结构与图文布局
- 实体智能抽取 — 基于 LangExtract + DeepSeek LLM,自动识别 TECHNOLOGY / CONCEPT / PERSON / ORGANIZATION / LOCATION 五类实体
- 知识图谱构建 — 自动去重、CO_OCCURS 关系生成、NetworkX 图计算(度中心性、最短路径等)
- Agentic-RAG 问答 — LangGraph ReAct Agent 驱动,支持图谱检索、实体搜索、路径查询等多工具协同推理
- 交互式图谱探索 — D3.js 力导向图可视化,支持实体类型/置信度/来源文档多维过滤、节点邻居展开、路径搜索
- 一键启动 — 单脚本自动配置虚拟环境、安装依赖、启动前后端服务
| 层级 | 技术 |
|---|---|
| 前端 | React 19 + Vite 6 + Tailwind CSS 4 + D3.js 7 + React Router 7 + Radix UI + Recharts |
| 后端 | FastAPI + Uvicorn + Python 3.12+ |
| 文档解析 | MinerU API(精准解析 PDF/图片等) |
| 实体抽取 | LangExtract + DeepSeek Chat |
| 知识图谱 | NetworkX(图计算 + 中心性分析) |
| 问答引擎 | LangChain + LangGraph ReAct Agent + DeepSeek Chat |
| 数据存储 | JSON 文件存储(零数据库依赖) |
GraphRAGAgent/
├── start.sh # 一键启动脚本
├── backend/
│ ├── main.py # FastAPI 入口
│ ├── pyproject.toml # Python 依赖配置
│ ├── .env.example # 环境变量模板
│ ├── routers/ # API 路由层
│ │ ├── documents.py # 文档管理 (CRUD + 上传)
│ │ ├── indexing.py # 索引任务 (启动/状态/取消)
│ │ ├── kg.py # 知识图谱 (节点/边/统计)
│ │ ├── query.py # 智能问答 (Agentic-RAG)
│ │ ├── search.py # 搜索 (实体/路径/子图)
│ │ └── system.py # 系统 (健康检查/统计)
│ ├── services/ # 业务逻辑层
│ │ ├── document_service.py # 文档管理服务
│ │ ├── indexing_service.py # 索引管线服务 (MinerU → LangExtract → KG)
│ │ ├── kg_service.py # 知识图谱服务 (NetworkX 图操作)
│ │ ├── qa_service.py # 问答服务 (LangGraph Agent)
│ │ └── search_service.py # 搜索服务
│ ├── pipeline/ # 核心管线
│ │ ├── entity_extractor.py # LangExtract 实体抽取
│ │ ├── kg_builder.py # 知识图谱构建 (去重 + 边生成)
│ │ ├── qa_agent.py # LangGraph ReAct QA Agent
│ │ └── text_assembler.py # 文本组装
│ ├── models/
│ │ └── schemas.py # Pydantic 数据模型
│ ├── storage/
│ │ └── file_store.py # JSON 文件存储层
│ └── data/ # 运行时数据 (gitignore)
│ ├── docs_index.json # 文档索引
│ ├── kg/ # 知识图谱数据
│ └── uploads/ # 上传文件
├── frontend/
│ ├── package.json # Node.js 依赖配置
│ ├── vite.config.ts # Vite 构建配置
│ ├── src/
│ │ ├── main.tsx # 应用入口
│ │ ├── App.tsx # 根组件
│ │ ├── api.ts # API 客户端
│ │ ├── store.tsx # 全局状态 (React Context)
│ │ ├── routes.tsx # 路由配置
│ │ ├── components/
│ │ │ ├── layout/ # 布局组件
│ │ │ ├── pages/ # 页面组件
│ │ │ │ ├── Dashboard.tsx # 仪表盘
│ │ │ │ ├── Documents.tsx # 文档管理
│ │ │ │ ├── KGExplorer.tsx # 知识图谱探索
│ │ │ │ ├── QAChat.tsx # 智能问答
│ │ │ │ ├── SearchPage.tsx # 搜索页面
│ │ │ │ └── Settings.tsx # 系统设置
│ │ │ └── ui/ # Radix UI 基础组件
│ │ └── styles/ # 样式文件
│ └── index.html # HTML 模板
└── docs/ # 设计文档
├── product_requirements_document-v1.0.md
├── backend_service_specification-v1.0.md
├── frontend_design_specification-v1.0.md
├── agentic_rag_specification-v1.0.md
├── bridge_pipeline_specification-v1.0.md
├── langextract_specification-v1.0.md
└── mineru_specification-v1.0.md
- Python >= 3.12
- Node.js >= 18
- pnpm (前端包管理器)
- uv (Python 包管理器,
pip install uv) - DeepSeek API Key — 获取地址
- MinerU API Token — 获取地址
git clone https://github.com/Mdz-Bigdata/GraphRAGAgent.git
cd GraphRAGAgentcp backend/.env.example backend/.env编辑 backend/.env,填入真实 API Key:
# DeepSeek API (实体抽取 + 智能问答)
DEEPSEEK_API_KEY=sk-your-actual-deepseek-key
DEEPSEEK_BASE_URL=https://api.deepseek.com
# MinerU API (文档精准解析)
MINERU_API_TOKEN=your-actual-mineru-tokenchmod +x start.sh
./start.sh启动脚本会自动完成:
- 检查
.env配置 - 创建 Python 虚拟环境并安装后端依赖
- 安装前端依赖
- 检查并释放端口占用
- 启动后端 FastAPI 服务 (端口 8000)
- 启动前端 Vite 开发服务器 (端口 5173)
| 入口 | 地址 |
|---|---|
| 前端界面 | http://localhost:5173 |
| 后端 API | http://localhost:8000 |
| API 文档 (Swagger) | http://localhost:8000/docs |
| API 文档 (ReDoc) | http://localhost:8000/redoc |
| 健康检查 | http://localhost:8000/api/v1/health |
# 后端
cd backend
uv venv && source .venv/bin/activate
uv pip install -e "."
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# 前端(新终端)
cd frontend
pnpm install
pnpm dev进入「文档管理」页面,上传 PDF / Word / PPT / 图片等文件。系统支持批量上传。
点击文档右侧的「开始索引」按钮,系统将自动执行三步管线:
MinerU 精准解析 → LangExtract 实体抽取 → 知识图谱构建
索引过程中可实时查看进度和当前阶段。
进入「知识图谱」页面,可:
- 浏览完整的知识图谱力导向图
- 按实体类型(TECHNOLOGY / CONCEPT / PERSON / ORGANIZATION / LOCATION)过滤
- 按置信度等级过滤
- 按来源文档过滤
- 搜索特定实体
- 点击节点查看详情和邻居关系
- 查询两个实体之间的路径
进入「智能问答」页面,直接用自然语言提问。系统会:
- 理解问题意图
- 调用知识图谱检索工具
- 搜索相关实体和关系
- 综合推理生成答案
- 标注引用的知识图谱节点
所有接口统一返回 APIResponse 信封格式:
{
"code": 0,
"msg": "success",
"request_id": "uuid",
"data": { ... }
}| 分组 | 端点 | 说明 |
|---|---|---|
| 文档管理 | GET /api/v1/documents |
文档列表 |
POST /api/v1/documents/upload |
上传文档 | |
DELETE /api/v1/documents/{doc_id} |
删除文档 | |
| 索引 | POST /api/v1/index/start |
启动索引 |
GET /api/v1/index/status/{job_id} |
查询索引状态 | |
GET /api/v1/index/result/{job_id} |
获取索引结果 | |
| 知识图谱 | GET /api/v1/kg/nodes |
节点列表(分页) |
GET /api/v1/kg/edges |
边列表(分页) | |
GET /api/v1/kg/nodes/{id}/neighbors |
节点邻居 | |
GET /api/v1/kg/stats |
图谱统计 | |
GET /api/v1/kg/export |
导出全图 | |
| 问答 | POST /api/v1/query |
智能问答 |
GET /api/v1/query/history |
问答历史 | |
| 搜索 | GET /api/v1/search/entities |
实体搜索 |
GET /api/v1/search/path |
路径搜索 | |
GET /api/v1/search/graph |
子图搜索 | |
| 系统 | GET /api/v1/health |
健康检查 |
GET /api/v1/system/stats |
系统统计 |
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ MinerU │ │ LangExtract + │ │ KG Builder │
│ 文档解析 │───▶│ DeepSeek LLM │───▶│ 节点去重 + │
│ (PDF→MD) │ │ 实体抽取 │ │ CO_OCCURS 边生成 │
└──────────────┘ └──────────────────┘ └──────────────────┘
阶段 1 阶段 2 阶段 3
- MinerU 精准解析:调用 MinerU API 将 PDF/图片等文档解析为结构化 Markdown,保留页面布局和图文位置
- LangExtract 实体抽取:逐页文本送入 LangExtract + DeepSeek,识别命名实体并标注置信度(match_exact / match_greater / match_lesser / match_fuzzy)
- KG Builder 图谱构建:对实体进行 (name, type) 去重,生成 CO_OCCURS_IN 同现关系边,合并到全局知识图谱
MIT