Skip to main content

Google AlloyDB for PostgreSQL

Google Cloud AlloyDB for PostgreSQL 是一种完全托管的 PostgreSQL 兼容数据库服务,适用于最苛刻的企业工作负载。AlloyDB 结合了 Google CloudPostgreSQL 的优势,提供卓越的性能、扩展性和可用性。通过 AlloyDB Langchain 集成,可以扩展数据库应用程序以构建基于人工智能的体验。

这篇笔记介绍了如何使用 Google Cloud AlloyDB for PostgreSQL 存储聊天消息历史记录,使用 AlloyDBChatMessageHistory 类。

GitHub 上了解更多关于这个包的信息。

在 Colab 中打开

开始之前

要运行这个笔记本,您需要完成以下步骤:

🦜🔗 安装库

这个集成位于自己的 langchain-google-alloydb-pg 包中,因此我们需要安装它。

%pip install --upgrade --quiet langchain-google-alloydb-pg langchain-google-vertexai

仅限 Colab: 取消下面的注释以重新启动内核,或者使用顶部的按钮重新启动内核。对于 Vertex AI Workbench,您可以使用顶部的按钮重新启动终端。

# # 安装后自动重新启动内核,以便您的环境可以访问新的包
# import IPython
# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)

🔐 认证

作为在这个笔记本中登录的 IAM 用户,对 Google Cloud 进行身份验证,以便访问您的 Google Cloud 项目。

  • 如果您使用 Colab 运行这个笔记本,请使用下面的单元格并继续。

  • 如果您使用 Vertex AI Workbench,请查看这里的设置说明

from google.colab import auth
auth.authenticate_user()

☁ 设置您的 Google Cloud 项目

设置您的 Google Cloud 项目,以便您可以在这个笔记本中利用 Google Cloud 资源。

如果您不知道您的项目 ID,请尝试以下操作:

  • 运行 gcloud config list

  • 运行 gcloud projects list

  • 参考支持页面:查找项目 ID

# @markdown 请在下面的值中填写您的 Google Cloud 项目 ID,然后运行单元格。
PROJECT_ID = "my-project-id" # @param {type:"string"}
# 设置项目 ID
!gcloud config set project {PROJECT_ID}

💡 启用 API

langchain-google-alloydb-pg 包要求您在您的 Google Cloud 项目中启用 AlloyDB Admin API

# 启用 AlloyDB API
!gcloud services enable alloydb.googleapis.com

基本用法

设置 AlloyDB 数据库值

AlloyDB 集群页面中找到您的数据库值。

# @title 在这里设置您的值 { display-mode: "form" }
REGION = "us-central1" # @param {type: "string"}
CLUSTER = "my-alloydb-cluster" # @param {type: "string"}
INSTANCE = "my-alloydb-instance" # @param {type: "string"}
DATABASE = "my-database" # @param {type: "string"}
TABLE_NAME = "message_store" # @param {type: "string"}

AlloyDBEngine 连接池

要将 AlloyDB 作为 ChatMessageHistory 内存存储库,需要一个 AlloyDBEngine 对象。AlloyDBEngine 配置了一个连接池,用于连接到您的 AlloyDB 数据库,从而实现应用程序的成功连接,并遵循行业最佳实践。

要使用 AlloyDBEngine.from_instance() 创建一个 AlloyDBEngine,您只需要提供以下 5 个参数:

  1. project_id:AlloyDB 实例所在的 Google Cloud 项目 ID。

  2. region:AlloyDB 实例所在的区域。

  3. cluster:AlloyDB 集群的名称。

  4. instance:AlloyDB 实例的名称。

  5. database:要连接到的 AlloyDB 实例上的数据库的名称。

默认情况下,将使用IAM数据库身份验证作为数据库身份验证的方法。该库使用从环境中获取的属于应用程序默认凭据(ADC)的IAM主体。

可选地,也可以使用内置的数据库身份验证,使用用户名和密码访问AlloyDB数据库。只需向AlloyDBEngine.from_instance()提供可选的userpassword参数:

  • user:用于内置数据库身份验证和登录的数据库用户

  • password:用于内置数据库身份验证和登录的数据库密码

from langchain_google_alloydb_pg import AlloyDBEngine
engine = AlloyDBEngine.from_instance(
project_id=PROJECT_ID,
region=REGION,
cluster=CLUSTER,
instance=INSTANCE,
database=DATABASE,
)

初始化表

AlloyDBChatMessageHistory类需要一个具有特定模式的数据库表,以存储聊天消息历史记录。

AlloyDBEngine引擎有一个辅助方法init_chat_history_table(),可用于为您创建具有适当模式的表。

engine.init_chat_history_table(table_name=TABLE_NAME)

AlloyDBChatMessageHistory

要初始化AlloyDBChatMessageHistory类,您只需要提供以下3个内容:

  1. engine - 一个AlloyDBEngine引擎的实例。

  2. session_id - 一个指定会话ID的唯一标识字符串。

  3. table_name:要在AlloyDB数据库中存储聊天消息历史记录的表的名称。

from langchain_google_alloydb_pg import AlloyDBChatMessageHistory
history = AlloyDBChatMessageHistory.create_sync(
engine, session_id="test_session", table_name=TABLE_NAME
)
history.add_user_message("hi!")
history.add_ai_message("whats up?")
history.messages

清理

当特定会话的历史记录过时且可以删除时,可以按以下方式执行。

注意:一旦删除,数据将不再存储在AlloyDB中,将永远消失。

history.clear()

🔗 链接

我们可以轻松将此消息历史记录类与LCEL Runnables结合使用。

为此,我们将使用Google的Vertex AI聊天模型,这需要您在Google Cloud项目中启用Vertex AI API

# 启用Vertex AI API
!gcloud services enable aiplatform.googleapis.com
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_google_vertexai import ChatVertexAI
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a helpful assistant."),
MessagesPlaceholder(variable_name="history"),
("human", "{question}"),
]
)
chain = prompt | ChatVertexAI(project=PROJECT_ID)
chain_with_history = RunnableWithMessageHistory(
chain,
lambda session_id: AlloyDBChatMessageHistory.create_sync(
engine,
session_id=session_id,
table_name=TABLE_NAME,
),
input_messages_key="question",
history_messages_key="history",
)
# 这是我们配置会话ID的地方
config = {"configurable": {"session_id": "test_session"}}
chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
chain_with_history.invoke({"question": "Whats my name"}, config=config)

Was this page helpful?


You can leave detailed feedback on GitHub.