Gemini로 SAP 함수 호출 사용

이 문서에서는 SAP BTP, ABAP 환경에서 ABAP용 Vertex AI SDK를 사용하여 Gemini에서 SAP 함수 호출을 사용하는 방법을 간략하게 설명합니다.

함수 호출 기능을 사용하여 커스텀 함수를 정의하고 Gemini 모델에 제공할 수 있습니다. 모델은 커스텀 함수를 직접 호출하지 않고 대신 함수 이름과 추천 인수를 지정하는 정형 데이터 출력을 생성합니다. 이 출력을 사용하면 정형 출력을 가져와 외부 API를 호출하는 애플리케이션을 작성할 수 있습니다. 그러면 결과 API 출력을 추가 모델 프롬프트에 통합하여 더 포괄적인 쿼리 응답을 제공할 수 있습니다.

ABAP용 Vertex AI SDK는 다음과 같은 방법으로 SAP 함수 모듈에 작성된 커스텀 로직을 호출할 수 있는 기회를 제공하여 ABAP 개발자의 함수 호출을 간소화합니다.

  • 함수 또는 서비스의 이름, 목적, 관련 매개변수를 설명하는 SAP 함수 모듈 이름 또는 OData(개방형 데이터 프로토콜) 서비스 이름을 함수 선언으로 모델에 전달합니다.
  • 모델을 호출하는 동안 SAP 함수 모듈 또는 OData 서비스의 자동 호출을 암시적으로 설정합니다.

시작하기 전에

Gemini를 사용하여 SAP 함수를 호출하기 위해 ABAP용 Vertex AI SDK를 사용하기 전에 개발자나 관리자가 다음 기본 요건을 완료했는지 확인합니다.

SAP 함수 모듈을 호출하여 SAP 데이터로 Gemini AI 모델 컨텍스트 보강

이 섹션에서는 SAP 함수 모듈을 호출하여 Gemini AI 모델 컨텍스트를 SAP 데이터로 보강하는 방법을 설명합니다.

다음은 SAP 함수 모듈을 호출하는 일반적인 ABAP 개발자 여정입니다.

  1. 사용자가 입력 프롬프트를 제공합니다.
  2. SDK는 입력 프롬프트와 함수 선언을 모델에 전달합니다.
  3. 모델은 프롬프트와 선언된 함수를 검토하여 호출할 함수를 파생하고 함수를 호출할 수 있는 파라미터 값을 제안합니다.
  4. 자동 호출이 설정되면 SDK에서 SAP 함수 모듈을 호출합니다.
  5. 그러면 SDK는 호출된 함수의 출력을 사용하여 모델을 호출합니다.
  6. 모델은 호출된 함수의 출력으로 보강된 최종 프롬프트에 신뢰할 수 있는 답변으로 응답합니다.
  7. SDK가 사용자에게 응답을 반환합니다.

SAP 함수 모듈을 자동으로 호출하지 않으려면 SDK를 사용하여 SAP 함수 모듈을 호출하지 않고 함수 호출 기능을 사용하면 됩니다. 이 경우 일반적인 함수 호출 워크플로에 따라 API 및 함수와 같은 외부 도구를 사용할 수 있습니다.

SAP BTP, ABAP 환경에서 Gemini를 사용하여 SAP 함수 호출

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

SAP에서 함수 호출을 호출하려면 /GOOG/CL_GENERATIVE_MODEL 클래스를 사용합니다. 모델 생성 파라미터에 구성된 모델 키를 전달하여 클래스를 인스턴스화합니다.

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

MODEL_KEY모델 생성 파라미터에 구성된 모델 키 이름으로 바꿉니다.

SAP 함수 모듈 만들기

SDK에서 자동 호출에 사용할 SAP 함수 모듈을 만들려면 제공된 스키마를 따릅니다.

카테고리 매개변수 이름 연결된 유형
가져오는 중 IT_FUNCTION_PARAMETERS /GOOG/T_FUNCTION_PARAMETERS
내보내는 중 EV_FUNCTION_RESPONSE STRING
변경 중 CV_PROMPT STRING
예외 /GOOG/CX_SDK Exception Class

