このページでは、public
名前空間と google_ml
名前空間の関数を使用して予測を呼び出す方法について説明します。google_ml_integration
拡張機能には、これらの名前空間の予測関数が含まれています。
public
スキーマの ml_predict_row()
関数は、エンドポイントを登録せずに Vertex AI でホストされている任意の汎用モデルで使用できます。google_ml
スキーマの google_ml.predict_row()
関数は、モデル エンドポイント管理に登録されている任意のモデルで使用できます。
予測を呼び出すには、次のいずれかのスキーマを選択します。
始める前に
AlloyDB で予測を呼び出すには、次の操作を行います。
- 予測は、Vertex AI の生成 AI が利用可能なリージョンで呼び出すことができます。使用可能なリージョンの一覧については、Vertex AI の生成 AI のロケーションをご覧ください。
psql
を使用するか、AlloyDB for PostgreSQL Studio を使用してデータベースに接続します。google_ml_integration
拡張機能がインストールされていることを確認します。google_ml_integration.enable_model_support
フラグがon
に設定されていることを確認します。- AlloyDB データベースから予測を呼び出すには、Vertex AI と連携するよう AlloyDB を構成する必要があります。詳細については、データベースを Vertex AI と統合するをご覧ください。
- Identity and Access Management(IAM)のアクセス権限があるアクティブなエンドポイントを持つアクティブな Vertex AI モデルが必要です。AlloyDB は、オンライン予測を取得するためのプライベート エンドポイントをサポートしていません。
データベース ユーザーに、予測関数を実行して予測を呼び出す権限を付与します。
\c DB_NAME; GRANT EXECUTE ON FUNCTION ml_predict_row TO USER_NAME;
次のように置き換えます。
DB_NAME: 権限を付与するデータベースの名前
USER_NAME: 権限を付与するユーザーの名前
オンライン予測を呼び出す
ml_predict_row()
SQL 関数を使用して、データに対するオンライン予測を呼び出します。
関数の最初の引数の形式は、使用する ML モデルが Vertex AI Model Garden にあるか、 Google Cloud プロジェクトで実行されているエンドポイントかによって異なります。
Vertex AI Model Garden でモデルを使用する
Vertex AI Model Garden で実行されている ML モデルを使用してオンライン予測を呼び出すには、google_ml.predict_row()
SQL 関数に次の構文を使用します。
SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{ CONTENTS }');
次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクトの IDREGION_ID
: モデルが配置されている Google Cloud リージョンの ID。例: gemini-pro の場合はus-central1
MODEL_ID
: 使用する ML モデルの ID。例: gemini-proCONTENTS
: 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 プロジェクトの IDREGION_ID
: モデルが配置されている Google Cloud リージョンの ID。例:us-central1
ENDPOINT_ID
: モデル エンドポイントの IDCONTENTS
: JSON 形式の予測呼び出しの入力
エンドポイントが AlloyDB クラスタと同じプロジェクトとリージョンにある場合は、この関数の最初の引数を省略できます。
SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');
モデルの JSON レスポンス メッセージについては、PredictResponse をご覧ください。
呼び出しの例
次の例では、Model Garden で利用可能な gemini-pro を使用して、ml_predict_row()
にリテラル引数として指定された短いプロンプトに基づいてテキストを生成します。
SELECT
json_array_elements(ml_predict_row('publishers/google/models/gemini-1.5-pro:streamGenerateContent',
'{ "contents": [ { "role": "user", "parts": [ { "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation."
} ] } ] }'))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';
レスポンスは JSON オブジェクトです。オブジェクトの形式の詳細については、レスポンス本文をご覧ください。
次の例では、前の例を次のように変更しています。
この例では、現在のデータベースの
messages.message
列の内容を入力として使用します。この例では、関数のパラメータをフォーマットする際に
json_build_object()
関数を使用する方法を示しています。
select ml_predict_row('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-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.5-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;
ml_predict_row()
の引数の例については、Vertex AI API を使用したクイックスタートをご覧ください。