Gemini를 사용하여 빠르게 프로토타입 제작

Google의 Generative Language API를 사용하면 Gemini 모델을 사용하여 원활하게 프로토타입을 제작할 수 있습니다. 복잡한 인프라를 설정하거나 모델 배포를 관리할 필요 없이 Gemini 모델 기능을 테스트하고 살펴볼 수 있습니다. Google의 브라우저 기반 프로토타입 제작 도구인 Google AI Studio는 Generative Language API를 사용하여 생성형 모델로 브라우저 기반 프로토타입 제작을 지원합니다.

ABAP용 Vertex AI SDK를 사용하면 Generative Language API인 Gemini API를 사용하여 ABAP 환경 내에서 바로 프로토타입 제작 여정을 시작할 수 있습니다. Gemini 모델에 액세스하려면 Google AI Studio에서 생성된 API 키가 필요합니다. 이 API 키를 한 번만 생성하면 됩니다.

API 키 생성

Google AI Studio에서 생성한 API 키는 Gemini API에 편리하게 인증할 수 있는 방법을 제공합니다.

API 키를 생성하려면 다음 단계를 따르세요.

  1. Google AI 스튜디오에서 API 키 페이지를 엽니다.

    API 키 가져오기

  2. API 키 만들기를 클릭합니다.

  3. 채워진 경우 법적 고지를 읽고 확인한 후 계속을 클릭합니다.

  4. 채워진 경우 안전 설정 알림을 읽고 확인합니다.

  5. API 키 만들기 대화상자에서 적절하게 다음 옵션 중 하나를 선택합니다.

    • 새 프로젝트에 API 키 만들기
    • 기존 프로젝트에 API 키 만들기
  6. 키 문자열을 복사하여 안전하게 보관해야 합니다. Gemini API 인증을 구성하려면 이 API 키가 필요합니다.

  7. API 키가 생성된 Google Cloud 프로젝트의 프로젝트 번호를 복사합니다. 이 값은 이후 단계에서 필요합니다.

인증 설정

API 키를 사용하여 Gemini API에 인증하려면 다음 방법 중 하나를 사용하세요.

SAP SSF에 저장된 API 키를 사용하여 인증

API 키를 안전하게 보호하려면 생성된 API 키를 SAP SSF에 저장하고 SSF 인증 클래스로 클라이언트 키를 구성하면 됩니다. 이 클라이언트 키를 사용하여 Gemini API에 액세스할 수 있습니다. 자세한 내용은 다음을 참고하세요.

맞춤 인증 클래스를 통해 API 키를 사용하여 인증

또는 맞춤 인증 클래스를 만들어 API 키를 유지하고 맞춤 인증 클래스로 클라이언트 키를 구성할 수 있습니다.

온프레미스 또는 모든 클라우드 버전

  1. SAP 시스템에서 ABAP SDK for Google Cloud와 함께 제공되는 /GOOG/IF_AUTH 인터페이스를 구현하여 Z 클래스를 만듭니다.

    1. SAP GUI에서 트랜잭션 코드 SE24를 실행합니다.
    2. 객체 유형 필드에 이름(예: Z_TEST_GEMINI_API)을 입력한 후 만들기를 클릭합니다.
    3. 객체 유형클래스인지 확인한 후 확인을 클릭합니다.
    4. 설명 필드에 클래스 설명(예: Class for authentication to Google AI Studio)을 입력한 후 클래스를 로컬 객체로 저장하거나 전송 요청에 저장합니다.
    5. 인터페이스 탭을 열고 /GOOG/IF_AUTH 인터페이스를 추가한 후 Enter 키를 누릅니다.
    6. 메서드 탭을 엽니다. /GOOG/IF_AUTH 인터페이스 메서드는 자동으로 Z 클래스에 구현됩니다.
    7. /GOOG/IF_AUTH~GET_ACCESS_TOKEN 메서드를 더블클릭합니다.
    8. /GOOG/IF_AUTH~GET_ACCESS_TOKEN 메서드에 다음 코드를 추가합니다.

      ev_auth_type = /goog/if_auth=>c_auth_type_apik_ssf.
      cv_token = 'API_KEY'.
      GET TIME STAMP FIELD ev_logtime.
      

      API_KEY를 Google AI Studio에서 생성된 API 키로 바꿉니다.

    9. Z 클래스를 활성화합니다.

  2. SAP 시스템에서 클라이언트 키 구성을 만듭니다.

    1. SAP GUI에서 트랜잭션 코드 /GOOG/SDK_IMG를 실행합니다.

      또는 트랜잭션 코드 SPRO를 실행한 후 SAP 참조 IMG를 클릭합니다.

    2. ABAP SDK for Google Cloud > 기본 설정 > 클라이언트 키 구성을 클릭합니다.

    3. 새 항목을 클릭합니다.

    4. 다음 필드에 값을 입력합니다.

    필드 설명
    Google Cloud 키 이름 클라이언트 키 구성 이름을 지정합니다(예: TEST_GEMINI_API).
    Google Cloud 서비스 계정 이름 이 입력란은 비워둡니다.
    Google Cloud 범위 이 입력란은 비워둡니다.
    Google Cloud 프로젝트 식별자 API 키가 저장된 Google Cloud 프로젝트의 프로젝트 번호를 지정합니다.
    명령어 이름 이 입력란은 비워둡니다.
    승인 클래스 이전 단계에서 만든 Z 클래스를 지정합니다(예: Z_TEST_GEMINI_API).
    토큰 캐싱

    이 입력란은 비워둡니다.

    토큰 새로고침 시간(초) 이 입력란은 비워둡니다.
    승인 매개변수 1 이 입력란은 비워둡니다.
    승인 매개변수 2 이 입력란은 비워둡니다.
    1. 새 항목을 저장합니다.
  3. 클라이언트 키를 기록해 둡니다. 이 클라이언트 키를 인증에 사용합니다.