가져오기 파라미터를 기반으로 함수 모듈 내에 커스텀 로직을 작성합니다. 이 로직은 SELECT 쿼리를 통해 SAP 데이터를 가져오거나 외부 API 또는 모듈을 호출하여 누락된 정보를 가져올 수 있습니다.

LLM 컨텍스트에 피드백할 정보로 내보내기 파라미터 EV_FUNCTION_RESPONSE를 설정합니다. 커스텀 로직 및 비즈니스 요구사항에 따라 CV_PROMPT의 프롬프트 텍스트를 변경하거나 수정하여 다양한 비즈니스 시나리오에 따라 LLM에 추가 안내를 제공할 수도 있습니다.

함수 선언 추가

LLM 컨텍스트에 함수 선언을 추가하려면 ADD_FUNCTION_DECLARATION 메서드를 사용하면 됩니다. 컨텍스트에 함수를 추가해야 할 때마다 ADD_FUNCTION_DECLARATION 메서드를 호출합니다.

DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
APPEND VALUE #( parameter_name = 'PARAMETER_NAME'
                type           = 'PARAMETER_TYPE'
                description    = 'PARAMETER_DESCRIPTION'
                is_required    = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters.
lo_model->add_function_declaration( iv_name        = 'FUNCTION_MODULE_NAME'
                                    iv_description = 'FUNCTION_MODULE_DESCRIPTION'
                                    it_parameters  = lt_parameters ).

다음을 바꿉니다.

  • PARAMETER_NAME: 파라미터 이름입니다.
  • PARAMETER_TYPE: 파라미터의 데이터 유형입니다(예: string, integer 또는 boolean).
  • PARAMETER_DESCRIPTION: 파라미터의 목적과 예상 형식을 명확하게 설명합니다.
  • PARAMETER_IS_REQUIRED: 함수가 작동하는 데 이 파라미터가 필수이면 값을 ABAP_TRUE로 설정합니다.
  • FUNCTION_MODULE_NAME: SAP 함수 모듈 이름입니다.
  • FUNCTION_MODULE_DESCRIPTION: SAP 함수 모듈에 대한 설명입니다.

대체 또는 백업 함수 역할을 할 수 있는 매개변수 없는 함수를 선언할 수도 있습니다. 사용자 프롬프트에서 특정 함수를 호출하기에 충분한 정보를 제공하지 않는 경우 Gemini에 이 대체 함수를 선택하도록 지시할 수 있습니다.

SAP 함수 모듈 자동 호출 설정

모델에서 선택한 SAP 함수 자동 호출을 설정하려면 SET_AUTO_INVOKE_SAP_FUNCTION 메서드를 사용하면 됩니다. 가져오기 파라미터 IV_AUTO_INVOKEABAP_TRUE가 전달되면 SDK에서 함수 모듈을 호출하고 응답에 LLM 컨텍스트가 포함되어 최종 응답이 생성됩니다.

SAP 함수 모듈 만들기 섹션에 설명된 스키마에 따라 함수 모듈을 정의해야 합니다.

lo_model->set_auto_invoke_sap_function( abap_true ).

함수 호출로 콘텐츠 생성

프롬프트 텍스트를 Gemini 모델에 전달하려면 GENERATE_CONTENT 메서드를 사용하면 됩니다. 함수 호출을 통해 SAP 함수 모듈에서 추가된 추가 컨텍스트가 포함된 Gemini에서 생성된 응답을 가져오려면 GET_TEXT 메서드를 사용합니다.

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

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

선택한 함수 이름 및 매개변수 값 가져오기

선언된 함수 중에서 Gemini가 선택한 함수와 추천 매개변수를 가져오려면 GET_FUNCTION_CALL 메서드를 사용하세요.

DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
                               )->generate_content( iv_prompt_text = 'PROMPT' ).
lo_response->get_function_call( IMPORTING ev_function_name       = DATA(lv_function_name)
                                          et_function_parameters = DATA(lt_function_parameters) ).

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

