AlloyDB 概览:注册和调用远程 AI 模型

本页介绍了在使用模型端点管理功能注册 AI 模型端点并调用预测之前,您必须了解的关键概念。

如需向 AlloyDB Omni 注册远程模型端点,请参阅在 AlloyDB Omni 中注册和调用远程 AI 模型

概览

借助模型端点管理,您可以注册模型端点、在数据库集群中管理模型端点元数据,以及使用 SQL 查询调用远程模型端点。它提供了 google_ml_integration 扩展程序,其中包含可让您向 AlloyDB 注册与 AI 模型相关的元数据的函数。此注册的元数据用于生成向量嵌入或调用预测。

您可以使用模型端点管理功能注册的部分模型类型示例如下:

  • Vertex AI 文本嵌入和通用模型
  • 第三方提供商(例如 Hugging Face 或 OpenAI)提供的嵌入模型
  • 自定义托管的文本嵌入模型,包括自托管模型或通过专用端点提供的模型
  • 使用基于 JSON 的 API 的通用模型,例如托管在 Hugging Face 上的 facebook/bart-large-mnli 模型、Vertex AI Model Garden 中的 gemini-pro 模型或 Anthropic 的 claude 模型

工作原理

您可以使用模型端点管理功能注册符合以下条件的模型端点:

  • 模型输入和输出支持 JSON 格式。
  • 可以使用 REST 协议调用模型。

当您向模型端点管理服务注册模型端点时,它会为每个端点注册一个唯一的模型 ID,您可以将该 ID 用作模型的参考。

您可以使用模型端点 ID 查询模型,以便:

  • 生成嵌入以将文本提示转换为数值向量。在数据库中启用 vector 扩展程序后,您可以将生成的嵌入存储为向量数据。如需了解详情,请参阅使用 pgvector 查询嵌入并将其编入索引

  • 使用 SQL 调用预测。

您的应用可以使用 google_ml_integration 扩展程序访问模型端点管理功能。此扩展程序提供以下功能:

  • google_ml.create_model() SQL 函数,用于注册在预测或嵌入函数中使用的模型端点。
  • google_ml.create_sm_secret() SQL 函数,该函数使用存储 API 密钥的 Google CloudSecret Manager 中的密钥。
  • google_ml.embedding() SQL 函数,这是一个用于生成文本嵌入的预测函数。嵌入函数的返回值类型为 REAL[]
  • google_ml.predict_row() SQL 函数,用于在您调用支持 JSON 输入和输出格式的通用模型时生成预测结果。
  • 用于处理生成自定义网址、生成 HTTP 标头或传递转换函数的其他辅助函数。
  • 用于管理已注册的模型端点和密文的函数。

主要概念

在开始使用模型端点管理功能之前,请先了解连接到模型和使用模型所需的概念。

模型提供方

模型提供方表示支持的模型托管提供方。设置模型提供程序是可选的,但有助于模型端点管理识别提供程序,并为受支持的模型自动设置标头格式。下表显示了您可以根据所使用的模型提供程序设置的模型提供程序值:

模型提供方 在函数中设置为…
Vertex AI google
Hugging Face 模型 hugging_face
Anthropic 模型 anthropic
OpenAI open_ai
其他模型 custom

默认模型提供程序为 custom

支持的身份验证方法因提供方类型而异。Vertex AI 模型使用 AlloyDB 服务账号进行身份验证,而其他提供商可以使用 Secret Manager 或通过标头传递身份验证详细信息。如需了解详情,请参阅设置身份验证

模型类型

模型类型表示 AI 模型的类型。该扩展程序支持文本嵌入以及任何通用模型类型。您可以在注册模型端点时设置的支持的模型类型为 text-embeddinggeneric

注册通用模型端点时,设置模型类型是可选的,因为 generic 是默认的模型类型。

预注册的 Vertex AI 模型
模型端点管理支持将某些文本嵌入模型和通用 Vertex AI 模型作为预注册的模型 ID。您可以根据模型类型直接使用模型 ID 生成嵌入或调用预测。
如需详细了解受支持的预注册模型,请参阅预注册的 Vertex AI 模型

