AlloyDB Omni でリモート AI モデルを登録して呼び出す

このページでは、AI モデル エンドポイントを登録し、モデル エンドポイント管理で予測を呼び出す前に知っておく必要のある主なコンセプトについて説明します。

AlloyDB にリモートモデル エンドポイントを登録するには、AlloyDB でリモート AI モデルを登録して呼び出すをご覧ください。

概要

モデル エンドポイント管理を使用すると、モデル エンドポイントを登録し、データベース クラスタでモデル エンドポイントのメタデータを管理し、SQL クエリを使用してリモートモデル エンドポイントを呼び出すことができます。AI モデルに関連するメタデータを AlloyDB に登録できる関数を含む google_ml_integration 拡張機能を提供します。この登録済みメタデータは、ベクトル エンベディングの生成や予測の呼び出しに使用されます。

モデル エンドポイント管理を使用して登録できるモデルタイプの例を次に示します。

  • Vertex AI テキスト エンベディングと汎用モデル
  • Hugging Face や OpenAI などのサードパーティ プロバイダが提供するエンベディング モデル
  • カスタム ホスト型テキスト エンベディング モデル(セルフホスト型モデルやプライベート エンドポイントで利用可能なモデルなど)
  • JSON ベースの API を使用する汎用モデル(Hugging Face でホストされている facebook/bart-large-mnli モデル、Vertex AI Model Garden の gemini-pro モデル、Anthropic の claude モデルなど)

仕組み

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

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

モデル エンドポイントをモデル エンドポイント管理に登録すると、モデルへの参照として指定した一意のモデル ID を使用して各エンドポイントが登録されます。

モデルのエンドポイント ID を使用してモデルをクエリすると、次のことができます。

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

  • google_ml.create_model() SQL 関数。予測関数またはエンベディング関数で使用されるモデル エンドポイントを登録するために使用されます。
  • google_ml.create_sm_secret() SQL 関数。API キーが保存されている Google CloudSecret Manager のシークレットを使用します。
  • google_ml.embedding() SQL 関数。テキスト エンベディングを生成する予測関数です。エンベディング関数の戻り値の型は REAL[] です。
  • JSON の入力形式と出力形式をサポートする汎用モデルを呼び出すときに予測を生成する google_ml.predict_row() SQL 関数。
  • カスタム URL の生成、HTTP ヘッダーの生成、変換関数の渡しを処理するその他のヘルパー関数。
  • 登録されたモデル エンドポイントとシークレットを管理する関数。

主なコンセプト

モデル エンドポイント管理の使用を開始する前に、モデルに接続して使用するのに必要なコンセプトを理解してください。

モデル プロバイダ

モデル プロバイダは、サポートされているモデル ホスティング プロバイダを示します。モデル プロバイダの設定は省略可能ですが、モデル エンドポイント管理でプロバイダを特定し、サポートされているモデルのヘッダーを自動的にフォーマットするのに役立ちます。次の表に、使用するモデル プロバイダに基づいて設定できるモデル プロバイダの値を示します。

モデル プロバイダ 関数で次のように設定します。
Vertex AI google
Hugging Face モデル hugging_face
Anthropic モデル anthropic
OpenAI open_ai
その他のモデル custom

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

サポートされている認証方法は、プロバイダのタイプによって異なります。Vertex AI モデルは、AlloyDB Omni のインストールに使用されたサービス アカウントを使用して認証を行います。他のプロバイダは、Secret Manager を使用したり、認証情報をヘッダー経由で渡したりできます。詳細については、認証を設定するをご覧ください。

モデルタイプ

モデルタイプは、AI モデルのタイプを示します。この拡張機能は、テキスト エンベディングと任意の汎用モデルタイプをサポートしています。モデル エンドポイントの登録時に設定できるサポートされているモデルタイプは、text-embeddinggeneric です。

汎用モデル エンドポイントを登録する場合、モデルタイプは省略可能です。generic がデフォルトのモデルタイプです。

事前登録済みの Vertex AI モデル
モデル エンドポイント管理は、事前登録されたモデル ID として一部のテキスト エンベディング モデルと汎用 Vertex AI モデルをサポートしています。モデル ID を直接使用して、モデルタイプに基づいてエンベディングを生成したり、予測を呼び出したりできます。
サポートされている事前登録済みモデルの詳細については、事前登録済みの Vertex AI モデルをご覧ください。

たとえば、事前登録済みの textembedding-gecko モデルを呼び出すには、エンベディング関数を使用してモデルを直接呼び出します。

SELECT
      google_ml.embedding(
        model_id => 'textembedding-gecko',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');
サポートが組み込まれたモデル
モデル エンドポイント管理では、Vertex AI、Anthropic、OpenAI の一部モデルが組み込みでサポートされています。サポートが組み込まれているテキスト エンベディング モデルの場合、AlloyDB はデフォルトの変換関数を自動的に設定します。
これらのモデル エンドポイントを登録するときに、修飾名を明示的に設定します。組み込みサポートが有効になっているモデルの一覧については、組み込みサポートが有効になっているモデルをご覧ください。
これらのモデルのモデルタイプは、text-embedding または generic です。
その他のテキスト エンベディング モデル
組み込みサポートのないテキスト エンベディング モデル エンドポイントを登録するには、モデルがサポートする入出力形式を処理する変換関数を作成することをおすすめします。必要に応じて、モデルの要件に応じて、ヘッダーを指定するカスタム ヘッダー関数を作成することもできます。
これらのモデルのモデルタイプは text-embedding です。
汎用モデル
モデル エンドポイント管理では、テキスト エンベディング モデルを除く他のすべてのモデルタイプの登録もサポートされています。汎用モデルの予測を呼び出すには、google_ml.predict_row() 関数を使用します。モデル固有のリクエスト エンドポイントや HTTP ヘッダーなど、モデル エンドポイントのメタデータを設定できます。
汎用モデル エンドポイントを登録するときに、変換関数を渡すことはできません。予測を呼び出すときに、関数への入力が JSON 形式であること、および JSON 出力を解析して最終出力を導出していることを確認します。
これらのモデルのモデルタイプは generic です。

認証

認証タイプは、google_ml_integration 拡張機能を使用してモデル エンドポイント管理に接続するために使用できる認証タイプを示します。認証の設定は省略可能です。モデルにアクセスするために認証が必要な場合にのみ必要です。

Vertex AI モデルの場合、認証には AlloyDB サービス アカウントが使用されます。他のモデルでは、Secret Manager にシークレットとして保存されている API キーまたはベアラートークンを google_ml.create_sm_secret() SQL 関数で使用できます。ヘッダーで認証を渡す場合は、認証方法の設定をスキップできます。

次の表に、設定可能な認証タイプを示します。

認証方法 関数で次のように設定します。 モデル プロバイダ
AlloyDB サービス エージェント alloydb_service_agent_iam Vertex AI プロバイダ
Secret Manager secret_manager Anthropic、Hugging Face、OpenAI などのサードパーティ プロバイダ

予測関数

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

google_ml.embedding()
登録済みのテキスト エンベディング モデル エンドポイントを呼び出してエンベディングを生成するために使用されます。
組み込みサポートのないテキスト エンベディング モデルの場合、入力パラメータと出力パラメータはモデルに固有であり、関数でモデルを呼び出すには変換する必要があります。予測関数の入力をモデル固有の入力に変換する変換入力関数と、モデル固有の出力を予測関数出力に変換する変換出力関数を作成する必要があります。
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 キー値ペアで出力を生成します。予測関数のシグネチャは、ヘッダー生成関数のシグネチャを定義します。

次の例は、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;

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

次のステップ