Gemini 모델 호출

이 문서에서는 ABAP용 Vertex AI SDK를 사용하여 Gemini 모델을 호출하여 텍스트 및 멀티모달 입력에 대한 응답을 생성하는 방법을 설명합니다. Gemini 모델은 텍스트, 이미지, 동영상, 오디오, 문서를 비롯한 여러 입력 모드를 허용합니다. Gemini 모델은 다음과 같은 사용 사례에 사용할 수 있습니다.

  • 자유 형식 텍스트 요약
  • 미디어 애셋 설명 또는 해석
  • 언어 간 번역

생성형 모델을 사용하여 AI 중심 기능을 빌드하는 데는 머신러닝(ML) 전문 지식이 필요하지 않습니다. 대규모 데이터 세트를 수집하거나 모델을 학습시킬 필요가 없습니다. 첫 번째 프로그램을 시작하려면 모델이 수행하기를 원하는 작업을 몇 문장으로 설명하기만 하면 됩니다. ABAP용 Vertex AI SDK는 SAP 환경에서 Gemini 모델에 액세스하는 ABAP 클래스와 메서드를 제공합니다. 시작하려면 다음 코드 샘플을 확인하세요.

시작하기 전에

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

Gemini에 요청 보내기

이 섹션에서는 ABAP용 Vertex AI SDK를 사용하여 Vertex AI API를 통해 Gemini 모델에 요청을 전송하는 방법을 설명합니다.

Gemini 멀티모달 호출자 클래스 인스턴스화

텍스트 또는 멀티모달 프롬프트를 사용하여 Gemini 텍스트 및 멀티모달 모델을 호출하려면 /GOOG/CL_GENERATIVE_MODEL 클래스를 사용하면 됩니다. 모델 생성 매개변수에 구성된 모델 키를 전달하여 클래스를 인스턴스화합니다.

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

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

프롬프트로 콘텐츠 생성

모델에 텍스트 프롬프트를 제공하여 콘텐츠를 생성하려면 GENERATE_CONTENT 메서드를 사용하면 됩니다.

lo_model->generate_content( 'PROMPT' ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

모델에 시스템 안내 제공

텍스트 기반 시스템 안내를 모델에 전달하려면 SET_SYSTEM_INSTRUCTIONS 메서드를 사용하면 됩니다.

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

SYSTEM_INSTRUCTIONS를 모델에 대한 시스템 안내로 바꿉니다.

안전 설정 추가

모델에서 응답을 생성할 수 있도록 안전 설정을 추가하려면 ADD_SAFETY_SETTINGS 메서드를 사용하면 됩니다. 이 기능은 모델에 안전 가이드라인을 적용하여 안전하지 않은 콘텐츠를 차단하는 데 사용됩니다.

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                               iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                               iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

다음을 바꿉니다.

각 메서드 호출마다 ADD_SAFETY_SETTINGS 메서드는 모델의 입력에 지정된 안전 설정을 추가합니다.

모델에 대한 생성 구성 설정

/GOOG/AI_CONFIG 테이블에서 모델에 대한 생성 구성을 유지합니다. 특정 호출에 대한 생성 구성을 재정의하려면 SET_GENERATION_CONFIG 메서드를 사용하면 됩니다. 생성 속성에 대한 가져오기 매개변수가 설정된 경우 전달된 매개변수 값이 적용됩니다.

lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
                                 iv_temperature        = 'TEMPERATURE'
                                 iv_top_p              = 'TOP_P'
                                 iv_top_k              = 'TOP_K'
                                 iv_candidate_count    = 'CANDIDATE_COUNT'
                                 iv_max_output_tokens  = 'MAX_OUTPUT_TOKENS'
                                 iv_presence_penalty   = 'PRESENCE_PENALTY'
                                 iv_frequency_penalty  = 'FREQUENCY_PENALTY' ).

다음을 바꿉니다.

  • RESPONSE_MIME_TYPE: 모델에 대한 응답 MIME 유형
  • TEMPERATURE: 무작위성 온도
  • TOP_P: Top-P 샘플링
  • TOP_K: Top-K 샘플링
  • CANDIDATE_COUNT: 생성할 후보의 수
  • MAX_OUTPUT_TOKENS: 메시지당 최대 출력 토큰 수
  • PRESENCE_PENALTY: 양수 페널티
  • FREQUENCY_PENALTY: 빈도 페널티

이러한 매개변수에 관한 자세한 내용은 모델 생성 매개변수 구성을 참고하세요.

모델에 멀티모달 입력 전달

