使用 AWS DynamoDB 存储聊天消息历史记录的实战指南

技术背景介绍

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—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值