SAP BTP 버전

  1. SAP BTP, ABAP 환경에서 ABAP SDK for Google Cloud와 함께 제공되는 /GOOG/CL_AUTH_BASE 클래스를 상속하여 새 클래스를 만듭니다.

    1. Eclipse 플랫폼에서 클래스를 만들 패키지를 마우스 오른쪽 버튼으로 클릭한 다음 새로 만들기 > ABAP 클래스를 클릭합니다.
    2. 이름 필드에 ZCL_TEST_GEMINI_API를 입력합니다.
    3. 설명 필드에 Authentication Class for testing Gemini API을 입력합니다.
    4. 슈퍼클래스 필드에 /GOOG/CL_AUTH_BASE를 입력합니다.
    5. 다음을 클릭합니다.
    6. 전송 요청을 선택하거나 새로 만듭니다.
    7. 마침을 클릭합니다.
    8. 편집기에서 기존 코드를 다음 코드로 바꿉니다.

      CLASS zcl_test_gemini_api DEFINITION
        PUBLIC
        INHERITING FROM /goog/cl_auth_base FINAL
        CREATE PUBLIC.
        PUBLIC SECTION.
          CONSTANTS: BEGIN OF c_com_scn_sdk,
                       wif     TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_WIF',
                       apik_sm TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_APIKSM',
                       END OF c_com_scn_sdk.
          METHODS get_access_token REDEFINITION.
       PROTECTED SECTION.
       PRIVATE SECTION.
      ENDCLASS.
      CLASS zcl_test_gemini_api IMPLEMENTATION.
        METHOD get_access_token.
          ev_auth_type = CONV #( apikey_sm ).
          ev_token = API_KEY.
        ENDMETHOD.
      ENDCLASS.
      

      API_KEY를 Google AI Studio에서 생성된 API 키로 바꿉니다.

    9. Z 클래스를 활성화합니다.

    10. 이 클래스의 속성으로 이동하여 API 상태 탭으로 이동한 후 계약 상태 C1로 API를 출시합니다.

      API 상태에 관한 자세한 내용은 개발 객체 출시를 참고하세요.

  2. ABAP SDK for Google Cloud가 설치된 BTP ABAP 시스템의 SAP Fiori 런치패드에 액세스합니다.

  3. Google SDK: 기본 구성 앱에 액세스한 후 다음 단계를 실행합니다.

    1. 만들기를 클릭합니다.
    2. 새 항목 만들기 대화상자에서 다음 필드의 값을 입력합니다.

      필드 설명
      Google Cloud 키 이름 클라이언트 키 구성 이름을 지정합니다(예: GEMINI_QUICK_TEST).
      Google Cloud 서비스 계정 이름 이 입력란은 비워둡니다.
      Google Cloud 범위 이 입력란은 비워둡니다.
      Google Cloud 프로젝트 식별자 API 키를 만든 Google Cloud 프로젝트의 프로젝트 ID를 지정합니다.
      Google Cloud 프로젝트 번호 API 키를 만든 Google Cloud 프로젝트의 프로젝트 번호를 지정합니다.
      인증 유형 Z를 선택합니다.
      인증 클래스 이전 단계에서 만든 ZCL_TEST_GEMINI_API 클래스를 선택합니다.
    3. 새 항목을 저장합니다.

  4. 클라이언트 키를 기록해 둡니다. 이 클라이언트 키를 인증에 사용합니다.

