本文說明參考架構,可用於設計 SAP 中的服務子系統,以便與檢索增強生成 (RAG) 相容的生成式 AI 應用程式搭配使用。為了整合 Google Cloud 建構支援 RAG 的生成式 AI 應用程式所需的服務,這個參考架構會使用 Google Cloud 適用的 ABAP SDK 的內部部署系統或任何雲端版本。
本文適用於 ABAP 開發人員、SAP 解決方案架構師和雲端架構師。我們假設您已熟悉 Vector Search 術語和 RAG 概念。
服務子系統是支援 RAG 的生成式 AI 應用程式中的重要元件,因為它會管理應用程式與使用者之間的要求/回覆流程。本文件所述的服務子系統可讓應用程式存取及使用 SAP 企業資料,為大型語言模型 (LLM) 提供背景資訊,進而產生更準確可靠的輸出內容。
將 Gemini LLM 與 SAP 企業資料和程序結合,即可享有下列好處:
- 提高準確度:取得更多資訊,有助您根據企業資料做出更準確的決策。
- 提升使用者體驗:提供個人化且符合情境的相關資訊,可提高模型回覆的可靠度,進而提升使用者滿意度。
架構
下圖顯示 SAP 中服務子系統的元件:
如上圖所示,服務子系統架構包含下列元件:
數字 | 元件 | 詳細資料 |
---|---|---|
1 | 服務子系統 | 服務子系統負責從資料來源擷取相關資訊。它會透過提示增強資訊、與生成式 AI 模型互動,並將最終回覆傳回給使用者。 |
2 | ABAP SDK for Google Cloud | SDK 會處理服務子系統與各種 Google Cloud 服務之間的通訊。 |
3 | SAP 功能模組 | 如果資料集較小且位於 SAP 系統中,您可以使用 SAP 函式模組建構資訊擷取管道。您可以使用 SELECT 查詢、BAPI 呼叫或透過 Gemini 呼叫 SAP 函式,從 SAP 函式模組擷取資料。 |
4 | Vector Search 產品 | 如果企業資料量龐大,且您希望 RAG 應用程式具有最短的延遲時間,可以使用向量搜尋建立擷取管道。您可以對向量資料庫 (例如 Cloud Storage、Vertex AI Feature Store 或 BigQuery) 中以嵌入形式儲存的企業資料執行語意搜尋。 |
5 | Vertex AI Gemini 模型 | Vertex AI Gemini 模型:可根據企業資料產生回覆。 |
服務子系統
生成式 AI 解決方案的服務子系統包含下列子系統:
資訊檢索
當使用者透過前端向生成式 AI 應用程式提交要求時,服務子系統會從資料來源擷取資訊。如要從資料來源擷取資訊,您可以根據用途選擇適當的方法:
- 使用向量搜尋擷取資訊
- 不使用 Vector Search 擷取資訊
使用 Vector Search 擷取資訊
如果您的企業資料量龐大 (結構化或非結構化資料),且希望 RAG 應用程式延遲時間最短,建議您使用向量搜尋建立擷取管道。Vector Search 可在數毫秒內,針對數十億筆記錄執行文字和多模態搜尋。
如要使用向量搜尋來擷取資訊,您必須設定向量資料庫,以向量嵌入的形式儲存企業資料。如要瞭解如何將企業資料擷取至向量資料庫,請參閱「在 SAP 中建立資料擷取子系統,以便支援 RAG 的生成式 AI 應用程式」。
不使用 Vector Search 擷取資訊
如果資料集較小且位於 SAP 系統中,您可以使用 SELECT
查詢或 SAP BAPI
呼叫來擷取資訊,也可以透過 Gemini 呼叫 SAP 函式來擴充模型的背景資訊。
資訊擴充
為提供模型必要的企業專屬背景資訊,建議您在提示中加入 SAP 系統的相關資訊。
取得額外資料後,請將資料加入模型的內容。這項擴充功能可為模型提供所需的上下文,讓模型使用新增的企業資訊回覆。
如要將擷取的資料加入模型的背景資訊,請將資料附加或連結至模型的輸入提示。在附加資料時,您可以使用相關文字做為前置字串或後置字串,表示該資料是提示的額外背景資訊。
回應產生
如要使用擴充提示來叫用 Gemini AI 模型,請使用 ABAP 適用的 Vertex AI SDK 的生成式模型叫用器元件。
這種做法可確保系統產生的回覆不僅與使用者的查詢相關,也能根據企業專屬資料提供更準確且有洞察力的結果。
用途
您可以使用具備 RAG 功能的生成式 AI 應用程式,透過自然語言查詢快速更新倉庫中的物料庫存。
假設您為一家製造和運送家具、裝飾品和配件的公司的倉庫員工,實作生成式 AI 應用程式。
為了有效管理倉庫庫存和供應鏈,生成式 AI 應用程式會透過 SAP 網頁應用程式,以自然語言查詢快速提供物料庫存的洞察資料。這類查詢的例子之一,就是判斷特定素材目前的庫存數量。
這項資訊會儲存在 SAP 資料庫表格中的產品資料中,而這可能會是大型家具公司龐大的商品清單。倉庫員工需要從 SAP 應用程式取得回應,這些回應必須以 SAP 系統中的資訊 (單一可靠資料來源) 為依據。這項資訊可協助他們快速做出決策,例如:
- 庫存供應情形:特定素材是否有現貨?
- 庫存水準:可用的素材資源有多少?
- 生產規劃:如果要滿足下一個進貨訂單,材料的製造目標應為何?
部署作業
本節將概述為倉庫用途實作服務子系統。本課程將詳細說明如何使用 ABAP 適用的 Vertex AI SDK (嵌入最新版 ABAP SDK for Google Cloud),擷取資訊並與 Gemini 模型互動。
針對倉庫用途,請注意,SAP 中的庫存資訊會連結至每項產品的專屬物料 ID。每項產品也會在 SAP 中儲存描述性屬性,例如名稱、詳細說明、類別和其他相關資源。這些文字說明會轉換為稱為「嵌入」的數值表示法,並儲存在向量資料庫中。每個嵌入項目都會連結至相應的素材 ID,方便你快速搜尋及分析產品資訊。
向量資料庫更新後,如要執行「產品目前的商品目錄計數為何」的搜尋查詢,可以執行下列操作:
使用查詢在向量資料庫中執行向量搜尋,以便擷取素材 ID。
查詢 SAP 資料表並呼叫 SAP BAPI,取得物料 ID 的庫存數量。
將庫存數量加進模型的上下文。
如果您選擇的向量資料庫是向量索引,則可以使用 ABAP 專用的 Vertex AI SDK 直接從 ABAP 叫用向量搜尋。詳情請參閱「為智慧 SAP 應用程式提供 Vertex AI Vector Search」的參考架構。
以下是服務子系統的導入步驟:
如要擷取倉庫用途的物料 ID,您可以使用向量搜尋。
以下程式碼範例說明如何使用向量搜尋來擷取素材資源 ID:
DATA: lv_prompt TYPE string, lv_available_quantity TYPE mng01, ls_return TYPE bapireturn, lv_available_inventory TYPE string, lt_wmdvsx TYPE STANDARD TABLE OF bapiwmdvs, lt_wmdvex TYPE STANDARD TABLE OF bapiwmdve. lv_prompt = 'What is the current inventory count for Cymbal Emerald Flower Vase'. * Get material id based on the prompt through vector search TRY. DATA(lo_vector_index) = NEW /goog/cl_vector_search( iv_search_key = 'SEARCH_KEY' ). DATA(ls_material) = lo_vector_index->find_neighbors_by_string( iv_search_string = lv_prompt iv_embeddings_model_key = 'EMBEDDINGS_MODEL_KEY' )->get_nearest_neighbor( ). CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ). EXIT. ENDTRY. DATA(lv_material_id) = ls_material-datapoint_id. * Get base unit of measure for the material SELECT SINGLE meinh FROM marm INTO @DATA(lv_meinh) WHERE matnr = @lv_material_id. IF sy-subrc = 0. * Get available stock for the material CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY' EXPORTING plant = <SAP_PLANT_ID> material = CONV matnr18( lv_material_id ) unit = lv_meinh IMPORTING av_qty_plt = lv_available_quantity return = ls_return TABLES wmdvsx = lt_wmdvsx wmdvex = lt_wmdvex. IF ls_return-type = 'S' OR ls_return-type IS INITIAL. * Prepare available stock value in base unit of measure lv_available_inventory = |{ 'Avaiblable Stock = ' } | && lv_available_quantity && | { lv_meinh }|. ELSE. cl_demo_output=>display( 'Material availability lookup not successful:' && ls_return-message ). ENDIF. ENDIF.
如果資料集較小且位於 SAP 系統中,您可以使用
SELECT
查詢搭配物料說明,找出倉庫用途的物料 ID,然後查詢 SAP 資料表以取得庫存數量。以下程式碼範例說明如何使用
SELECT
查詢來擷取物料庫存資訊:DATA: lv_prompt TYPE string, lv_available_quantity TYPE mng01, ls_return TYPE bapireturn, lv_available_inventory TYPE string, lt_wmdvsx TYPE STANDARD TABLE OF bapiwmdvs, lt_wmdvex TYPE STANDARD TABLE OF bapiwmdve, lr_maktx TYPE RANGE OF maktx, ls_maktx LIKE LINE OF lr_maktx. lv_prompt = 'What is the current inventory count for Cymbal Emerald Flower Vase'. ls_maktx-sign = 'I'. ls_maktx-option = 'CP'. ls_maktx-low = 'Cymbal Emerald Flower Vase'. APPEND ls_maktx TO lr_maktx. * Get material id through select statement SELECT SINGLE matnr FROM makt INTO @DATA(lv_material_id) WHERE maktx IN @lr_maktx. IF sy-subrc <> 0. cl_demo_output=>display( 'Material with given description not found' ). EXIT. ENDIF. * Get base unit of measure for the material SELECT SINGLE meinh FROM marm INTO @DATA(lv_meinh) WHERE matnr = @lv_material_id. IF sy-subrc = 0. * Get available stock for the material CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY' EXPORTING plant = <SAP_PLANT_ID> material = CONV matnr18( lv_material_id ) unit = lv_meinh IMPORTING av_qty_plt = lv_available_quantity return = ls_return TABLES wmdvsx = lt_wmdvsx wmdvex = lt_wmdvex. IF ls_return-type = 'S' OR ls_return-type IS INITIAL. * Prepare available stock value in base unit of measure lv_available_inventory = |{ 'Avaiblable Stock = ' } | && lv_available_quantity && | { lv_meinh }|. ELSE. cl_demo_output=>display( 'Material availability lookup not successful:' && ls_return-message ). ENDIF. ENDIF.
如要將擷取的資料新增至輸入提示,請使用前置詞「Available stock」將素材資源的現貨數量連結至提示。
以下程式碼範例說明如何將擷取到的資料加入輸入提示:
* Augment retrieved data to the input prompt lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory.
如要使用擴充提示語叫用 Gemini AI 模型,請使用 ABAP 適用的 Vertex AI SDK 產生式模型叫用器元件。
下列程式碼範例說明如何使用擴充提示喚醒模型:
TRY. lv_prompt = lv_prompt && 'Additional Context' && lv_available_inventory. DATA(lo_model_key) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ). DATA(lv_model_response) = lo_model_key->generate_content( lv_prompt )->get_text( ). IF lv_model_response IS NOT INITIAL. cl_demo_output=>display( lv_model_response ). ENDIF. CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk). cl_demo_output=>display( lo_cx_sdk->get_text( ) ). ENDTRY.
設計須知
本節提供指南,協助您使用這個參考架構開發架構,以滿足安全性、隱私權、法規遵循、成本和效能方面的特定需求。
安全性、隱私權和法規遵循
安全性和法規遵循是共同的責任。詳情請參閱「Vertex AI 共享責任」。
如要瞭解 Google Cloud對資料隱私權的承諾,請參閱隱私權資源中心。
成本最佳化
如果您使用向量搜尋來擷取 RAG 的資訊,為了降低成本,建議您為索引選擇較小的區塊大小和較低維度的嵌入,這樣就能使用較小的運算機器來部署索引。
Vertex AI 是 Google Cloud的付費服務。如需定價資訊,請參閱「Vertex AI 定價」和「Vector Search 定價」。如要根據預測用量產生預估費用,請使用 Pricing Calculator。
效能最佳化
如果您使用向量搜尋來擷取 RAG 的資訊,為了改善查詢大型資料集的延遲時間,建議您在建立索引時選擇較大的分割區大小,並在部署索引時選擇高效能運算機器。如要進一步瞭解索引的分割區大小,請參閱「索引大小」。
如要提升搜尋回應的關聯性,請以更高維度產生企業資料的嵌入資料。計算機器和較高的嵌入維度成本高昂。如要根據預測用量產生預估費用,請使用 Pricing Calculator。
後續步驟
如要瞭解如何使用 Vector Search 搭配 SAP 應用程式進行語義搜尋,請參閱「適用於智慧型 SAP 應用程式的 Vertex AI Vector Search」。
如要瞭解如何搭配使用 Vector Search 與 ABAP 適用的 Vertex AI SDK,請參閱「使用 Vertex AI Vector Search」。
如要瞭解如何將企業資料擷取至向量資料庫,請參閱「在 SAP 中建構資料擷取子系統,以便支援 RAG 的生成式 AI 應用程式」。
如需協助解決 ABAP SDK for Google Cloud 的問題,請按照下列步驟操作:
- 請參閱 ABAP SDK for Google Cloud 疑難排解指南。
- 在 Cloud 論壇上向社群提問,並討論 ABAP 適用的 Google Cloud SDK。
- 收集所有可用的診斷資訊,然後聯絡 Cloud 客戶服務團隊。如要瞭解如何與 Customer Care 聯絡,請參閱「取得 SAP 支援 Google Cloud」一文。
貢獻者
作者:Devesh Singh | SAP 應用程式工程師
其他協作者: Vikash Kumar | 技術撰稿人