임베딩 생성

이 문서에서는 ABAP용 Vertex AI SDK를 사용하여 임베딩 모델을 호출하여 텍스트 및 멀티모달 임베딩을 생성하는 방법을 설명합니다.

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

텍스트 임베딩의 몇 가지 일반적인 사용 사례는 다음과 같습니다.

  • 시맨틱 검색: 의미론적 유사성에 따라 순위가 지정된 텍스트를 검색합니다.
  • 분류: 해당 텍스트 속성이 지정된 텍스트와 유사한 항목의 클래스를 반환합니다.
  • 클러스터링: 해당 텍스트 속성이 지정된 텍스트와 유사한 항목을 클러스터링합니다.
  • 이상치 감지: 해당 텍스트 속성이 지정된 텍스트와 가장 관련이 없는 항목을 반환합니다.
  • 대화 인터페이스: 대화 수준의 임베딩 공간에서와 같이 비슷한 응답으로 이어질 수 있는 문장 그룹을 클러스터링합니다.

ABAP용 Vertex AI SDK를 사용하면 SDK와 함께 제공되는 클래스와 메서드를 사용하여 ABAP 애플리케이션 로직에서 임베딩을 생성할 수 있습니다. 또한 SDK는 생성된 임베딩을 다음 데이터 스토어에 푸시하는 즉시 사용 가능한 메서드를 제공합니다.

  • Cloud Storage: Cloud Storage 버킷의 임베딩을 사용하여 벡터 색인을 빌드하고 벡터 검색을 실행할 수 있습니다.
  • BigQuery: BigQuery 데이터 세트의 임베딩을 엔터프라이즈 데이터의 벡터 데이터베이스로 사용할 수 있습니다.

BigQuery 데이터 세트 또는 구독자 시스템으로 라우팅할 수 있는 Pub/Sub 주제에 임베딩을 게시할 수도 있습니다.

시작하기 전에

임베딩 모델과 함께 ABAP용 Vertex AI SDK를 사용하기 전에 사용자 또는 관리자가 다음 기본 요건을 완료했는지 확인하세요.

임베딩 생성

이 섹션에서는 ABAP용 Vertex AI SDK를 사용하여 임베딩을 생성하는 방법을 설명합니다.

멀티모달 임베딩 클래스 인스턴스화

텍스트 또는 멀티모달 입력을 사용하여 Vertex AI 멀티모달 임베딩 모델을 호출하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스를 사용하면 됩니다. 모델 생성 매개변수에 구성된 모델 키를 전달하여 클래스를 인스턴스화합니다.

DATA(lo_embeddings_model) = NEW /goog/cl_embeddings_model( iv_model_key = 'MODEL_KEY' ).

MODEL_KEY모델 생성 매개변수에 구성된 모델 키 이름으로 바꿉니다.

텍스트 임베딩 생성

텍스트 스니펫의 임베딩을 생성하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 GEN_TEXT_EMBEDDINGS 메서드를 사용하면 됩니다. 원하는 경우 출력 임베딩의 차원을 지정할 수도 있습니다.

DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                                output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings(
                                             iv_content      = 'INPUT_TEXT'
                                             is_addln_params = ls_addln_params
                                        )->get_vector( ).

다음을 바꿉니다.

  • DIMENSION: 선택사항. 출력 임베딩의 차원입니다. 기본 측정기준은 768입니다.
  • INPUT_TEXT: 임베딩을 생성할 텍스트입니다.

SDK와 함께 제공되는 즉시 사용 가능한 템플릿 /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE를 사용하여 텍스트 스니펫에 대한 임베딩을 생성할 수도 있습니다. 이 템플릿을 사용하면 생성된 임베딩 파일에서 임베딩과 함께 기업별 스키마 정보를 캡처할 수 있습니다.

텍스트 스니펫에 대한 임베딩을 생성하려면 /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE 템플릿을 기반으로 GEN_TEXT_EMBEDDINGS_BY_STRUCT 메서드를 사용하면 됩니다.

DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                          output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings_by_struct(
                                             is_input        = ls_embedding_template
                                             is_addln_params = ls_addln_params
                                        )->get_vector_by_struct( ).

다음을 바꿉니다.

  • ENTITY_ID: 임베딩 레코드의 항목 ID입니다.
  • INPUT_TEXT: 임베딩을 생성할 텍스트입니다.
  • SOURCE_MODULE: 임베딩 콘텐츠의 소스 모듈입니다.
  • DIMENSION: 선택사항. 출력 임베딩의 차원입니다. 기본 측정기준은 768입니다.

