Cloud SQL でのリモート AI モデルの登録と呼び出しの概要

このページでは、Cloud SQL で AI モデル エンドポイントを登録し、モデル エンドポイント管理を使用して予測を呼び出す方法について説明します。本番環境で AI モデルを使用するには、Cloud SQL を使用して生成 AI アプリケーションを構築するベクトル エンベディングを使用するをご覧ください。

概要

モデル エンドポイント管理を使用すると、モデル エンドポイントを登録して、Cloud SQL インスタンスでモデル エンドポイントのメタデータを管理し、SQL クエリでモデルを操作できます。Cloud SQL には google_ml_integration 拡張機能が用意されています。この機能により、モデルに関連するモデル エンドポイント メタデータを追加して登録する関数を実行できます。これらのモデルを使用することで、ベクトル エンベディングを生成したり、予測を呼び出したりできます。

モデル エンドポイント管理では、次のモデルタイプを登録できます。

  • Vertex AI テキスト エンベディング モデル。
  • Google Cloud内のネットワークにホストされているカスタム ホスト テキスト エンベディング モデル。
  • JSON ベースの API を使用した汎用モデル。このようなモデルの例を以下に示します。
    • Vertex AI Model Garden の gemini-pro モデル
    • OpenAI モデルの open_ai モデル
    • Google Cloud内のネットワークにホストされているモデル

仕組み

モデル エンドポイント管理を使用すると、次の要件を満たすモデル エンドポイントを登録できます。

  • モデルの入力と出力は JSON 形式をサポートしています。
  • モデルを呼び出すのに REST プロトコルを使用できます。

モデル エンドポイント管理にモデル エンドポイントを登録すると、モデル エンドポイント管理は、モデルへの参照として一意のモデル ID を使用して各エンドポイントを登録します。このモデル ID を使用すると、次のようにモデルをクエリできます。

  • エンベディングを生成して、テキスト プロンプトを数値ベクトルに変換します。データベースで pgvector 拡張機能が有効になっている場合、生成されたエンベディングをベクトルデータとして保存できます。詳細については、pgvector を使用してエンベディングをクエリしてインデックスに登録するをご覧ください。

  • 予測を呼び出し、トランザクション内で SQL を使用してモデルを呼び出します。

アプリケーションは、google_ml_integration 拡張機能を使用してモデル エンドポイントを管理できます。この拡張機能では、次の SQL 関数を使用できます。

  • google_ml.create_model(): 予測関数またはエンベディング関数で使用されるモデル エンドポイントを登録します。
  • google_ml.create_sm_secret(): API キーが保存されている Google CloudSecret Manager のシークレットを使用します。
  • google_ml.embedding(): テキスト エンベディングを生成します。
  • google_ml.predict_row(): JSON の入力形式と出力形式をサポートする汎用モデルを呼び出すときに予測を生成します。

主なコンセプト

モデル エンドポイント管理を使い始める前に、モデルに接続して使用するために必要なコンセプトを理解しておく必要があります。

モデル プロバイダ

モデル プロバイダは、サポートされているモデルのホスティング プロバイダです。次の表に、使用するモデル プロバイダごとに設定が必要なモデル プロバイダの値を示します。

モデル プロバイダ 関数での設定…
Vertex AI(Gemini を含む) google
OpenAI open_ai
Vertex AI の外部でホストされているその他のモデル custom

デフォルトのモデル プロバイダは custom です。

モデルタイプ

モデルタイプは、AI モデルのタイプです。モデル エンドポイントを登録するときに、エンドポイントのモデルタイプとして text-embedding または generic を設定できます。

