使用 Vertex AI 特徵儲存庫

本文說明如何使用 ABAP 專用的 Vertex AI SDK,透過 Vertex AI 特徵儲存庫執行各種工作,例如同步處理線上儲存庫、提供線上儲存庫中的特徵,以及使用實體或嵌入式搜尋線上特徵儲存庫。

Vertex AI 特徵儲存庫是雲端原生特徵儲存庫服務,您可以在 BigQuery 資料表或檢視表中管理特徵資料,簡化 ML 特徵管理和線上服務程序。

在 Vertex AI 特徵儲存庫設定的一般工作流程中,您首先要在 BigQuery 中準備 SAP 資料來源,然後建立特徵群組和特徵來註冊資料來源,並設定線上儲存庫和特徵檢視資源。接著,您可以透過特徵檢視畫面線上提供最新的特徵值,或在線上特徵儲存庫中執行相似搜尋。如要瞭解如何設定 Vertex AI 特徵儲存庫,請參閱「Vertex AI 特徵儲存庫」。

Vertex AI 特徵儲存庫準備好提供線上服務後,您就可以使用 ABAP 專用的 Vertex AI SDK 執行以下操作:

  • 如要在模型預測期間提供即時服務的最新且準確的特徵值,請將線上商店與 BigQuery 中的特徵資料來源同步。
  • 如要為即時應用程式提供線上商店的特徵值,請從線上商店提供特徵。
  • 如要從線上商店擷取語意相似或相關的實體清單,請使用實體或嵌入內容進行搜尋。

事前準備

在使用 Vertex AI SDK for ABAP 搭配 Vertex AI 特徵儲存庫之前,請確認您或管理員已完成下列先決條件:

為 Vertex AI 特徵儲存庫例項化 ABAP 類別

如要在 ABAP 應用程式中使用 Vertex AI 特徵儲存庫,請將 /GOOG/CL_FEATURE_STORE 類別例項化。

DATA(lo_client) = NEW /goog/cl_feature_store(
                          iv_key_name         = 'CLIENT_KEY'
                          iv_location         = 'LOCATION_ID'
                          iv_feature_store_id = 'FEATURE_ONLINE_STORE_NAME' ).

更改下列內容:

  • CLIENT_KEY:用於驗證的用戶端金鑰。
  • LOCATION_ID:線上商店所在的區域,例如 us-central1
  • FEATURE_ONLINE_STORE_NAME:包含功能檢視畫面的線上商店名稱。

同步處理網路商店

為確保線上商店擁有最新且準確的特徵值,以便在模型預測期間即時顯示,您必須將線上商店中的特徵檢視資源與 BigQuery 中的特徵資料來源同步。

事前準備