이미지 임베딩 생성

입력 이미지에 대한 임베딩을 생성하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 GEN_IMAGE_EMBEDDINGS 메서드를 사용하면 됩니다. 이미지의 원시 데이터 또는 이미지 파일의 Cloud Storage URI를 전달할 수 있습니다. 원하는 경우 이미지에 대한 문맥 텍스트와 출력 임베딩의 측정기준을 지정할 수도 있습니다.

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings( iv_image           = ls_image
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                        )->get_vector( ).

다음을 바꿉니다.

  • IMAGE_URI: 임베딩을 가져올 대상 이미지의 Cloud Storage URI입니다.
  • CONTEXTUAL_TEXT: 선택사항. 임베딩 모델에 이미지 콘텐츠에 대한 추가 컨텍스트와 의미를 제공합니다.

SDK와 함께 제공되는 즉시 사용 가능한 템플릿 /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE를 사용하여 이미지에 대한 임베딩을 생성할 수도 있습니다. 이 템플릿을 사용하면 생성된 임베딩 파일에서 임베딩과 함께 기업별 스키마 정보를 캡처할 수 있습니다.

이미지의 임베딩을 생성하려면 /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE 템플릿을 기반으로 GEN_IMAGE_EMBEDDINGS_BY_STRUCT 메서드를 사용하면 됩니다.

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings_by_struct(
                                             iv_image = ls_image
                                             is_input = ls_embedding_template
                                        )->get_vector_by_struct( ).

다음을 바꿉니다.

  • IMAGE_URI: 임베딩을 가져올 대상 이미지의 Cloud Storage URI입니다.
  • ENTITY_ID: 임베딩 레코드의 항목 ID입니다.
  • INPUT_TEXT: 임베딩을 생성할 텍스트입니다.
  • SOURCE_MODULE: 임베딩 콘텐츠의 소스 모듈입니다.

문맥 텍스트에 대한 임베딩을 검색하려면 다음 코드를 사용하세요.

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

이 옵션은 단일 이미지 삽입 생성에서만 사용할 수 있습니다.

동영상 임베딩 생성

입력 동영상에 대한 임베딩을 생성하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 GET_VIDEO_EMBEDDINGS 메서드를 사용하면 됩니다. 선택적으로 시작 및 종료 오프셋 시간(초)과 함께 동영상 파일의 Cloud Storage URI를 전달할 수 있습니다. 원하는 경우 동영상에 대한 문맥 텍스트와 출력 임베딩의 측정기준을 지정할 수도 있습니다.

DATA(ls_video) = VALUE /goog/cl_embeddings_model=>ty_video( gcs_uri = 'VIDEO_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_video_embeddings( iv_video           = ls_video
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                                                 iv_dimension       = 'DIMENSION'
                                        )->get_vector( ).
  • VIDEO_URI: 임베딩을 가져올 대상 동영상의 Cloud Storage URI입니다.
  • CONTEXTUAL_TEXT: 선택사항. 동영상 콘텐츠에 추가 컨텍스트와 의미를 임베딩 모델에 제공합니다.
  • DIMENSION: 선택사항. 출력 임베딩의 차원입니다. 사용 가능한 크기는 128, 256, 512, 1408(기본값)입니다.

GET_VECTOR 메서드는 동영상의 첫 번째 세그먼트에 대해서만 임베딩을 반환합니다.

문맥 텍스트의 임베딩을 검색하려면 다음 코드를 사용하세요.

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

이 옵션은 단일 동영상 임베딩 생성 시에만 사용할 수 있습니다.

생성된 모든 임베딩 수집

생성된 모든 임베딩을 /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE 유형의 내부 테이블에 수집하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 COLLECT 메서드와 GEN_TEXT_EMBEDDINGS_BY_STRUCTGEN_IMAGE_EMBEDDINGS_BY_STRUCT를 조합하여 사용할 수 있습니다.

이는 항목 배열(text/image)에 대한 임베딩을 생성해야 하는 요구사항이 있고 루프 반복에서 임베딩을 생성하고 반복 후 내부 테이블에서 한 번에 모든 임베딩을 가져오려는 경우에 유용합니다. GET_VECTOR_BY_TABLE 메서드를 사용하여 임베딩의 최종 내부 테이블을 가져올 수 있습니다.

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