組み込みサポートのあるテキスト エンベディング モデル
モデル エンドポイント管理には、textembedding-gecko モデルのすべてのバージョンが組み込まれています。これらのモデル エンドポイントを登録するには、google_ml.create_model() 関数を使用します。Cloud SQL は、これらのモデルのデフォルトの変換関数を自動的に設定します。
これらのモデルのモデルタイプは text-embedding です。
その他のテキスト エンベディング モデル
他のテキスト エンベディング モデルの場合は、モデルがサポートする入力形式と出力形式を処理する変換関数を作成する必要があります。必要に応じて、HTTP ヘッダー生成関数を使用して、モデルに必要なカスタム ヘッダーを生成できます。
これらのモデルのモデルタイプは text-embedding です。
汎用モデル
モデル エンドポイント管理では、テキスト エンベディング モデルを除くすべてのモデルタイプを登録できます。汎用モデルの予測を呼び出すには、google_ml.predict_row() 関数を使用します。モデル固有のリクエスト エンドポイントや HTTP ヘッダーなど、モデル エンドポイントのメタデータを設定できます。
汎用モデル エンドポイントを登録するときに変換関数を渡すことはできません。予測を呼び出す前に、関数への入力が JSON 形式であることと、JSON 出力を解析して最終出力を導出していることを確認します。
これらのモデルのモデルタイプは generic です。generic はデフォルトのモデルタイプであるため、このタイプのモデル エンドポイントを登録する場合、モデルタイプの設定は省略可能です。

認証方法

google_ml_integration 拡張機能を使用すると、モデルにアクセスするためのさまざまな認証方法を指定できます。これらのメソッドの設定は省略可能です。モデルにアクセスするために認証が必要な場合にのみ必要です。

Vertex AI モデルの場合、認証には Cloud SQL サービス アカウントが使用されます。他のモデルでは、Secret Manager にシークレットとして保存されている API キーまたは署名なしトークンを google_ml.create_sm_secret() SQL 関数で使用できます。

次の表に、設定可能な認証方法を示します。

認証方法 関数での設定… モデル プロバイダ
Cloud SQL サービス エージェント cloudsql_service_agent_iam Vertex AI プロバイダ
Secret Manager secret_manager Vertex AI の外部でホストされているモデル

予測関数

google_ml_integration 拡張機能には、次の予測関数が含まれています。

google_ml.embedding()
登録されたテキスト エンベディング モデル エンドポイントを呼び出してエンベディングを生成します。Vertex AI の textembedding-gecko モデルに対する組み込みサポートも含まれます。
組み込みサポートのないテキスト エンベディング モデルの場合、入力パラメータと出力パラメータはモデルに固有であり、関数でモデルを呼び出すには変換する必要があります。予測関数の入力をモデル固有の入力に変換する入力変換関数と、モデル固有の出力を予測関数出力に変換する出力変換関数を作成します。
google_ml.predict_row()
登録された汎用モデル エンドポイントを呼び出します(エンドポイントが予測を呼び出す JSON ベースの API をサポートしている場合)。

変換関数

変換関数は、入力をモデルが理解できる形式に変更し、モデルのレスポンスを予測関数が想定する形式に変換します。変換関数は、組み込みサポートなしで text-embedding モデル エンドポイントを登録する場合に使用されます。変換関数の署名は、モデルタイプの予測関数によりも異なります。

generic モデル エンドポイントを登録するときに変換関数を使用できません。

次のコードは、テキスト エンベディング モデルの予測関数の署名を示しています。

// define custom model specific input/output transform functions.
CREATE OR REPLACE FUNCTION input_transform_function(model_id VARCHAR(100), input_text TEXT) RETURNS JSON;

CREATE OR REPLACE FUNCTION output_transform_function(model_id VARCHAR(100), response_json JSON) RETURNS real[];

変換関数の作成方法については、変換関数の例をご覧ください。

HTTP ヘッダー生成関数

HTTP ヘッダー生成関数は、HTTP ヘッダーとして使用される JSON Key-Value ペアで出力を生成します。予測関数の署名は、ヘッダー生成関数の署名を定義します。

次の例は、google_ml.embedding() 予測関数の署名を示しています。

CREATE OR REPLACE FUNCTION generate_headers(model_id VARCHAR(100), input TEXT) RETURNS JSON;

google_ml.predict_row() 予測関数の署名は次のとおりです。

CREATE OR REPLACE FUNCTION generate_headers(model_id VARCHAR(100), input JSON) RETURNS JSON;

ヘッダー生成関数の作成方法については、ヘッダー生成関数の例をご覧ください。

制限事項

  • Cloud SQL インスタンスで AI モデルを使用するには、インスタンスのメンテナンス バージョンが R20240910.01_02 以降である必要があります。インスタンスをこのバージョンにアップグレードするには、セルフサービス メンテナンスをご覧ください。

次のステップ