생성형 AI 애플리케이션을 위한 SAP의 데이터 수집 하위 시스템

이 문서에서는 RAG 지원 생성형 AI 애플리케이션을 위해 SAP에서 데이터 처리 하위 시스템을 설계하기 위한 참조 아키텍처를 설명합니다. 이 하위 시스템은 ABAP SDK for Google Cloud의 온프레미스 또는 클라우드 버전을 사용하여 RAG 지원 생성형 AI 애플리케이션을 빌드하는 데 필요한 Google Cloud 서비스와 통합합니다.

검색 증강 생성 (RAG) 지원 생성형 AI 애플리케이션에는 다양한 구성요소가 있으며, 그중 데이터 처리 하위 시스템은 엔터프라이즈 데이터를 준비하고 처리하는 역할을 합니다. 이 하위 시스템을 사용하면 정확하고 유용한 AI 상호작용을 위해 엔터프라이즈 데이터를 벡터 데이터베이스에 임베딩으로 준비하고 저장할 수 있습니다.

많은 조직에서 SAP ERP 시스템을 사용하여 엔터프라이즈 데이터를 저장하므로 이 문서에서는 데이터 처리 하위 시스템의 일부로 Google Cloud의 데이터 저장소 솔루션과 벡터 검색 데이터베이스를 통합하는 방법을 안내합니다. 이를 통해 정보에 입각한 선택을 하고 Google Cloud 서비스를 효과적으로 사용하여 RAG 지원 생성형 AI 애플리케이션을 위한 견고하고 효율적인 파이프라인을 빌드할 수 있습니다.

이 문서의 주요 대상에는 ABAP 개발자, SAP 솔루션 설계자, 클라우드 설계자가 포함됩니다. 이 문서에서는 사용자가 벡터 검색 용어RAG 개념에 익숙하다고 가정합니다.

아키텍처

다음 다이어그램은 SAP의 데이터 수집 하위 시스템 구성요소를 보여주는 참조 아키텍처를 보여줍니다.

SAP의 데이터 처리 하위 시스템

이 데이터 처리 하위 시스템 아키텍처에는 다음 구성요소가 포함됩니다.

# 구성요소 세부정보
1 데이터 수집 하위 시스템 엔터프라이즈 데이터를 준비하고 처리하여 벡터 임베딩을 생성합니다. 그런 다음 이러한 임베딩은 Google Cloud의 적절한 벡터 데이터베이스에 저장됩니다. 원하는 경우 Google Cloud에 엔터프라이즈 데이터를 저장할 수 있습니다.
2 ABAP SDK for Google Cloud SDK는 데이터 수집 하위 시스템과 다양한 Google Cloud 서비스 간의 통신을 처리합니다.
3 데이터 스토리지 선택사항입니다. BigQuery 또는 Cloud Storage와 같은 Google Cloud 데이터 스토리지 솔루션으로, 구조화된 데이터와 비구조화된 데이터를 모두 저장하는 데 사용됩니다. 자세한 내용은 Google Cloud에 엔터프라이즈 데이터 저장을 참고하세요.
4 임베딩 모델 (Vertex AI) 다양한 엔터프라이즈 데이터 소스에서 임베딩을 생성하는 AI 모델입니다.
5 벡터 검색 제품 Cloud Storage 또는 BigQuery와 같이 시맨틱 검색을 실행할 수 있는 벡터 데이터베이스에 임베딩을 저장합니다.

데이터 수집 하위 시스템

이 섹션에서는 엔터프라이즈 데이터를 임베딩으로 변환하고 RAG 지원 생성형 AI 애플리케이션에서 사용할 수 있도록 벡터 데이터베이스에 임베딩을 저장하는 데이터 수집 하위 시스템을 설명합니다. 이 하위 시스템은 문서, 이미지, 비즈니스 규칙, 프롬프트를 비롯한 다양한 SAP 데이터를 처리하여 임베딩을 생성할 수 있습니다.

엔터프라이즈 데이터 준비

