1. GraphRAG: 使用知识图谱增强的检索生成系统 #
GraphRAG 是一个结合知识图谱 (Knowledge Graph) 与 RAG(Retrieval-Augmented Generation, 检索增强生成)的智能问答/数据分析系统。它旨在提升复杂场景下的推理能力、可解释性和知识关联性。
通过整合 Neo4j 图数据库与大语言模型(如 DeepSeek),GraphRAG 支持结构化的知识检索、多跳推理和深度信息整合,极大弥补了传统 RAG 系统在长尾知识和推理链上的不足。
核心特点:
- 将文本文档抽取为知识图谱(实体、关系、属性),存储于 Neo4j
- 提供结构化子图检索与路径发现,支持多跳知识问答
- 利用大模型在子图上下文基础上生成高质量、可追溯的答案
- 适用于企业知识管理、学术检索、信息整合分析等多种场景
技术栈:
- Python,Neo4j,LangChain,DeepSeek/LLM
特点总结:
- 更强推理与解释:答案链路清晰
- 支持结构化知识与长尾实体
- 易于与现有知识库和 LLM 系统集成
2. 环境配置 #
uv init
uv add dotenv neo4j langchain_deepseek langchain| 序号 | 包名 | 作用简介 |
|---|---|---|
| 1 | dotenv | 加载 .env 文件中的环境变量,便于安全管理配置参数 |
| 2 | neo4j | Python 客户端,用于连接和操作 Neo4j 图数据库 |
| 3 | langchain_deepseek | DeepSeek 相关的 LangChain 集成,支持 AI/LLM 工作流 |
| 4 | langchain | 构建和编排大语言模型应用(如对话机器人、问答系统) |
3. 配置文件 #
3.1. config.py #
config.py
"""
1. 配置加载模块
负责加载 .env 环境变量并提供统一的配置读取方法。
"""
import os
from dotenv import load_dotenv
def load_config() -> dict:
load_dotenv()
return {
"neo4j_uri": os.getenv("NEO4J_URI", "bolt://localhost:7687"),
"neo4j_user": os.getenv("NEO4J_USER", "neo4j"),
"neo4j_password": os.getenv("NEO4J_PASSWORD", "12345678"),
"deepseek_api_key": os.getenv("DEEPSEEK_API_KEY", "sk-924916a162544410964397598709766a"),
"model_name": os.getenv("DEEPSEEK_MODEL", "deepseek-chat"),
}
3.2. pipeline.py #
pipeline.py
"""
2. GraphRAG 业务管线。
"""
from config import load_config
class GraphRAG:
"""1. 封装检索与生成的完整 GraphRAG 系统。"""
def __init__(self, neo4j_uri: str, neo4j_user: str, neo4j_password: str, deepseek_api_key: str, model_name: str = "deepseek-chat"):
print(neo4j_uri, neo4j_user, neo4j_password, deepseek_api_key, model_name)
def build_rag_from_env() -> GraphRAG:
"""2. 使用环境变量创建 GraphRAG 实例的便捷工厂。"""
cfg = load_config()
return GraphRAG(
neo4j_uri=cfg["neo4j_uri"],
neo4j_user=cfg["neo4j_user"],
neo4j_password=cfg["neo4j_password"],
deepseek_api_key=cfg["deepseek_api_key"],
model_name=cfg["model_name"],
)
3.3. main.py #
main.py
# 1. 命令行运行入口,用于演示完整的 GraphRAG 流程。
"""
+1. 命令行运行入口,用于演示完整的 GraphRAG 流程。
"""
# 从 pipeline 模块导入 build_rag_from_env 函数
+from pipeline import build_rag_from_env
# 定义主函数
def main():
# 调用 build_rag_from_env 函数,启动 GraphRAG 工作流
+ build_rag_from_env()
# 判断是否以主模块运行本文件
if __name__ == "__main__":
# 运行主函数
main()
4. 连接Neo4j #
4.1. graph_store.py #
graph_store.py
"""
1. Neo4j 读写与检索逻辑。
"""
from typing import List, Dict, Any, Set
from neo4j import GraphDatabase
class GraphStore:
"""2. 封装 Neo4j 的节点与关系操作。"""
def __init__(self, uri: str, user: str, password: str):
self.driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
"""3. 关闭数据库连接。"""
self.driver.close()
4.2. main.py #
main.py
# 1. 命令行运行入口,用于演示完整的 GraphRAG 流程。
"""
1. 命令行运行入口,用于演示完整的 GraphRAG 流程。
"""
# 从 pipeline 模块导入 build_rag_from_env 函数
from pipeline import build_rag_from_env
# 定义主函数
def main():
# 调用 build_rag_from_env 函数,启动 GraphRAG 工作流
+ graphrag = build_rag_from_env()
+ try:
+ pass
+ finally:
+ graphrag.close()
# 判断是否以主模块运行本文件
if __name__ == "__main__":
# 运行主函数
main()
4.3. pipeline.py #
pipeline.py
"""
1. GraphRAG 业务管线。
"""
from config import load_config
+from graph_store import GraphStore
class GraphRAG:
"""2. 封装检索与生成的完整 GraphRAG 系统。"""
def __init__(self, neo4j_uri: str, neo4j_user: str, neo4j_password: str, deepseek_api_key: str, model_name: str = "deepseek-chat"):
# 3. 初始化图数据库连接
+ self.store = GraphStore(neo4j_uri, neo4j_user, neo4j_password)
+ def close(self):
+ """4. 关闭数据库连接。"""
+ self.store.close()
def build_rag_from_env() -> GraphRAG:
"""5. 使用环境变量创建 GraphRAG 实例的便捷工厂。"""
cfg = load_config()
return GraphRAG(
neo4j_uri=cfg["neo4j_uri"],
neo4j_user=cfg["neo4j_user"],
neo4j_password=cfg["neo4j_password"],
deepseek_api_key=cfg["deepseek_api_key"],
model_name=cfg["model_name"],
)