本页介绍了如何将 AlloyDB 用作大语言模型 (LLM) 工具,以及如何基于 LLM 生成向量嵌入。
如需详细了解如何将 ML 模型与 AlloyDB Omni 搭配使用,请参阅使用 AlloyDB AI 构建生成式 AI 应用。
借助 AlloyDB,您可以使用由 Vertex AI 托管的 LLM 将文本字符串转换为嵌入,这是模型将给定文本的语义含义表示为数值向量的方法。如需详细了解 Vertex AI 对文本嵌入的支持,请参阅文本嵌入。
准备工作
如需让 AlloyDB 生成嵌入,请确保您满足以下要求:
区域限制
您可以在提供 Vertex AI 上的生成式 AI 的区域生成嵌入。如需查看区域列表,请参阅 Vertex AI 上的生成式 AI 位置 。
对于 AlloyDB,请确保 AlloyDB 集群和您要查询的 Vertex AI 模型位于同一区域。
必需的数据库扩展
确保您的 AlloyDB 数据库上已安装
google_ml_integration
扩展程序。CREATE EXTENSION IF NOT EXISTS google_ml_integration;
此扩展程序包含在 AlloyDB 中。您可以在集群中的任何数据库上安装它。
将
google_ml_integration.enable_model_support
数据库标志设置为off
。
设置模型访问权限
您必须先将 AlloyDB 配置为使用文本嵌入模型,然后才能通过 AlloyDB 数据库生成嵌入。
如需使用基于云的 text-embedding
模型,您需要将数据库与 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,请将
text-embedding-005
指定为模型 ID。以下是 AlloyDB 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入。可选:
VERSION_TAG
:要查询的模型的版本标记。在该标记前面加上@
。如果您将
text-embedding
英语模型之一与 Vertex AI 搭配使用,请指定 模型版本中列出的某个版本标记,例如text-embedding-005
。Google 强烈建议您始终指定版本标记。 如果您未指定版本标记,AlloyDB 将始终使用最新的模型版本,这可能会导致意外结果。
TEXT
:要转换为向量嵌入的文本。
以下示例使用 text-embedding
英语模型的版本 005
,根据提供的字面量字符串生成嵌入:
SELECT embedding('text-embedding-005', '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,请将
text-embedding-005
指定为模型 ID。这些是 AlloyDB 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入。可选:
VERSION_TAG
:要查询的模型的版本标记。在该标记前面加上@
。如果您将
text-embedding
英语模型之一与 Vertex AI 搭配使用,请指定 模型版本中列出的某个版本标记,例如text-embedding-005
。Google 强烈建议您始终指定版本标记。 如果您未指定版本标记,AlloyDB 将始终使用最新的模型版本,这可能会导致意外结果。
SOURCE_TEXT_COLUMN
:存储要转换为嵌入的文本的列的名称
执行相似度搜索
您还可以使用 embedding()
函数将文本转换为向量。您可以将向量应用于 pgvector
近邻运算符 <->
,以查找语义最相似的嵌入数据库行。
由于 embedding()
会返回 real
数组,因此您必须将 embedding()
调用显式转换为 vector
,才能将这些值与 pgvector
运算符搭配使用。
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
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 IF NOT EXISTS google_ml_integration;
如果您使用
google_ml.embedding()
函数生成嵌入,请确保模型已注册,并且您在查询中使用的是正确的model_id
。