Cloud SQL インスタンスからオンライン予測を呼び出す

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

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

始める前に

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

データベースを準備する

データベースを準備するには、Cloud SQL と Vertex AI の統合を設定します

ML モデルを選択する

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

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

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

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

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

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

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

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

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

Vertex AI Model Garden で実行されている ML モデルを使用してオンライン予測を呼び出すには、mysql.ml_predict_row() SQL 関数に次の構文を使用します。

SELECT mysql.ML_PREDICT_ROW('publishers/google/models/MODEL_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');

次のように置き換えます。

  • MODEL_ID: 使用する ML モデルの ID(gemini-2.0 など)

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

  • PARAMETERS: JSON 形式の予測呼び出しのパラメータ

SELECT mysql.ML_PREDICT_ROW('publishers/google/models/MODEL_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');
モデルの JSON レスポンス メッセージについては、生成 AI の基盤モデルのリファレンスをご覧ください。例については、呼び出しの例をご覧ください。

Vertex AI モデル エンドポイントを使用する

Vertex AI モデル エンドポイントを使用してオンライン予測を呼び出すには、mysql.ml_predict_row() SQL 関数に次の構文を使用します。

SELECT mysql.ML_PREDICT_ROW('endpoints/ENDPOINT_ID', '{ "instances": [ INSTANCES ], "parameters":
PARAMETERS }');

次の項目を置き換えます。

  • ENDPOINT_ID: モデルのエンドポイントの ID

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

  • PARAMETERS: JSON 形式の予測呼び出しのパラメータ

モデルの JSON レスポンス メッセージについては、PredictResponse をご覧ください。

呼び出しの例

次の例では、Model Garden で利用可能な PaLM 2 for Text を使用して、mysql.ml_predict_row() にリテラル引数として指定された短いプロンプトに基づいてテキストを生成します。

sql select mysql.ML_PREDICT_ROW('publishers/google/models/gemini-2.0-flash:generateContent', '{ "contents": [{ "role": "user", "parts": [{ "text": "Write me a short poem about MySQL" }] }] }');

レスポンスは JSON オブジェクトです。オブジェクトの形式の詳細については、レスポンス本文をご覧ください。

次の例では、前の例を次のように変更しています。

  • この例では、現在のデータベースの messages.message 列の内容を入力として使用します。

  • この例では、関数のパラメータをフォーマットする際に json_object() 関数を使用する方法を示しています。

select mysql.ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison', json_object('instances', json_object('prompt', message), 'parameters', json_object('maxOutputTokens', 1024,'topK', 40,'topP', 0.8,'temperature', 0.2))) from messages;

messages テーブルの各行について、返された JSON オブジェクトの predictions 配列に 1 つのエントリが含まれるようになりました。

レスポンスは JSON オブジェクトであるため、特定のフィールドを取得できます。

select JSON_EXTRACT(mysql.ml_PREDICT_ROW('publishers/google/models/gemini-2.0-flash:generateContent', JSON_OBJECT(
  'contents', JSON_ARRAY(
    JSON_OBJECT(
      'role', 'user',
      'parts', JSON_ARRAY(
        JSON_OBJECT(
          'text', message
        )
      )
    )
  )
)), '$.candidates[0].content.parts[0].text') from messages;

ml_predict_row() の引数の例については、Vertex AI Gemini API を試すをご覧ください。

次のステップ