使用NebulaGraph和LLMs实现自然语言查询:探索大规模图数据的新方式

118 阅读3分钟

在现代数据驱动的世界中,图数据库因其结构灵活和查询强大的特性受到越来越多的关注。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 来实现强大的自然语言查询有了初步的认识。有关更多技术细节和使用案例,可以查阅以下资源:

参考资料

  1. NebulaGraph GitHub 仓库
  2. LangChain GitHub 仓库

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

---END---