基于nano-GraphRAG的智能问答系统,结合知识图谱和大型语言模型,实现高效的问答功能。
本系统使用轻量级的nano-GraphRAG框架,结合Neo4j图数据库和Ollama部署的deepseek模型,构建一个完整的智能问答系统。系统能够从文本中提取实体和关系,构建知识图谱,并基于此回答用户问题。
- nano-GraphRAG: 轻量级GraphRAG实现框架
- LlamaIndex: 知识索引和检索框架
- Neo4j: 图数据库,用于存储知识图谱
- Ollama: 本地部署LLM模型
- deepseek: 大型语言模型
- FastAPI: 后端API框架
- Streamlit: 前端UI框架
-
文本处理与知识图谱构建
- 使用deepseek处理文本,提取实体和关系
- 自动构建知识图谱并存储到Neo4j
-
智能问答
- 自然语言问题转换为Cypher查询
- 基于图数据库查询结果生成回答
-
图谱查询
- 支持直接使用Cypher查询语言查询图谱
- 查看知识图谱模式和结构
- Python 3.8+
- Neo4j数据库
- Ollama (用于本地部署LLM)
- 克隆仓库
git clone https://github.com/yourusername/graphrag-qa-system.git
cd graphrag-qa-system- 安装依赖
pip install -r requirements.txt- 配置环境变量
创建.env文件并设置以下变量:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=yourpassword
OLLAMA_BASE_URL=http://localhost:11434
LLM_MODEL=deepseek-coder:latest
-
启动Neo4j数据库
-
使用Ollama拉取deepseek模型
ollama pull deepseek-coder:latest# 启动完整系统(API和UI)
python main.py
# 仅启动API
python main.py --api-only
# 仅启动UI
python main.py --ui-only系统启动后:
- API服务运行在 http://localhost:8000
- UI界面运行在 http://localhost:8501
-
知识库构建
- 导航到"知识库构建"标签页
- 输入或粘贴文本内容
- 点击"处理文本"按钮
- 系统会自动提取实体和关系,构建知识图谱
-
问答交互
- 导航到"问答系统"标签页
- 输入问题
- 点击"提交问题"按钮
- 查看系统回答
-
图谱查询
- 导航到"图谱查询"标签页
- 输入Cypher查询语句
- 查看查询结果
+-------------------+ +------------------+
| 用户界面 | | API |
| (Streamlit) | <-> | (FastAPI) |
+-------------------+ +------------------+
|
v
+-------------------+ +------------------+
| 知识图谱 | <- | 文本处理 |
| (Neo4j) | | (Entity |
+-------------------+ | Extraction) |
^ +------------------+
| |
| v
+-------------------+ +------------------+
| 查询处理 | <- | LLM模型 |
| (Query | | (deepseek via |
| Processing) | | Ollama) |
+-------------------+ +------------------+
|
v
+-------------------+
| 回答生成 |
| (Response |
| Generation) |
+-------------------+
graphrag_qa_system/
│
├── main.py # 主程序入口
├── config.py # 配置文件
├── requirements.txt # 依赖包列表
│
├── api/ # API 接口
│ ├── __init__.py
│ └── endpoints.py # FastAPI 端点定义
│
├── ui/ # 用户界面
│ ├── __init__.py
│ └── app.py # Streamlit 应用
│
├── core/ # 核心功能模块
│ ├── __init__.py
│ ├── text_processor.py # 文本处理与实体提取
│ ├── knowledge_graph.py # 知识图谱构建与管理
│ ├── query_processor.py # 查询处理与转换
│ └── response_generator.py # 回答生成
│
├── models/ # 模型管理
│ ├── __init__.py
│ └── llm_manager.py # LLM 模型管理
│
└── utils/ # 工具函数
├── __init__.py
└── helpers.py # 辅助函数
-
添加新的LLM模型
- 修改
models/llm_manager.py,添加新模型支持
- 修改
-
自定义实体提取逻辑
- 修改
core/text_processor.py中的提取逻辑
- 修改
-
优化Cypher查询生成
- 修改
core/query_processor.py中的查询生成逻辑
- 修改
欢迎提交Pull Request或Issue来改进系统。请确保您的代码遵循以下原则:
- 模块化设计
- 低耦合
- 良好的代码可读性
- 完善的注释和文档