RAG 지원 생성형 AI 애플리케이션을 처음 배포하기 전에 SAP 시스템에서 기존 엔터프라이즈 데이터의 임베딩을 로드해야 합니다. 이를 처리하려면 새 일괄 프로그램을 빌드하거나 관리 가능한 청크로 엔터프라이즈 데이터를 읽을 수 있는 기존 프로그램을 재사용하면 됩니다.

데이터 및 임베딩의 초기 로드를 실행한 후에는 데이터 처리 하위 시스템이 SAP 데이터의 변경사항을 따라잡아야 합니다. 새 레코드, 기존 레코드 업데이트 또는 삭제 등 어떤 경우든 벡터 검색 색인에 이러한 변경사항이 반영되어야 합니다. 이렇게 하려면 SAP 애플리케이션 개발 프레임워크 내에서 비즈니스 부가기능 (BAdI)RAP 이벤트 핸들러와 같은 적절한 지점을 사용하면 됩니다. 이렇게 하면 임베딩이 최신 상태로 유지되고 AI 애플리케이션에 항상 최신 정보가 제공됩니다.

Google Cloud에 엔터프라이즈 데이터 저장 (선택사항)

SAP 시스템에는 정형 및 비정형 엔터프라이즈 데이터가 모두 포함될 수 있습니다. 원하는 경우 이 엔터프라이즈 데이터를 Google Cloud에 저장하여 게재 하위 시스템에서 검색할 수 있습니다.

엔터프라이즈 데이터를 저장하려면 다음 Google Cloud 서비스를 사용할 수 있습니다.

  • SAP에서 BigQuery로 구조화된 데이터를 스트리밍하려면 SAP용 BigQuery 커넥터를 사용하거나 Google Cloud용 ABAP SDK의 /GOOG/CL_BIGQUERY_V2 클래스의 INSERT_ALL_TABLEDATA 메서드를 사용하면 됩니다.
  • Cloud Storage에 이미지 및 PDF 문서와 같은 비정형 데이터를 저장하려면 Google Cloud용 ABAP SDK의 /GOOG/CL_STORAGE_V1 클래스를 사용하면 됩니다. Cloud Storage 버킷에 객체를 업로드하는 방법을 보여주는 코드 샘플은 버킷에 파일 업로드를 참고하세요.
  • Cloud Storage를 SAP용 콘텐츠 저장소로 구성하려면 GitHub에서 제공되는 샘플 솔루션인 Google Cloud Storage: SAP용 콘텐츠 서버를 구현하고 맞춤설정하면 됩니다.

엔터프라이즈 데이터에서 임베딩 생성

엔터프라이즈 데이터에서 텍스트 및 멀티모달 임베딩을 생성하려면 ABAP용 Vertex AI SDK와 함께 임베딩 모델을 사용하면 됩니다.

임베딩은 본질적으로 텍스트, 이미지 또는 동영상의 관계를 캡처하는 방식으로 이를 나타내는 숫자 코드입니다. 애플리케이션은 이러한 코드를 사용하여 언어를 이해하고 생성하여 특정 콘텐츠 내에서 가장 복잡한 의미와 관계도 인식합니다. 이 프로세스는 텍스트, 이미지, 동영상을 원본 콘텐츠의 의미를 효과적으로 포착하도록 설계된 벡터라고 하는 숫자 목록으로 변환하는 방식으로 작동합니다.

임베딩 저장

SAP 엔터프라이즈 데이터에서 생성된 임베딩을 효율적으로 저장하고 검색하려면 벡터 데이터베이스 역할을 하는 Google Cloud의 벡터 검색 제품을 사용하면 됩니다.

SAP 엔터프라이즈 데이터의 임베딩을 저장하려면 다음 목록에서 벡터 데이터베이스를 선택합니다.

설계 고려사항

