BigQuery AI and ML SDK for ABAP を使用すると、BigQuery のソースでエンベディングを生成して管理できます。
BigQuery は、ベクトル検索機能を使用する費用対効果の高いベクトル データベースとして機能します。これにより、エンベディング(データのベクトル表現)をデータ ウェアハウス内に直接保存してクエリできるため、ベクトル データベース インフラストラクチャを個別に準備する必要性が軽減される可能性があります。BigQuery 関数 ML.GENERATE_EMBEDDING
を使用すると、BigQuery データセットに保存されているエンタープライズ データのエンベディングを生成できます。
Vertex AI のエンベディング モデルにアクセスするには、BigQuery ML で Vertex AI モデルのエンドポイントを表すリモートモデルを作成します。使用する Vertex AI モデルでリモートモデルを作成後、リモートモデルに対して BigQuery ML 関数を実行し、そのモデルの機能にアクセスします。
BigQuery AI and ML SDK for ABAP を使用すると、エンベディング モデルを次の目的で使用できます。
- テキストデータのエンベディングを生成して保存する
- マルチモーダル データのエンベディングを生成して保存する
- BigQuery ベクトル データベースを最新のエンタープライズ データで更新する
始める前に
BigQuery AI and ML SDK for ABAP でエンベディング モデルを使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。
- Google Cloud プロジェクトで BigQuery API、BigQuery Connection API、Vertex AI API が有効になっている。 Google Cloud API を有効にする方法については、API の有効化をご覧ください。
- Google Cloud プロジェクトで課金が有効になっていることを確認します。
- 認証用にクライアント キーで構成されたサービス アカウントには、必要な権限が付与されている必要があります。
- SAP 環境に BigQuery AI and ML SDK for ABAP がインストールされている。
- サポートされているエンベディング モデルのリモートモデルが作成されている。
料金
BigQuery AI and ML SDK for ABAP は無料で提供されています。ただし、BigQuery と Vertex AI プラットフォームの料金についてはお客様の負担となります。
- BigQuery ML: BigQuery で処理するデータに対して料金が発生します。
- Vertex AI: リモートモデルで表される Vertex AI サービスの呼び出しに対して料金が発生します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを算出できます。
BigQuery の料金の詳細については、BigQuery の料金ページをご覧ください。
Vertex AI の料金の詳細については、Vertex AI の料金のページをご覧ください。
BigQuery でエンベディングを生成する
このセクションでは、BigQuery AI and ML SDK for ABAP を使用して、ABAP アプリケーション ロジックから BigQuery に保存されているエンタープライズ データのエンベディングを生成する方法について説明します。
BigQuery エンベディング呼び出し元クラスをインスタンス化する
BigQuery データセットでエンベディング テキスト モデルとマルチモーダル モデルを呼び出すには、クラス /GOOG/CL_BQ_GENERATIVE_MODEL
をインスタンス化します。
TRY.
DATA(lo_bqml_embeddings_model) = NEW /goog/cl_bq_embeddings_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
CLIENT_KEY
は、認証の設定時に Google Cloud の認証用に構成したクライアント キーに置き換えます。
エンベディングを生成する
BigQuery 関数 ML.GENERATE_EMBEDDING
を使用してテキストとマルチモーダル データのエンベディングを生成するクエリを実行するには、/GOOG/CL_BQ_EMBEDDINGS_MODEL
クラスの GENERATE_EMBEDDINGS
メソッドを使用します。
クエリで設定されたクラス /GOOG/CL_BQ_QUERY
のオブジェクトが、メソッドへの入力として渡されます。
lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query ).
LO_BQ_QUERY
は、クエリを設定した後のクラス /GOOG/CL_BQ_QUERY
の参照です。
モデル生成パラメータをオーバーライドする
エンベディング モデルの生成パラメータは、BigQuery で保存したクエリまたは渡されたクエリテキストで定義できます。ただし、ABAP アプリケーション ロジックから同じクエリのパラメータをオーバーライドする必要がある場合は、/GOOG/CL_BQ_EMBEDDINGS_MODEL
クラスのメソッド SET_GENERATION_CONFIG
を使用できます。最初のクエリの生成パラメータは、このメソッドを介して渡されたパラメータでオーバーライドされます。
lo_bqml_embeddings_model->set_generation_config( iv_flatten_json_output = 'IS_FLATTEN_JSON_OUTPUT'
iv_task_type = 'TASK_TYPE'
iv_output_dimensionality = 'OUTPUT_DIMENSIONALITY' ).
次のように置き換えます。
IS_FLATTEN_JSON_OUTPUT
: 関数から返された JSON コンテンツを解析して別の列に保存するかどうかを決定するブール値です。TASK_TYPE
: モデルが質の高いエンベディングを生成できるように、対象となるダウンストリーム アプリケーションを指定する値。ML.GENERATE_EMBEDDING
の入力構文でtask_type
引数の推定値を探します。OUTPUT_DIMENSIONALITY
: エンベディングの生成時に使用する次元数を指定する値。ML.GENERATE_EMBEDDING
の入力構文でoutput_dimensionality
引数の推定値を探します。
エンベディングの生成に使用するクエリのクエリ結果を取得する
エンベディングを生成して意味のある方法で提示するために、BigQuery ML から処理されたレスポンスを受信するため、SDK はクラス /GOOG/CL_BQ_GENERATIVE_MODEL
の連結メソッドを使用します。これにより、中間結果を格納する変数を必要とせずに、1 つのステートメントでレスポンスに直接アクセスできます。
テキスト エンベディング ベクトルを取得する
ABAP アプリケーション ロジックの各行のテキスト エンベディング ベクトルを取得するには、メソッド GET_TEXT_EMBEDDING_VECTORS
を使用します。
DATA(lt_embeddings) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
)->get_text_embedding_vectors( ).
テキスト エンベディングのステータスを取得する
各行の各テキスト エンベディング生成のステータスを取得するには、メソッド GET_TEXT_EMBEDDING_STATUS
を使用します。
オペレーションが成功した場合、ステータスは空になります。
DATA(lt_embeddings_status) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
)->get_text_embedding_status( ).
クエリジョブのステータスを取得する
BigQuery の各クエリは、クエリジョブとして実行されます。
エンベディング クエリジョブのステータスを取得するには、メソッド GET_QUERY_JOB_STATUS
を使用します。
lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
)->get_query_job_status(
IMPORTING ev_job_complete = DATA(lv_job_complete)
ev_job_creation_reason = DATA(lv_job_creation_reason)
ev_job_id = DATA(lv_job_id)
ev_query_id = DATA(lv_query_id)
ev_total_bytes_processed = DATA(lv_total_bytes_processed)
ev_total_rows = DATA(lv_total_rows) ).
このメソッドは、次のジョブ ステータス指標を返します。
- クエリが完了したかどうか。
- Job が作成された理由。
- クエリを実行するために作成された Job への参照。
- クエリの自動生成 ID。
- このクエリで処理されたバイト数の合計。
- 完全なクエリ結果セットの行の合計数。
クエリジョブのエラーを取得する
クエリジョブ エラーが存在する場合にそのエラーを取得するには、メソッド GET_QUERY_JOB_ERRORS
を使用します。
DATA(lt_query_job_errors) = lo_bqml_embeddings_model->execute_query( io_query = lo_bq_query
)->get_query_job_errors( ).
テキスト エンベディングの全体的なレスポンスを取得する
実行したテキスト エンベディング クエリのレスポンス テーブル全体を取得するには、メソッド GET_TEXT_EMBEDDING_RESPONSE
を使用します。
クエリでモデル生成パラメータ FLATTEN_JSON_OUTPUT
が TRUE
に設定されている場合にのみ、レスポンスが入力されます。
DATA(lt_text_embeddings_response) = lo_bqml_embeddings_model->execute_query( io_query = lo_bq_query
)->get_text_embedding_response( ).