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

本页介绍了如何在 Cloud SQL 中注册 AI 模型端点并使用模型端点管理功能调用预测。如需在生产环境中使用 AI 模型,请参阅使用 Cloud SQL 构建生成式 AI 应用处理向量嵌入

概览

借助模型端点管理功能,您可以注册模型端点、在 Cloud SQL 实例中管理模型端点元数据,然后使用 SQL 查询与模型交互。Cloud SQL 提供了 google_ml_integration 扩展程序,其中包含用于添加和注册与模型相关的模型端点元数据的函数。您可以使用这些模型生成向量嵌入或调用预测。

您可以使用模型端点管理功能注册以下模型类型:

  • Vertex AI 文本嵌入模型。
  • 在 Google Cloud 中的网络中托管的自定义文本嵌入模型。
  • 使用基于 JSON 的 API 的通用模型。此类模型的示例包括:
    • Vertex AI Model Garden 中的 gemini-pro 模型
    • 适用于 OpenAI 模型的 open_ai 模型
    • 在 Google Cloud 网络中托管的模型

工作原理

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

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

当您向模型端点管理服务注册模型端点时,模型端点管理服务会为每个端点注册一个唯一的模型 ID,以用作对该模型的引用。您可以使用此模型 ID 查询模型,如下所示:

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

  • 调用预测以在事务中使用 SQL 调用模型。

您的应用可以使用 google_ml_integration 扩展程序管理其模型端点。此扩展程序提供以下 SQL 函数:

  • google_ml.create_model():注册在预测或嵌入函数中使用的模型端点
  • google_ml.create_sm_secret():使用 Google Cloud Secret Manager 中的密文(API 密钥存储在其中)
  • google_ml.embedding():生成文本嵌入
  • google_ml.predict_row():在您调用支持 JSON 输入和输出格式的通用模型时生成预测

主要概念

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

模型提供方

模型提供方是指受支持的模型托管提供方。下表显示了您必须根据所使用的模型提供程序设置的模型提供程序值:

模型提供方 在函数中设置为…
Vertex AI(包括 Gemini) google
OpenAI open_ai
在 Vertex AI 之外托管的其他模型 custom

默认模型提供程序为 custom

模型类型

模型类型是指 AI 模型的类型。注册模型端点时,您可以为端点设置 text-embeddinggeneric 模型类型。

内置支持的文本嵌入模型
模型端点管理为 textembedding-gecko 模型的所有版本提供了内置支持。如需注册这些模型端点,请使用 google_ml.create_model() 函数。Cloud SQL 会自动为这些模型设置默认转换函数。
这些模型的模型类型为 text-embedding
其他文本嵌入模型
对于其他文本嵌入模型,您需要创建转换函数来处理模型支持的输入和输出格式。(可选)您可以使用 HTTP 标头生成函数,该函数会生成模型所需的自定义标头。
这些模型的模型类型为 text-embedding
通用模型
除了文本嵌入模型之外,模型端点管理还支持注册所有其他类型的模型。如需针对通用模型调用预测,请使用 google_ml.predict_row() 函数。您可以设置模型端点元数据,例如特定于模型的请求端点和 HTTP 标头。
注册通用模型端点时,您无法传递转换函数。确保在调用预测时,函数的输入采用 JSON 格式,并且您会解析 JSON 输出以派生最终输出。
这些模型的模型类型为 generic。由于 generic 是默认的模型类型,因此如果您为此类型注册模型端点,则设置模型类型是可选的。

身份验证方法

您可以使用 google_ml_integration 扩展指定不同的身份验证方法来访问您的模型。设置这些方法是可选的,只有在您需要进行身份验证才能访问模型时才需要设置。

对于 Vertex AI 模型,Cloud SQL 服务账号用于身份验证。对于其他模型,存储在 Secret Manager 中作为 Secret 的 API 密钥或 Bearer 令牌可与 google_ml.create_sm_secret() SQL 函数搭配使用。

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

身份验证方法 在函数中设置为… 模型提供方
Cloud SQL 服务代理 cloudsql_service_agent_iam Vertex AI 提供程序
Secret Manager secret_manager 在 Vertex AI 之外托管的模型

预测函数

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

google_ml.embedding()
调用已注册的文本嵌入模型端点以生成嵌入。它内置了对 Vertex AI textembedding-gecko 模型的支持。
对于不受内置支持的文本嵌入模型,输入和输出参数是模型特有的,需要进行转换,以便函数调用模型。创建一个转换输入函数,用于将预测函数的输入转换为特定于模型的输入,并创建一个转换输出函数,用于将特定于模型的输出转换为预测函数输出。
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;

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

限制

  • 如需将 AI 模型与 Cloud SQL 实例搭配使用,实例的维护版本必须为 R20240910.01_02 或更高版本。如需将实例升级到此版本,请参阅自助维护

后续步骤