图增强向量搜索
替代名称
- 图形 + 向量
- 增强向量搜索
所需的图形形状
Lexical Graph with Extracted Entities
上下文
基本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仅提取与应用相关的领域知识。这种方法将缩小提取的范围和数量(例如,Introducing WhyHow.AI Open-Source Knowledge Graph Schema Library — Start Experimenting Faster)。
-
实体嵌入 — 当使用LLM提取实体和关系时,我们可以指示LLM也创建/提取实体和关系描述。这些描述可以被嵌入,并随后用于初始向量搜索和遍历过程中的其他指导。
-
本体驱动的遍历 — 与其在应用程序代码中硬编码遍历,你可以为遍历提供一个本体。这种方法在Going meta — Ep 24: KG+LLMs: Ontology driven RAG patterns中有详细解释。
进一步阅读
- Going Meta - Ep 23: 使用知识图谱的高级RAG模式 (2023年12月)