다음은 벡터 데이터베이스를 선택할 때 고려해야 할 주요 설계 사항입니다.

  • 성능: 새 벡터의 색인 생성 속도, 검색 속도 (지연 시간), 확장성, 관련성 있는 모든 결과 검색 (재현율)과 가장 관련성 높은 결과만 검색 (정밀도) 간의 절충 등과 같은 요소입니다.
  • 데이터 특성: 임베딩 벡터의 크기, 벡터 데이터 세트의 크기, 데이터 분포는 비용, 성능, 색인 생성에 영향을 미칩니다.
  • 기능: 유클리드 알고리즘코사인 유사성과 같은 지원되는 거리 함수, 필터링 기능, 키워드 및 벡터 검색 결합, 근사 최근접 이웃 (ANN) 검색 지원
  • 통합: 기존 통합 및 애플리케이션에서의 간편한 데이터 처리
  • 비용: 데이터 및 검색량에 해당하는 가격 책정 모델, 스토리지, 쿼리 비용

효율적인 검색 및 분석을 위해 임베딩을 소스 데이터에 다시 연결하는 식별자와 함께 벡터 데이터베이스에 저장합니다.

Google Cloud 스토리지 솔루션에 엔터프라이즈 데이터를 저장할지 여부는 주로 제공 하위 시스템의 위치에 따라 달라집니다.

  • 제공 하위 시스템이 SAP인 경우 SAP 내에서 이미 기업 데이터에 액세스할 수 있으므로 SAP 외부에 기업 데이터를 저장하는 것은 선택사항입니다.

  • App Engine과 같이 서비스 하위 시스템이 SAP 외부에 있는 경우 효율적인 데이터 검색을 위해 적절한 Google Cloud 스토리지 솔루션에 엔터프라이즈 데이터를 저장해야 할 수 있습니다. 게재 하위 시스템에서 SAP에 원격으로 호출하여 데이터를 검색할 수 있다면 이를 방지할 수 있습니다.

임베딩을 생성하고 저장하는 방법 살펴보기

이 섹션에서는 엔터프라이즈 데이터에서 임베딩을 생성하고 저장하는 방법을 설명합니다. 임베딩을 생성하고 저장하는 기본 패턴은 두 가지가 있습니다.

  • SAP에서 임베딩 생성: ABAP용 Vertex AI SDK와 함께 적절한 임베딩 모델을 사용하여 SAP ERP 시스템에 있는 엔터프라이즈 데이터에서 임베딩을 생성하고 벡터 데이터베이스에 저장합니다.

  • Google Cloud에서 임베딩 생성: Cloud Run 함수 또는 BigQuery와 같은 서버리스 접근 방식을 사용하여 Google Cloud의 스토리지 매체에 있는 엔터프라이즈 데이터에서 임베딩을 생성하고 벡터 데이터베이스에 저장합니다.

SAP에서 임베딩 생성

SAP 시스템 내에서 로컬로 SAP 엔터프라이즈 데이터에서 임베딩을 생성하려면 ABAP용 Vertex AI SDK와 함께 다양한 임베딩 모델을 사용하면 됩니다. 그러면 생성된 임베딩을 SDK의 내장 처리 메커니즘 중 하나를 사용하여 Google Cloud의 적절한 벡터 데이터베이스로 전송할 수 있습니다.

벡터 검색 기능에 대한 필요에 따라 임베딩으로 변환할 데이터를 결정할 수 있습니다. ABAP용 Vertex AI SDK로 임베딩을 생성하는 방법을 알아보려면 임베딩 생성을 참고하세요.

이 섹션에서는 일반적인 SAP 데이터 유형과 ABAP용 Vertex AI SDK를 사용하여 임베딩을 생성하는 방법을 설명합니다.

SAP 테이블에 저장된 구조화된 엔터프라이즈 데이터

주로 SAP 테이블의 하나 이상의 텍스트 열에 대한 임베딩을 생성합니다. 예를 들어 이름, 주소 또는 전화번호로 공급업체를 검색하려면 이러한 열의 값을 연결한 다음 결합된 값의 텍스트 임베딩을 생성합니다. 텍스트 임베딩에 적합한 다른 텍스트 값은 텍스트 표의 설명, 비즈니스 거래와 연결된 긴 텍스트 등 소수에 불과합니다.

다음 코드 샘플은 텍스트 임베딩을 생성하고 Cloud Storage 버킷에 저장하는 방법을 보여줍니다.


DATA(lv_supplier) = CONV i_supplier-supplier( 'SUPPLIER' ).

