## 引言
随着图数据库在大数据时代的应用日益增长,能够通过自然语言查询这些数据显得尤为重要。本文介绍如何使用大语言模型(LLMs)为Kùzu数据库提供自然语言接口,以便轻松地查询复杂的数据集。
## 主要内容
### Kùzu简介
Kùzu是一个嵌入式属性图数据库管理系统,以其查询速度和可扩展性闻名。它实现了Cypher查询语言,并采用列式存储及新颖的连接算法来处理大量数据而不降低性能。
### 环境搭建
因为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("MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather' CREATE (p)-[:ActedIn]->(m)")
创建KuzuQAChain
通过如下方式创建KuzuGraph和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,
)
查询图数据库
通过自然语言提问:
result = chain.invoke("Who acted in The Godfather: Part II?")
print(result['result'])
代码示例
以下是一个完整的代码示例,展示如何用自然语言询问电影数据库中的信息:
import kuzu
from langchain.chains import KuzuQAChain
from langchain_community.graphs import KuzuGraph
from langchain_openai import ChatOpenAI
# 创建并连接到数据库
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 (:Movie {name: 'The Godfather'})")
conn.execute("MATCH (p:Person), (m:Movie) WHERE p.name = 'Al Pacino' AND m.name = 'The Godfather' CREATE (p)-[:ActedIn]->(m)")
# 设置QA Chain
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?")
print(result['result'])
常见问题和解决方案
-
查询延迟或失败
- 解决方案:考虑使用API代理服务来提高访问的稳定性,尤其是在网络不稳定的地区。
-
模式更新后查询出错
- 解决方案:使用
graph.refresh_schema()来刷新模式信息。
- 解决方案:使用
总结和进一步学习资源
通过本文介绍的方法,您可以使用LLMs与Kùzu结合打造强大的自然语言查询接口。这不仅简化了数据检索过程,还为用户提供更友好的交互体验。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---