このドキュメントでは、Vertex AI SDK for ABAP を使用して Vertex AI ベクトル検索でインテリジェントな SAP アプリケーションを構築するためのリファレンス アーキテクチャについて説明します。ベクトル検索を使用すると、キーワード マッチングを超える SAP アプリケーションを構築できます。意味論的な理解を使用して、ユーザー企業データから必要なものを正確に見つけられるようにします。検索拡張生成(RAG)でベクトル検索を使用して、SAP 環境で高度な AI アプリケーションを構築することもできます。RAG は、企業データから関連するコンテキストを提供することで、AI モデルの回答の品質を向上させ、AI モデルが企業データに根ざしていることを保証します。
このドキュメントの対象読者は、ABAP デベロッパー、SAP ソリューション アーキテクト、クラウド アーキテクトです。このドキュメントは、ベクトル検索の用語を理解していることを前提としています。
アーキテクチャ
次の図は、SAP アプリケーション ランドスケープでベクトル検索を使用するリファレンス アーキテクチャを示しています。
このアーキテクチャには次のコンポーネントが含まれています。
# | コンポーネント | 詳細 |
---|---|---|
1 | 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 アプリケーション ランドスケープでベクトル検索を使用する前に、自身または管理者が次の作業を完了していることを確認してください。
- ABAP SDK for Google Cloud のオンプレミス エディションまたはクラウド エディションの最新バージョンをインストールしている。
- Google Cloud プロジェクトで Vertex AI API が有効になっている。
- Vertex AI API にアクセスするための認証が設定されている。
- ベクトル検索パラメータを構成している。
ベクトル インデックスを作成して管理する
ベクトル検索を使用するには、企業データをインデックスに登録し、ベクトル エンベディングの形式でデプロイする必要があります。手順は次のとおりです。
- Vertex AI または他のプラットフォームでテキストまたはマルチモーダル エンベディング AI モデルを使用して、ベクトル エンベディングを生成します。
- エンベディングを Cloud Storage バケットにアップロードします。
- エンベディングを含む Cloud Storage バケットを使用してベクトル インデックスを作成します。
- インデックス エンドポイントを作成し、ベクトル インデックスをエンドポイントにデプロイして、インデックスに登録された企業データのセマンティック検索を実行します。
上記の手順は Google Cloud コンソールから実行できます。または、Vertex AI SDK for ABAP を使用して SAP 環境からトリガーすることもできます。
企業向け AI ソリューションで最も正確なベクトル検索結果を得るには、最新の企業データでインデックスを常に更新する必要があります。詳細については、ベクトル インデックスの更新と再ビルドをご覧ください。
SAP アプリケーションからベクトル検索を呼び出す
SAP アプリケーションから Vertex AI SDK for ABAP を使用して、インデックスに登録された企業データに対して次の方法でセマンティック検索を実行できます。
- テキスト プロンプトを使用して検索する: 検索文字列を使用して、テキストとマルチモーダル データに対してセマンティック検索を実行します。
- マルチモーダル プロンプトを使用した検索: 画像や動画などのマルチモーダル入力を使用して、マルチモーダル データのセマンティック検索を実行します。
- エンタープライズ エンティティ ID を使用した検索: 商品 ID、注文 ID、顧客 ID などの企業固有の ID を使用して、企業データのセマンティック検索を実行します。
ベクトル検索の結果を使用して、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.
次のように置き換えます。
SEARCH_KEY
: 検索キー。ベクトル検索パラメータで構成されます。ENTITY_ID
: 検索するエンティティ ID。
エンティティ ID を使用してサンプルの企業データで検索する例については、GitHub のコードサンプルをご覧ください。
RAG でベクトル検索を使用して AI モデルに追加のコンテキストを提供する
ベクトル検索では、検索クエリに基づいて、最も関連性の高い企業データをレスポンスとして返します。RAG を使用してベクトル検索の検索レスポンスを AI モデルにフィードすることで、AI モデルに追加のコンテキストを提供できます。RAG は、取得した企業データから関連するコンテキストを提供することで、AI モデルの回答の品質を向上させ、モデルの回答が企業データに根ざしたものになるようにします。
RAG でベクトル検索を使用して AI モデルに追加のコンテキストを提供する手順は次のとおりです。
- 企業コンテキストを取得する検索クエリを準備します。
- 企業データを含むインデックスに対してベクトル検索を実行します。
- 効率的なプロンプトのベスト プラクティスに沿って、検索レスポンスを最終プロンプトに連結または拡張します。
RAG ベースのアーキテクチャに最も関連性の高い回答を AI モデルから取得するには、最新の企業データのエンベディングでインデックスを更新し続けます。詳細については、ベクトル インデックスの更新と再ビルドをご覧ください。
サンプル データセットを使用して企業ユースケースをテストするには、GitHub で SAP のエンベディングを活用したベクトル検索のサンプル ソリューションを試してください。このサンプル ソリューションでは、ABAP での商品レコメンデーション エンジンを紹介し、必要な構成と実装の詳細についてガイダンスを提供します。サンプルコードとリファレンスは、SAP アプリケーションから直接セマンティック検索を実行できる他のレコメンデーション システムの基礎として使用できます。
次のステップ
- 各検索結果とクエリとの関連性を判断するには、フェッチされた近隣の距離を取得するをご覧ください。
- Vertex AI SDK for ABAP でベクトル検索を使用する方法については、Vertex AI ベクトル検索を使用するをご覧ください。
ABAP SDK for Google Cloud の問題を解決するには、次の操作を行います。
- ABAP SDK for Google Cloud トラブルシューティング ガイドをご覧ください。
- Cloud フォーラムのコミュニティで ABAP SDK for Google Cloud について質問し、ディスカッションに参加します。
- 入手可能なすべての診断情報を収集し、Cloud カスタマーケアにお問い合わせください。カスタマーケアへのお問い合わせについては、Google Cloud での SAP に関するサポートを受けるをご覧ください。
寄稿者
著者: Devesh Singh 氏 | SAP アプリケーション エンジニア
その他の寄稿者: Vikash Kumar 氏 | テクニカル ライター