本页介绍了如何将 AlloyDB 用作大语言模型 (LLM) 工具,以及如何基于 LLM 生成向量嵌入。
如需详细了解如何将 ML 模型与 AlloyDB Omni 搭配使用,请参阅构建生成式 AI 应用。
借助 AlloyDB,您可以使用由 Vertex AI 托管的 LLM 将文本字符串转换为嵌入,这是模型将给定文本的语义含义表示为数值向量的方法。如需详细了解 Vertex AI 对文本嵌入的支持,请参阅文本嵌入。
准备工作
如需让 AlloyDB 生成嵌入,请确保您满足以下要求:
区域限制
您可以在提供 Vertex AI 上的生成式 AI 的区域生成嵌入。如需查看支持的区域列表,请参阅 Vertex AI 上的生成式 AI 位置 。
对于 AlloyDB,请确保 AlloyDB 集群和您要查询的 Vertex AI 模型位于同一区域。
必需的数据库扩展
确保您的 AlloyDB 数据库上已安装
google_ml_integration
扩展程序。CREATE EXTENSION google_ml_integration;
此扩展程序包含在 AlloyDB 中。您可以在集群中的任何数据库上安装它。
将
google_ml_integration.enable_model_support
数据库标志设置为off
。
设置模型访问权限
您必须先将 AlloyDB 配置为使用文本嵌入模型,然后才能通过 AlloyDB 数据库生成嵌入。
如需使用基于云的 textembeddings-gecko
模型,您需要将数据库与 Vertex AI 集成。
向数据库用户授予生成嵌入的权限
向数据库用户授予执行 embedding
函数以运行预测的权限:
按照将
psql
客户端连接到实例中所述,将psql
客户端连接到集群的主实例。在 psql 命令提示符下,连接到数据库并授予权限:
\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
替换以下内容:
DB_NAME:应授予权限的数据库的名称
USER_NAME:应为其授予权限的用户的名称
生成嵌入
AlloyDB 提供了一个函数,可让您将文本转换为向量嵌入。然后,您可以将该嵌入作为向量数据存储在数据库中,并可选地使用 pgvector
函数根据该嵌入进行查询。
如需使用 AlloyDB 生成嵌入,请使用 google_ml_integration
扩展程序提供的 embedding()
函数:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
替换以下内容:
MODEL_ID
:要查询的模型的 ID。如果您使用的是 Vertex AI Model Garden,请将
textembedding-gecko@003
指定为模型 ID。以下是 AlloyDB 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入。可选:
VERSION_TAG
:要查询的模型的版本标记。在该标记前面加上@
。如果您将
textembedding-gecko
英语模型之一与 Vertex AI 搭配使用,请指定 模型版本中列出的某个版本标记,例如textembedding-gecko@003
。Google 强烈建议您始终指定版本标记。 如果您未指定版本标记,AlloyDB 将始终使用最新的模型版本,这可能会导致意外结果。
TEXT
:要转换为向量嵌入的文本。
以下示例使用 textembedding-gecko
英语模型的版本 003
,根据提供的字面量字符串生成嵌入:
SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
存储嵌入
使用 google_ml_integration
扩展生成的嵌入以 real
值数组的形式实现。这些生成的嵌入会作为 pgvector
扩展函数的输入传递。
如需将此值存储在表中,请添加 real[]
列:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
创建用于存储嵌入的列后,您可以根据同一表中另一个列中已存储的值来填充该列:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
替换以下内容:
TABLE
:表名称EMBEDDING_COLUMN
:嵌入列的名称
MODEL_ID
:要查询的模型的 ID。如果您使用的是 Vertex AI Model Garden,请将
textembedding-gecko@003
指定为模型 ID。这些是 AlloyDB 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入。可选:
VERSION_TAG
:要查询的模型的版本标记。在该标记前面加上@
。如果您将
textembedding-gecko
英语模型之一与 Vertex AI 搭配使用,请指定 模型版本中列出的某个版本标记,例如textembedding-gecko@003
。Google 强烈建议您始终指定版本标记。 如果您未指定版本标记,AlloyDB 将始终使用最新的模型版本,这可能会导致意外结果。
SOURCE_TEXT_COLUMN
:存储要转换为嵌入的文本的列的名称
执行相似度搜索
您还可以使用 embedding()
函数将文本转换为向量。您可以将向量应用于 pgvector
近邻运算符 <->
,以查找语义最相似的嵌入数据库行。
由于 embedding()
会返回 real
数组,因此您必须将 embedding()
调用显式转换为 vector
,才能将这些值与 pgvector
运算符搭配使用。
CREATE EXTENSION google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
使用模型版本标记以避免错误
Google 强烈建议您始终使用所选嵌入模型的稳定版本。对于大多数模型,这意味着明确设置版本标记。
在调用 embedding()
函数时不指定模型的版本标记在语法上是有效的,但也容易出错。
如果您在 Vertex AI Model Garden 中使用模型时省略版本标记,Vertex AI 会使用该模型的最新版本。这可能不是最新的稳定版。如需详细了解可用的 Vertex AI 模型版本,请参阅模型版本。
给定 Vertex AI 模型版本对给定文本输入始终返回相同的 embedding()
响应。如果您在对 embedding()
的调用中未指定模型版本,则新发布的模型版本可能会突然更改给定输入的返回矢量,从而导致应用中出现错误或其他意外行为。
为避免出现这些问题,请始终指定模型版本。
问题排查
错误:未找到 model_id 对应的模型
错误消息
尝试使用 embedding()
或 google_ml.embedding()
函数生成嵌入时,会发生以下错误:
ERROR: 'Model not found for model_id:
建议的解决方法
升级
google_ml_integration
扩展程序,然后尝试重新生成嵌入。ALTER EXTENSION google_ml_integration UPDATE;
您也可以移除该扩展程序,然后重新创建。
DROP extension google_ml_integration; CREATE EXTENSION google_ml_integration;
如果您使用
google_ml.embedding()
函数生成嵌入,请确保模型已注册,并且您在查询中使用的是正确的model_id
。