AlloyDB データベースからオンライン予測を呼び出す

このページでは、AlloyDB for PostgreSQL データベースからオンライン予測を呼び出す方法について説明します。

AlloyDB では、ml_predict_row() 関数を呼び出すことで、SQL コードでオンライン予測を取得できます。AlloyDB での ML モデルの使用の詳細については、生成 AI アプリケーションを作成するをご覧ください。

始める前に

AlloyDB データベースからオンライン予測を呼び出すには、データベースを準備して、適切な ML モデルを選択する必要があります。

データベースを準備する

  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 モデルを選択する

ml_predict_row() 関数を呼び出すときに、ML モデルの場所を指定する必要があります。指定するモデルは次のいずれかです。

  • Vertex AI Model Garden で実行されているモデル。

    ml_predict_row() 関数は、表形式モデルまたはカスタムモデルでのみ予測の呼び出しをサポートしています。

  • Identity and Access Management(IAM)のアクセス権限があるアクティブなエンドポイントを持つ Vertex AI モデル。

    AlloyDB は、オンライン予測を取得するためのプライベート エンドポイントをサポートしていません。

オンライン予測を呼び出す

ml_predict_row() SQL 関数を使用して、データに対するオンライン予測を呼び出します。

関数の最初の引数の形式は、使用する ML モデルが Vertex AI Model Garden にあるか、プロジェクトで実行されているエンドポイントかによって異なります。 Google Cloud

Vertex AI Model Garden でモデルを使用する

Vertex AI Model Garden で実行されている ML モデルを使用してオンライン予測を呼び出すには、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: モデルが配置されているリージョンの ID(例: gemini-pro の場合は us-central1)。 Google Cloud

  • MODEL_ID: 使用する ML モデルの ID(例: gemini-pro)

  • CONTENTS: JSON 形式の予測呼び出しの入力

ML モデルが 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: モデルが配置されているリージョンの ID( Google Cloud など)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 テーブルの各行について 1 つのエントリが含まれるようになりました。

レスポンスは 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 を使用したクイックスタートをご覧ください。