图增强向量搜索
别名
- 图 + 向量
- 增强型向量搜索
所需图结构
背景
基本 GraphRAG 模式最大的问题是找到回答问题所需的所有相关上下文。上下文可能分散在许多块中,无法通过搜索找到。将这些块中的真实世界实体相互关联,并与向量搜索一起检索这些关系,可以提供有关这些块所指实体的额外上下文。它们还可以通过实体网络将块相互关联。
描述
用户问题使用之前用于创建嵌入的相同嵌入器进行嵌入。在块嵌入上执行向量相似性搜索,以找到 k (用户/开发者先前配置的数量) 个最相似的块。从找到的块开始执行遍历,以检索更多上下文。
用法
与仅执行向量搜索(如基本检索器或父子检索器)的结果相比,此模式对于检索更丰富的上下文非常有用。额外的遍历检索了所提供数据中实体的交互,这揭示了比检索特定文本块更丰富的信息。当然,这种 GraphRAG 模式的预处理是需要付出努力的。此外,图遍历返回的上下文量可能大得多,LLM 需要能够处理。
所需预处理
使用 LLM 对块执行实体和关系提取。将检索到的三元组导入图中。
检索查询
MATCH (node)-[:PART_OF]->(d:Document)CALL { WITH node MATCH (node)-[:HAS_ENTITY]->(e) MATCH path=(e)(()-[rels:!HAS_ENTITY&!PART_OF]-()){0,2}(:!Chunk&!Document) … RETURN …}RETURN …
变体
此检索器有一些变体
-
实体消歧——一个简单的实体提取管道将从文本中提取任何实体。然而,多个实体在文本中可能以不同的方式提及,但实际上指的是同一个真实世界实体。为了保持图的整洁,可以执行实体消歧步骤,将这些实体合并。实现此目的的可能方法在使用 Neo4j 和 LangChain 实现“从局部到全局”GraphRAG:构建图和LlamaIndex 中使用 Relik 进行实体链接和关系提取中有所描述。
-
问题引导/模式定义提取——不是让 LLM 提取任何类型的实体和关系,而是提供一组问题或固定的模式来引导 LLM 只提取与应用程序相关的领域知识。这种方法将缩小提取的范围和数量(例如,介绍 WhyHow.AI 开源知识图谱模式库——更快地开始实验)。
-
实体嵌入——在使用 LLM 提取实体和关系时,我们可以指示 LLM 也创建/提取实体和关系描述。这些可以被嵌入,然后用于初始向量搜索和遍历过程中的其他指导。
-
本体驱动遍历——您可以在应用程序代码中硬编码遍历,而不是提供用于遍历的本体。这种方法在深入探讨——第 24 集:KG+LLMs:本体驱动的 RAG 模式中进行了解释。
延伸阅读
- 深入探讨 - 第 23 集:使用知识图谱的高级 RAG 模式 (2023 年 12 月)