BigQuery でベクトル検索を実行する

BigQuery AI and ML SDK for ABAP を使用すると、自然言語ベースの検索文字列を使用して BigQuery 内のベクトル化されたエンタープライズ データに対してベクトル検索を実行し、ABAP ベースのエージェントまたはアプリケーションから結果を取得できます。

BigQuery ベクトル検索を使用すると、GoogleSQL でベクトル インデックスを使用してセマンティック検索を実行し、近似結果を得ることができます。ベクトル検索では、高次元ベクトルまたはエンベディングを使用して、大規模なデータセット内で意味的に類似したデータポイントを見つけることができます。ベクトル エンベディングを BigQuery に保存して、BigQuery をベクトル データベースとして使用し、BigQuery 関数 VECTOR_SEARCH を使用してベクトル類似検索を適用できます。

始める前に

Gemini モデルで BigQuery AI and ML SDK for ABAP を使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。

料金

BigQuery AI and ML SDK for ABAP は無料で提供されています。ただし、CREATE VECTOR INDEX ステートメントと VECTOR_SEARCH 関数には BigQuery コンピューティングの料金が発生します。この費用はお客様の負担となります。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを算出できます。

BigQuery の料金の詳細については、BigQuery の料金ページをご覧ください。

BigQuery でベクトル検索を実行する

このセクションでは、BigQuery AI and ML SDK for ABAP を使用して、ABAP アプリケーションから BigQuery に保存されているエンタープライズ データに対してベクトル セマンティック検索を実行する方法について説明します。

BigQuery ベクトル検索の起動クラスをインスタンス化する

検索文字列を使用してベクトル検索を実行するには、クラス /GOOG/CL_BQ_VECTOR_SEARCH をインスタンス化します。

TRY.
    DATA(lo_bq_vector_search) = NEW /goog/cl_bq_vector_search( 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 関数 VECTOR_SEARCH を使用してベクトル検索を行うクエリを実行するには、クラス /GOOG/CL_BQ_VECTOR_SEARCH のメソッド FIND_NEAREST_NEIGHBORS を使用します。

クエリで設定されたクラス /GOOG/CL_BQ_QUERY のオブジェクトが、メソッドへの入力として渡されます。

lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).

LO_BQ_QUERY は、クエリを設定した後のクラス /GOOG/CL_BQ_QUERY の参照です。検索文字列はクエリテキストから渡すことができます。

ベクトル検索パラメータをオーバーライドする

ベクトル検索パラメータは、BigQuery の保存済みクエリまたは渡されたクエリテキストで(VECTOR_SEARCH 関数の定義で)定義できます。ただし、ABAP アプリケーション ロジックから同じクエリのパラメータをオーバーライドする必要がある場合は、クラス /GOOG/CL_BQ_VECTOR_SEARCH のメソッド SET_SEARCH_PARAMETERS を使用できます。最初のクエリの検索パラメータは、このメソッドを介して渡されたパラメータで完全にオーバーライドされます。

lo_bq_vector_search->set_search_parameters( iv_top_k            = TOP_K
    iv_distance_type            = DISTANCE_TYPE
    iv_fraction_lists_to_search = 'FRACTION_LISTS_TO_SEARCH' ).

次のように置き換えます。

  • TOP_K: 返される最近傍の数を指定する INT64 値。
  • DISTANCE_TYPE: 2 つのベクトルの距離の計算に使用する指標タイプを指定する文字列値。VECTOR_SEARCH 関数の定義で DISTANCE_TYPE 引数の推定値を探します。
  • FRACTION_LISTS_TO_SEARCH: 検索するリストの割合を指定する文字列値。VECTOR_SEARCH 関数の定義オプションで FRACTION_LISTS_TO_SEARCH 引数から推定値を探します。

ベクトル検索のレスポンスを取得する

ベクトル検索クエリで BigQuery ML から処理されたレスポンスを受信し、意味のある方法で表示するには、クラス /GOOG/CL_BQ_SEARCH_RESPONSE を使用します。

/GOOG/CL_BQ_SEARCH_RESPONSE クラスによってキャプチャされたレスポンスは、/GOOG/CL_BQ_VECTOR_SEARCH クラスのメソッドを介して行われたリクエストに連結されるため、中間結果を格納する変数を必要とせずに、1 つのステートメントでレスポンスに直接アクセスできます。

検索文字列の最近傍を取得する

検索文字列の最近傍を取得するには、GET_NEAREST_NEIGHBORS メソッドを使用します。返される近傍の数は、呼び出されたクエリの関数 VECTOR_SEARCHTOP_K パラメータで指定または設定された値によって異なります。

DATA(lt_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbors( ).

LT_SEARCH_RESPONSE には、類似度を示すため、検索文字列からの検索レスポンス アイテムの距離も含まれています。

検索文字列の最近傍を取得する

検索文字列の最近傍を取得するには、GET_NEAREST_NEIGHBOR メソッドを使用します。これにより、呼び出されたクエリの関数 VECTOR_SEARCHTOP_K パラメータで指定または設定された値に関係なく、検索文字列に対して最も近い近傍のみが取得されます。

DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbor( ).

LS_SEARCH_RESPONSE には、類似度を示すため、検索文字列からの検索レスポンスの距離も含まれています。