跳过内容

动态 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 = $director
RETURN m.title, m.year
// Which movies were released between $startYear and $endYear
MATCH (m:Movie)
WHERE $startYear <= m.year <= $endYear
RETURN m.title, m.year

延伸阅读

现有实现

示例实现

我在哪里?
© . This site is unofficial and not affiliated with Microsoft.