背景
以Neo4j开源的 llm-graph-builder
(以下简称 LGB
)为例,说明 graph + RAG
的模式下,如何进行知识的召回操作。
原理说明
graph + RAG
模式下,依旧保持了RAG的思想,使用了向量作为语义召回的手段。
- 在 LGB 中,对于用户提出的问题,系统首先会将问题进行 Embedding 操作,从而得到问题的向量表示。
- 使用问题的向量表示,去neo4j中召回相关的文档片段,并按照所属文档进行分组。
- 从召回的文档片段中,找出基于片段生成的实体,并根据实体关联的文本片段数进行排序,取前25个。
- 寻找从实体
e
出发,通过最多1步的关系(排除HAS_ENTITY
和PART_OF
关系)到达的路径,这些路径不能包含Chunk
和Document
类型的节点。
collect { OPTIONAL MATCH path=(e)(()-[rels:!HAS_ENTITY&!PART_OF]-()){0,1}(:!Chunk&!Document) RETURN path }
- 从上述实体中,找出实体的相关关系,并返回关系列表
// de-duplicate nodes and relationships across chunks
RETURN collect{ unw