이 문서에서는 검색 증강 생성 (RAG) 지원 생성형 AI 애플리케이션과 함께 사용할 SAP의 서비스 하위 시스템을 설계하기 위한 참조 아키텍처를 설명합니다. RAG 지원 생성형 AI 애플리케이션을 빌드하는 데 필요한 Google Cloud 서비스와 통합하기 위해 이 참조 아키텍처는 ABAP SDK for Google Cloud의 온프레미스 또는 모든 클라우드 버전을 사용합니다.
이 문서는 ABAP 개발자, SAP 솔루션 설계자, 클라우드 설계자를 대상으로 합니다. 여기서는 사용자가 벡터 검색 용어 및 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 | 벡터 검색 제품 | 엔터프라이즈 데이터가 많고 지연 시간이 짧은 RAG 애플리케이션을 원하는 경우 벡터 검색을 사용하여 검색 파이프라인을 빌드할 수 있습니다. Cloud Storage, Vertex AI Feature Store, BigQuery와 같은 벡터 데이터베이스에 임베딩 형식으로 저장된 엔터프라이즈 데이터에 대해 시맨틱 검색을 실행할 수 있습니다. |
5 | Vertex AI Gemini 모델 | 엔터프라이즈 데이터를 기반으로 응답을 생성하는 Vertex AI Gemini 모델 |
서빙 하위 시스템
생성형 AI 솔루션의 서빙 하위 시스템은 다음 하위 구성요소로 구성됩니다.
정보 검색
사용자가 프런트엔드를 통해 생성형 AI 애플리케이션에 요청을 제출하면 서빙 하위 시스템이 데이터 소스에서 정보를 가져옵니다. 데이터 소스에서 정보를 검색하려면 사용 사례에 적합한 메서드를 선택하면 됩니다.
- 벡터 검색을 사용하여 정보 검색
- 벡터 검색 없이 정보 검색
벡터 검색을 사용하여 정보 검색
엔터프라이즈 데이터가 크고 (구조화된 데이터 또는 비정형 데이터) 지연 시간이 최소인 RAG 애플리케이션을 원하는 경우 벡터 검색을 사용하여 검색 파이프라인을 빌드하는 것이 좋습니다. 벡터 검색은 수십억 개의 레코드에서 텍스트 및 멀티모달 검색을 밀리초 이내에 실행할 수 있습니다.
정보 검색에 벡터 검색을 사용하려면 벡터 임베딩 형식으로 기업 데이터를 저장할 벡터 데이터베이스를 설정해야 합니다. 엔터프라이즈 데이터를 벡터 데이터베이스로 처리하는 방법에 관한 자세한 내용은 RAG 지원 생성형 AI 애플리케이션을 위해 SAP에서 데이터 처리 하위 시스템 빌드를 참고하세요.
벡터 검색 없이 정보 검색
데이터 세트가 작고 SAP 시스템 내에 있는 경우 SELECT
쿼리, SAP BAPI
호출을 사용하여 정보를 검색하거나 Gemini에서 SAP 함수 호출을 사용하여 모델의 컨텍스트를 보강할 수 있습니다.
정보 증강
모델에 필수적인 엔터프라이즈별 컨텍스트를 제공하려면 SAP 시스템의 관련 정보로 프롬프트를 보강하는 것이 좋습니다.
추가 데이터를 가져온 후 모델의 컨텍스트에 데이터를 보강합니다. 이러한 증강을 통해 추가된 엔터프라이즈 정보를 사용하여 응답하는 데 필요한 컨텍스트가 모델에 제공됩니다.
검색된 데이터를 모델의 컨텍스트에 보강하려면 데이터를 모델의 입력 프롬프트에 추가하거나 연결합니다. 데이터를 추가하는 동안 관련 텍스트를 접두사 또는 접미사로 추가하여 프롬프트와 함께 추가 컨텍스트임을 나타낼 수 있습니다.
응답 생성
증강 프롬프트로 Gemini AI 모델을 호출하려면 ABAP용 Vertex AI SDK의 생성형 모델 호출자 구성요소를 사용하세요.
이 접근 방식을 사용하면 생성된 응답이 사용자의 쿼리와 관련이 있을 뿐만 아니라 엔터프라이즈별 데이터를 기반으로 하므로 더 정확하고 유용한 결과를 얻을 수 있습니다.
사용 사례
RAG 지원 생성형 AI 애플리케이션을 사용하면 자연어 쿼리를 통해 창고의 자재 재고에 관한 빠른 업데이트를 생성할 수 있습니다.
가구, 인테리어, 액세서리를 제조하고 배송하는 회사의 창고 직원을 위해 생성형 AI 애플리케이션을 구현하는 시나리오를 생각해 보겠습니다.
창고 인벤토리와 공급망을 효율적으로 관리하기 위해 생성형 AI 애플리케이션은 SAP 웹 애플리케이션을 통해 자연어 기반 쿼리를 사용하여 재고에 관한 유용한 정보를 빠르게 제공합니다. 이러한 쿼리의 한 가지 예는 특정 재료의 현재 인벤토리 수를 확인하는 것입니다.
이 정보는 SAP 데이터베이스 테이블의 제품 데이터 내에 저장되며, 대규모 가구 회사의 대규모 상품 목록일 수 있습니다. 창고 직원은 SAP 애플리케이션에서 SAP 시스템 (단일 정보 소스)의 정보에 기초를 둔 응답을 받아야 합니다. 이 정보를 통해 다음과 같이 빠르고 효율적인 결정을 내릴 수 있습니다.
- 재고: 특정 재료의 재고가 있나요?
- 인벤토리 수준: 재료의 재고가 몇 개인가요?
- 생산 계획: 다음 인바운드 주문을 처리하기 위해 재료의 제조 타겟은 얼마여야 하나요?
배포
이 섹션에서는 창고 사용 사례의 게재 하위 시스템 구현을 간략히 설명합니다. 이 문서에서는 최신 버전의 ABAP SDK for Google Cloud에 삽입된 ABAP용 Vertex AI SDK를 사용하여 정보를 검색하고 Gemini 모델과 상호작용하는 방법을 자세히 설명합니다.
창고 사용 사례의 경우 SAP의 재고 정보는 각 제품의 고유한 재료 ID에 연결됩니다. 또한 각 제품에는 이름, 상세 설명, 카테고리, 기타 관련 속성 등 SAP에 저장된 설명 속성이 있습니다. 이러한 텍스트 설명은 '임베딩'이라는 수치 표현으로 변환되어 벡터 데이터베이스에 저장됩니다. 각 임베딩은 해당하는 자료 ID에 연결되므로 제품 정보를 효율적으로 검색하고 분석할 수 있습니다.
벡터 데이터베이스가 업데이트되면 '제품의 현재 인벤토리 수는 얼마인가요?'라는 검색어를 실행하려면 다음을 실행하면 됩니다.
쿼리를 사용하여 벡터 데이터베이스에서 벡터 검색을 실행하여 재료 ID를 가져옵니다.
SAP 테이블을 쿼리하고 SAP BAPI를 호출하여 재료 ID의 재고 수량을 가져옵니다.
모델의 컨텍스트에 재고 수량을 늘립니다.
선택한 벡터 데이터베이스가 벡터 색인인 경우 ABAP용 Vertex AI SDK를 사용하여 ABAP에서 직접 벡터 검색을 호출할 수 있습니다. 자세한 내용은 참조 아키텍처 지능형 SAP 애플리케이션을 위한 Vertex AI 벡터 검색을 참고하세요.
다음은 서빙 하위 시스템의 구현 단계입니다.
창고 사용 사례의 재료 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 시스템 내에 있는 경우 창고 사용 사례의 재료 ID를 찾으려면 재료 설명과 함께
SELECT
쿼리를 사용한 다음 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.
검색된 데이터를 입력 프롬프트에 추가하려면 '재고 있음' 접두사를 사용하여 자료의 재고를 프롬프트에 연결합니다.
다음 코드 샘플은 검색된 데이터를 입력 프롬프트에 보강하는 방법을 보여줍니다.
* 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 가격 책정 및 벡터 검색 가격 책정을 참고하세요. 프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
성능 최적화
벡터 검색을 사용하여 RAG 정보를 검색하는 경우 대규모 데이터 세트를 조회하는 지연 시간을 개선하려면 색인을 만들 때 더 큰 샤드 크기를 선택하고 색인을 배포할 때 고성능 컴퓨팅 머신을 선택하는 것이 좋습니다. 색인의 샤드 크기에 관한 자세한 내용은 색인 크기를 참고하세요.
검색 응답의 관련성을 높이려면 더 높은 차원에서 엔터프라이즈 데이터의 임베딩을 생성하세요. 컴퓨팅 머신 및 더 높은 임베딩 크기는 비용이 많이 듭니다. 프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
다음 단계
SAP 애플리케이션에서 시맨틱 검색을 위해 벡터 검색을 사용하는 방법을 알아보려면 지능형 SAP 애플리케이션을 위한 Vertex AI 벡터 검색을 참고하세요.
ABAP용 Vertex AI SDK에서 벡터 검색을 사용하는 방법은 Vertex AI 벡터 검색 사용을 참고하세요.
엔터프라이즈 데이터를 벡터 데이터베이스로 처리하는 방법을 알아보려면 RAG 지원 생성형 AI 애플리케이션을 위해 SAP에서 데이터 처리 하위 시스템 빌드를 참고하세요.
ABAP SDK for Google Cloud 문제를 해결하는 데 도움이 필요한 경우 다음을 수행하세요.
- ABAP SDK for Google Cloud 문제 해결 가이드를 참조합니다.
- Cloud 포럼의 커뮤니티에서 ABAP SDK for Google Cloud에 대해 질문하고 논의하세요.
- 사용 가능한 모든 진단 정보를 수집하여 Cloud Customer Care에 문의합니다. 고객 관리에 문의하는 방법에 대한 자세한 내용은 Google Cloud에서 SAP 지원 받기를 참고하세요.
참여자
저자: Devesh Singh | SAP 애플리케이션 엔지니어
기타 참여자: Vikash Kumar | 기술 문서 작성자