在现代 AI 应用中,管理和操作文档数据是核心任务之一。本文将详细讲解如何使用 Google 开源的 El Carro Oracle Operator,通过 Kubernetes 高效运行和管理 Oracle 数据库实例,同时结合 LangChain 提供的文档操作工具,将 AI 体验扩展到 Oracle 数据库。
El Carro 是 Google 提供的开源工具,用于在 Kubernetes 中运行 Oracle 数据库。它通过声明式 API 提供一致的配置、部署和实时监控,同时避免供应商锁定。通过与 LangChain 集成,El Carro 支持直接在 Oracle 数据库中保存、加载和删除文档,为 AI 应用场景(如文档问答、聊天机器人等)赋能。
langchain-google-el-carro
包在 El Carro 集成中,主要涉及以下几个组件:
这些组件使得 Oracle 数据库可以高效地成为 LangChain 支持的文档存储后端。
接下来,我们将从头示例如何使用 El Carro 与 LangChain 集成,涵盖从连接配置到文档操作的全过程。
首先,为 Python 环境安装 langchain-google-el-carro
包:
%pip install --upgrade --quiet langchain-google-el-carro
填入相关 Oracle 数据库的配置信息。
from langchain_google_el_carro import ElCarroEngine
# 配置数据库连接信息
HOST = "127.0.0.1" # 数据库主机
PORT = 3307 # 数据库端口
DATABASE = "my-database" # 数据库名
USER = "my-user" # 数据库用户
PASSWORD = input("请输入数据库用户的密码: ")
# 初始化数据库连接池
elcarro_engine = ElCarroEngine.from_instance(
db_host=HOST,
db_port=PORT,
db_name=DATABASE,
db_user=USER,
db_password=PASSWORD,
)
创建一个默认结构的表,用于存储文档。
# 初始化表
TABLE_NAME = "message_store" # 表名
elcarro_engine.drop_document_table(TABLE_NAME) # 删除旧表(如果存在)
elcarro_engine.init_document_table(table_name=TABLE_NAME) # 初始化新表
将 LangChain 文档保存到数据库表中。
from langchain_core.documents import Document
from langchain_google_el_carro import ElCarroDocumentSaver
# 创建示例文档
doc = Document(
page_content="Banana",
metadata={"type": "fruit", "weight": 100, "organic": 1},
)
# 初始化文档保存器
saver = ElCarroDocumentSaver(
elcarro_engine=elcarro_engine,
table_name=TABLE_NAME,
)
# 保存文档
saver.add_documents([doc])
print("文档已保存到数据库!")
从数据库加载文档。
from langchain_google_el_carro import ElCarroLoader
# 初始化文档加载器
loader = ElCarroLoader(elcarro_engine=elcarro_engine, table_name=TABLE_NAME)
# 加载并打印文档
docs = loader.load()
print("加载的文档:", docs)
通过 SQL 查询加载具有特定条件的文档,例如 organic=1
。
query = f"SELECT * FROM {TABLE_NAME} WHERE json_value(langchain_metadata, '$.organic') = '1'"
loader = ElCarroLoader(
elcarro_engine=elcarro_engine,
query=query,
)
# 加载文档
filtered_docs = loader.load()
print("查询到的文档:", filtered_docs)
从数据库中删除已存储的文档。
# 删除文档
saver.delete([doc])
print(f"数据库中剩余文档数量: {len(loader.load())}")
通过 El Carro 和 LangChain 的集成,可以实现以下应用场景:
如果遇到问题欢迎在评论区交流。
—END—
因篇幅问题不能全部显示,请点此查看更多更全内容