knowledge-graph
khoj-ai/knowledge-graph加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有遇到过这种情况:喂给 LLM 一份长文档,问它"这篇文章讲了什么",它能复述几个关键句,却答不出"这件事和那件事之间是什么关系"?
这正是传统 RAG(检索增强生成)的短板——它擅长找"相关片段",但不懂片段之间的语义关联。当问题需要全局理解时,比如"这个项目有哪些核心风险点",传统 RAG 往往力不从心。
GraphRAG 就是来解决这个问题的。
2024 年初,微软研究院发布了一篇论文,提出了 GraphRAG 概念:将文档转化为知识图谱(Knowledge Graph),用图的结构来表示实体与关系,再在图上做检索增强。实验表明,在需要全局理解的问题上,GraphRAG 相比传统向量检索有大幅提升。
而 khoj-ai/knowledge-graph 这个项目,就是 GraphRAG 概念的轻量级 Python 实现,代码简洁、逻辑清晰,非常适合快速验证想法。
项目将整个流程拆解为五个阶段:
第一步:文档切块
将源文档按固定长度(默认 600 字符)切分为文本块,每块作为后续处理的最小单位。
第二步:实体抽取(Element Instances)
用 Gemini-1.5-Flash-002 模型从每个文本块中抽取实体(人物、组织、地点)和关系对。prompt 模板引导模型输出 JSON 格式的实体列表和关系列表(包含关系描述和强度评分 1-10)。所有实体和关系逐步汇入 NetworkX 图结构。
第三步:节点摘要(Element Summaries)
为图中每个节点生成一段摘要描述,综合该节点本身的描述以及它与所有邻居节点的边关系信息。同样由 Gemini 模型生成。
第四步:社区划分(Graph Communities)
用 Leiden 算法(通过 graspologic 库)对图谱做层次化社区检测,将节点划分为多个社区,每个社区内的节点语义上高度相关。算法保证每个社区不超过 max_cluster_size(默认 10)个节点,便于后续处理。
第五步:社区摘要(Community Summaries)
对每个社区的所有节点摘要进行综合,生成一段社区级别的宏观描述。这是最关键的一步——它让 LLM 能够从"全局"视角理解文档,而不仅仅是一堆零散的片段。
生成的图谱存储在 ChromaDB 中,分为 4 个 Collection:element_instances(实体节点)、element_summaries(节点摘要)、graph_communities(社区结构)、community_summaries(社区摘要),外加一份原始文档块集合 source_documents。
当用户提出一个问题时,项目用两阶段处理:
这种设计让系统能处理需要跨社区整合信息的复杂问题——传统 RAG 做不到的事。
| 组件 | 技术选型 | 作用 |
|---|---|---|
| LLM | Gemini-1.5-Flash-002 | 实体抽取、摘要生成、问答 |
| 图谱构建 | NetworkX + graspologic | 图结构操作、Leiden 社区检测 |
| 向量数据库 | ChromaDB(HTTP 模式) | 存储节点/社区向量,支持并行检索 |
| Web 可视化 | Streamlit + Pyvis | 交互式图谱浏览和过滤 |
| 查询 CLI | Typer + Rich | 终端交互式查询界面 |
| 包管理 | uv | 快速、可复现的依赖安装 |
# 安装 uv 包管理器
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装依赖
uv run pip install
# 设置 Gemini API Key
echo "GOOGLE_API_KEY=your_key_here" > .env
# 启动 ChromaDB 服务
chroma run --path db
# 放入待处理的文档到 data/ 目录,然后构建图谱
python3 graph.py
# 开始查询
python3 query_cli.py
# 或者打开 Web 可视化
streamlit run visualize.py
整体部署难度中等,主要门槛是需要申请 Google AI Studio 的 Gemini API Key,以及手动启动 ChromaDB HTTP 服务。
优势:
局限:
GraphRAG 代表了 RAG 领域的演进方向——从"找相关片段"到"理解语义关系"。随着知识图谱在企业数据中的普及,这类工具的实用价值会持续增长。本项目虽小,但五脏俱全:LLM 抽取、图谱构建、社区检测、向量检索、可视化——完整的闭环让任何对 GraphRAG 感兴趣的人都能快速上手实验。
对于想要深入理解知识图谱 + RAG 融合应用的开发者而言,这是一个值得研究的精炼原型。