インテリジェントな SAP アプリケーション向けの Vertex AI ベクトル検索

このドキュメントでは、Vertex AI SDK for ABAP を使用して Vertex AI ベクトル検索でインテリジェント SAP アプリケーションを構築するためのリファレンス アーキテクチャについて説明します。ベクトル検索を使用すると、キーワード マッチングを超える SAP アプリケーションを構築できます。セマンティック理解を使用して、ユーザーがエンタープライズ データから必要なものを正確に見つけられるようにします。検索拡張生成(RAG)でベクトル検索を使用して、SAP 環境で強力な AI アプリケーションを構築することもできます。RAG は、企業データから関連するコンテキストを提供することで、AI モデルの回答の品質を向上させ、AI モデルが企業データに根ざしていることを保証します。

このドキュメントは、ABAP デベロッパー、SAP ソリューション アーキテクト、クラウド アーキテクトを対象としています。このドキュメントは、ベクトル検索の用語を理解していることを前提としています。

アーキテクチャ

次の図は、SAP アプリケーション ランドスケープでベクトル検索を使用するリファレンス アーキテクチャを示しています。

SAP 向けベクトル検索

このリファレンス アーキテクチャには、次のコンポーネントが含まれています。

# コンポーネント 詳細
1 SAP のクエリの開始点

次のいずれかのオプションを使用して検索を開始します。

  • OData サービス: SAP フロントエンド アプリケーションの OData サービスを介して検索クエリを指定します。
  • SAP アプリケーション ロジック: SAP の拡張機能、レポート、バックグラウンド ジョブなどの SAP アプリケーション ロジックを使用して検索クエリを指定します。
2 Vertex AI SDK for ABAP SDK のベクトル検索起動モジュールは、検索クエリに基づいてベクトル検索を実行します。
3 Vertex AI Vector Search

エンタープライズ データはベクトル エンベディングとしてインデックスに登録され、デプロイされたインデックス内に編成されます。

検索クエリが入力されると、このインデックス登録されたデータに対してベクトル検索が実行され、最も近い一致が見つかります。

これらの最も近い一致が SAP アプリケーションに返され、セマンティック検索や RAG などの機能が有効になります。

使用するプロダクト

このリファレンス アーキテクチャでは、次の Google Cloud プロダクトを使用します。

  • Vertex AI SDK for ABAP: ABAP からネイティブに AI 中心のアプリケーションを構築するためのモジュールとツールセットを提供します。
  • Vertex AI ベクトル検索: ベクトル エンベディングを使用して、エンタープライズ データ全体で大規模かつ効率的な検索を実行できます。つまり、キーワードだけでなく、意味やコンテキストで検索できます。

ユースケース

次のリストは、SAP アプリケーションでのベクトル検索のユースケースを示しています。

  • レコメンデーション エンジンの構築: ユーザー入力と動作を分析して、商品、会社コード、GL アカウントなど、SAP ビジネス全体にわたる関連アイテムを提案します。キーワード マッチングを超えた提案が可能です。
  • RAG パイプラインの構築: さまざまなソースから情報にアクセスして統合し、AI モデルのコンテキストを関連する SAP 情報と SAP 以外の情報で拡充して、正確で関連性の高いモデル レスポンスを生成します。
  • セマンティック画像検索の実行: 視覚的に類似した画像の検索を有効にします。ショッピング、ビジュアル検出、医用画像分析に役立ちます。
  • セマンティック テキスト検索の実行: テキストの意味とコンテキストを理解して、法律、学術、顧客フィードバックの分析における検索精度を高めます。
  • 自然言語ベースの検索を実行する: ユーザーの質問に即座に回答し、よくある質問、ナレッジベース、教育ツールを強化します。
  • 異常検出の実行: 金融、ネットワーク セキュリティ、製造業における異常なパターンと潜在的な脅威を特定します。

設計上の考慮事項

このセクションでは、このリファレンス アーキテクチャを使用して、セキュリティ、プライバシー、コンプライアンス、費用、パフォーマンスに関する特定の要件を満たすアーキテクチャを開発するためのガイダンスを示します。

セキュリティ、プライバシー、コンプライアンス

セキュリティとコンプライアンスは共有責任です。詳細については、Vertex AI の共有責任をご覧ください。

Google Cloud のデータ プライバシーに対する取り組みについては、プライバシー リソース センターをご覧ください。

費用の最適化

費用を削減するには、インデックスに小さいシャードサイズと低次元エンベディングを選択することを検討してください。これにより、インデックスのデプロイに小さいコンピューティング マシンを使用できます。

Vertex AI は Google Cloud の有料サービスです。料金については、Vertex AI の料金ベクトル検索の料金をご覧ください。料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

