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

このページでは、AlloyDB Omni で AI モデル エンドポイントの登録とモデル エンドポイント管理による予測の呼び出しを試すことができるプレビューについて説明します。本番環境で AI モデルを使用するには、AlloyDB AI を使用した生成 AI アプリケーションの構築ベクトル エンベディングを操作するをご覧ください。

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

概要

モデル エンドポイント管理プレビューでは、モデル エンドポイントを登録し、データベース クラスタでモデル エンドポイントのメタデータを管理し、SQL クエリを使用してモデルを操作できます。モデルに関連するモデル エンドポイント メタデータを追加して登録し、モデルを使用してベクトル エンベディングを生成したり予測を呼び出したりするための関数を含む google_ml_integration 拡張機能を提供します。

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

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

仕組み

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

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

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

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

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

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

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

主なコンセプト

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

モデル プロバイダ {: #model-provider}̦

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

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

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

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

モデルタイプ

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

サポートが組み込まれたテキスト エンベディング モデル
モデル エンドポイント管理には、Vertex AI の textembedding-gecko モデルと OpenAI の text-embedding-ada-002 モデルのすべてのバージョンが組み込まれています。これらのモデル エンドポイントを登録するには、google_ml.create_model() 関数を使用します。AlloyDB は、これらのモデルのデフォルトの変換関数を自動的に設定します。
これらのモデルのモデルタイプは text-embedding です。
その他のテキスト エンベディング モデル
他のテキスト エンベディング モデルの場合は、モデルがサポートする入力形式と出力形式を処理する変換関数を作成する必要があります。必要に応じて、モデルに必要なカスタム ヘッダーを生成する HTTP ヘッダー生成関数を使用できます。
これらのモデルのモデルタイプは 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()
登録済みのテキスト エンベディング モデル エンドポイントを呼び出してエンベディングを生成するために使用されます。Vertex AI の textembedding-gecko モデルと OpenAI の text-embedding-ada-002 モデルのサポートが組み込まれています。
組み込みサポートのないテキスト エンベディング モデルの場合、入力パラメータと出力パラメータはモデルに固有であり、関数でモデルを呼び出すには変換する必要があります。予測関数の入力をモデル固有の入力に変換する変換入力関数と、モデル固有の出力を予測関数出力に変換する変換出力関数を作成します。
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;

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

次のステップ