技术背景介绍
AWS DynamoDB 是一种完全托管的 NoSQL 数据库服务,能够实现快速的预测性能与无缝扩展。对于希望将用户聊天消息历史记录存储到 DynamoDB 的开发者来说,DynamoDB 提供了一个高效而强大的解决方案。本指南将介绍如何使用 DynamoDBChatMessageHistory
类来实现这一功能。
核心原理解析
DynamoDBChatMessageHistory
允许我们通过简单的操作就可以将聊天消息存储到 DynamoDB 表中。我们可以定义每个会话的消息,并根据相应的消息历史进行检索操作。这对于需要持久化聊天记录的应用场合非常实用。
代码实现演示(重点)
首先,请确保您的 AWS CLI 已正确配置,并安装所需的 Python 包:
pip install -U langchain-community boto3
创建 DynamoDB 表
我们需要首先创建一个 DynamoDB 表来存储聊天数据:
import boto3
# 获取 DynamoDB 服务资源
dynamodb = boto3.resource("dynamodb")
# 创建 DynamoDB 表
table = dynamodb.create_table(
TableName="SessionTable",
KeySchema=[{"AttributeName": "SessionId", "KeyType": "HASH"}],
AttributeDefinitions=[{"AttributeName": "SessionId", "AttributeType": "S"}],
BillingMode="PAY_PER_REQUEST", # 配置按需计费模式
)
# 等待表创建完成
table.meta.client.get_waiter("table_exists").wait(TableName="SessionTable")
# 输出表的数据量信息
print(table.item_count)
使用 DynamoDBChatMessageHistory 存储消息
创建聊天消息历史对象,并添加消息:
from langchain_community.chat_message_histories import DynamoDBChatMessageHistory
history = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="0")
# 添加用户和 AI 消息
history.add_user_message("hi!")
history.add_ai_message("whats up?")
# 获取消息列表
print(history.messages)
使用自定义端点 URL
如果需要连接本地的 Localstack,可以指定端点 URL:
history = DynamoDBChatMessageHistory(
table_name="SessionTable",
session_id="0",
endpoint_url="http://localhost.localstack.cloud:4566",
)
使用复合键
对于复杂的键结构,可以使用复合键模式:
composite_table = dynamodb.create_table(
TableName="CompositeTable",
KeySchema=[
{"AttributeName": "PK", "KeyType": "HASH"},
{"AttributeName": "SK", "KeyType": "RANGE"},
],
AttributeDefinitions=[
{"AttributeName": "PK", "AttributeType": "S"},
{"AttributeName": "SK", "AttributeType": "S"},
],
BillingMode="PAY_PER_REQUEST",
)
# 等待表创建完成
composite_table.meta.client.get_waiter("table_exists").wait(TableName="CompositeTable")
# 使用复合键存储历史数据
my_key = {
"PK": "session_id::0",
"SK": "langchain_history",
}
composite_key_history = DynamoDBChatMessageHistory(
table_name="CompositeTable",
session_id="0",
endpoint_url="http://localhost.localstack.cloud:4566",
key=my_key,
)
composite_key_history.add_user_message("hello, composite dynamodb table!")
print(composite_key_history.messages)
应用场景分析
DynamoDB 被广泛应用于需要快速响应和扩展能力的场景。例如实时聊天应用、游戏状态存储等。上述实现方式可以帮助开发者轻松构建支持会话管理的应用,并可靠地处理历史记录。
实践建议
- 确保表结构与您的应用场景匹配,灵活使用主键和复合键。
- 使用自定义端点 URL 可以在开发阶段轻松测试本地环境。
- 定期监控 DynamoDB 表的大小和性能,优化计费模式以降低成本。
结束语:如果遇到问题欢迎在评论区交流。
—END—