背景
大型语言模型(LLM)的前沿研究中,一个核心挑战与机遇并存的领域是扩展它们的能力,以解决超出其训练数据范畴的问题。虽然 AI Agent 的解决方案使得 LLM 有了自己的分析决策能力,并能通过调用 Tool 来获取外部最新的数据信息,或者使用开源模型均可使得 LLM 有获取最新数据的能力来解决用户提出的问题,但在更多的场景下,用户需要咨询的信息是无法从公开的网络中进行获取,甚至大部分问题可能是某些公司内部业务的领域知识或者是企业的私有数据等。这时候就需要用到在 RAG 方案来增强这样的 AI 场景处理效率。
RAG(Retrieve Augment Generation,检索增强)
目前,RAG 是大语言模型搜索增强的主要方案之一。它允许大语言模型在从固定的数据库中抽取相关内容的基础上生成答案,从而限制随意发挥,提升答案的可靠性。可以说,RAG 是目前各类大模型落地项目不可缺少的实用技术组件。目前集团内外基于 AI 知识库问答的功能,大部分使用了 RAG 技术。
GraphRAG(Graph-based Retrieval Augmented Generation,基于知识图谱的检索增强生成)
GraphRAG 全称为 Graph-based Retrieval Augmented Generation,是一种结合了知识图谱和检索增强生成(RAG)技术的新方法。传统的 RAG 技术通过从外部知识库中检索相关信息,增强生成模型的输出质量。而 GraphRAG 则进一步引入了知识图谱,将信息以节点和边的形式存储,提供更丰富的上下文和关系信息,从而提升生成效果。
相比于传统的 RAG 技术,GraphRAG 在多个方面展现出了显著的优势:
- 全局理解能力:GraphRAG 通过构建知识图谱,能够捕捉到整个数据集的全貌,而不仅仅是局部文本片段。这使得它在处理大规模数据集时,能够生成更加全面和准确的答案。
- 提高摘要质量和多样性:GraphRAG 通过并行生成社区摘要,并汇总这些摘要来生成最终答案,能够从不同的角度和社区中提取信息,生成更丰富的摘要。
- 关系推理:对于涉及实体间复杂关系的查询,GraphRAG 能更好地利用图谱结构进行推理。
虽然看起来 GraphRAG 确实令人眼前一亮,但从实际反馈来看,大家对 GraphRAG 的使用效果还是有所存疑。带着这个疑问,笔者也准备本地搭建一套 GraphRAG 的 demo 来测试一下检索效果,对比一下传统 RAG 方案与 GraphRAG 到底有没有提升。
环境搭建
本文准备通过 Ollama 工具提供本地 LLM 模型服务,通过 LM Studio 来提供嵌入模型服务,运行环境在 Python venv 下,Python 环境 3.11~3.12 均可。
1. Ollama 启动
本地 LLM 使用的是 Gemma,启动命令如下:
ollama run gemma
确保 Ollama 服务正常运行,默认监听端口为 11434。
2. LM Studio 配置
因为目前 Ollama 无法直接提供符合 OpenAI 标准的嵌入模型接口,所以这里使用 LM Studio 来启动嵌入模型提供服务。大家可以直接去官网下载对应的芯片版本,下载后进行安装。
首次使用的时候,直接通过关键字搜索模型是会报网络错误,核心原因是 LM Studio 通过本地网络访问 HuggingFace 时访问失败,可以通过配置代理或离线下载模型来解决此错误。
下载嵌入模型
搜索 nomic 关键字,选择 nomic-embed-text-v1.5.Q4_K_M.gguf 模型下载,下载成功后加载到 LM Studio。
启动嵌入模型
选择我们刚刚下载的嵌入模型 nomic-embed-text-v1.5.Q4_K_M.gguf,点击启动服务即可。确保 API 模式已开启,默认端口通常为 1234。
3. Python 工程创建
新建 Python 工程,类型选择 venv,Python 版本选择 3.11。
在 PyCharm 终端执行命令安装 graphrag:
pip3 install graphrag
安装完成后,再执行如下命令创建资料输入目录:
-p ./ragtest/input


