BigQuery AI and ML SDK for ABAP を使用すると、自然言語ベースの検索文字列を使用して BigQuery 内のベクトル化されたエンタープライズ データに対してベクトル検索を実行し、ABAP ベースのエージェントまたはアプリケーションから結果を取得できます。
BigQuery ベクトル検索を使用すると、GoogleSQL でベクトル インデックスを使用してセマンティック検索を実行し、近似結果を得ることができます。ベクトル検索では、高次元ベクトルまたはエンベディングを使用して、大規模なデータセット内で意味的に類似したデータポイントを見つけることができます。ベクトル エンベディングを BigQuery に保存して、BigQuery をベクトル データベースとして使用し、BigQuery 関数 VECTOR_SEARCH
を使用してベクトル類似検索を適用できます。
始める前に
Gemini モデルで BigQuery AI and ML SDK for ABAP を使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。
- Google Cloud プロジェクトで BigQuery API が有効になっている。 Google Cloud API を有効にする方法については、API の有効化をご覧ください。
- Google Cloud プロジェクトで課金が有効になっている。
- ベクトル エンベディングが生成され、BigQuery のベクトル データセットに保存されている。BigQuery AI and ML SDK for ABAP を使用して SAP アプリケーションからエンベディングを生成する方法については、エンベディングを生成するをご覧ください。
- エンタープライズ データのベクトル インデックスが作成されている。詳細については、ベクトル インデックスを作成するをご覧ください。
- 認証用にクライアント キーで構成されたサービス アカウントに必要な権限を付与します。
- SAP 環境に 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_SEARCH
の TOP_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_SEARCH
の TOP_K
パラメータで指定または設定された値に関係なく、検索文字列に対して最も近い近傍のみが取得されます。
DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
)->get_nearest_neighbor( ).
LS_SEARCH_RESPONSE
には、類似度を示すため、検索文字列からの検索レスポンスの距離も含まれています。