SELECT SINGLE
     concat_with_space( supplierfullname, phonenumber1, 1 )
       AS line
       FROM i_supplier
       WHERE supplier = @lv_supplier
       INTO @DATA(lv_search_string).

DATA(ls_embedding_template) =
  VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
         id = lv_supplier
         content = lv_search_string ).

NEW /goog/cl_embeddings_model(
        iv_model_key = 'EMBEDDING_MODEL_KEY'
        )->gen_text_embeddings_by_struct(
        is_input = ls_embedding_template
        )->send_struct_to_gcs( iv_bucket_name = 'BUCKET_NAME' ).

다음을 바꿉니다.

  • SUPPLIER: 공급자를 식별하는 고유한 영숫자 코드입니다.
  • EMBEDDING_MODEL_KEY: 모델 생성 파라미터에 구성된 임베딩 생성을 위한 모델 키입니다.
  • BUCKET_NAME: 대상 Cloud Storage 버킷의 이름입니다.

이미지

제조업 및 소매업을 비롯한 많은 업계에서 원자재, 완제품, 다양한 장비와 같은 주요 비즈니스 객체의 이미지를 캡처하고 저장합니다. 텍스트 설명이나 시각적 유사성을 사용하여 이러한 비즈니스 객체를 효율적으로 검색하려면 멀티모달 임베딩을 사용하면 됩니다.

다음 코드 샘플은 이미지의 다중 모달 임베딩을 생성하고 Pub/Sub 주제에 게시하는 방법을 보여줍니다.

"Populate image data in XSTRING format
DATA(lv_image_xstring) = VALUE xstring( ).

DATA(lv_image_base64) =
   xco_cp=>xstring( lv_image_xstring
    )->as_string( xco_cp_binary=>text_encoding->base64
    )->value.

DATA(ls_image) =
  VALUE /goog/cl_embeddings_model=>ty_image(
     bytes_base64_encoded = lv_image_base64 ).

DATA(ls_embedding_template) =
  VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
         id = 'UNIQUE_ID'
         content = 'CONTEXTUAL_TEXT' ).

NEW /goog/cl_embeddings_model(
        iv_model_key = 'EMBEDDING_MODEL_KEY'
        )->gen_image_embeddings_by_struct(
        iv_image = ls_image
        is_input = ls_embedding_template
        )->send_struct_to_pubsub( iv_topic_id = 'PUBSUB_TOPIC_ID' ).

다음을 바꿉니다.

  • UNIQUE_ID: 이미지를 고유하게 식별하는 식별자입니다. 예를 들어 파일 이름과 이미지 생성 날짜의 조합일 수 있습니다.
  • CONTEXTUAL_TEXT: 선택사항. 임베딩 모델에 전달되는 입력 콘텐츠에 추가 컨텍스트와 의미를 부여합니다.
  • EMBEDDING_MODEL_KEY: 모델 생성 파라미터에 구성된 임베딩 생성을 위한 모델 키입니다.
  • PUBSUB_TOPIC_ID: 임베딩을 게시할 Pub/Sub 주제 ID입니다.

문서

SAP 비즈니스 프로세스는 계약서, 매뉴얼, 가이드, 안전 데이터 시트와 같은 다양한 유형의 문서를 처리합니다. 이러한 문서에는 비즈니스 결정을 내리는 데 필요한 중요한 정보가 포함될 수 있습니다. 문서 내에 저장된 이 데이터를 원활하게 찾으려면 멀티모달 임베딩을 사용하면 됩니다. 긴 문서 내에서 효과적으로 검색하려면 청크 처리 메커니즘을 구현해야 합니다. 문서를 페이지나 섹션과 같은 더 작은 단위로 나누어 특정 영역 내에서 검색 결과를 문맥화할 수 있습니다.

다음 코드 샘플은 PDF 문서에서 데이터를 추출하고 각 페이지의 다중 모달 임베딩을 생성한 후 이러한 임베딩을 BigQuery 테이블로 전송하는 방법을 보여줍니다.

"Populate PDF data in XSTRING format
DATA(lv_pdf_xstring) = VALUE xstring( ).

