探索 Apache AGE:为 PostgreSQL 带来图数据库的强大功能
引言
Apache AGE 是一个为 PostgreSQL 提供图数据库功能的扩展。其全称为 A Graph Extension,灵感源自 Bitnine 的 PostgreSQL 10 分支 AgensGraph。AGE 的目标是创建一个可以同时处理关系型和图模型数据的单一存储,这样用户可以使用标准 ANSI SQL 以及图查询语言 openCypher。本文将介绍如何通过自然语言界面查询图数据库中的数据,并提供实际操作示例。
设置环境
要开始使用 Apache AGE,您需要在 PostgreSQL 实例上安装 AGE 扩展。一个简单的测试方法是运行官方 AGE Docker 镜像:
docker run \
--name age \
-p 5432:5432 \
-e POSTGRES_USER=postgresUser \
-e POSTGRES_PASSWORD=postgresPW \
-e POSTGRES_DB=postgresDB \
-d \
apache/age
安装完毕后,您可以使用 langchain 库中的 GraphCypherQAChain 和 AGEGraph 来和数据库进行交互:
from langchain.chains import GraphCypherQAChain
from langchain_community.graphs.age_graph import AGEGraph
from langchain_openai import ChatOpenAI
conf = {
"database": "postgresDB",
"user": "postgresUser",
"password": "postgresPW",
"host": "localhost",
"port": 5432,
}
graph = AGEGraph(graph_name="age_test", conf=conf)
数据库初始化
通过 Cypher 查询语言可以很容易地为数据库添加数据。以下示例为数据库添加了电影《Top Gun》及其演员信息:
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)
"""
)
查询图数据
接下来,我们可以利用 GraphCypherQAChain 进行自然语言查询:
chain = GraphCypherQAChain.from_llm(
ChatOpenAI(temperature=0), graph=graph, verbose=True
)
result = chain.invoke("Who played in Top Gun?")
print(result['result'])
此段代码将返回电影《Top Gun》的演员列表。您还可以通过 top_k 参数限制返回结果数量,通过 return_intermediate_steps 检查中间步骤的详细信息。
常见问题和解决方案
- 当数据库架构发生变化时如何处理? 可以使用
graph.refresh_schema()刷新架构信息。 - 如何提高查询的准确性? 使用
validate_cypher参数,可以对生成的 Cypher 语句进行验证并自动修正关系方向。
chain = GraphCypherQAChain.from_llm(
llm=ChatOpenAI(temperature=0),
graph=graph,
verbose=True,
validate_cypher=True,
)
总结和进一步学习资源
Apache AGE 为 PostgreSQL 带来了强大且灵活的图数据库功能,通过结合 langchain 和 ChatOpenAI 的自然语言处理能力,开发者可以方便地与图数据库进行交互。您可以在以下链接中深入了解相关技术:
进一步的学习资源包括在线课程、社区论坛,帮助您更好地掌握和应用这一技术。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---