例如,如需调用预注册的 textembedding-gecko 模型,您可以使用嵌入函数直接调用该模型:

SELECT
      google_ml.embedding(
        model_id => 'textembedding-gecko',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');
内置支持的模型
模型端点管理功能为 Vertex AI、Anthropic 和 OpenAI 提供的部分模型提供了内置支持。对于内置支持的文本嵌入模型,AlloyDB 会自动设置默认的转换函数。
注册这些模型端点时,请显式设置限定名称。如需详细了解内置支持的模型列表,请参阅内置支持的模型
这些模型的模型类型可以是 text-embeddinggeneric
其他文本嵌入模型
如需注册不受内置支持的文本嵌入模型端点,我们建议您创建转换函数来处理模型支持的输入和输出格式。您还可以根据模型要求,创建自定义标头函数来指定标头。
这些模型的模型类型为 text-embedding
通用模型
除了文本嵌入模型之外,模型端点管理还支持注册所有其他类型的模型。如需针对通用模型调用预测,请使用 google_ml.predict_row() 函数。您可以设置模型端点元数据,例如特定于模型的请求端点和 HTTP 标头。
注册通用模型端点时,您无法传递转换函数。确保在调用预测时,函数的输入采用 JSON 格式,并且您会解析 JSON 输出以派生最终输出。
这些模型的模型类型为 generic

身份验证

身份验证类型表示您可以使用哪种身份验证类型通过 google_ml_integration 扩展程序连接到模型端点管理。设置身份验证是可选操作,只有在您需要进行身份验证才能访问模型时才需要进行设置。

对于 Vertex AI 模型,AlloyDB 服务账号用于身份验证。对于其他模型,存储在 Secret Manager 中作为 Secret 的 API 密钥或 Bearer 令牌可与 google_ml.create_sm_secret() SQL 函数搭配使用。如果您要通过标头传递身份验证信息,则可以跳过设置身份验证方法。

下表显示了您可以设置的身份验证类型:

身份验证方法 在函数中设置为… 模型提供方
AlloyDB 服务代理 alloydb_service_agent_iam Vertex AI 提供商
Secret Manager secret_manager 第三方提供商,例如 Anthropic、Hugging Face 或 OpenAI

预测函数

google_ml_integration 扩展程序包含以下预测函数:

google_ml.embedding()
用于调用已注册的文本嵌入模型端点以生成嵌入。
对于不受内置支持的文本嵌入模型,输入和输出参数是模型特有的,需要进行转换,以便函数调用模型。您必须创建一个转换输入函数,用于将预测函数的输入转换为特定于模型的输入,以及一个转换输出函数,用于将特定于模型的输出转换为预测函数输出。
google_ml.predict_row()
用于调用已注册的通用模型端点(只要模型支持基于 JSON 的 API),以调用预测。

转换函数

转换函数会将输入修改为模型可以理解的格式,并将模型响应转换为预测函数预期的格式。在注册不受内置支持的 text-embedding 模型端点时,需要使用转换函数。转换函数的签名取决于模型预期的输入。

注册 generic 模型端点时,您无法使用转换函数。

以下是文本嵌入模型的预测函数的签名:

// define custom model specific input/output transform functions.
CREATE OR REPLACE FUNCTION input_transform_function(model_id VARCHAR(100), input_text TEXT) RETURNS JSON;

CREATE OR REPLACE FUNCTION output_transform_function(model_id VARCHAR(100), response_json JSON) RETURNS real[];

如需详细了解如何创建转换函数,请参阅转换函数示例

HTTP 标头生成函数

HTTP 标头生成函数会以 JSON 键值对的形式生成输出,这些输出将用作 HTTP 标头。预测函数的签名定义了标头生成函数的签名。

以下示例展示了 google_ml.embedding() 预测函数的签名。

CREATE OR REPLACE FUNCTION generate_headers(model_id VARCHAR(100), input TEXT) RETURNS JSON;

对于 google_ml.predict_row() 预测函数,签名如下:

CREATE OR REPLACE FUNCTION generate_headers(model_id VARCHAR(100), input JSON) RETURNS JSON;

如需详细了解如何创建标头生成函数,请参阅标头生成函数示例

后续步骤