이 문서에서는 ABAP용 Vertex AI SDK를 사용하여 Gemini에서 SAP 함수 호출을 사용하는 방법을 설명합니다.
함수 호출 기능을 사용하여 커스텀 함수를 정의하고 Gemini 모델에 제공할 수 있습니다. 모델은 커스텀 함수를 직접 호출하지 않고 대신 함수 이름과 추천 인수를 지정하는 정형 데이터 출력을 생성합니다. 이 출력을 사용하면 정형 출력을 가져와 외부 API를 호출하는 애플리케이션을 작성할 수 있습니다. 그러면 결과 API 출력을 추가 모델 프롬프트에 통합하여 더 포괄적인 쿼리 응답을 제공할 수 있습니다.
ABAP용 Vertex AI SDK는 다음과 같은 방법으로 SAP 함수 모듈에 작성된 커스텀 로직을 호출할 수 있는 기회를 제공하여 ABAP 개발자의 함수 호출을 간소화합니다.
- 함수 이름, 목적, 관련 파라미터를 설명하는 SAP 함수 모듈 이름을 함수 선언으로 모델에 전달합니다.
- 모델을 호출하는 동안 SAP 함수 모듈의 자동 호출을 암시적으로 설정합니다.
다음은 SAP 함수 호출을 호출하는 일반적인 ABAP 개발자 여정입니다.
- 사용자가 입력 프롬프트를 제공합니다.
- SDK는 입력 프롬프트와 함수 선언을 모델에 전달합니다.
- 모델은 프롬프트와 선언된 함수를 검토하여 호출할 함수를 파생하고 함수를 호출할 수 있는 파라미터 값을 제안합니다.
- 자동 호출이 설정되면 SDK에서 SAP 함수 모듈을 호출합니다.
- 그러면 SDK는 호출된 함수의 출력을 사용하여 모델을 호출합니다.
- 모델은 호출된 함수의 출력으로 보강된 최종 프롬프트에 신뢰할 수 있는 답변으로 응답합니다.
- SDK가 사용자에게 응답을 반환합니다.
SAP 함수 모듈을 자동으로 호출하지 않으려면 SDK를 사용하여 SAP 함수 모듈을 호출하지 않고 함수 호출 기능을 사용하면 됩니다. 이 경우 일반적인 함수 호출 워크플로에 따라 API 및 함수와 같은 외부 도구를 사용할 수 있습니다.
시작하기 전에
Gemini를 사용하여 SAP 함수를 호출하기 위해 ABAP용 Vertex AI SDK를 사용하기 전에 개발자나 관리자가 다음 기본 요건을 완료했는지 확인합니다.
- Google Cloud 프로젝트에서 Vertex AI API를 사용 설정합니다.
- SAP 환경에 ABAP용 Vertex AI SDK를 설치했습니다.
- Vertex AI API에 액세스하도록 인증을 설정합니다.
- 모델 생성 매개변수를 구성합니다.
SAP 데이터로 Gemini AI 모델 컨텍스트 보강
이 섹션에서는 ABAP용 Vertex AI SDK를 사용하여 Gemini AI 모델 컨텍스트를 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_INVOKE
에 ABAP_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
: 텍스트 프롬프트입니다.
자동 함수 체이닝
자동 함수 체이닝 기능을 사용하면 응답을 생성하기 위해 여러 사용자 정의 함수 모듈을 호출할 수 있습니다. 이 기능은 SAP 함수 모듈의 자동 호출이 사용 설정된 경우에만 지원됩니다.
다음 코드 샘플은 자동 함수 체이닝을 보여줍니다.
프롬프트 Get the air quality in my current location
의 경우 Gemini API는 먼저 함수 모듈 Z_GET_CURRENT_LOCATION
를 호출하여 경도 및 위도 정보를 가져온 다음, 경도 및 위도 정보를 함수 모듈 Z_GET_CURRENT_AIR_QUALITY
에 전달하여 지정된 경도 및 위도 지점의 공기질을 가져옵니다.
gv_prompt = 'Get the air quality in my current location'.
gv_system_instruction = 'You are a helpful weather assistant bot. You can turn find my location and get the weather information like temperature' &&
'You can also alert me about EarthQuakes and Storm.' &&
'You can also provide me information on Air Quality based on a location' &&
'Do not perform any other tasks.'.
TRY.
DATA(lo_model_key) = NEW /goog/cl_generative_model( iv_model_key = 'gemini-flash-2' ).
gv_final_op = lo_model_key->gs_ai_config-model_id.
lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_LOCATION'
iv_description = 'Get the current location'
it_parameters = gt_parameters ).
CLEAR gt_parameters.
gs_parameter-parameter_name = |Latitude|.
gs_parameter-type = 'string'.
gs_parameter-description = |Latitude|.
gs_parameter-is_required = abap_true.
APPEND gs_parameter TO gt_parameters.
CLEAR gs_parameter.
gs_parameter-parameter_name = |Longitude|.
gs_parameter-type = 'string'.
gs_parameter-description = |Longitude|.
gs_parameter-is_required = abap_true.
APPEND gs_parameter TO gt_parameters.
CLEAR gs_parameter.
lo_model_key->add_function_declaration( iv_name = 'Z_GET_WEATHER_INFORMATION'
iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude'
it_parameters = gt_parameters ).
lo_model_key->add_function_declaration( iv_name = 'Z_GET_CURRENT_AIR_QUALITY'
iv_description = 'Gets weather information like temperature for a given location which is latitude and longitude'
it_parameters = gt_parameters ).
lo_model_key->add_function_declaration( iv_name = 'GET_EARTHQUAKE_POSSIBILITY'
iv_description = 'Gets possibility of Earthquake for a given location which is latitude and longitude'
it_parameters = gt_parameters ).
lo_model_key->add_function_declaration( iv_name = 'GET_STORM_POSSIBILITY'
iv_description = 'Gets possibility of a STORM for a given location which is latitude and longitude'
it_parameters = gt_parameters ).
lo_model_key->set_system_instructions(
EXPORTING
iv_text = gv_system_instruction
).
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = gv_prompt ).
DATA(ls_response) = lo_response->get_response( ).
/ui2/cl_json=>serialize(
EXPORTING
data = ls_response-candidates[ 1 ]-content-parts " Data to serialize
RECEIVING
r_json = DATA(lv_json_string) " JSON string
).
IF lv_json_string IS NOT INITIAL.
CLEAR gv_output.
gv_output = lv_json_string.
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.
lo_model_key->close( ).
CLEAR lo_model_key.
CLEAR lo_response.
CLEAR ls_response.
자동 함수 체이닝을 사용 중지하고 LLM에서 첫 번째 함수의 응답만 가져오려면 SET_FUNCTION_CALLING_CONFIG
메서드를 사용하고 IV_DISABLE_FUNCTION_CHAINING
매개변수를 ABAP_TRUE
로 설정합니다. 예를 들면 다음과 같습니다.
lo_model_key->set_function_calling_config( iv_disable_function_chaining = abap_true ).
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = gv_prompt ).
SDK에서 호출한 모든 함수 모듈과 이러한 함수 모듈에 전달된 매개변수를 가져오려면 GET_ALL_FUNCTION_CALLS
메서드를 호출합니다.
DATA(lo_response) = lo_model_key->set_auto_invoke_sap_function( abap_true
)->generate_content( iv_prompt_text = gv_prompt ).
DATA(ls_response) = lo_response->get_all_function_calls( ).
다음 단계
- ABAP SDK for Google Cloud의 온프레미스 또는 모든 클라우드 버전으로 애플리케이션 개발을 알아보세요.
- ABAP SDK for Google Cloud의 SAP BTP 버전을 사용한 애플리케이션 개발에 대해 알아보세요.
- Cloud 포럼의 커뮤니티에서 ABAP용 Vertex AI SDK에 대해 질문하고 논의하세요.