GraphRAG通过将传统的RAG(Retrieval-Augmented Generation)框架与图结构结合,利用知识图谱(KG)中的实体关系、社区结构及知识的关联性,提升了信息检索和生成的效果。微软的GraphRAG发布后,也涌现了很多轻量化的版本,这篇文档对GraphRAG的框架做一个总结,也会陆续不断更新。
Graph RAG(Graph Retrieval-Augmented Generation)是一种基于图的知识检索增强技术,它结合了知识图谱的广泛知识表示能力和大语言模型(LLM)的生成能力。不同于使用纯文本片段的简单语义搜索方法。GraphRAG 流程包括从原始文本中提取知识图谱、构建社区层次结构、为这些社区生成摘要,然后在执行基于 RAG 的任务时利用这些结构。
项目地址:https://github.com/microsoft/graphrag
论文地址:https://arxiv.org/pdf/2404.16130
微软 GraphRAG包括索引阶段和查询阶段两大环节:
索引阶段是整个流程中最复杂的部分,主要包含以下步骤:
微软 GraphRAG 提供两种查询模式:
Fast GraphRAG 通过融合 PageRank 算法,不仅提高了知识检索的效率和精准度,还大大降低了运营成本。在实际测试中,使用《绿野仙踪》作为数据集,Fast GraphRAG 的成本仅为 0.08 美元,而传统 GraphRAG 则需要 0.48 美元,减少了 6 倍,同时准确率提升了 20%。更重要的是,这一创新使得 GraphRAG 能够实时更新和调整知识重要性,适应动态变化的信息环境。
项目地址:https://github.com/circlemind-ai/fast-graphrag?tab=readme-ov-file#quickstart
港大黄超团队最新开源的LightRAG,结合了图结构与双层检索机制,显著降低了大模型检索增强的成本,同时提升了信息检索的准确性和效率。首先,通过引入图结构,LightRAG能够更好地捕捉实体之间的复杂依赖关系,实现全面的信息理解。其次,其双层检索策略允许系统同时处理具体和抽象的查询,确保用户获得既相关又丰富的响应。此外,LightRAG具备快速适应新数据的能力,使其在动态环境中保持高效和准确。综合来看,这些优势使得LightRAG在处理复杂查询时表现出色,能够提供更具上下文相关性的答案。
论文地址:https://arxiv.org/abs/2410.05779
项目地址:https://github.com/HKUDS/LightRAG
GraphRAG-Local-UI这是微软 GraphRAG的一个改编版本,专为支持本地模型并具有全面的交互用户界面而设计。目标是提供一个易于使用且完全可配置的前端,可作为本地 LLM 的 GraphRAG 库的后端。
项目地址:https://github.com/severian42/GraphRAG-Local-UI
蚂蚁发布的一个专业领域知识服务框架, 叫做知识增强生成(KAG:Knowledge Augmented Generation),该框架旨在充分利用知识图谱和向量检索的优势,以解决现有 RAG 技术栈的一些挑战。
项目地址:https://github.com/OpenSPG/KAG
技术报告:https://arxiv.org/pdf/2409.13731
nano-GraphRAG 的代码量大约只有 800行,除了测试和示例之外。短小精悍,易于扩展,支持异步操作,且完全采用类型注解。
项目地址:https://github.com/gusye1234/nano-graphrag
Tiny-Graphrag 是一个简洁版本的 GraphRAG 实现,旨在提供一个最简单的 GraphRAG 系统,包含所有必要的功能。实现了添加文档的全部流程,以及本地查询和全局查询的功能。实现的也比较简单,安装好依赖后,配置zhipu的api-key就可以直接运行。
项目地址:https://github.com/limafang/tiny-graphrag
from tinygraph.graph import TinyGraph
from tinygraph.embedding.zhipu import zhipuEmb
from tinygraph.llm.zhipu import zhipuLLM
emb = zhipuEmb("model name", "your key")
llm = zhipuLLM("model name", "your key")
graph = TinyGraph(
url="your url",
username="neo4j name",
password="neo4j password",
llm=llm,
emb=emb,
)
#添加文档
graph.add_document("example/data.md")
#完成文档添加后,可以使用 TinyGraph 进行查询。TinyGraph 支持本地查询和全局查询:
local_res = graph.local_query("what is ML")
print(local_res)
global_res = graph.global_query("what is ML")
print(global_res)