パフォーマンスの最適化

大規模なデータセットの検索レイテンシを改善するには、インデックスの作成時にシャードサイズを大きくし、インデックスのデプロイ時に高性能のコンピューティング マシンを選択することを検討してください。インデックスのシャードサイズの詳細については、インデックスのサイズをご覧ください。

検索レスポンスの関連性を高めるには、エンベディングを生成して、エンベディングのディメンションを高めます。コンピューティング マシンとエンベディングの次元が大きいほど、費用が増加します。予想使用量に基づいて費用の見積もりを生成するには、料金計算ツールを使用します。

始める前に

SAP アプリケーション ランドスケープでベクトル検索を使用する前に、自身または管理者が次の作業を完了していることを確認してください。

ベクトル インデックスを作成して管理する

ベクトル検索を使用するには、エンタープライズ データをインデックスに登録し、ベクトル エンベディングの形式でデプロイする必要があります。手順は次のとおりです。

  1. Vertex AI または他のプラットフォームでテキストまたはマルチモーダル エンベディング AI モデルを使用して、ベクトル エンベディングを生成します。
  2. エンベディングを Cloud Storage バケットにアップロードします。
  3. エンベディングを含む Cloud Storage バケットを使用してベクトル インデックスを作成します。
  4. インデックス エンドポイントを作成し、ベクトル インデックスをエンドポイントにデプロイして、インデックスに登録されたエンタープライズ データのセマンティック検索を実行します。

上記の手順は Google Cloud コンソールから実行できます。または、Vertex AI SDK for ABAP を使用して SAP 環境からトリガーすることもできます。

企業向け AI ソリューションで最も正確なベクトル検索結果を得るには、最新の企業データでインデックスを常に更新する必要があります。詳細については、ベクトル インデックスの更新と再ビルドをご覧ください。

SAP アプリケーションからベクトル検索を呼び出す

SAP アプリケーションから Vertex AI SDK for ABAP を使用して、インデックスに登録されたエンタープライズ データに対して次の方法でセマンティック検索を実行できます。

ベクトル検索の結果を使用して、RAG を使用して AI モデルのコンテキストをエンタープライズ コンテキストで拡張できます。これにより、モデルのレスポンスが企業データに根ざしたものになります。これらの結果は、ビジネス プロセスへの入力として使用したり、推奨事項を生成したりすることもできます。

テキスト プロンプトを使用したセマンティック検索

テキスト プロンプトを使用してインデックスに登録されたテキストとマルチモーダル データを検索するには、Vertex AI SDK for ABAP の /GOOG/CL_VECTOR_SEARCH クラスの FIND_NEIGHBORS_BY_STRING メソッドを使用します。メソッド GET_NEAREST_NEIGHBORS 呼び出しをメソッド FIND_NEIGHBORS_BY_STRING 呼び出しと連結して、検索レスポンスを取得できます。

次のコードサンプルは、テキスト プロンプトを使用してセマンティック検索を実行する方法を示しています。

TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key  = 'SEARCH_KEY' ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_string(
                                                          iv_search_string         = 'SEARCH_STRING'
                                                          iv_embeddings_model_key  = 'MODEL_KEY'
                                                          iv_neighbor_count        = NEIGHBOR_COUNT
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

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

  • SEARCH_KEY: 検索キー。ベクトル検索パラメータで構成されます。
  • SEARCH_STRING: 入力テキスト プロンプト。
  • MODEL_KEY: モデル生成パラメータで構成されたモデルキー。このモデルは、検索クエリをエンベディングに変換するために使用されます。
  • NEIGHBOR_COUNT: 検索クエリによって取得される最近傍の数。

エンタープライズ テキストとマルチモーダル データのサンプルに対するテキストベースの検索の例については、テキスト プロンプトを使用したテキスト データセットのセマンティック検索テキスト プロンプトを使用した画像のセマンティック検索の GitHub コードサンプルをご覧ください。

マルチモーダル プロンプトを使用したセマンティック検索

このタイプの検索は、画像や動画などのマルチモーダル データから最も近い一致を見つける場合に便利です。たとえば、SAP ウェブ アプリケーション(Fiori または UI5)があり、衣類、製品、機器部品の写真を撮影して、その写真に最も近い一致するものを検索する場合は、この検索オプションを選択できます。

マルチモーダル プロンプトを使用してインデックスに登録されたマルチモーダル データを検索するには、Vertex AI SDK for ABAP の /GOOG/CL_VECTOR_SEARCH クラスの FIND_NEIGHBORS_BY_EMBEDDING メソッドを使用します。メソッド GET_NEAREST_NEIGHBORS 呼び出しをメソッド FIND_NEIGHBORS_BY_EMBEDDING 呼び出しと連結して、検索レスポンスを取得できます。

次のコードサンプルは、画像を使用してセマンティック検索を行う方法を示しています。

DATA lv_search_string TYPE string,
DATA ls_image TYPE /goog/cl_embeddings_model=>ty_image.

TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key = 'SEARCH_KEY' ).
    DATA(lo_embeddings_model) = NEW /goog/cl_embeddings_model( iv_model_key = 'MODEL_KEY' ).

    ls_image-bytes_base64_encoded = 'RAW_DATA'.

    DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings( iv_image     = ls_image
                                                                     iv_dimension = 'DIMENSION'
                                            )->get_vector( ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_embedding(
                                                          iv_neighbor_count = NEIGHBOR_COUNT
                                                          it_embeddings     = lt_embeddings
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

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

  • SEARCH_KEY: 検索キー。ベクトル検索パラメータで構成されます。
  • MODEL_KEY: モデル生成パラメータで構成されたモデルキー。このモデルは、検索クエリをエンベディングに変換するために使用されます。
  • RAW_DATA: クエリにインラインで含める画像、PDF、動画の Base64 エンコードされた未加工データ。
  • DIMENSION: 出力エンベディングの次元数。
  • NEIGHBOR_COUNT: 検索クエリによって取得される最近傍の数。

サンプルのエンタープライズ データに対する画像ベースの検索の例については、GitHub のコードサンプルをご覧ください。

エンタープライズ エンティティ ID を使用したセマンティック検索

このタイプの検索は、特定のエンティティ ID の類似エンタープライズ エンティティを検索する必要がある SAP のユースケースに役立ちます。たとえば、特定の商品が在庫切れの場合、類似の商品を見つけたりおすすめしたりできます。エンティティ ID は、ベクトル インデックスに保存されているデータポイントに対応しています。

エンタープライズ エンティティ ID を使用してベクトル インデックスを検索するには、Vertex AI SDK for ABAP の /GOOG/CL_VECTOR_SEARCH クラスの FIND_NEIGHBORS_BY_ENTITY_ID メソッドを使用します。メソッド GET_NEAREST_NEIGHBORS 呼び出しをメソッド FIND_NEIGHBORS_BY_ENTITY_ID 呼び出しと連結して、検索レスポンスを取得できます。

次のコードサンプルは、エンタープライズ エンティティ ID を使用してセマンティック検索を行う方法を示しています。

Below is a code snippet that can be taken as reference for an entity id search.
TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key  = 'SEARCH_KEY' ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_entity_id(
                                                          iv_entity_id = 'ENTITY_ID'
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

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

エンティティ ID を使用してサンプルのエンタープライズ データで検索する例については、GitHub のコードサンプルをご覧ください。

RAG でベクトル検索を使用して AI モデルに追加のコンテキストを提供する

ベクトル検索では、検索クエリに基づいて、最も関連性の高いエンタープライズ データをレスポンスとして返します。RAG を使用してベクトル検索の検索レスポンスを AI モデルにフィードすることで、AI モデルに追加のコンテキストを提供できます。RAG は、取得したエンタープライズ データから関連するコンテキストを提供することで、AI モデルの回答の品質を向上させ、モデルの回答がエンタープライズ データに根ざしたものになるようにします。

RAG でベクトル検索を使用して AI モデルに追加のコンテキストを提供する手順は次のとおりです。

  1. エンタープライズ コンテキストを取得する検索クエリを準備します。
  2. エンタープライズ データを含むインデックスに対してベクトル検索を実行します。
  3. 効率的なプロンプトのベスト プラクティスに沿って、検索レスポンスを最終プロンプトに連結または拡張します。

RAG ベースのアーキテクチャに最も関連性の高い回答を AI モデルから取得するには、最新のエンタープライズ データのエンベディングでインデックスを更新し続けます。詳細については、ベクトル インデックスの更新と再ビルドをご覧ください。

サンプル データセットを使用してエンタープライズ ユースケースをテストするには、GitHub でSAP のエンベディングを活用したベクトル検索のサンプル ソリューションを試してください。このサンプル ソリューションでは、ABAP での商品レコメンデーション エンジンを紹介し、必要な構成と実装の詳細についてガイダンスを提供します。サンプルコードとリファレンスは、SAP アプリケーションから直接セマンティック検索を実行できる他のレコメンデーション システムの基礎として使用できます。

次のステップ

寄稿者

作成者: Devesh Singh | SAP アプリケーション エンジニア

その他の寄稿者: Vikash Kumar | テクニカル ライター