使用 SQL 生成机器学习预测

本页面介绍了如何根据 AI 原则生成机器学习 (ML) 预测, Spanner 数据库。机器学习预测适用于 GoogleSQL 和 PostgreSQL 数据库。

Spanner Vertex AI 集成使您能够使用 调用 ML.PREDICTspanner.ML_PREDICT_ROW 函数。如需详细了解 Spanner Vertex AI 集成,请参阅 Spanner Vertex AI 集成概览

准备工作

在通过 Spanner 实例生成预测之前, 您必须准备数据库并选择一个模型。

配置 Spanner Vertex AI 与 Vertex AI 端点的集成访问权限

Spanner 会创建服务代理并授予必要的权限 在 Spanner 执行第一个 MODEL DDL 语句时自动启动。如果 Spanner 数据库和 Vertex AI 端点都位于 相同项目,无需进行其他设置。

如果 Spanner 服务代理账号不存在, Spanner 项目,请通过运行 以下命令:

gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`

按照授予单个角色中所述的步骤操作, 将 Spanner API Service Agent 角色授予 Spanner 服务代理账号 service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com Vertex AI 项目。

选择型号

当您使用 ML.PREDICT(适用于 GoogleSQL)或 spanner.ML_PREDICT_ROW(对于 PostgreSQL)函数,您必须指定位置 机器学习模型。您选择的模型可以是以下类型之一:

如需详细了解 Spanner Vertex AI 集成,请参阅 Spanner Vertex AI 集成如何运作?

生成预测

根据所选模型的类型, 您的预测结果就会有所不同。

使用 Vertex AI Model Garden 中的模型

如需使用 Vertex AI Model Garden 中的模型生成预测, 从 Model Garden 中选择模型

GoogleSQL

通过 ML.PREDICT() 使用模型之前,需要注册模型 使用 CREATE MODEL 语句。

CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);

替换以下内容:

  • MODEL_NAME:您要为模型指定的名称

  • INPUT_COLUMN_NAME:输入列的名称。例如: 如果使用 gemini-pro 模型,输入列名称为 prompt

  • INPUT_COLUMN_TYPEINPUT_COLUMN_NAME 的数据类型

  • OUTPUT_COLUMN_NAME:输出列的名称。例如: 如果使用 gemini-pro 模型,则输出列名称为 content

  • OUTPUT_COLUMN_TYPEOUTPUT_COLUMN_NAME 的数据类型

  • PROJECT_ID:您的 Google Cloud 项目的 ID

  • REGION_ID:模型所在的 Google Cloud 区域的 ID 位置(例如 us-central1

  • MODEL_ID:您要使用的机器学习模型的 ID,例如 gemini-pro

    如需详细了解模型,请参阅 生成式 AI 的 Model API 参考文档

使用 ML.PREDICT 已选择模型的 GoogleSQL 函数 以生成您的预测。

SELECT * FROM ML.PREDICT(
  MODEL `MODEL_NAME`,
  `INPUT_RELATION`[, `PARAMETERS`])

替换以下内容:

  • MODEL_NAME:您要为模型指定的名称

    如需详细了解模型,请参阅 生成式 AI 的 Model API 参考文档

  • INPUT_RELATIONTABLE table_name,或提供数据的表或子查询 来运行机器学习预测。

  • PARAMETERS:包含参数的 STRUCT 值 由 model_id 支持。

您还可以使用 SAFE.ML.PREDICT 返回 null,而不是 您的预测。这在运行大型查询时非常有用 其中一些失败的预测是可以容忍的。

PostgreSQL

ML_PREDICT_ROW PostgreSQL 函数与选定的模型搭配使用 以生成您的预测。

SELECT spanner.ml_predict_row(
  'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
  '{
    "instances": [ INSTANCES ],
    "parameters": { PARAMETERS }
   }'::jsonb);

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID

  • REGION_ID:模型所在的 Google Cloud 区域的 ID 位置(例如 us-central1

  • MODEL_ID:您要使用的机器学习模型的 ID,例如 gemini-pro

    如需详细了解模型,请参阅 生成式 AI 的 Model API 参考文档

  • INSTANCES:预测调用的输入,采用 JSON 格式

  • PARAMETERS:预测调用的可选参数,采用 JSON 格式

此查询会生成 JSON 响应。如需详细了解 模型的 JSON 响应消息,请参阅 PredictResponse

使用 Vertex AI 模型端点

如需将经过训练或下载的模型与 Spanner Vertex AI 集成搭配使用,您需要部署该模型 Vertex AI。如需详细了解 如何将模型部署到 Vertex AI 中的端点,请参阅 将模型部署到端点

GoogleSQL

ML.PREDICT GoogleSQL 函数与模型结合使用 用于生成预测的 Vertex AI 端点。在使用 模型为 ML.PREDICT(),则需要使用 CREATE MODEL 声明。每个部署的模型都有自己唯一的 架构。以下是 分类和回归概览

CREATE MODEL MyClassificationModel
INPUT (
  length FLOAT64,
  material STRING(MAX),
  tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
  scores ARRAY<FLOAT64>,
  classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID

  • LOCATION:模型所在的 Google Cloud 区域的 ID 位置(例如 us-central1

  • ENDPOINT_ID:您要使用的机器学习模型的 ID,例如 gemini-pro

    如需详细了解模型,请参阅 生成式 AI 的 Model API 参考文档

使用 ML.PREDICT 已选择模型的 GoogleSQL 函数 以生成您的预测。

SELECT * FROM ML.PREDICT(
  `MODEL_ID`,
  `INPUT_RELATION`[, `PARAMETERS`])

替换以下内容:

  • MODEL_ID:您要使用的机器学习模型的 ID。

  • INPUT_RELATION:所需的表或子查询 来运行机器学习预测。

  • PARAMETERS:包含参数的 STRUCT 值 由 model_name 支持。

此查询生成一个关系,其中包含模型的所有输出列和 输入关系的所有列。

PostgreSQL

ML.PREDICT PostgreSQL 函数与模型搭配使用 用于生成预测的 Vertex AI 端点。

  SELECT spanner.ml_predict_row(
    'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
    '{
      "instances": [ INSTANCES ],
      "parameters": { PARAMETERS }
      }'::jsonb);
  ```

Replace the following:
  • PROJECT_ID:模型所属的 Google Cloud 项目的 ID 位于

  • REGION_ID:模型所在的 Google Cloud 区域的 ID 位置(例如 us-central1

  • ENDPOINT_ID:模型端点的 ID

  • INSTANCES:预测调用的输入,采用 JSON 格式

  • PARAMETERS:预测调用的可选参数,采用 JSON 格式

此查询会生成 JSON 响应。如需详细了解 模型的 JSON 响应消息,请参阅 PredictResponse

使用机器学习函数生成预测的示例

以下示例使用 gemini-pro 模型, 来根据简短的提示生成文本, (以参数形式提供)。此模型是 Spanner 中的 Gemini。

GoogleSQL

注册 gemini-pro 模型

CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
  default_batch_size = 1
);

替换以下内容:

  • PROJECT:项目 ID
  • LOCATION:您使用 Vertex AI 的区域

运行模型

SELECT content
FROM ML.PREDICT(
  MODEL GeminiPro,
  (SELECT "Is 7 a prime number?" AS prompt),
  STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);

预期输出

预期输出如下:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+

PostgreSQL

运行模型

select spanner.ml_predict_row(
  '{
    "endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
    "default_batch_size": 1
   }'::jsonb,
  '{
    "instances":[{"prompt": "Is 7 a prime number?"}],
    "parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
    }'
);

预期输出

预期结果如下:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+