# knowledgeGraph **Repository Path**: wang_zhu_ge/knowledge-graph ## Basic Information - **Project Name**: knowledgeGraph - **Description**: 知识图谱智能问答系统 系统简介 知识图谱智能问答系统是一款基于大语言模型(LLM)与知识图谱技术的专业领域智能问答平台。系统通过构建领域知识图谱,结合自然语言处理技术,为用户提供精准、可溯源的智能问答服务。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 6 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: RAG, 知识图谱, 大模型, 智能问答 ## README # 通用知识图谱智能问答系统 (KG-QA) 基于大语言模型(LLM)、知识图谱与向量检索(RAG)深度融合的专业领域智能问答平台。 观看系统功能演示视频,快速了解系统的主要功能和操作流程。 [点击观看演示视频](https://www.bilibili.com/video/BV1xVzWBuEMN/) ![登录页面](doc/screenshots/login.png) ## 项目简介 知识图谱智能问答系统是一款融合**大语言模型**、**知识图谱**和**RAG 向量检索**三大核心技术的智能问答平台。系统采用 ChromaDB 向量数据库存储文档嵌入向量,结合 Neo4j 图数据库管理知识三元组,通过查询扩展和多路召回融合算法,为用户提供精准、可溯源的智能问答服务。 ### 核心特性 - **智能问答**:基于知识图谱 + RAG 的精准问答,答案可追溯到具体知识节点和文档来源 - **RAG 检索增强**:基于向量相似度的精准文档检索,支持多路召回结果融合 - **查询扩展**:自动生成问题变体,提高检索召回率(RRF 倒数排名融合) - **知识图谱可视化**:交互式图谱展示,支持节点搜索、关系深度切换与关系探索 - **文档自动解析**:支持 PDF、TXT 格式文档的自动知识抽取 - **三元组提取**:自动从文档中提取实体和关系,构建知识三元组 - **文件夹管理**:支持创建文件夹、拖拽移动文档、批量删除 - **RBAC 权限管理**:完整的角色权限系统,支持动态菜单配置 - **系统管理**:用户管理、角色管理、菜单管理(管理员专属) - **用户满意度反馈**:支持对回答进行满意/不满意评价 - **多服务状态监控**:实时监控 API、Neo4j、LLM 服务状态 - **Embedding 缓存**:SQLite 持久化缓存 + 并行处理,大幅提升向量化速度 ## 系统截图 ### 控制台首页 系统概览与快捷操作入口,实时显示知识节点数、关系数、文档数量及服务状态。 ![控制台首页](doc/screenshots/home.png) ### 智能问答 基于大语言模型与知识图谱的专业领域智能问答,支持历史记录、相关知识推荐和延伸知识探索。 ![智能问答](doc/screenshots/qa.png) ![智能问答](doc/screenshots/qa2.png) ### 知识来源 ![智能问答](doc/screenshots/引用来源.png) ![智能问答](doc/screenshots/ans2.png) ### 知识图谱 可视化知识图谱管理与探索,支持实体搜索、关系筛选和手动添加知识。 ![知识图谱](doc/screenshots/graph.png) ### 手动添加关系 ![知识图谱](doc/screenshots/添加关系.png) ### 节点搜索 ![知识图谱](doc/screenshots/search.png) ![知识图谱](doc/screenshots/search2.png) ### 关系维度切换 支持调整关系深度(1-3度)筛选关联节点,灵活探索知识关联。 ![关系维度](doc/screenshots/关系维度.png) ### 文档管理 上传文档自动提取知识到图谱,支持 PDF、TXT(后续添加更多的格式) 格式,最大 50MB。支持文件夹管理、拖拽移动和批量操作。 查看文档解析后提取的三元组信息,支持同步到知识图谱。 ![知识提取详情](doc/screenshots/upload.png) ### 关系管理 可对自动解析的关系手动纠正 ![关系管理.png](doc/screenshots/关系管理.png) ### 系统管理 管理员专属功能,支持用户管理、角色管理、菜单管理。 #### 用户管理 查看、启用/禁用、删除用户,设置用户角色。 ![用户管理](doc/screenshots/用户管理.png) #### 用户信息修改 修改用户基本信息和角色分配。 ![用户信息修改](doc/screenshots/用户信息修改.png) #### 角色管理 创建和管理角色,为角色分配菜单权限。 ![角色管理](doc/screenshots/角色管理.png) #### 权限管理 配置角色的菜单访问权限。 ![权限管理](doc/screenshots/权限管理.png) ## 演示视频 观看系统功能演示视频,快速了解系统的主要功能和操作流程。 [点击观看演示视频](https://www.bilibili.com/video/BV1xVzWBuEMN/) ## 技术架构 ### 前端技术栈 | 技术 | 版本 | 说明 | |------|------|------| | Vue.js | 3.4 | 渐进式 JavaScript 框架 | | Vue Router | 4.3 | 官方路由管理器 | | Pinia | 2.1 | 状态管理库 | | Element Plus | 2.6 | UI 组件库 | | ECharts | 5.5 | 图谱可视化 | | Axios | 1.6 | HTTP 请求库 | | Vite | 5.1 | 构建工具 | ### 后端技术栈 | 技术 | 版本 | 说明 | |------|------|------| | Flask | 3.0 | Web 框架 | | Neo4j | 5.16 | 图数据库 | | ChromaDB | 0.4+ | 向量数据库(RAG) | | PyMySQL | 1.1 | MySQL 数据库驱动 | | jieba | 0.42 | 中文分词 | | PyMuPDF | 1.23 | PDF 解析 | | python-docx | 1.1 | Word 文档解析 | | pytesseract | 0.3 | OCR 文字识别 | | Pillow | 10.0 | 图像处理 | ### AI 模型 | 模型 | 用途 | 说明 | |------|------|------| | DeepSeek-R1 | 对话生成 | 本地 LLM,支持知识问答 | | bge-m3 | 文本向量化 | 多语言 Embedding 模型(1024维) | | Ollama | 模型服务 | 本地大模型运行框架 | ### 系统架构图 ``` ┌───────────────────────────────────────────────────────────────────────┐ │ 前端 (Vue 3) │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────────────────┐ │ │ │ 控制台 │ │智能问答│ │知识图谱│ │文档管理│ │ 系统管理 │ │ │ │ │ │ │ │ │ │ │ │ (用户/角色/菜单) │ │ │ └────────┘ └────────┘ └────────┘ └────────┘ └────────────────────┘ │ └───────────────────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────────────────────────┐ │ 后端 API (Flask) │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────────────────┐ │ │ │用户认证│ │问答服务│ │图谱服务│ │文档处理│ │ RAG 服务 │ │ │ │ (RBAC) │ │(+RAG) │ │ │ │ │ │ (查询扩展/RRF) │ │ │ └────────┘ └────────┘ └────────┘ └────────┘ └────────────────────┘ │ └───────────────────────────────────────────────────────────────────────┘ │ ┌───────────────────────┼───────────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ MySQL │ │ Neo4j │ │ Ollama │ │ 用户/权限 │ │ 知识图谱 │ │ LLM │ │ 文档/日志 │ │ │ │ DeepSeek │ └──────────┘ └──────────┘ └──────────┘ │ │ │ ┌──────────┐ │ │ │ ChromaDB │ │ └───────────────▶│ 向量存储 │◀────────────────┘ │ (RAG) │ bge-m3 └──────────┘ ``` ### 数据流转架构 #### 1. 文档处理流程(知识抽取) 用户上传文档后,系统自动完成解析、三元组提取、向量化和知识图谱构建: ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ 文档处理流程 │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 上传文档 │────▶│ 文档解析 │────▶│ 文本分块 │────▶│ 向量化 │ │ PDF/TXT │ │ PyMuPDF │ │ 800字/块 │ │ bge-m3 │ └──────────┘ │ OCR识别 │ │ 100字重叠 │ │ 1024维 │ └──────────────┘ └──────────────┘ └──────┬───────┘ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ LLM 提取 │ │ ChromaDB │ │ 三元组 │ │ 向量存储 │ │ DeepSeek │ │ 余弦相似度 │ └──────┬───────┘ └──────────────┘ │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 主体 │ │ 关系 │ │ 客体 │ │ (Entity) │ │ (Relation) │ │ (Entity) │ │ + 类型 │ │ │ │ + 类型 │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ └────────────────┼────────────────┘ ▼ ┌──────────────┐ │ MySQL │ │ 三元组存储 │ │ document_ │ │ triples │ └──────┬───────┘ │ 同步 ▼ ┌──────────────┐ │ Neo4j │ │ 知识图谱 │ │ 节点+关系 │ └──────────────┘ ``` **流程说明:** | 步骤 | 组件 | 说明 | |------|------|------| | 1. 文档解析 | PyMuPDF | 提取 PDF 文本内容,支持 OCR 识别扫描件 | | 2. 文本分块 | TextSplitter | 按 800 字分块,100 字重叠保留上下文 | | 3. 向量化 | bge-m3 | 生成 1024 维向量,支持 SQLite 缓存加速 | | 4. 三元组提取 | DeepSeek LLM | 识别实体和关系,提取结构化知识 | | 5. 存储 | MySQL | 持久化三元组,支持编辑和管理 | | 6. 图谱同步 | Neo4j | 创建实体节点和关系边,支持图查询 | #### 2. 智能问答流程(RAG + 知识图谱) 用户提问时,系统融合向量检索和知识图谱进行智能回答: ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ 智能问答流程 │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────────┐ │ 用户提问 │ │ "XX是什么?" │ └──────┬───────┘ │ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 关键词提取 │ │ 查询扩展 │ │ 问题分类 │ │ jieba │ │ LLM 生成变体 │ │ 定义/关系 │ └──────┬───────┘ └──────┬───────┘ └──────────────┘ │ │ │ ▼ │ ┌──────────────┐ │ │ 多路检索 │ │ │ 原问题+变体 │ │ └──────┬───────┘ │ │ ┌─────────┴────────┐ │ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────────┐ │ 知识图谱 │ │ RAG 向量检索 │ │ Neo4j │ │ ChromaDB │ │ 关系查询 │ │ 相似度 > 0.3 │ └──────┬──────┘ └────────┬────────┘ │ │ │ ┌────────┴────────┐ │ ▼ ▼ │ ┌─────────────┐ ┌─────────────┐ │ │ 结果1 │ │ 结果2 │ │ │ Query1 │ │ Query2 │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ │ └────────┬────────┘ │ ▼ │ ┌──────────────┐ │ │ RRF 融合 │ │ │ 倒数排名融合 │ │ │ k = 60 │ │ └──────┬───────┘ │ │ └──────────┬───────┘ ▼ ┌──────────────┐ │ 上下文构建 │ │ RAG内容+图谱 │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ LLM 生成 │ │ DeepSeek │ │ 精准回答 │ └──────┬───────┘ │ ▼ ┌────────────────┼────────────────┐ │ │ │ ▼ ▼ ▼ ┌──────┐ ┌──────────┐ ┌──────────┐ │ 回答 │ │ RAG来源 │ │ 相关知识 │ │ │ │ 文档+页码 │ │ 图谱节点 │ └──────┘ └──────────┘ └──────────┘ ``` **核心技术:** | 技术 | 说明 | |------|------| | **查询扩展** | LLM 生成 2 个语义相似的问题变体,提高召回率 | | **多路召回** | 对原问题和变体分别进行向量检索 | | **RRF 融合** | 倒数排名融合算法(k=60),合并多路检索结果去重排序 | | **混合检索** | RAG 向量检索 + 知识图谱结构化查询 | | **上下文增强** | 融合文档片段和图谱关系构建完整上下文 | | **来源追溯** | 回答附带文档来源和页码,支持知识溯源 | #### 3. 向量化处理细节 ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ 向量化处理流程 │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 文本块 │────▶│ SHA256 Hash │────▶│ 查询缓存 │────▶│ 返回向量 │ │ 800字 │ │ 文本哈希 │ │ SQLite │ │ (命中) │ └──────────┘ └──────────────┘ └──────┬───────┘ └──────────────┘ │ 未命中 ▼ ┌──────────────┐ │ Ollama API │ │ bge-m3 │ │ 生成向量 │ └──────┬───────┘ │ ┌────────────────────┼────────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 1024 维 │ │ 写入缓存 │ │ ChromaDB │ │ 浮点向量 │ │ SQLite │ │ 持久存储 │ └─────────────┘ └─────────────┘ └─────────────┘ 性能优化: ├── SQLite 缓存:避免重复向量化,命中率 > 80% ├── 并行处理:ThreadPoolExecutor 批量向量化 └── LRU 内存缓存:热点数据快速访问 ``` ## 文档导航 | 文档 | 说明 | |------|------| | [快速开始指南](doc/QUICK_START.md) | 新手必读,5 分钟快速启动系统 | | [API 接口文档](doc/API_DOC.md) | RESTful API 接口详细说明 | | [数据库设计文档](doc/DATABASE.md) | MySQL + Neo4j 双数据库架构设计 | | [云服务器部署指南](doc/DEPLOY_CLOUD.md) | Docker Compose 一键部署、Nginx 配置、SSL 证书 | ## 安装部署 > 详细步骤请参考 [快速开始指南](doc/QUICK_START.md) ### 环境要求 - Python 3.11+ - Node.js 18+ - MySQL 8.0+ - Neo4j 5.x - Ollama(用于本地大模型) ### 1. 克隆项目 ```bash git clone https://github.com/your-repo/knowledgeGraph.git cd knowledgeGraph ``` ### 2. 初始化 MySQL 数据库 ```bash # 登录 MySQL mysql -u root -p # 在 MySQL 中执行以下命令创建数据库 CREATE DATABASE kg_qa_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; EXIT; # 导入数据库表结构和初始数据 mysql -u root -p kg_qa_system < backend/init_db.sql ``` ### 3. 配置 Neo4j 1. 启动 Neo4j 服务 2. 访问 http://localhost:7474 3. 首次登录使用 `neo4j/neo4j`,系统会要求修改密码 4. 记住新密码,后面配置需要用到 ### 4. 下载大模型 ```bash # 启动 Ollama 服务 ollama serve # 新开一个终端,下载模型 # LLM 模型(二选一) ollama pull deepseek-r1:1.5b # 推荐新手,内存需求低 ollama pull qwen2.5:7b # 效果更好,需 8GB+ 内存 # Embedding 模型(必须) ollama pull bge-m3 # 多语言向量化模型 ``` ### 5. 配置环境变量 在 `backend` 目录下创建 `.env` 文件: ```bash cd backend cp ../.env.example .env # 如果有示例文件 # 或手动创建 .env 文件 ``` 编辑 `.env` 文件,填入实际配置: ```env # MySQL 配置(必填) MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=你的MySQL密码 MYSQL_DATABASE=kg_qa_system # Neo4j 配置(必填) NEO4J_URI=bolt://localhost:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=你的Neo4j密码 # LLM 配置 OLLAMA_BASE_URL=http://localhost:11434 LLM_MODEL=deepseek-r1:1.5b LLM_API_URL=http://localhost:11434/api/generate # Embedding 配置 EMBEDDING_MODEL=bge-m3 # Flask 配置 FLASK_SECRET_KEY=请替换为随机字符串 ``` ### 6. 安装后端依赖 ```bash cd backend # 创建虚拟环境 python3 -m venv .venv # 激活虚拟环境 source .venv/bin/activate # macOS/Linux # .venv\Scripts\activate # Windows CMD # .venv\Scripts\Activate.ps1 # Windows PowerShell # 安装依赖 pip install -r requirements.txt ``` ### 7. 安装前端依赖 ```bash cd frontend npm install ``` ### 8. 启动服务 **启动后端(需要先激活虚拟环境):** ```bash cd backend source .venv/bin/activate # 如果还没激活 python run.py # 后端运行在 http://localhost:5005 ``` **新开终端,启动前端:** ```bash cd frontend npm run dev # 前端运行在 http://localhost:8080 ``` ### 9. 访问系统 打开浏览器访问 http://localhost:8080 **默认账户:** | 用户名 | 密码 | 角色 | |--------|------|------| | admin | admin123 | 管理员 | | test | test123 | 普通用户 | ## 项目结构 ``` knowledgeGraph/ ├── backend/ # 后端代码 │ ├── app/ │ │ ├── api/ # API 路由 │ │ │ ├── auth.py # 认证接口 │ │ │ ├── qa.py # 问答接口 │ │ │ ├── graph.py # 图谱接口 │ │ │ ├── document.py # 文档接口 │ │ │ ├── rag.py # RAG 精准问答接口 │ │ │ └── system.py # 系统管理接口 │ │ ├── models/ # 数据模型 │ │ ├── services/ # 业务逻辑 │ │ │ ├── user_service.py # 用户服务 │ │ │ ├── role_service.py # 角色权限服务 │ │ │ ├── menu_service.py # 菜单服务 │ │ │ ├── document_service.py # 文档服务 │ │ │ ├── qa_service.py # 问答服务(含查询扩展) │ │ │ ├── rag_service.py # RAG 检索增强服务 │ │ │ ├── embedding_service.py # Embedding 向量化服务 │ │ │ ├── vector_store_service.py # 向量存储服务 │ │ │ ├── text_splitter.py # 文本分块服务 │ │ │ └── ... │ │ └── utils/ # 工具函数 │ ├── data/ # 数据存储 │ │ ├── chroma/ # ChromaDB 向量数据 │ │ └── embedding_cache.db # Embedding 缓存 │ ├── requirements.txt # Python 依赖 │ └── run.py # 启动入口 ├── frontend/ # 前端代码 │ ├── src/ │ │ ├── views/ # 页面组件 │ │ │ ├── system/ # 系统管理页面 │ │ │ │ ├── Users.vue # 用户管理 │ │ │ │ ├── Roles.vue # 角色管理 │ │ │ │ └── Menus.vue # 菜单管理 │ │ │ └── ... │ │ ├── components/ # 通用组件 │ │ ├── stores/ # Pinia 状态 │ │ ├── router/ # 路由配置 │ │ └── api/ # API 请求 │ ├── package.json # 前端依赖 │ └── vite.config.js # Vite 配置 └── doc/ ├── screenshots/ # 系统截图 ├── QUICK_START.md # 快速开始指南 ├── API_DOC.md # API 接口文档 ├── DATABASE.md # 数据库设计文档 ├── DEPLOY_CLOUD.md # 云服务器部署指南 └── init.sql # 数据库初始化脚本 ``` ## 使用指南 ### 1. 用户登录 首次使用可注册账号或使用默认账户登录: - 管理员:admin / admin123(拥有所有功能权限) - 普通用户:test / test123(基础功能权限) ### 2. 上传文档构建知识库 1. 进入「文档管理」页面 2. 可创建文件夹整理文档 3. 点击上传或拖拽文档(支持 PDF、TXT) 4. 系统自动解析文档并提取三元组 5. 点击「同步到图谱」将知识导入知识图谱 6. 支持拖拽移动文档到不同文件夹 ### 3. 浏览知识图谱 1. 进入「知识图谱」页面 2. 使用搜索框查找特定实体 3. 调整关系深度(1-3度)筛选关联节点 4. 点击节点查看详细信息 5. 支持查看全部关系或指定节点关系 ### 4. 智能问答 1. 进入「智能问答」页面 2. 在输入框中输入问题 3. 系统自动执行以下检索流程: - **查询扩展**:生成问题变体提高召回率 - **RAG 检索**:从向量库中检索相关文档片段 - **知识图谱**:搜索相关知识节点 - **多路融合**:使用 RRF 算法融合检索结果 4. 结合 LLM 生成精准回答 5. 右侧显示 RAG 来源、相关知识和延伸知识推荐 ### 5. 系统管理(管理员) 1. 进入「系统管理」菜单 2. **用户管理**:查看、启用/禁用、删除用户,设置用户角色 3. **角色管理**:创建角色、分配权限 4. **菜单管理**:配置系统菜单结构 ## 开发说明 > API 接口详情请参考 [API 接口文档](doc/API_DOC.md) > > 数据库结构请参考 [数据库设计文档](doc/DATABASE.md) ### 后端开发 ```bash # 激活虚拟环境 source .venv/bin/activate # 运行开发服务器 python backend/run.py ``` ### 前端开发 ```bash cd frontend npm run dev ``` ### 生产构建 ```bash cd frontend npm run build ``` ### 生产部署 生产环境部署请参考 [云服务器部署指南](doc/DEPLOY_CLOUD.md),支持: - Docker Compose 一键部署 - 前后端分离手动部署 - Nginx 反向代理配置 - SSL 证书配置 - 性能优化与监控 ## 参与贡献 1. Fork 本仓库 2. 新建 `feat/xxx` 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 MIT License ## 作者 群二维码