このページでは、AI モデル エンドポイントを登録し、モデル エンドポイント管理で予測を呼び出す前に知っておく必要のある主なコンセプトについて説明します。
AlloyDB for PostgreSQL にリモートモデル エンドポイントを登録するには、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 を使用してモデルをクエリすると、次のことを行えます。
エンベディングを生成して、テキスト プロンプトを数値ベクトルに変換する。データベースで
vector
拡張機能が有効になっている場合、生成されたエンベディングをベクトルデータとして保存できます。詳細については、ベクトル エンベディングを保存するをご覧ください。SQL を使用して予測を呼び出す。
アプリケーションは、google_ml_integration
拡張機能を使用してモデル エンドポイント管理にアクセスできます。この拡張機能では、次の関数を使用できます。
google_ml.create_model()
SQL 関数。予測関数またはエンベディング関数で使用されるモデル エンドポイントを登録するために使用されます。google_ml.create_sm_secret()
SQL 関数。API キーが保存されている Secret Manager のシークレットを使用します。 Google Cloudgoogle_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-embedding
と generic
です。
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 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;
ヘッダー生成関数の作成方法については、ヘッダー生成関数の例をご覧ください。
次のステップ
- モデル プロバイダの認証を設定する。
- モデル エンドポイント管理でモデル エンドポイントを登録する。
- モデル エンドポイント管理のリファレンスを確認する。