内容提要
标准RAG仅靠文本分块和向量搜索,无法处理多跳问题或全局总结。GraphRAG通过构建知识图谱,提取实体和关系,结合向量检索与图遍历,实现结构化推理。本文介绍用Python和Neo4j实现GraphRAG,包括定义模式、构建管道和查询,虽成本高但能提升企业AI的推理能力。
延伸解读
标准RAG的局限:语义相似≠相关
文章指出,标准RAG假设语义相似即相关,但实际中多跳问题常因概念分散在不同文本块而失败。例如,查询“谁领导Acme收购的公司”时,向量搜索可能找到与“Acme”和“领导”相关的块,却遗漏了包含“Sarah Connor”和“BetaTech”的块,因为它们在语义上与查询不直接相似。这揭示了仅依赖文本分块和向量检索的不足,需要结构化关系来连接分散信息。
GraphRAG的解决思路:图谱构建与遍历
GraphRAG在摄取阶段利用LLM从文本中提取实体和关系,构建知识图谱。查询时,先通过向量搜索定位起始节点,再沿图谱关系遍历,获取相关子图供LLM推理。文章示例中,通过定义模式(如“组织-收购-组织”)和遍历查询,成功获取了“Acme收购BetaTech”和“Sarah Connor领导BetaTech”的关系,从而回答多跳问题。这体现了图谱在结构化推理中的优势。
实施要点:模式约束与成本考量
文章强调,构建GraphRAG需明确模式,否则LLM可能产生实体标签幻觉(如“Acme Corp”变体)。同时,GraphRAG摄取过程消耗大量LLM API请求,需配置速率限制处理以避免失败。尽管成本高,但多跳推理能力对企业AI至关重要。实施时需权衡标准RAG的简单性与GraphRAG的复杂性和开销。
Q&A
为什么标准RAG在多跳推理上会失败?
标准RAG将文本切分成块并做向量搜索,假设语义相似即相关。但多跳问题需要连接不同概念,这些概念通常不在同一文本块中,因此标准RAG无法找到必要的关联。
GraphRAG如何解决多跳推理问题?
GraphRAG在摄取阶段用LLM从文本中提取实体和关系,构建知识图谱。查询时先用向量搜索找到起始节点,再通过图遍历获取相关子图,从而支持多跳推理。
GraphRAG相比标准RAG有哪些优势?
GraphRAG结合了知识图谱的结构化知识和向量搜索的语义能力,能处理多跳问题和全局总结,而标准RAG在这些任务上表现不佳。
在GraphRAG中,如何定义模式(schema)来防止LLM幻觉?
通过定义节点类型(如Organization、Person)和关系类型(如ACQUIRED、LEADS),并指定模式(如Person-LEADS->Organization),可以约束LLM提取的实体和关系,避免产生重复或错误的标签。
GraphRAG的查询过程是怎样的?
查询时,使用VectorCypherRetriever将查询文本嵌入,通过向量搜索找到起始节点,然后执行Cypher查询遍历其邻居节点,获取相关上下文供LLM生成答案。
GraphRAG的缺点或成本是什么?
GraphRAG需要更精心的设计、严格的指南和更高的前期计算成本,尤其是LLM API请求量大,需要配置速率限制处理,否则可能失败。