动态 Cypher 生成
所需图结构
背景
许多针对结构化数据的用户问题会包含多个过滤器,但并非总是完全相同的。我们以电影图为例进行说明。
可能会有几个相关的问题被提出:
- 史蒂文·斯皮尔伯格执导了哪些电影?
- 史蒂文·斯皮尔伯格在 2000 年至 2010 年间执导了哪些电影?
- 史蒂文·斯皮尔伯格在 2000 年至 2010 年间执导了哪些[例如]的电影?
这个列表可以无限延伸。你不会希望为每个问题都创建一个 Cypher 模板。解决方案是根据用户问题中实际给出的参数,(部分)动态生成 Cypher 查询。
描述
给定用户问题后,LLM 会决定使用哪个 Cypher 模板。LLM 可能会从用户问题中提取参数并将其代入模板。查询在数据库上执行,结果返回给 LLM 以生成答案。多个模板也可以在链式或循环中使用,从而形成一个代理查询系统。
用法
这种模式是 Cypher 模板 的演进。它更加灵活,允许回答更多样化的用户问题。不过,问题的范围仍然受限于所提供的代码片段。
所需预处理
包含参数化 Cypher 查询的代码片段及其功能描述可供 LLM 使用。
图查询
// Which movies has ($director) directed?MATCH (d:Director)-[:DIRECTED]->(m:Movie)WHERE d.name = $directorRETURN m.title, m.year
// Which movies were released between $startYear and $endYearMATCH (m:Movie)WHERE $startYear <= m.year <= $endYearRETURN m.title, m.year
延伸阅读
- 使用 Llama 3.1、NVIDIA NIM 和 LangChain 构建基于知识图谱的代理 (Tomaz Bratanic,2024 年 8 月)
- GraphRAG 实战:从商业合同到动态问答代理 (Ed Sandoval,2024 年 10 月)