解锁El Carro与Langchain的潜力:在Oracle数据库中存储聊天历史记录

29 阅读2分钟

引言

在现代云计算中,Kubernetes已经成为管理容器化应用程序的标准。Google Cloud的El Carro使得在Kubernetes中运行Oracle数据库变得更加简单、高效,无需担心供应商锁定问题。本文将探讨如何通过El Carro与Langchain的集成来存储聊天消息历史,进一步扩展Oracle数据库的功能。

主要内容

安装与设置

首先,我们需要安装langchain-google-el-carro包。

%pip install --upgrade --quiet langchain-google-el-carro langchain-google-vertexai langchain

在Google Colab中,可能需要重启内核以访问新安装的包。

认证和项目设置

在开始之前,请确保已认证Google Cloud帐户,并设置项目ID。

# 从Google Colab认证用户
from google.colab import auth
auth.authenticate_user()

# 设置项目ID
PROJECT_ID = "my-project-id" 
!gcloud config set project {PROJECT_ID}

数据库连接设置

配置Oracle数据库连接参数:

# 设置您的Oracle数据库连接信息
HOST = "127.0.0.1"  # 使用真实主机地址
PORT = 3307
DATABASE = "my-database"
TABLE_NAME = "message_store"
USER = "my-user"
PASSWORD = input("请输入数据库用户密码: ")

from langchain_google_el_carro import ElCarroEngine

# 使用API代理服务提高访问稳定性
elcarro_engine = ElCarroEngine.from_instance(
    db_host=HOST,
    db_port=PORT,
    db_name=DATABASE,
    db_user=USER,
    db_password=PASSWORD
)

初始化表格

使用El Carro提供的方法来初始化数据库表。

elcarro_engine.init_chat_history_table(table_name=TABLE_NAME)

使用ElCarroChatMessageHistory

使用ElCarroChatMessageHistory类来记录和检索聊天历史。

from langchain_google_el_carro import ElCarroChatMessageHistory

history = ElCarroChatMessageHistory(
    elcarro_engine=elcarro_engine, 
    session_id="test_session", 
    table_name=TABLE_NAME
)

history.add_user_message("hi!")
history.add_ai_message("whats up?")
print(history.messages)

清理数据

当不再需要某些会话的历史记录时,可以删除它们:

history.clear()  # 永久删除数据

链接与运行

可以将消息历史与Google的Vertex AI聊天模型结合使用。

# 启用Vertex AI API
!gcloud services enable aiplatform.googleapis.com

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_google_vertexai import ChatVertexAI

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant."),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{question}"),
    ]
)

chain = prompt | ChatVertexAI(project=PROJECT_ID)

chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: ElCarroChatMessageHistory(
        elcarro_engine,
        session_id=session_id,
        table_name=TABLE_NAME,
    ),
    input_messages_key="question",
    history_messages_key="history",
)

config = {"configurable": {"session_id": "test_session"}}
chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
chain_with_history.invoke({"question": "Whats my name"}, config=config)

常见问题和解决方案

  1. 网络访问受限:由于某些地区的网络限制,建议使用API代理服务以提高访问稳定性。

  2. 连接问题:确保数据库连接信息正确,EL Carro实例运行正常。

总结和进一步学习资源

通过El Carro与Langchain的集成,可以有效管理和扩展Oracle数据库的功能。建议读者进一步研究Google Cloud Oracle文档Langchain包GitHub页面

参考资料

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

---END---