샘플 코드 실행

온프레미스 또는 모든 클라우드 버전

ABAP용 Vertex AI SDK와 함께 제공되는 AI 스튜디오 데모를 사용하여 Gemini API 기능을 살펴볼 수 있습니다.

AI 스튜디오 데모를 실행하려면 다음 단계를 수행합니다.

  1. SAP GUI에서 트랜잭션 코드 /GOOG/SDK_IMG를 실행합니다.

    또는 트랜잭션 코드 SPRO를 실행한 후 SAP 참조 IMG를 클릭합니다.

  2. ABAP SDK for Google Cloud > 데모로 이동합니다.

  3. Vertex AI SDK: 데모: Generative Language API로 프로토타입 제작을 엽니다.

  4. 클라이언트 키 필드에 인증 설정 섹션에서 만든 클라이언트 키를 입력합니다.

  5. 모델 ID 필드에 사용할 LLM 모델의 ID를 입력합니다(예: gemini-1.5-flash). 사용할 수 있는 모델에 대한 자세한 내용은 모델 변형을 참고하세요.

  6. 원하는 경우 다음 생성 파라미터를 적절하게 제공합니다.

    • 최대 출력 토큰
    • 응답 MIME 유형
    • 온도
    • TopK
    • TopP

    이러한 모델 생성 매개변수에 대한 자세한 내용은 파라미터 값 실험을 참고하세요.

  7. 시스템 안내 입력 필드에 시스템 안내를 입력합니다.

  8. 프롬프트 입력 필드에 입력 프롬프트를 입력합니다.

  9. 프로그램을 실행합니다. LLM의 응답 영역에 생성된 출력이 표시됩니다.

SAP BTP 버전

