google_ml_integration 拡張機能には、public と google_ml の 2 つの異なる Namespace にエンベディング関数が含まれています。このページでは、これらの Namespace の関数を使用してテキスト エンベディングを生成する方法について説明します。
public スキーマの embedding() 関数は、エンドポイントを登録せずに任意の Vertex AI エンベディング モデルで使用できます。タスクタイプなどのカスタム情報を渡す場合は、エンドポイントを登録してから、google_ml スキーマで google_ml.embedding() 関数を使用します。エンドポイントの登録の詳細については、モデルを登録するをご覧ください。
エンベディングの仕組み
AlloyDB Omni で次の特長を満たすデータベースを実行します。
データベースに
itemsというテーブルが存在する。このテーブルの各行には、販売する商品が記録されています。itemsテーブルにcomplaintsという列がある。このTEXT列には、各商品について記録された購入者からの苦情が保存されます。データベースが Vertex AI Model Garden と統合され、
gemini-embedding-001の英語モデルにアクセスできる。
このデータベースには商品に関する苦情が記録されていますが、苦情は書式なしテキストとして保存されているため、クエリで照会するのは容易ではありません。たとえば、色違いの商品を受け取った顧客からの苦情が最も多い商品を確認したい場合は、テーブルに対して通常の SQL クエリを実行し、さまざまなキーワードで照合を行います。ただし、この方法では、指定したキーワードが含まれている行のみが一致します。
たとえば、SELECT * FROM item WHERE complaints LIKE
"%wrong color%" などの基本的な SQL クエリでは、complaints フィールドに The picture shows a blue one, but the one I received was red のみが含まれる行は返されません。
LLM ベースのエンベディングを使用する SQL クエリは、このようなクエリに対して意味的に類似したレスポンスを返すのに役立ちます。エンベディングを適用すると、この例のテーブルで、苦情が特定のテキスト プロンプト(It was the
wrong color など)と意味的に類似している項目をクエリできます。
基本的なエンベディング生成には、次のいずれかのスキーマを選択します。
始める前に
AlloyDB Omni でエンベディングを生成するには、次の操作を行います。
-
postgresユーザーとして AlloyDB Omni を実行して接続します。 -
google_ml_integration拡張機能がインストールされていることを確認します。CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
必要な権限がない場合は、データベース管理者に連絡して更新を実行してもらいます。または、新しいバージョンがクラスタに自動的にロールアウトされるまで待つこともできます。
-
google_ml_integration.enable_model_supportフラグがonに設定されていることを確認します。 - AlloyDB Omni データベースからエンベディングを生成する前に、Vertex AI と連携するように AlloyDB Omni を構成する必要があります。
-
データベース ユーザーにエンベディング関数を実行してエンベディングを生成する権限を付与します。
\c 'DB_NAME'; GRANT EXECUTE ON FUNCTION google_ml.embedding TO 'USER_NAME';
次のように置き換えます。
- DB_NAME: 権限を付与するデータベースの名前
- USER_NAME: 権限を付与するユーザーの名前
エンベディングを生成する
google_ml.embedding() SQL 関数を使用して、テキスト エンベディング モデルを呼び出します。
モデルを呼び出してエンベディングを生成するには、次のクエリを実行します。
SELECT
google_ml.embedding(
model_id => 'MODEL_ID',
content => 'CONTENT');
次のように置き換えます。
MODEL_ID: 修飾モデル ID(gemini-embedding-001など)。CONTENT: ベクトル エンベディングに変換するテキスト。
エンベディング生成の例
このセクションでは、登録済みモデル エンドポイントを使用してエンベディングを生成する例を示します。
Gemini のエンベディング モデル
登録済みの gemini-embedding-001 モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。
SELECT
google_ml.embedding(
model_id => 'gemini-embedding-001',
content => 'AlloyDB is a managed, cloud-hosted SQL database service');
AlloyDB Omni クラスタと Vertex AI エンドポイントが異なるプロジェクトにある場合は、次の操作を行います。
次の
CALLステートメントを実行します。CALL google_ml.create_model( model_id => 'gemini-embedding-001', model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict', model_provider => 'google', model_type => 'text_embedding', model_auth_type => 'alloydb_service_agent_iam', model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform', model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform' );登録済みの
gemini-embedding-001モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。SELECT google_ml.embedding( model_id => 'gemini-embedding-001', content => 'AlloyDB is a managed, cloud-hosted SQL database service');
OpenAI のエンベディング モデル
OpenAI によって登録された text-embedding-ada-002 モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。
SELECT
google_ml.embedding(
model_id => 'text-embedding-ada-002',
content => 'e-mail spam');
OpenAI によって登録された text-embedding-3-small モデル エンドポイントまたは text-embedding-3-large モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。
SELECT
google_ml.embedding(
model_id => 'text-embedding-3-small',
content => 'Vector embeddings in AI');
次のステップ
- ベクトル類似性検索を実行する。
- AlloyDB Omni、pgvector、モデル エンドポイント管理を使用してスマート ショッピング アシスタントを構築する方法について学習する。
- インデックスとクエリベクトルを作成する。
- エンベディング ワークフローの例を確認する。