由於您是透過區域端點存取 Vertex AI 特徵儲存庫,因此需要建立通訊系統、通訊安排,並據此設定用戶端金鑰。

  1. 存取已安裝 ABAP 適用於 Google Cloud 的 SDK 的 BTP ABAP 系統 SAP Fiori 啟動工具。

  2. 依序前往「所有聊天室」>「管理」>「通訊管理」

  3. 建立溝通機制:

    1. 開啟「通訊系統」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication System」對話方塊中,輸入下列欄位的值:

      • 系統 ID:輸入系統 ID。
      • 系統名稱:輸入系統名稱。
    4. 按一下 [建立]。

    5. 在「主機名稱」欄位中輸入區域端點的網址。舉例來說,如果 Vertex AI 特徵儲存庫位於 us-east1,則目標主機的端點為 us-east1-aiplatform.googleapis.com。如要瞭解地區端點,請參閱「服務端點」。

    6. 在「Port」欄位中輸入 443

    7. 在「可外撥電話的使用者」分頁中,按一下「新增」

    8. 在「Authentication method」欄位中,選取「None」

    9. 按一下 [儲存]

  4. 建立溝通安排:

    1. 開啟「通訊安排」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication Arrangement」對話方塊中,輸入下列欄位的值:

      • 情境:選取「使用 Workload Identity Federation 進行驗證」 (/GOOG/COM_SDK_SRV)。
      • 安排名稱:輸入通訊安排的名稱。
    4. 按一下 [建立]。

    5. 針對顯示的通訊安排項目,在「通訊系統」欄位中選取您在上一個步驟中建立的通訊系統。

    6. 按一下 [儲存]

  5. 建立用戶端金鑰和通訊對應:

    1. 前往包含 SAP Fiori 應用程式的聊天室,設定 SDK。
    2. 開啟「Google SDK:主要設定」應用程式。
    3. 按一下 [建立]。
    4. 在隨即顯示的「Create」對話方塊中,輸入用戶端金鑰名稱。
    5. 按一下「繼續」
    6. 請在下列欄位中輸入值:

      • 服務帳戶:輸入已授予 Google Cloud API 存取權的服務帳戶。
      • 專案 ID:輸入已啟用 Google Cloud API 的 Google Cloud 專案專案 ID。如要瞭解專案 ID,請參閱「識別專案」。
      • 專案編號:輸入已啟用 Google Cloud API 的 Google Cloud 專案編號。如要瞭解專案編號,請參閱「識別專案」。
      • 驗證類型:選取「W (Workload Identity 聯盟)」
    7. 針對服務名稱為「authentication」的預設項目的通訊對應,請提供您為 WIF 式驗證設定的通訊安排

    8. 在通訊對應圖中新增一個項目,並將服務設為 aiplatform:v1,然後提供剛建立的通訊安排。

    9. 按一下「建立」,系統會顯示對話方塊,確認您同意依照標準 Google Cloud 條款使用 ABAP SDK for Google Cloud。

    10. 如要驗證驗證設定,請按一下「檢查連線」。如果項目顯示綠色勾號,表示設定成功。

      如果發生任何錯誤,請參閱疑難排解指南,瞭解如何解決常見錯誤。

同步處理 Vertex AI 特徵儲存庫

如要在功能檢視畫面中啟動資料同步作業,請使用 SYNC_FEATURE_DATA_TO_FS 方法。

DATA(lv_feature_view_sync_id) = lo_client->sync_feature_data_to_fs(
                                             iv_feature_view_id = 'FEATURE_VIEW_NAME'
                                        )->get_feature_sync_id( ).

FEATURE_VIEW_NAME 替換為您要開始同步處理資料的功能檢視畫面名稱。

這個方法會傳回功能檢視同步 ID,可用於檢查同步作業的狀態。

取得 Vertex AI 特徵儲存庫同步作業的狀態

如要取得 Vertex AI 特徵儲存庫同步作業的狀態,您可以使用 GET_FEATURE_SYNC_STATUS 方法。

DATA(ls_status) = lo_client->get_feature_sync_status(
                               iv_feature_view_id     = 'FEATURE_VIEW_NAME'
                               iv_feature_sync_id     = 'FEATURE_VIEW_SYNC_ID'
              )->get_feature_sync_status( ).

更改下列內容:

  • FEATURE_VIEW_NAME:您要檢查同步處理狀態的功能檢視畫面名稱。
  • FEATURE_VIEW_SYNC_ID:從 Sync Vertex AI 特徵儲存庫收到的特徵檢視同步 ID。

    此方法會傳回下列其中一個狀態,以及錯誤訊息 (如有):C: CompleteR: RunningF: Failed

從網路商店提供特徵

您可以從線上商店提供特徵值,以便用於即時應用程式,例如產品推薦。視你為線上商店設定的線上放送類型而定,你可以透過下列任一方式放送特徵值:

  • 使用 Bigtable 線上服務擷取特徵值。
  • 使用公開端點搭配最佳化線上放送功能擷取功能值。
  • 使用 Private Service Connect 端點搭配最佳化線上放送功能,擷取地圖項目值。

如要進一步瞭解提供功能值,請參閱「從網路商店提供功能」。

事前準備