DATA(lv_pdf_base64) =
   xco_cp=>xstring( lv_pdf_xstring
    )->as_string( xco_cp_binary=>text_encoding->base64
    )->value.

DATA(ls_document_input) = VALUE /goog/cl_documentai_v1=>ty_084(
   raw_document-content   = lv_pdf_base64
   raw_document-mime_type = 'application/pdf' ).

NEW /goog/cl_documentai_v1( iv_key_name = 'DOC_AI_CLIENT_KEY'
    )->process_processors(
      EXPORTING
       iv_p_projects_id   = 'PROJECT_ID'
       iv_p_locations_id  = 'LOCATION_ID'
       iv_p_processors_id = 'PROCESSOR_ID'
       is_input           = ls_document_input
      IMPORTING
       es_output          = DATA(ls_docai_output) ).

LOOP AT ls_docai_output-document-pages REFERENCE INTO DATA(ls_pages).

  DATA(ls_image) =
    VALUE /goog/cl_embeddings_model=>ty_image(
       bytes_base64_encoded = ls_pages->image-content ).

  DATA(ls_embedding_template) =
    VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
           id = 'UNIQUE_ID'                 "Document Name + Page #
           content = 'CONTEXTUAL_TEXT' ).   "Optional Text

  NEW /goog/cl_embeddings_model(
          iv_model_key = 'EMBEDDING_MODEL_KEY'
          )->gen_image_embeddings_by_struct(
          iv_image = ls_image
          is_input = ls_embedding_template
          )->send_struct_to_bq(
          iv_dataset_id = 'BIGQUERY_DATASET_ID'
          iv_table_id   = 'BIGQUERY_TABLE_ID' ).

ENDLOOP.

다음을 바꿉니다.

  • DOC_AI_CLIENT_KEY: 인증을 위한 클라이언트 키입니다.
  • PROJECT_ID: 프로세서가 생성된 Google Cloud 프로젝트의 ID입니다.
  • LOCATION_ID: 프로세서의 위치입니다. 프로세서 세부정보를 보는 방법에 관한 자세한 내용은 프로세서 세부정보 보기를 참고하세요.
  • PROCESSOR_ID: 프로세서의 ID입니다. 프로세서 세부정보를 보는 방법에 관한 자세한 내용은 프로세서 세부정보 보기를 참고하세요.
  • UNIQUE_ID: 특정 지식 청크를 고유하게 식별하는 식별자입니다. 예를 들어 문서 이름과 페이지 번호를 조합할 수 있습니다.
  • CONTEXTUAL_TEXT: 선택사항. 임베딩 모델에 전달되는 입력 콘텐츠에 추가 컨텍스트와 의미를 부여합니다.
  • EMBEDDING_MODEL_KEY: 모델 생성 파라미터에 구성된 임베딩 생성을 위한 모델 키입니다.
  • BIGQUERY_DATASET_ID: BigQuery 데이터 세트 ID입니다.
  • BIGQUERY_TABLE_ID: BigQuery 테이블 ID입니다.

Google Cloud에서 임베딩 생성

SAP에서 임베딩을 생성하는 대신 코딩을 거의 또는 전혀 하지 않고도 Google Cloud에서 기본적으로 임베딩을 생성할 수 있습니다. 이 접근 방식을 사용하려면 임베딩을 생성하기 전에 엔터프라이즈 데이터를 Google Cloud에 저장해야 합니다.

기업 데이터가 BigQuery에 로드된 경우 SQL 명령어를 실행하여 텍스트 임베딩을 직접 생성할 수 있습니다. 자세한 내용은 ML.GENERATE_EMBEDDING 함수를 사용하여 텍스트 임베딩 생성을 참고하세요.

엔터프라이즈 데이터가 Cloud Storage 버킷에 업로드된 경우 다음 방법 중 하나를 사용하여 임베딩을 생성합니다.

다음 단계

참여자

작성자: 아지트 우리마잘루 | SAP 애플리케이션 엔지니어팀 리드

기타 참여자: Vikash Kumar | 기술 문서 작성자