在现代数据驱动的世界中,图数据库因其结构灵活和查询强大的特性受到越来越多的关注。NebulaGraph 是一款开源、分布式、可扩展的图数据库,特别适用于处理超大规模的图结构,并且具备毫秒级的查询延迟。本文将介绍如何使用 NebulaGraph 和大语言模型(LLMs)构建一个自然语言接口,实现对图数据库的自然语言问答。
引言
NebulaGraph 使用 nGQL 作为其查询语言,这是一种类似 SQL 的声明式语言,能够有效表达复杂的图模式。本文旨在展示如何通过设置和配置 NebulaGraph 环境,结合 LLMs 来创建一个能处理自然语言查询的系统。
主要内容
1. 初始设置
您可以通过以下命令以 Docker 容器的形式启动 NebulaGraph 集群:
curl -fsSL nebula-up.siwei.io/install.sh | bash
其他安装选项包括:
- 作为 Docker Desktop 扩展安装
- 使用 NebulaGraph Cloud Service
- 从包、源代码或通过 Kubernetes 部署
2. 数据库空间和模式创建
在集群运行后,可以按以下步骤创建数据库空间和模式:
%pip install --upgrade --quiet ipython-ngql
%load_ext ngql
# 连接 nGQL Jupyter 扩展到 NebulaGraph
%ngql --address 127.0.0.1 --port 9669 --user root --password nebula
# 创建新空间
%ngql CREATE SPACE IF NOT EXISTS langchain(partition_num=1, replica_factor=1, vid_type=fixed_string(128));
%ngql USE langchain;
然后创建所需的 schema:
%%ngql
CREATE TAG IF NOT EXISTS movie(name string);
CREATE TAG IF NOT EXISTS person(name string, birthdate string);
CREATE EDGE IF NOT EXISTS acted_in();
CREATE TAG INDEX IF NOT EXISTS person_index ON person(name(128));
CREATE TAG INDEX IF NOT EXISTS movie_index ON movie(name(128));
3. 数据插入
在模式创建完成后,插入一些初始数据:
%%ngql
INSERT VERTEX person(name, birthdate) VALUES "Al Pacino":("Al Pacino", "1940-04-25");
INSERT VERTEX movie(name) VALUES "The Godfather II":("The Godfather II");
INSERT EDGE acted_in() VALUES "Al Pacino"->"The Godfather II":();
4. 自然语言接口的实现
使用 LangChain 库集成 LLMs,实现自然语言查询:
from langchain.chains import NebulaGraphQAChain
from langchain_community.graphs import NebulaGraph
from langchain_openai import ChatOpenAI
graph = NebulaGraph(
space="langchain",
username="root",
password="nebula",
address="127.0.0.1", # 使用API代理服务提高访问稳定性
port=9669,
session_pool_size=30,
)
chain = NebulaGraphQAChain.from_llm(
ChatOpenAI(temperature=0), graph=graph, verbose=True
)
result = chain.run("Who played in The Godfather II?")
print(result) # 输出: 'Al Pacino played in The Godfather II.'
常见问题和解决方案
- 网络连接问题:由于某些地区的网络限制,开发者可能需要考虑使用 API 代理服务以提高访问稳定性。
- 模式变更时的同步问题:可以使用
graph.refresh_schema()来刷新数据库模式信息,以确保与最新模式一致。
总结和进一步学习资源
通过本文的介绍,您应对如何结合 NebulaGraph 和 LLMs 来实现强大的自然语言查询有了初步的认识。有关更多技术细节和使用案例,可以查阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---