다음 샘플 코드를 실행하여 Gemini API 기능을 살펴볼 수 있습니다.

  1. Eclipse 플랫폼에서 클래스를 만들 패키지를 마우스 오른쪽 버튼으로 클릭한 다음 새로 만들기 > ABAP 클래스를 클릭합니다.

  2. 이름 필드에 ZCL_INVOKE_LLM를 입력합니다.

  3. 설명 필드에 Sample class for testing Gemini API을 입력합니다.

  4. 다음을 클릭합니다.

  5. 전송 요청을 선택하거나 새 전송 요청을 만듭니다.

  6. 마침을 클릭합니다.

  7. 편집기에서 기존 코드를 다음 코드로 바꿉니다.

    CLASS zcl_invoke_llm DEFINITION
     PUBLIC FINAL
     CREATE PUBLIC.
     PUBLIC SECTION.
       INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    CLASS zcl_invoke_llm IMPLEMENTATION.
     METHOD if_oo_adt_classrun~main.
       DATA lv_sys_instruction TYPE string.
       DATA lv_client_key      TYPE /goog/keyname.
       DATA lv_model_id        TYPE string.
       DATA lv_max_tokens      TYPE int4.
       DATA lv_resp_mime_type  TYPE string.
       DATA lv_prompt          TYPE string.
       DATA lv_temperature     TYPE /goog/num_float.
       DATA lv_top_k           TYPE int4.
       DATA lv_top_p           TYPE /goog/num_float.
       DATA ls_input           TYPE /goog/cl_generativelang_v1beta=>ty_045.
       DATA ls_output          TYPE /goog/cl_generativelang_v1beta=>ty_046.
       DATA ls_part            TYPE /goog/cl_generativelang_v1beta=>ty_068.
       DATA lt_parts           TYPE /goog/cl_generativelang_v1beta=>ty_t_068.
       DATA ls_content         TYPE /goog/cl_generativelang_v1beta=>ty_018.
       DATA lv_msg             TYPE string.
       DATA ls_raw             TYPE string.
       DATA lv_err_msg         TYPE string.
       DATA lo_cx_sdk          TYPE REF TO /goog/cx_sdk.
    
       " TODO Developer: Set values for Mandatory Fields
       lv_model_id = 'gemini-1.5-flash'.  " You can also change the Model ID of your choosing
       lv_client_key = 'GEMINI_QUICK_TEST'.    " Client key configured
    
       " TODO Developer: Set values for Optional Fields, if required
       " lv_temperature =
       " lv_top_k =
       " lv_top_p =
       " lv_max_tokens =
    
       " TODO Developer: (Optional) Set the System Instruction
        lv_sys_instruction  = 'You are an Italian Chef in a 5 Star Restaurant'.
    
       " TODO Developer: (Mandatory) Set the Prompt
        lv_prompt = 'Give me a recipe to make Margarita Pizza'.
       IF lv_temperature IS NOT INITIAL.
         ls_input-generation_config-temperature = lv_temperature.
       ENDIF.
       IF lv_top_k IS NOT INITIAL.
         ls_input-generation_config-top_k = lv_top_k.
       ENDIF.
       IF lv_top_p IS NOT INITIAL.
         ls_input-generation_config-top_p = lv_top_p.
       ENDIF.
       IF lv_max_tokens IS NOT INITIAL.
         ls_input-generation_config-max_output_tokens = lv_max_tokens.
       ENDIF.
       IF lv_sys_instruction IS NOT INITIAL.
         ls_input-system_instruction-role = 'system'.
         ls_part-text = lv_sys_instruction.
         APPEND ls_part TO ls_input-system_instruction-parts.
         CLEAR ls_part.
       ENDIF.
       ls_content-role = 'user'.
       IF lv_prompt IS NOT INITIAL.
         ls_part-text = lv_prompt.
         APPEND ls_part TO ls_content-parts.
         CLEAR ls_part.
       ENDIF.
       APPEND ls_content TO ls_input-contents.
       CLEAR ls_content.
       TRY.
           DATA(lo_llm_invoker) = NEW /goog/cl_generativelang_v1beta( iv_key_name = lv_client_key ).
         CATCH /goog/cx_sdk INTO lo_cx_sdk.
           lv_err_msg = lo_cx_sdk->get_text( ).
    out->write( |Exception occurred, reason: { lv_err_msg }| ).
       ENDTRY.
       TRY.
           lo_llm_invoker->generate_content_models( EXPORTING iv_p_models_id = lv_model_id
                                                              is_input       = ls_input
                                                    IMPORTING es_raw         = ls_raw
                                                              es_output      = ls_output
                                                              ev_ret_code    = DATA(lv_ret_code)
                                                              ev_err_text    = DATA(lv_err_text)
                                                              es_err_resp    = DATA(ls_err_resp) ).
         CATCH /goog/cx_sdk INTO lo_cx_sdk.
           lv_err_msg = lo_cx_sdk->get_text( ).
           out->write( |Exception occurred, reason: { lv_err_msg }| ).
           RETURN.
       ENDTRY.
       IF lo_llm_invoker->is_success( lv_ret_code ) = abap_true.
         ASSIGN ls_output-candidates[ 1 ] TO FIELD-SYMBOL(<ls_candidate>).
         IF sy-subrc = 0.
           lt_parts = <ls_candidate>-content-parts.
           ASSIGN lt_parts[ 1 ] TO FIELD-SYMBOL(<ls_part>).
           IF sy-subrc = 0.
             DATA(lv_response) = <ls_part>-text.
             out->write( lv_response ).
           ELSE.
             out->write( |Model stopped generating response due to finish reason: { <ls_candidate>-finish_reason }| ).
             out->write( |Read more about finish reason in the below link:| ).
             out->write( |https://cloud.google.com/vertex-ai/docs/reference/rest/v1/GenerateContentResponse#FinishReason| ).
           ENDIF.
         ENDIF.
       ELSE.
         out->write( |Error occurred, reason: { lv_ret_code }:{ lv_err_text }| ).
       ENDIF.
     ENDMETHOD.
    ENDCLASS.
    
  8. 수업을 활성화합니다.

  9. ABAP 코드를 실행합니다.

ABAP를 사용하는 프로토타입 AI 사용 사례

SDK와 함께 제공되는 /GOOG/CL_GENERATIVELANGUAGE_V1/GOOG/CL_GENERATIVELANG_V1BETA 클래스를 사용하여 프로토타입 SAP 애플리케이션을 빌드할 수 있습니다. 인증 설정 섹션에서 만든 클라이언트 키를 사용하여 ABAP 환경에서 이러한 클래스를 호출할 수 있습니다.

다음 단계