LV_FUNCTION_NAME에서 Gemini의 선택한 함수의 이름을 가져오고 LT_FUNCTION_PARAMETERS에서 추천 매개변수를 가져올 수 있습니다. 이 정보를 사용하여 엔터프라이즈의 보안 정보 및 이벤트 관리 가이드라인에 따라 Gemini 작업을 확인, 추적, 기록할 수 있습니다.

코드 샘플

다음 코드 샘플에서는 SAP 함수 호출을 사용하여 모델에서 최종 응답을 수신하는 방법을 보여줍니다.

DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
TRY.
  DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
  APPEND VALUE #( parameter_name = 'PARAMETER_NAME'
                  type           = 'PARAMETER_TYPE'
                  description    = 'PARAMETER_DESCRIPTION'
                  is_required    = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters.
  DATA(lv_response) = lo_model->add_function_declaration(
                                    iv_name        = 'FUNCTION_MODULE_NAME'
                                    iv_description = 'FUNCTION_MODULE_DESCRIPTION'
                                    it_parameters  = lt_parameters
                              )->set_auto_invoke_sap_function( abap_true
                              )->generate_content( iv_prompt_text ='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: 모델 생성 파라미터에 구성된 모델 키 이름입니다.
  • PARAMETER_NAME: 파라미터 이름입니다.
  • PARAMETER_TYPE: 파라미터의 데이터 유형입니다(예: string, integer 또는 boolean).
  • PARAMETER_DESCRIPTION: 파라미터의 목적과 예상 형식을 명확하게 설명합니다.
  • PARAMETER_IS_REQUIRED: 함수가 작동하는 데 이 파라미터가 필수이면 값을 ABAP_TRUE로 설정합니다.
  • FUNCTION_MODULE_NAME: SAP 함수 모듈 이름입니다.
  • FUNCTION_MODULE_DESCRIPTION: SAP 함수 모듈에 대한 설명입니다.
  • PROMPT: 텍스트 프롬프트입니다.

OData 서비스를 호출하여 Gemini AI 모델 컨텍스트를 SAP 데이터로 보강

이 섹션에서는 OData 서비스를 호출하여 Gemini AI 모델 컨텍스트를 SAP 데이터로 보강하는 방법을 설명합니다.

다음은 OData 서비스를 호출하는 일반적인 ABAP 개발자 여정입니다.

  1. 사용자가 입력 프롬프트를 제공합니다.
  2. SDK는 입력 프롬프트와 함수 선언을 모델에 전달합니다.
  3. 모델은 프롬프트와 선언된 함수를 검토하여 호출할 함수를 파생하고 함수를 호출할 수 있는 파라미터 값을 제안합니다.
  4. 자동 호출이 설정되면 SDK에서 OData 서비스를 호출합니다.
  5. 그러면 SDK는 호출된 OData 서비스의 출력을 사용하여 모델을 호출합니다.
  6. 모델은 호출된 OData 서비스의 출력으로 보강된 최종 프롬프트에 신뢰할 수 있는 답변으로 응답합니다.
  7. SDK가 사용자에게 응답을 반환합니다.

OData 서비스를 자동으로 호출하지 않으려면 SDK를 사용하여 OData 서비스를 호출하지 않고 함수 호출 기능을 사용하면 됩니다. 이 경우 일반적인 함수 호출 워크플로에 따라 API 및 함수와 같은 외부 도구를 사용할 수 있습니다.

SAP BTP, ABAP 환경에서 Gemini를 사용하여 SAP 함수 호출

OData 서비스 만들기

SDK에서 자동 호출에 사용할 OData 서비스를 함수로 만들려면 다음 스키마를 사용하세요.

{
    "UserRequest": "Input Prompt as user request",
    "FunctionResponse": null,
    "ModifiedUserRequest": null,
    "ContextParameters": [
        {
            "ParameterName": "Parameter 1",
            "ParameterValue": "Value 1"
        },
        {
            "ParameterName": "Parameter 2",
            "ParameterValue": "Value 2"
        }
    ]
}

다음 표에는 이 스키마에 사용된 필드에 관한 정보가 나와 있습니다.

스키마 필드 입력란 유형 입력/출력 모드 설명
UserRequest String 입력 전용 사용자가 입력하는 입력 프롬프트입니다.
FunctionResponse String 출력 전용입니다. OData 서비스의 출력입니다. 단일 값이거나 직렬화된 JSON 문자열일 수 있습니다.
ModifiedUserRequest String 출력 전용입니다. 수정된 UserRequest: Gemini에 프롬프트로 제공됩니다.
ContextParameters Table of parameters 입력 전용 매개변수 이름과 값을 포함하는 매개변수 표입니다.
ParameterName String 입력 전용 함수 매개변수의 이름입니다.
ParameterValue String 입력 전용 Gemini에서 제안한 함수 매개변수의 값입니다.

OData 서비스 항목 만들기

  1. 위의 스키마를 사용하여 항목을 만듭니다.

    이 항목은 사용자 요청을 프롬프트로 수락하고 Gemini로 전달하며 ABAP용 Vertex AI SDK를 사용하여 함수로 선언됩니다. 이 항목은 백엔드 SAP 시스템에서 BTP로 OData 함수 응답을 다시 전달하며, 이는 Gemini AI 모델 컨텍스트에 추가됩니다.

    1. 새 항목에 적절한 이름을 지정합니다.
    2. 다음 속성의 값을 설정합니다. 다른 모든 속성의 기본값을 유지합니다.

      이름 키가 있나요? EDM 핵심 유형 ABAP 필드 이름
      UserRequest Edm.String USER_REQUEST
      FunctionResponse 아니요 Edm.String FUNCTION_RESPONSE
      ModifiedUserRequest 아니요 Edm.String MODIFIED_USER_REQUEST

    동일한 OData 서비스에 더 많은 항목을 배치하려면 동일한 스키마를 사용하여 항목을 만드세요.

  2. 다음 속성을 사용하여 ContextParameters라는 다른 항목을 만듭니다. 다른 모든 속성의 기본값은 유지합니다.

    이 항목에는 Gemini 모델에서 제공하는 함수 매개변수와 값이 포함됩니다.

    이름 키가 있나요? EDM 핵심 유형 ABAP 필드 이름
    ParameterName Edm.String PARAMETER_NAME
    ParameterValue Edm.String PARAMETER_VALUE
  3. 이전 단계의 일부로 만든 모든 항목의 항목 세트를 만듭니다.

  4. 다음과 같이 1단계에서 만든 각 항목과 2단계에서 만든 ContextParameters 항목 간에 연결을 만듭니다.

    1. 연결의 이름을 설정합니다.
    2. Principal Entity(주요 항목) 입력란에 1단계에서 만든 항목의 이름을 설정합니다.
    3. 주요 항목 카디널리티 필드에 M를 설정합니다.
    4. 종속 항목 필드에 ContextParameters을 설정합니다.
    5. 종속 항목 카디널리티 필드에 M를 설정합니다.
    6. OData 런타임 아티팩트를 저장하고 생성합니다.
  5. SAP Gateway에 생성된 OData 서비스를 추가하고 ICF 노드를 활성화합니다.

  6. 다음과 같이 OData 메타데이터의 EDMX 파일을 생성합니다.

    1. TCode /iwfnd/maint_services로 이동하여 OData 서비스의 메타데이터를 가져옵니다.
    2. 생성된 XML의 형식을 지정하고 파일 확장자가 .edmx인 XML로 저장합니다.

OData 함수 로직 작성

  1. 생성된 MPC_EXT 클래스에서 딥 항목 유형을 추가하고 활성화합니다.

    TYPES:
      BEGIN OF ts_function_deep_entity,
        user_request          TYPE string,
        function_response     TYPE string,
        modified_user_request TYPE string,
        context_parameters    TYPE TABLE OF ts_contextparameters WITH DEFAULT KEY,
    
      END OF ts_function_deep_entity.
    
  2. 다음 단계를 완료하여 생성된 DPC_EXT 클래스의 CREATE_DEEP_ENTITY 메서드를 재정의합니다.

    1. OData 서비스 항목 만들기 섹션에서 OData 항목을 두 개 이상 만들었다면 각 OData 항목에 CASE 문을 추가합니다.
    2. 응답을 get 또는 prepare에 ABAP 로직을 작성하여 BTP 애플리케이션에서 Gemini의 컨텍스트를 확장합니다.
    3. FUNCTION_RESPONSE 필드에서 응답을 설정합니다.
    4. MODIFIED_USER_REQUEST 필드에 수정된 프롬프트를 설정합니다.
    5. COPY_DATA_TO_REF OData 메서드를 사용하여 메시지에서 전체 응답을 바인딩합니다.

    다음 스니펫은 샘플 ABAP 로직입니다.

    TRY.
         DATA: ls_request TYPE <z*_mpc_ext>=>ts_function_deep_entity.
    
         CASE io_tech_request_context->get_entity_type_name( ).
           WHEN <z*_mpc_ext>=>gc_ENTITY_NAME.
             CALL METHOD io_data_provider->read_entry_data
               IMPORTING
                 es_data = ls_request.
    
     <ABAP logic to formulate OData function response>
    
             ls_request-modified_user_request = 'MODIFIED_GEMINI_PROMPT'.
             ls_request-function_response = 'ODATA_FUNCTION_RESPONSE'.
    
             CALL METHOD me->copy_data_to_ref
               EXPORTING
                 is_data = ls_request
               CHANGING
                 cr_data = er_deep_entity.
     ENDCASE.
         CATCH /iwbep/cx_mgw_busi_exception.
         CATCH /iwbep/cx_mgw_tech_exception.
     ENDTRY.
     ```
    

다음을 바꿉니다.

  • ENTITY_TYPE: OData 서비스 엔티티 만들기 섹션의 1단계에서 만든 OData 엔티티의 이름입니다.
  • MODIFIED_GEMINI_PROMPT: Gemini에서 제공한 수정된 프롬프트
  • ODATA_FUNCTION_RESPONSE: OData 서비스에서 제공하는 응답입니다.

필드가 두 개 이상이거나 함수 응답으로 전달할 중첩된 구조 또는 테이블이 있는 경우 SDK의 /GOOG/CL_JSON_UTIL 클래스의 SERIALIZE_JSON 메서드를 사용하여 ABAP 유형을 문자열로 직렬화할 수 있습니다.

SAP BTP에서 OData 서비스를 서비스 소비 모델로 정의

OData 서비스를 만든 후에는 SAP BTP 환경에서 서비스 소비 모델로 정의해야 합니다. 서비스 소비 모델, HTTP 발신 서비스, 커뮤니케이션 시나리오, 커뮤니케이션 조정을 만들어 이를 실행합니다.

서비스 소비 모델 만들기

  1. ABAP 프로젝트에서 컨텍스트 메뉴를 열고 새로 만들기 > 기타 ABAP 저장소 객체 > 비즈니스 서비스 > 서비스 소비 모델을 선택합니다.
  2. 새 서비스 소비 모델 창에서 다음 단계를 완료합니다.
    1. 패키지 필드에서 이전 섹션에서 생성한 EDMX 파일을 선택하여 업로드합니다.
    2. 이름과 설명을 입력합니다.
    3. 원격 소비 모드 필드에서 OData를 선택합니다.
    4. 마침을 클릭합니다.

HTTP 아웃바운드 서비스 만들기

  1. ABAP 프로젝트에서 컨텍스트 메뉴를 엽니다.
  2. 패키지를 선택하고 새로 만들기 > 기타 ABAP 저장소 객체를 클릭합니다.
  3. 서비스 유형 필드에서 HTTP 서비스를 선택합니다.
  4. Default Path Prefix(기본 경로 접두사) 입력란에 백엔드 SAP 시스템의 OData 서비스 경로 접두사를 입력합니다.

    SAP 게이트웨이 클라이언트에 액세스하여 OData 경로 접두사를 확인할 수 있습니다. 요청 URI 필드에 표시되는 값은 OData 서비스의 경로 접두사입니다.

  5. 다음을 클릭합니다.

커뮤니케이션 시나리오 만들기

HTTP 발신 서비스를 만든 후에는 통신 시나리오를 만들고 발신 서비스를 할당해야 합니다. 그러려면 다음 절차를 완료하세요.

  1. ABAP 프로젝트에서 커뮤니케이션 시나리오를 선택한 다음 다음을 클릭합니다.
  2. 새 커뮤니케이션 시나리오 창에서 다음 단계를 완료합니다.
    1. 이름과 설명을 입력합니다.
    2. 다음을 클릭합니다.
    3. 커뮤니케이션 시나리오 유형 입력란에서 고객 관리를 선택합니다.
    4. 발신 탭으로 이동합니다.
    5. 허용된 인스턴스 필드에서 시나리오 및 통신 시스템당 인스턴스 1개를 선택합니다.
    6. 지원되는 인증 방법 입력란에서 기본, X.509, OAuth 2.0 체크박스를 선택합니다.
    7. OAuth 2.0 Grant Type(OAuth 2.0 부여 유형) 입력란에서 SAML 2.0 Bearer Assertion(SAML 2.0 보유자 어설션)을 선택합니다.
    8. 아웃바운드 서비스 섹션에서 추가를 클릭한 다음 이전 섹션에서 만든 아웃바운드 서비스를 선택합니다.
    9. 아웃바운드 서비스 섹션에서 기본 경로 접두사가 올바른지 확인합니다. 그렇지 않으면 동기화를 클릭합니다.
    10. 커뮤니케이션 시나리오를 저장합니다.

커뮤니케이션 계약 만들기

  1. ABAP SDK for Google Cloud가 설치된 BTP ABAP 시스템의 SAP Fiori 런치패드에 액세스합니다.
  2. 통신 계약 앱을 엽니다.

    1. 새로 만들기를 클릭합니다.
    2. 표시된 새 통신 계약 대화상자에서 다음 필드의 값을 입력합니다.

    3. 만들기를 클릭합니다.

    4. 표시된 통신 계약의 통신 시스템 필드에서 이전 단계에서 만든 통신 시스템을 선택합니다.

    5. 저장을 클릭합니다.

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

SAP에서 함수 호출을 호출하려면 /GOOG/CL_GENERATIVE_MODEL 클래스를 사용합니다. 모델 생성 매개변수에 구성된 모델 키를 전달하여 클래스를 인스턴스화합니다.

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

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

함수 선언 추가

LLM 컨텍스트에 OData 서비스를 함수 선언으로 추가하려면 ADD_FUNCTION_DECLARATION 메서드를 사용하면 됩니다. 컨텍스트에 OData 서비스를 함수로 추가해야 할 때마다 ADD_FUNCTION_DECLARATION 메서드를 호출합니다.

DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
DATA ls_connection_parameters TYPE /goog/cl_generative_model=>ty_connection_parameters.

APPEND VALUE #( parameter_name = 'PARAMETER_NAME'
                type           = 'PARAMETER_TYPE'
                description    = 'PARAMETER_DESCRIPTION'
                is_required    = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters.

ls_connection_parameters-connection_type       = 'ODATA'.
ls_connection_parameters-comm_scenario         = 'COMMUNICATION_SCENARIO'.
ls_connection_parameters-service_id            = 'ODATA_SERVICE_ID'.
ls_connection_parameters-proxy_model_id        = 'ODATA_SERVICE_CONSUMPTION_MODEL_ID'.
ls_connection_parameters-relative_service_root = 'ODATA_ROOT_URI'.
ls_connection_parameters-entity_set_name       = 'ODATA_ENTITY_SET_NAME'.

lo_model->add_function_declaration( iv_name                  = 'FUNCTION_NAME'
                                    iv_description           = 'FUNCTION_DESCRIPTION'
                                    it_parameters            = lt_parameters
                                    is_connection_parameters = ls_connection_parameters ).

다음을 바꿉니다.

  • PARAMETER_NAME: 매개변수 이름
  • PARAMETER_TYPE: 매개변수의 데이터 유형입니다(예: string, integer 또는 boolean).
  • PARAMETER_DESCRIPTION: 파라미터의 목적과 예상 형식을 명확하게 설명합니다.
  • PARAMETER_IS_REQUIRED: 함수가 작동하는 데 이 매개변수가 필수인 경우 값을 ABAP_TRUE로 설정합니다.
  • COMMUNICATION_SCENARIO: 만든 커뮤니케이션 시나리오의 ID
  • ODATA_SERVICE_ID: OData 서비스에 대해 만든 아웃바운드 서비스의 ID입니다.
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID: OData 서비스용으로 만든 서비스 소비 모델의 ID입니다.
  • ODATA_ROOT_URI: 백엔드 SAP 시스템의 OData 서비스의 루트 URI입니다.
  • ODATA_ENTITY_SET_NAME: 함수로 선언할 OData 서비스의 항목 세트 이름입니다.
  • FUNCTION_NAME: 사용할 OData 서비스에 선언한 함수의 이름입니다.
  • FUNCTION_DESCRIPTION: 사용하려는 OData 서비스에 대해 선언한 함수의 설명입니다.

OData 서비스의 자동 호출 설정

Gemini 모델에서 선택한 SAP 함수 OData 서비스의 자동 호출을 설정하려면 SET_AUTO_INVOKE_SAP_FUNCTION 메서드를 사용하면 됩니다. 가져오기 파라미터 IV_AUTO_INVOKEABAP_TRUE가 전달되면 SDK에서 함수 모듈을 호출하고 응답에 LLM 컨텍스트가 포함되어 최종 응답이 생성됩니다.

SAP 함수 모듈 만들기 섹션에 설명된 스키마에 따라 함수 모듈을 정의해야 합니다.

lo_model->set_auto_invoke_sap_function( abap_true ).

함수 호출로 콘텐츠 생성

프롬프트 텍스트를 Gemini 모델에 전달하려면 GENERATE_CONTENT 메서드를 사용하면 됩니다. 함수 호출을 통해 SAP 함수 모듈에서 추가된 추가 컨텍스트가 포함된 Gemini에서 생성된 응답을 가져오려면 GET_TEXT 메서드를 사용합니다.

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

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

선택한 함수 이름 및 매개변수 값 가져오기

선언된 함수 중에서 Gemini가 선택한 함수와 추천 매개변수를 가져오려면 GET_FUNCTION_CALL 메서드를 사용하세요.

DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
                               )->generate_content( iv_prompt_text = 'PROMPT' ).
lo_response->get_function_call( IMPORTING ev_function_name       = DATA(lv_function_name)
                                          et_function_parameters = DATA(lt_function_parameters) ).

코드 샘플

다음 코드 샘플은 Odata 서비스와 함께 SAP 함수 호출을 사용하여 모델에서 최종 응답을 수신하는 방법을 보여줍니다.

DATA lt_parameters TYPE /goog/cl_generative_model=>tt_parameter_properties.
DATA ls_connection_parameters TYPE /goog/cl_generative_model=>ty_connection_parameters.
TRY.
     DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
     APPEND VALUE #( parameter_name = 'PARAMETER_NAME'
                     type           = 'PARAMETER_TYPE'
                     description    = 'PARAMETER_DESCRIPTION'
                     is_required    = 'PARAMETER_IS_REQUIRED' ) TO lt_parameters.

     ls_connection_parameters-connection_type       = 'ODATA'.
     ls_connection_parameters-comm_scenario         = 'COMMUNICATION_SCENARIO'.
     ls_connection_parameters-service_id            = 'ODATA_SERVICE_ID'.
     ls_connection_parameters-proxy_model_id        = 'ODATA_SERVICE_CONSUMPTION_MODEL_ID'.
     ls_connection_parameters-relative_service_root = 'ODATA_ROOT_URI'.
     ls_connection_parameters-entity_set_name       = 'ODATA_ENTITY_SET_NAME'.

     DATA(lv_response) = lo_model_key->add_function_declaration(
                                         iv_name                  = 'FUNCTION_NAME'
                                         iv_description           = 'FUNCTION_DESCRIPTION'
                                         it_parameters            = lt_parameters
                                         is_connection_parameters = ls_connection_parameters
                                   )->set_auto_invoke_sap_function( abap_true
                                   )->generate_content( iv_prompt_text ='PROMPT'
                          )->get_text( ).
        IF lv_response IS NOT INITIAL.
          out->write( lv_response ).

      ENDIF.

  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
      out->write( lo_cx_sdk->get_text( ) ).
ENDTRY.

다음 단계