您必須先從網路商店詳細資料中擷取公開端點網域名稱,才能開始從網路商店提供特徵值。接著,您需要使用 Google SDK:主要設定 SAP Fiori 應用程式,建立通訊系統和通訊安排,並在用戶端金鑰設定中進行設定。

  1. 如要擷取公開端點,請在您選擇的本機套件中建立 ZCL_GET_FEATURE_STORE_PUB_EP。您必須傳遞有效的用戶端金鑰,以及 Vertex AI 特徵儲存庫的儲存庫 ID 和位置。

    CLASS zcl_get_feature_store_pub_ep DEFINITION
    PUBLIC FINAL
    CREATE PUBLIC.
    PUBLIC SECTION.
       INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    CLASS zcl_get_feature_store_pub_ep IMPLEMENTATION.
    METHOD if_oo_adt_classrun~main.
       DATA lv_ckey        TYPE /goog/keyname.
       DATA lv_location_id TYPE string.
       DATA lv_fsid        TYPE string.
       DATA lv_project_id  TYPE string.
       DATA lv_msg         TYPE string.
    
       "TODO:Developer - Pass relevant values
       lv_ckey = 'CLIENT_KEY'.
       lv_fsid = 'FEATURE_ONLINE_STORE_NAME'.
       lv_location_id = 'LOCATION_ID'.
       TRY.
          DATA(lo_aip) = NEW  /goog/cl_aiplatform_v1( iv_key_name = lv_ckey ).
          lv_project_id = lo_aip->gv_project_id.
          " Call API method: aiplatform.projects.locations.featureOnlineStores.get
          lo_aip->get_feature_online_stores( EXPORTING iv_p_projects_id              = lv_project_id
                                                       iv_p_locations_id             = lv_location_id
                                                       iv_p_feature_online_stores_id = lv_fsid
                                              IMPORTING es_output                     = DATA(ls_output)
                                                       ev_ret_code                   = DATA(lv_ret_code)
                                                       ev_err_text                   = DATA(lv_err_text) ).
          IF lo_aip->is_success( lv_ret_code ) = abap_true.
             out->write( | Public endpoint is| ).
             out->write( ls_output-dedicated_serving_endpoint-public_endpoint_domain_name ).
          ENDIF.
          CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
          lv_msg = lo_cx_sdk->get_text( ).
          out->write( |Exception occurred, reason: { lv_msg }| ).
       ENDTRY.
    ENDMETHOD.
    ENDCLASS.
    
  2. 啟用並執行 ZCL_GET_FEATURE_STORE_PUB_EP 類別。

    輸出內容是網路商店的公開端點,採用以下格式:

    xxxxxxxxxx.LOCATION_ID-PROJECT_ID.featurestore.vertexai.goog
    

    輸出內容包含下列值:

    • LOCATION_ID:網路商店所在的區域。
    • PROJECT_ID:Google Cloud 專案所在的專案 ID (你的網路商店所在專案)。
  3. 存取已安裝 ABAP 適用於 Google Cloud 的 SDK 的 BTP ABAP 系統 SAP Fiori 啟動工具。

  4. 依序前往「所有聊天室」>「管理」>「通訊管理」

  5. 建立溝通機制:

    1. 開啟「通訊系統」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication System」對話方塊中,輸入下列欄位的值:

      • 系統 ID:輸入系統 ID。
      • 系統名稱:輸入系統名稱。
    4. 按一下 [建立]。

    5. 在「主機名稱」欄位中,輸入您在先前步驟中執行 ZCL_GET_FEATURE_STORE_PUB_EP 類別後擷取的公開端點。

    6. 在「Port」欄位中輸入 443

    7. 前往「Outbound Communication」使用者分頁,然後按一下「Add」

    8. 在「Authentiation method」欄位中,選取「None」

    9. 按一下 [儲存]

  6. 建立溝通安排:

    1. 開啟「通訊安排」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication Arrangement」對話方塊中,輸入下列欄位的值:

      • 情境:選取「使用 Workload Identity Federation 進行驗證 (/GOOG/COM_SDK_SRV)」
      • 安排名稱:輸入通訊安排的名稱。
    4. 按一下 [建立]。

    5. 針對顯示的通訊安排項目,在「通訊系統」欄位中選取您在上一個步驟中建立的通訊系統。

    6. 按一下 [儲存]

  7. 建立用戶端金鑰和通訊對應:

    1. 前往包含 SAP Fiori 應用程式的聊天室,設定 SDK。
    2. 開啟「Google SDK:主要設定」應用程式。
    3. 按一下 [建立]。
    4. 在隨即顯示的「Create」對話方塊中,輸入用戶端金鑰名稱。
    5. 按一下「繼續」
    6. 輸入下列詳細資訊:

      • 服務帳戶:輸入已授予 Google Cloud API 存取權的服務帳戶。
      • 專案 ID:輸入已啟用 Google Cloud API 的 Google Cloud 專案專案 ID。如要瞭解專案 ID,請參閱「識別專案」。
      • 專案編號:輸入已啟用 Google Cloud API 的 Google Cloud 專案編號。如要瞭解專案編號,請參閱「識別專案」。
      • 驗證類型:選取「W (Workload Identity 聯盟)」
    7. 針對服務名稱為「authentication」的預設項目的通訊對應,請提供您為 WIF 式驗證設定的通訊安排

    8. 在通訊對應圖中新增一個項目,並將服務設為 aiplatform:v1,然後提供剛建立的通訊安排。

    9. 按一下「建立」,系統會顯示對話方塊,確認您同意依照標準 Google Cloud 條款使用 ABAP SDK for Google Cloud。

    10. 如要驗證驗證設定,請按一下「檢查連線」。如果項目顯示綠色勾號,表示設定成功。

      如果發生任何錯誤,請參閱疑難排解指南,瞭解如何解決常見錯誤。

  8. 確認您的通訊對應表包含下列三個項目:

    服務名稱 通訊情境 通訊安排
    authentication /GOOG/SDK_COM_WIF 您為 XSUAA 服務建立的通訊安排。
    aiplatform:v1 /GOOG/COM_SDK_SRV 您使用包含 AI PLATFORM 區域端點的通訊系統所設定的通訊安排。
    apiinvoker:v1 /GOOG/COM_SDK_SRV 在先前步驟中,您使用 Vertex AI 特徵儲存庫服務的公開端點,透過通訊系統設定的通訊安排。