텍스트, 이미지, 동영상, 문서 또는 이들의 조합일 수 있는 멀티모달 입력을 사용하여 Gemini 모델을 호출할 수 있습니다. 원시 데이터 양식으로 입력을 전달하거나 파일 객체의 Cloud Storage URI를 제공하여 입력을 전달할 수 있습니다.

원시 데이터 설정

모델에 파일의 원시 데이터를 입력으로 제공하려면 해당 MIME 유형과 함께 SET_INLINE_DATA 메서드를 사용할 수 있습니다. 동영상 입력의 경우 동영상의 특정 부분만 고려하려면 선택적 가져오기 매개변수 IV_VIDEO_START_OFFSETIV_VIDEO_END_OFFSET을 각각 사용하여 시작 시간과 종료 시간을 설정할 수 있습니다.

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

다음을 바꿉니다.

  • MIME_TYPE: 원시 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은 application/pdf으로 설정됩니다.
  • RAW_DATA: 프롬프트에서 인라인에 포함할 이미지, PDF 또는 동영상의 Base64 인코딩 원시 데이터입니다.

/GOOG/CL_GENERATIVE_MODEL 클래스의 동일한 인스턴스로 모델 입력에서 파일의 원시 데이터를 지우려면 CLEAR_INLINE_DATA 메서드를 사용하면 됩니다.

lo_model->clear_inline_data( ).

Cloud Storage에서 객체 설정

Cloud Storage 버킷에 저장된 파일 객체의 URI를 MIME 유형과 함께 모델에 입력으로 제공하려면 SET_FILE_DATA 메서드를 사용하면 됩니다. 동영상 입력의 경우 동영상의 특정 부분만 고려하려면 선택적 가져오기 매개변수 IV_VIDEO_START_OFFSETIV_VIDEO_END_OFFSET을 각각 사용하여 시작 시간과 종료 시간을 설정할 수 있습니다.

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

다음을 바꿉니다.

  • MIME_TYPE: 파일 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은 application/pdf으로 설정됩니다.
  • FILE_URI: Cloud Storage 버킷에 저장된 파일의 URI입니다.

Cloud Storage 버킷에 있는 모든 파일을 모델에 입력으로 전달하려면 SET_FILES_FROM_GCS 메서드를 사용하여 대상 Cloud Storage 버킷 이름을 지정합니다.

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

STORAGE_BUCKET_NAME을 파일이 포함된 Cloud Storage 버킷 이름으로 바꿉니다.

ABAP SDK for Google Cloud를 통해 Cloud Storage API를 호출하기 위한 별도의 클라이언트 키가 있는 경우 가져오기 매개변수 IV_KEY_NAME에서 클라이언트 키 이름을 전달합니다.

/GOOG/CL_GENERATIVE_MODEL 클래스의 동일한 인스턴스로 모델 입력에서 Cloud Storage URI를 통해 설정된 객체를 삭제하려면 CLEAR_FILE_DATA 메서드를 사용하면 됩니다.

lo_model->clear_file_data( ).

응답 MIME 유형 설정

모델이 응답하는 응답의 MIME 유형을 설정하려면 SET_RESPONSE_MIME_TYPE 메서드를 사용하면 됩니다. 설정하지 않으면 기본적으로 모델은 text/plain을 응답 MIME 유형으로 사용합니다.

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

RESPONSE_MIME_TYPE을 생성된 콘텐츠의 응답 MIME 유형으로 바꿉니다.

텍스트 프롬프트의 토큰 수 계산

프롬프트로 모델을 호출하기 전에 텍스트 프롬프트에 있는 토큰 수를 계산하려면 COUNT_TOKENS 메서드를 사용하면 됩니다.

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                               )->get_total_tokens( ).

DATA(lv_total_billable_characters) = lo_model->count_tokens(
                                                 iv_prompt_text         = 'PROMPT'
                                                 iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                                            )->get_total_billable_characters( ).

다음을 바꿉니다.

Gemini에서 응답 수신

모델에서 처리된 응답을 수신하고 ABAP 개발자에게 의미 있는 방식으로 이를 표시하기 위해 SDK는 /GOOG/CL_MODEL_RESPONSE 클래스를 제공합니다.

/GOOG/CL_MODEL_RESPONSE 클래스에서 캡처한 응답은 /GOOG/CL_GENERATIVE_MODEL 클래스의 메서드를 통해 이루어진 요청에 연결되므로 중간 결과를 저장하는 변수가 필요하지 않고 단일 문으로 응답에 직접 액세스할 수 있습니다.

텍스트 응답 가져오기

모델에서 텍스트 응답을 수신하려면 GET_TEXT 메서드를 사용하면 됩니다.

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

안전 등급 확인

모델의 응답 안전성에 관한 등급 목록을 수신하려면 GET_SAFETY_RATING 메서드를 사용하면 됩니다.

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

