跳到主要內容
Open In ColabOpen on GitHub

Couchbase

Couchbase 是一個獲獎的 NoSQL 分散式雲端資料庫,為您的所有雲端、行動、AI 和邊緣運算應用程式提供無與倫比的多功能性、效能、可擴展性和財務價值。Couchbase 透過開發人員的程式碼輔助及其應用程式的向量搜尋來擁抱 AI。

本筆記本說明如何使用 CouchbaseChatMessageHistory 類別將聊天訊息歷史記錄儲存在 Couchbase 叢集中

設定 Couchbase 叢集

若要執行此示範,您需要 Couchbase 叢集。

您可以同時使用 Couchbase Capella 和您自行管理的 Couchbase Server。

安裝相依性

CouchbaseChatMessageHistory 位於 langchain-couchbase 套件中。

%pip install --upgrade --quiet langchain-couchbase
Note: you may need to restart the kernel to use updated packages.

建立 Couchbase 連線物件

我們先建立與 Couchbase 叢集的連線,然後將叢集物件傳遞至向量儲存庫。

在這裡,我們使用使用者名稱和密碼進行連線。您也可以使用任何其他支援的方式連線到您的叢集。

如需連線至 Couchbase 叢集的詳細資訊,請查看 Python SDK 文件

COUCHBASE_CONNECTION_STRING = (
"couchbase://127.0.0.1" # or "couchbases://127.0.0.1" if using TLS
)
DB_USERNAME = "Administrator"
DB_PASSWORD = "Password"
from datetime import timedelta

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

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

# Wait until the cluster is ready for use.
cluster.wait_until_ready(timedelta(seconds=5))

我們現在將在 Couchbase 叢集中設定儲存訊息歷史記錄時要使用的儲存桶、Scope 和 Collection 名稱。

請注意,儲存桶、Scope 和 Collection 需要先存在,才能用來儲存訊息歷史記錄。

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

用法

為了儲存訊息,您需要以下項目

  • Couchbase 叢集物件:與 Couchbase 叢集的有效連線
  • bucket_name:叢集中用於儲存聊天訊息歷史記錄的儲存桶
  • scope_name:儲存桶中用於儲存訊息歷史記錄的 Scope
  • collection_name:Scope 中用於儲存訊息歷史記錄的 Collection
  • session_id:工作階段的唯一識別碼

您可以選擇性地設定以下項目

  • session_id_key:聊天訊息文件中用於儲存 session_id 的欄位
  • message_key:聊天訊息文件中用於儲存訊息內容的欄位
  • create_index:用於指定是否需要在 Collection 上建立索引。依預設,會在文件的 message_keysession_id_key 上建立索引
  • ttl:用於指定文件的存活時間 (timedelta),超過此時間後,文件將自動從儲存體中刪除。
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?")
message_history.messages
[HumanMessage(content='hi!'), AIMessage(content='how are you doing?')]

為聊天訊息指定存活時間 (TTL)

透過指定 ttl 參數以及聊天訊息歷史記錄儲存區的初始化,可以在指定的時限過後自動刪除儲存的訊息。

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",
ttl=timedelta(hours=24),
)

鏈結

聊天訊息歷史記錄類別可以與 LCEL Runnable 一起使用

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

# Create the 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",
)
# This is where we configure the session id
config = {"configurable": {"session_id": "testing"}}
chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
AIMessage(content='Hello, Bob! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 11, 'prompt_tokens': 22, 'total_tokens': 33}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-62e54e3d-db70-429d-9ee0-e5e8eb2489a1-0', usage_metadata={'input_tokens': 22, 'output_tokens': 11, 'total_tokens': 33})
chain_with_history.invoke({"question": "Whats my name"}, config=config)
AIMessage(content='Your name is Bob.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 5, 'prompt_tokens': 44, 'total_tokens': 49}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-d84a570a-45f3-4931-814a-078761170bca-0', usage_metadata={'input_tokens': 44, 'output_tokens': 5, 'total_tokens': 49})

此頁面是否對您有幫助?