擷取特徵值

在 Vertex AI 特徵儲存庫中,實體是指您要追蹤特徵的項目,例如客戶、產品或任何其他資料點。每個實體都會與一組特徵和相應的值相關聯。

如要透過指定單一實體 ID 擷取特徵值,請使用 SERVE_FEATURE_VALUES 方法。

DATA(lt_features) = lo_client->serve_feature_values(
                         iv_feature_view_id = 'FEATURE_VIEW_NAME'
                             it_entity_id       = 'ENTITY_ID'
                )->get_features( ).

更改下列內容:

  • FEATURE_VIEW_NAME:您要提供地圖項目值的功能檢視畫面名稱。
  • ENTITY_ID:您要用於提供最新特徵值的特徵記錄中 ID 欄的值。或者,您也可以提供零件陣列來建構實體 ID。請確認 ID 欄的順序與特徵檢視畫面中定義的順序相同。

搜尋近似最鄰近的項目

如果是為了最佳化線上服務而建立的網路商店,您可以執行向量相似度搜尋,擷取語意相似或相關實體的清單,也就是大致相似的鄰近項目。您可以根據實體 ID 或嵌入值,搜尋大致最近鄰。

事前準備

您必須先從網路商店詳細資料中擷取公開端點網域名稱,才能開始從網路商店提供特徵值。接著,您需要使用 Google SDK:主要設定 SAP Fiori 應用程式,建立通訊系統和通訊安排,並在用戶端金鑰設定中進行設定。

  1. 如要擷取公開端點,請在您選擇的本機套件中建立 ZCL_GET_FEATURE_STORE_PUB_EP。您必須傳遞有效的用戶端金鑰,以及 Vertex AI 特徵儲存庫的儲存庫 ID 和位置。

    CLASS zcl_get_feature_store_pub_ep DEFINITION
    PUBLIC FINAL
    CREATE PUBLIC.
    PUBLIC SECTION.
       INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    CLASS zcl_get_feature_store_pub_ep IMPLEMENTATION.
    METHOD if_oo_adt_classrun~main.
       DATA lv_ckey        TYPE /goog/keyname.
       DATA lv_location_id TYPE string.
       DATA lv_fsid        TYPE string.
       DATA lv_project_id  TYPE string.
       DATA lv_msg         TYPE string.
    
       "TODO:Developer - Pass relevant values
       lv_ckey = 'CLIENT_KEY'.
       lv_fsid = 'FEATURE_ONLINE_STORE_NAME'.
       lv_location_id = 'LOCATION_ID'.
       TRY.
          DATA(lo_aip) = NEW  /goog/cl_aiplatform_v1( iv_key_name = lv_ckey ).
          lv_project_id = lo_aip->gv_project_id.
          " Call API method: aiplatform.projects.locations.featureOnlineStores.get
          lo_aip->get_feature_online_stores( EXPORTING iv_p_projects_id              = lv_project_id
                                                       iv_p_locations_id             = lv_location_id
                                                       iv_p_feature_online_stores_id = lv_fsid
                                              IMPORTING es_output                     = DATA(ls_output)
                                                       ev_ret_code                   = DATA(lv_ret_code)
                                                       ev_err_text                   = DATA(lv_err_text) ).
          IF lo_aip->is_success( lv_ret_code ) = abap_true.
             out->write( | Public endpoint is| ).
             out->write( ls_output-dedicated_serving_endpoint-public_endpoint_domain_name ).
          ENDIF.
          CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
          lv_msg = lo_cx_sdk->get_text( ).
          out->write( |Exception occurred, reason: { lv_msg }| ).
       ENDTRY.
    ENDMETHOD.
    ENDCLASS.
    
  2. 啟用並執行 ZCL_GET_FEATURE_STORE_PUB_EP 類別。

    輸出內容是網路商店的公開端點,採用以下格式:

    xxxxxxxxxx.LOCATION_ID-PROJECT_ID.featurestore.vertexai.goog
    

    輸出內容包含下列值:

    • LOCATION_ID:網路商店所在的區域。
    • PROJECT_ID:Google Cloud 專案所在專案 ID,也就是你的網路商店所在專案。
  3. 存取已安裝 ABAP 適用於 Google Cloud 的 SDK 的 BTP ABAP 系統 SAP Fiori 啟動工具。

  4. 依序前往「所有聊天室」>「管理」>「通訊管理」

  5. 建立溝通機制:

    1. 開啟「通訊系統」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication System」對話方塊中,輸入下列欄位的值:

      • 系統 ID:輸入系統 ID。
      • 系統名稱:輸入系統名稱。
    4. 按一下 [建立]。

    5. 在「主機名稱」欄位中,輸入您在先前步驟中執行 ZCL_GET_FEATURE_STORE_PUB_EP 類別後擷取的公開端點。

    6. 在「Port」欄位中輸入 443

    7. 前往「Outbound Communication」使用者分頁,然後按一下「Add」

    8. 在「Authentiation method」欄位中,選取「None」

    9. 按一下 [儲存]

  6. 建立溝通安排:

    1. 開啟「通訊安排」應用程式。
    2. 按一下 [New]
    3. 在隨即顯示的「New Communication Arrangement」對話方塊中,輸入下列欄位的值:

      • 情境:選取「使用 Workload Identity Federation 進行驗證 (/GOOG/COM_SDK_SRV)」
      • 安排名稱:輸入通訊安排的名稱。
    4. 按一下 [建立]。

    5. 針對顯示的通訊安排項目,在「通訊系統」欄位中選取您在上一個步驟中建立的通訊系統。

    6. 按一下 [儲存]

  7. 建立用戶端金鑰和通訊對應:

    1. 前往包含 SAP Fiori 應用程式的聊天室,設定 SDK。
    2. 開啟「Google SDK:主要設定」應用程式。
    3. 按一下 [建立]。
    4. 在隨即顯示的「Create」對話方塊中,輸入用戶端金鑰名稱。
    5. 按一下「繼續」
    6. 輸入下列詳細資訊:

      • 服務帳戶:輸入已授予 Google Cloud API 存取權的服務帳戶。
      • 專案 ID:輸入已啟用 Google Cloud API 的 Google Cloud 專案專案 ID。如要瞭解專案 ID,請參閱「識別專案」。
      • 專案編號:輸入已啟用 Google Cloud API 的 Google Cloud 專案編號。如要瞭解專案編號,請參閱「識別專案」。
      • 驗證類型:選取「W (Workload Identity 聯盟)」
    7. 針對服務名稱為「authentication」的預設項目的通訊對應,請提供您為 WIF 式驗證設定的通訊安排

    8. 在通訊對應圖中新增一個項目,並將服務設為 aiplatform:v1,然後提供剛建立的通訊安排。

    9. 按一下「建立」,系統會顯示對話方塊,確認您同意依照標準 Google Cloud 條款使用 ABAP SDK for Google Cloud。

    10. 如要驗證驗證設定,請按一下「檢查連線」。如果項目顯示綠色勾號,表示設定成功。

      如果發生任何錯誤,請參閱疑難排解指南,瞭解如何解決常見錯誤。

  8. 確認您的通訊對應表包含下列三個項目:

    服務名稱 通訊情境 通訊安排
    authentication /GOOG/SDK_COM_WIF 您為 XSUAA 服務建立的通訊安排。
    aiplatform:v1 /GOOG/COM_SDK_SRV 您使用包含 AI PLATFORM 區域端點的通訊系統所設定的通訊安排。
    apiinvoker:v1 /GOOG/COM_SDK_SRV 在先前步驟中,您使用 Vertex AI 特徵儲存庫服務的公開端點,透過通訊系統設定的通訊安排。