요청 프롬프트에서 토큰 수 가져오기

모델에 대한 입력 프롬프트의 토큰 수를 수신하려면 GET_PROMPT_TOKEN_COUNT 메서드를 사용하면 됩니다.

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

모델의 응답에서 토큰 수 가져오기

모델로부터 응답에 포함된 토큰 수를 수신하려면 GET_CANDIDATES_TOKEN_COUNT 메서드를 사용하면 됩니다.

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

차단 이유 가져오기

모델이 응답 생성을 차단한 이유를 수신하려면 GET_BLOCK_REASON 메서드를 사용하면 됩니다.

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

차단 이유 메시지 받기

모델에서 응답 생성 차단에 관해 읽을 수 있는 이유 메시지를 수신하려면 GET_BLOCK_REASON_MESSAGE 메서드를 사용하면 됩니다.

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

PROMPT를 텍스트 프롬프트로 바꿉니다.

코드 샘플

다음 코드 샘플은 Gemini 모델을 호출하여 다양한 유형의 입력에 대한 응답을 생성하는 방법을 보여줍니다.

텍스트 기반 생성

다음 코드 샘플은 시스템 안내와 함께 텍스트 프롬프트에서 응답을 생성하는 방법을 보여줍니다. 시스템 안내는 선택사항이며 프롬프트와 함께 전달하여 모델이 특정 방식으로 동작하도록 지시할 수 있습니다.

코드 샘플

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

멀티모달 생성

다음 코드 샘플은 텍스트 및 이미지와 같은 멀티모달 입력에서 응답을 생성하는 방법을 보여줍니다. 텍스트 프롬프트와 함께 이미지, 동영상 또는 문서의 Cloud Storage URI 또는 원시 파일 데이터를 언급할 수 있습니다. 시스템 안내는 선택사항이며 프롬프트와 함께 전달하여 모델이 특정 방식으로 동작하도록 지시할 수 있습니다.

코드 샘플

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • MODEL_KEY: 모델 생성 매개변수에 구성된 모델 키 이름입니다.
  • PROMPT: 텍스트 프롬프트입니다.
  • SYSTEM_INSTRUCTIONS: 모델에 대한 시스템 안내입니다.
  • MIME_TYPE: 파일 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은 application/pdf으로 설정됩니다.
  • FILE_URI: Cloud Storage 버킷에 저장된 파일의 URI입니다.
  • INLINE_DATA: 프롬프트에서 인라인을 포함할 이미지, PDF 또는 동영상의 base64 인코딩 원시 데이터입니다.

모델의 안전 설정 추가

다음 코드 샘플은 응답을 생성하도록 모델에 대한 안전 설정을 추가하는 방법을 보여줍니다.

코드 샘플

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                                                       iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                                                       iv_harm_block_method    = 'HARM_BLOCK_METHOD'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

  • MODEL_KEY: 모델 생성 매개변수에 구성된 모델 키 이름입니다.
  • PROMPT: 텍스트 프롬프트입니다.
  • SYSTEM_INSTRUCTIONS: 모델에 대한 시스템 안내입니다.
  • MIME_TYPE: 파일 데이터의 IANA 표준 MIME 유형입니다. 기본적으로 MIME 유형은 application/pdf으로 설정됩니다.
  • FILE_URI: Cloud Storage 버킷에 저장된 파일의 URI입니다.
  • INLINE_DATA: 프롬프트에서 인라인을 포함할 이미지, PDF 또는 동영상의 base64 인코딩 원시 데이터입니다.
  • HARM_CATEGORY: 적용할 유해 카테고리입니다.
  • HARM_BLOCK_THRESHOLD: 적용할 확률 기반 기준점 수준입니다.
  • HARM_BLOCK_METHOD: 적용할 유해 차단 방법입니다.

프롬프트에서 토큰 수 및 청구 가능한 문자 수 찾기

프롬프트로 모델을 호출하기 전에 프롬프트의 토큰 수와 토큰에 있는 청구 가능 문자 수를 확인하여 Google Cloud 프로젝트 결제를 계획할 수 있습니다. 다음 코드 샘플은 이러한 번호를 찾고 유사한 모델 호출에 대한 청구를 평가하는 방법을 보여줍니다.

코드 샘플

DATA:
  lv_prompt      TYPE string.

lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
                                   )->get_total_tokens( ).

    DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
                                                )->get_total_billable_characters( ).
    IF lv_total_tokens IS NOT INITIAL.
      cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).

    ENDIF.

    IF lv_total_billable_characters IS NOT INITIAL.
      cl_demo_output=>display( 'Total Billable Characters -' && lv_total_billable_characters ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

다음을 바꿉니다.

다음 단계