GraphRAG-Local-UI
GraphRAG 本地化方案:通过知识图谱增强 RAG 推理,支持 Ollama 等本地 LLM,提
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
GraphRAG 本地化方案:通过知识图谱增强 RAG 推理,支持 Ollama 等本地 LLM,提
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你手头有一堆晦涩难懂的技术文档——长达几百页的架构设计、API参考、内部Wiki——用传统 RAG(检索增强生成)去查询,模型给你的答案总是浮于表面,答不到点子上。但如果 AI 能够理解这些文档之间的内在关联,比如知道A功能依赖B模块、C接口被D服务调用,那回答质量将完全不同。GraphRAG 正是来解决这个问题的。
GraphRAG 是微软研究院在2024年发布的一种 RAG 增强方案,核心思想是在传统向量检索的基础上,额外利用大型语言模型从文档中自动抽取实体和关系,构建知识图谱。当用户提问时,RAG 过程不仅检索相关文档片段,还会顺着知识图谱中的实体关系做社区检测,从而捕获跨文档的高层次语义关联。这使得 GraphRAG 在处理需要全局推理的问题时,表现远超传统 RAG——比如回答"这份代码库的总体架构是什么"这类需要跨文档理解的问题。
然而,微软原版 GraphRAG 高度依赖 OpenAI API,部署门槛不低。开发者 severian42 在 GitHub 上发起了这个开源项目,将 GraphRAG 完全适配本地 LLM,支持 Ollama、Groq 等本地推理接口,让普通开发者也能在自家机器上跑起一套完整的 GraphRAG 流程。目前该项目已收获 2316 颗 GitHub Stars,是本地 GraphRAG 领域最受欢迎的开源实现之一。
图1:GraphRAG Local 的主查询界面,支持本地模型对话和结果可视化
项目采用三层分离的架构设计,核心文件各自承担独立职责:
第一层:FastAPI 核心服务层(api.py)
api.py 是整个项目的后端核心,基于 FastAPI 框架构建,提供 RESTful API 接口。API 服务负责与微软 GraphRAG 核心库交互,处理索引构建、查询执行等计算密集型任务。从代码结构看,它还集成了 tiktoken 做 Token 计数、pandas 做数据分析、DuckDuckGo Search 做网络搜索增强,充分体现了 GraphRAG 本地化加外部知识融合的设计理念。
第二层:Gradio 交互界面层(app.py / index_app.py)
项目提供了两个独立的 Gradio 界面。app.py 是主查询/聊天界面,集成 plotly 和 networkx 实现查询结果的知识图谱可视化——用户不仅能得到文字回答,还能看到 RAG 过程中检索到的实体关系网络图。index_app.py 则专门用于索引构建和 Prompt Tuning(提示词调优),这是一个被很多 GraphRAG 工具忽视的环节:通过独立的 UI 让用户调整索引参数、验证提示词效果,降低了上手门槛。
第三层:向量存储层(lancedb/)
项目使用 LanceDB 作为向量数据库,相比 FAISS 或 Milvus,LanceDB 的优势在于嵌入式友好(无需独立服务进程)、支持多模态索引,且与 Python 生态集成度高。这对于本地部署场景非常友好——用户不需要额外部署一套数据库服务。
图2:索引构建与 Prompt Tuning 界面,可视化监控索引进度
GraphRAG 的索引过程分为多个阶段:切分文档(Chunking)、实体抽取(Entity Extraction)、关系建模(Relation Modeling)、社区检测(Community Detection)、生成社区摘要(Community Summaries)。每一阶段都依赖 LLM 做语义理解,将非结构化文本转化为结构化的知识图谱。项目在 indexing/ 目录下提供了完整的工作流配置(settings.yaml),用户可以通过 index_app.py 的 UI 直观地监控每个阶段的进度。
项目原生支持 Ollama 作为本地推理后端。通过 embedding_proxy.py,它还能将 Ollama 的 embedding 接口适配为 OpenAI 兼容格式,从而无缝对接微软 GraphRAG 的 embedding 配置。项目还支持通过 api_base 参数连接其他 OpenAI 兼容 API(如 LM Studio、Groq),灵活性很强。
这是 GraphRAG Local 区别于其他本地 GraphRAG 实现的亮点功能。通过 INDEX_APP_README.md 中描述的工作流,用户可以在 UI 中对不同阶段使用的提示词进行细粒度调优,观察参数变化对输出质量的影响。这对于需要处理特定领域文档(如医疗、法律、技术文档)的用户来说,是非常有价值的定制化手段。
利用 networkx 构建图结构加 plotly 渲染交互式可视化,用户可以在 Web UI 中直观看到:回答涉及了哪些实体节点、各节点之间有什么关系、检索覆盖了哪些社区——让 RAG 的过程变得透明可解释。这不仅提升了用户体验,也为调试和优化 RAG 流程提供了直观依据。
项目的部署需要满足以下条件:
硬件需求:GraphRAG 的索引构建和 LLM 推理对硬件要求较高。推荐使用 NVIDIA GPU(8GB+ VRAM),因为 Ollama 的推理和 embedding 计算都会跑在 GPU 上。系统内存建议 16GB 以上,磁盘空间 20GB+(用于存储索引数据和 LLM 模型)。
部署步骤:
遗憾之处:项目没有提供 Dockerfile 或 docker-compose,这意味着用户必须手动管理 Python 环境和 Ollama 服务。如果能有一键启动的容器化方案,将大大降低非技术用户的上手门槛。当前部署难度评估为中等,主要门槛在于 Ollama 配置和 GPU 环境准备。
| 组件 | 技术选型 | 作用 |
|---|---|---|
| Web UI | Gradio | 交互式界面(查询+索引) |
| API服务 | FastAPI + Uvicorn | RESTful API 后端 |
| 知识图谱可视化 | NetworkX + Plotly | 交互式图谱渲染 |
| 向量数据库 | LanceDB | 嵌入式向量存储 |
| LLM推理 | Ollama | 本地模型推理 |
| Embedding | Ollama(via proxy) | 文本向量化 |
| 依赖管理 | pip + requirements.txt | Python包管理 |
| 配置管理 | YAML | 索引流程参数配置 |
多阶段 LLM 调用的成本问题:GraphRAG 的索引过程涉及多轮 LLM 调用(实体抽取、关系建模、社区检测等),即使使用本地模型,每个阶段的推理时间仍然较长。对于大型文档集,完整索引可能需要数小时。用户需要在索引质量和耗时之间做权衡。
缺少生产级部署方案:没有容器化支持、不支持 Kubernetes,在团队协作或生产环境部署时需要额外工程工作。LanceDB 作为嵌入式数据库适合个人使用,但在高并发场景下可能存在扩展性限制。
Prompt Tuning 的学习曲线:虽然项目提供了 Prompt Tuning UI,但 GraphRAG 的提示词调优本身需要用户对 RAG 各阶段的工作原理有较深理解,对新手来说仍有较高门槛。
GraphRAG Local UI 的核心价值在于将 GraphRAG 从云端 AI 服务的专属能力,变成普通开发者触手可及的工具。它解决了三个关键问题:
随着本地 LLM 能力的不断增强(Llama 3、Mistral 等模型性能持续提升),这类工具的实用价值将进一步放大。GraphRAG Local UI 作为该领域的先行者和社区标杆,推动了 GraphRAG 技术从学术研究走向工程落地。
本报告基于 GitHub 仓库 severian42/GraphRAG-Local-UI(stars: 2316,fork: 293,MIT许可证)生成。