擷取嵌入項目的最相似項目

您可以指定嵌入,搜尋語意相關的實體。

如要搜尋嵌入項目的最近鄰,請使用 SEARCH_USING_EMBEDDINGS 方法傳送要求。

DATA(lt_embeddings) = VALUE /goog/cl_aiplatform_v1=>ty_t_/goog/num_float( EMBEDDING_DATA ).

DATA(lt_neighbours) = lo_client->search_using_embeddings(
  EXPORTING
    iv_feature_view_id = 'FEATURE_VIEW_NAME'
    it_embeddings      = lt_embeddings
    is_search_params   = VALUE #( neighbor_count     = 'NEIGHBOR_COUNT'
                                  return_full_entity = 'RETURN_FULL_ENTITY' )
)->get_neighbours( ).

更改下列內容:

  • EMBEDDING_DATA:您要擷取近似最鄰近項目比對結果的嵌入項目。嵌入內容會以浮點值陣列表示。
  • FEATURE_VIEW_NAME:您要搜尋近似最近鄰比對結果的要素檢視畫面名稱。
  • NEIGHBOR_COUNT:您要擷取的近似鄰點數量。
  • RETURN_FULL_ENTITY:選用。指定要加入或排除回應中實體的功能。如要在回應中加入地圖項目和實體,請輸入 ABAP_TRUE。預設值為 ABAP_FALSE

擷取實體的最相近項目

您可以指定實體 ID,搜尋語意相關的實體。

如要搜尋實體 ID 的最近鄰近項目,請使用 SEARCH_USING_ENTITY 方法傳送要求。

DATA(lt_neighbours) = lo_client->search_using_entity(
  EXPORTING
    iv_feature_view_id = 'FEATURE_VIEW_NAME'
    iv_entity_id       = 'ENTITY_ID'
    is_search_params   = VALUE #( neighbor_count     = 'NEIGHBOR_COUNT'
                                  return_full_entity = 'RETURN_FULL_ENTITY' )
)->get_neighbours( ).

更改下列內容:

  • FEATURE_VIEW_NAME:您要搜尋近似最近鄰比對結果的要素檢視畫面名稱。
  • ENTITY_ID::您要擷取近似近鄰相符項目的實體 ID。
  • NEIGHBOR_COUNT:您要擷取的近似鄰點數量。
  • RETURN_FULL_ENTITY:選用。指定要加入或排除回應中實體的功能。如要在回應中加入地圖項目和實體,請輸入 ABAP_TRUE。預設值為 ABAP_FALSE

後續步驟