我正在尝试构建一个具有技术文档文件混合检索功能的 Graph RAG。需要为特定于版本的文档文件找到答案。我试图通过根据文件名过滤图形和矢量查询来实现此目的。但是,我无法使用 Neo4j 图形数据库为 Graph RAG 实现实现源文件过滤。
具体来说,我首先使用此处给出的代码示例: 文字 并修改了加载 MS Word 文件的代码。代码运行良好,机器人根据提供的文件回答问题。但是,机器人无法从正确的文件中获取正确的信息来进行特定于软件版本的查询。因此,我想将搜索空间限制为从特定文件加载到图形数据库的信息。我尝试修改图形数据库查询(在 graph_retriever 方法中),如下所示:
"""CALL db.index.fulltext.queryNodes('entity', $query, {limit:2})
YIELD node,score
CALL {
WITH node
MATCH (node)-[r:!MENTIONS]->(neighbor)
WHERE node.source CONTAINS '12.34'
RETURN node.id + ' - ' + type(r) + ' -> ' + neighbor.id AS output
UNION ALL
WITH node
MATCH (node)<-[r:!MENTIONS]-(neighbor)
WHERE node.source CONTAINS '12.34'
RETURN neighbor.id + ' - ' + type(r) + ' -> ' + node.id AS output
}
RETURN output LIMIT 50
"""
(在 2 处添加了 WHERE 子句)。但是,如果我这样做,graph_retriever 函数不会产生任何结果。我想知道是否需要将 version_number 字段添加到图形数据库中的每个条目中。但是,在上面的示例代码中,add_graph_documents 方法不允许存储图形数据库中每个条目的 URL 或文件名信息。示例代码中如何根据源文件名进行过滤?我被困住了。非常感谢任何帮助。
{limit: 2}
的 db.index.fulltext.queryNodes
参数仅返回最多 2 个节点供 Cypher 的其余部分使用。
要么完全删除
{limit: 2}
参数,要么将 2
增加到足够大的数字,以使您可能获得一些与您的 WHERE
过滤器匹配的节点。