DATA(lt_embeddings) = lo_embeddings_model->get_vector_by_table( ).

임베딩을 데이터 스토어로 전송

SDK와 함께 제공되는 템플릿을 사용하여 생성된 임베딩을 Cloud Storage 버킷 또는 BigQuery 데이터 세트로 전송할 수 있습니다.

Cloud Storage에 임베딩 저장

생성된 임베딩을 Cloud Storage 버킷으로 전송하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 SEND_STRUCT_TO_GCS 메서드를 사용하면 됩니다.

Cloud Storage에 임베딩을 전송하기 전에 임베딩을 전송할 Cloud Storage 버킷이 있는지 확인합니다.

개별 임베딩을 Cloud Storage 버킷으로 전송

다음 코드 샘플은 개별 이미지 임베딩을 Cloud Storage 버킷으로 전송하는 방법을 보여줍니다.

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

다음을 바꿉니다.

  • IMAGE_URI: 임베딩을 가져올 대상 이미지의 Cloud Storage URI입니다.
  • CLIENT_KEY: Cloud Storage API를 호출하기 위한 클라이언트 키입니다.
  • BUCKET_NAME: 대상 Cloud Storage 버킷 이름입니다.
  • FILE_NAME: 임베딩 파일 이름입니다.

수집된 임베딩을 Cloud Storage 버킷으로 전송

다음 코드 샘플은 수집된 임베딩을 Cloud Storage 버킷으로 전송하는 방법을 보여줍니다.

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

다음을 바꿉니다.

  • CLIENT_KEY: Cloud Storage API를 호출하기 위한 클라이언트 키입니다.
  • BUCKET_NAME: 대상 Cloud Storage 버킷 이름입니다.
  • FILE_NAME: 임베딩 파일 이름입니다.

BigQuery에 임베딩 저장

생성된 임베딩을 BigQuery 데이터 세트로 전송하려면 /GOOG/CL_EMBEDDINGS_MODELSEND_STRUCT_TO_BQ 메서드를 사용하면 됩니다.

임베딩을 BigQuery로 전송하기 전에 임베딩을 전송할 BigQuery 데이터 세트테이블이 있는지 확인합니다.

개별 임베딩을 BigQuery 데이터 세트로 전송

다음 코드 샘플은 개별 이미지 임베딩을 BigQuery 데이터 세트로 전송하는 방법을 보여줍니다.

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

다음을 바꿉니다.

  • CLIENT_KEY: BigQuery API를 호출하기 위한 클라이언트 키
  • DATASET_ID: BigQuery 데이터 세트 ID
  • TABLE_ID: BigQuery 테이블 ID

수집된 임베딩을 BigQuery 데이터 세트로 전송

다음 코드 샘플은 수집된 임베딩을 BigQuery 데이터 세트로 전송하는 방법을 보여줍니다.

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

다음을 바꿉니다.

  • CLIENT_KEY: BigQuery API를 호출하기 위한 클라이언트 키
  • DATASET_ID: BigQuery 데이터 세트 ID
  • TABLE_ID: BigQuery 테이블 ID

Pub/Sub 주제에 임베딩 게시

생성된 임베딩을 Pub/Sub 주제에 게시하려면 /GOOG/CL_EMBEDDINGS_MODEL 클래스의 SEND_STRUCT_TO_PUBSUB 메서드를 사용하면 됩니다. 이는 임베딩을 저장하고 후속 비즈니스 프로세스를 빌드하기 위해 자체 커스텀 파이프라인을 빌드해야 하는 시나리오에 유용할 수 있습니다.

Pub/Sub 주제에 임베딩을 전송하기 전에 임베딩을 전송할 Pub/Sub 주제가 있는지 확인하세요.

Pub/Sub 주제에 개별 임베딩 게시

다음 코드 샘플은 개별 이미지 임베딩을 Pub/Sub 주제에 게시하는 방법을 보여줍니다.

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

다음을 바꿉니다.

  • CLIENT_KEY: Pub/Sub API를 호출하기 위한 클라이언트 키
  • TOPIC_ID: Pub/Sub 주제 ID

수집된 임베딩을 Pub/Sub 주제에 게시

다음 코드 샘플은 수집된 임베딩을 Pub/Sub 주제에 게시하는 방법을 보여줍니다.

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

다음을 바꿉니다.

  • CLIENT_KEY: Pub/Sub API를 호출하기 위한 클라이언트 키
  • TOPIC_ID: Pub/Sub 주제 ID

다음 단계