从 AlloyDB 数据库调用在线预测

本页介绍了如何从 AlloyDB for PostgreSQL 数据库调用在线预测。

AlloyDB 可让您通过调用 ml_predict_row() 函数,在 SQL 代码中进行在线预测。如需详细了解如何将机器学习 (ML) 模型与 AlloyDB 搭配使用,请参阅构建生成式 AI 应用

准备工作

您必须先准备好数据库并选择合适的机器学习模型,然后才能从 AlloyDB 数据库中调用在线预测。

准备数据库

  1. 设置数据库与 Vertex AI 之间的集成。

  2. 向数据库用户授予执行 ml_predict_row() 函数以运行预测的权限:

    1. 按照将 psql 客户端连接到实例中所述,将 psql 客户端连接到集群的主实例。

    2. 在 psql 命令提示符下,连接到数据库并授予权限:

      \c DB_NAME
      
      GRANT EXECUTE ON FUNCTION ml_predict_row TO USER_NAME;
      

      替换以下内容:

      • DB_NAME:应授予权限的数据库的名称

      • USER_NAME:应为其授予权限的用户的名称

选择机器学习模型

调用 ml_predict_row() 函数时,您必须指定机器学习模型的位置。您指定的模型可以是以下任一模型:

  • Vertex AI Model Garden 中运行的模型。

    ml_predict_row() 函数仅支持对表格模型或自定义模型调用预测。

  • 具有您拥有 Identity and Access Management (IAM) 权限访问的活跃端点的 Vertex AI 模型。

    AlloyDB 不支持使用专用端点进行在线预测。

调用在线预测

使用 ml_predict_row() SQL 函数根据数据调用在线预测。

函数的初始参数的格式取决于您要使用的机器学习模型是位于 Vertex AI Model Garden 中,还是在 Google Cloud 项目中运行的端点。

使用 Vertex AI Model Garden 中的模型

如需使用在 Vertex AI Model Garden 中运行的机器学习模型调用在线预测,请对 ml_predict_row() SQL 函数使用以下语法:

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{ CONTENTS }');

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID

  • REGION_ID:模型所在的 Google Cloud 区域的 ID;例如,us-central1(适用于 gemini-pro)

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

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

如果机器学习模型存储在与 AlloyDB 集群相同的项目和区域中,则可以缩写此函数的第一个参数:

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ CONTENTS }');

如需了解模型的 JSON 响应消息,请参阅生成式 AI 基础模型参考文档

如需查看示例,请参阅调用示例

使用 Vertex AI 模型端点

如需使用 Vertex AI 模型端点调用在线预测,请对 ml_predict_row() SQL 函数使用以下语法:

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID', '{ CONTENTS }');

替换以下内容:

  • PROJECT_ID:模型所在的 Google Cloud 项目的 ID

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

  • ENDPOINT_ID:模型端点的 ID

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

如果端点位于与 AlloyDB 集群相同的项目和区域,则可以缩写此函数的第一个参数:

SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');

如需了解模型的 JSON 响应消息,请参阅 PredictResponse

调用示例

以下示例使用 Model Garden 中提供的 gemini-pro,根据作为字面量参数提供给 ml_predict_row() 的简短提示生成文本:

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', '{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "What is AlloyDB?"
    }]
  }]
}');

响应一个 JSON 对象。如需详细了解该对象的格式,请参阅响应正文

以下示例在以下方面修改了前面的示例:

  • 该示例将当前数据库的 messages.message 列的内容用作输入。

  • 该示例演示了如何使用 json_build_object() 函数来帮助设置函数参数的格式。


select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message))) from messages;

返回的 JSON 对象现在在其 predictions 数组中针对 messages 表中的每一行包含一个条目。

由于响应是一个 JSON 对象,因此您可以使用 PostgreSQL 数组运算符从中拉取特定字段:

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;

如需查看 ml_predict_row() 的更多示例参数,请参阅快速入门:使用 Vertex AI API