Dokumen ini menjelaskan cara menggunakan panggilan fungsi SAP dengan model yang dihosting Vertex AI berikut, dengan menggunakan Vertex AI SDK for ABAP:
Anda dapat menentukan fungsi kustom dan menyediakannya ke model Gemini dan Claude menggunakan fitur Panggilan Fungsi. Model tidak memanggil fungsi kustom secara langsung, tetapi menghasilkan output data terstruktur yang menentukan nama fungsi dan argumen yang disarankan. Output ini memungkinkan Anda menulis aplikasi yang mengambil output terstruktur dan memanggil API eksternal. Output API yang dihasilkan kemudian dapat dimasukkan ke dalam perintah model lebih lanjut, sehingga memungkinkan respons kueri yang lebih komprehensif.
Vertex AI SDK untuk ABAP menyederhanakan pemanggilan fungsi bagi developer ABAP dengan memberi mereka peluang untuk memanggil logika kustom yang ditulis dalam modul fungsi SAP dengan:
- Meneruskan nama modul fungsi SAP ke model sebagai deklarasi fungsi, yang menjelaskan nama fungsi, tujuannya, dan parameter terkait.
- Menetapkan pemanggilan otomatis modul fungsi SAP secara implisit saat memanggil model.
Berikut adalah perjalanan umum developer ABAP untuk memanggil panggilan fungsi SAP:
- Pengguna memberikan perintah input.
- SDK meneruskan perintah input dan deklarasi fungsi ke model.
- Model meninjau perintah dan fungsi yang dideklarasikan untuk mendapatkan fungsi yang akan dipanggil dan menyarankan nilai parameter untuk memanggil fungsi.
- Jika pemanggilan otomatis disetel, SDK akan memanggil modul fungsi SAP.
- Kemudian, SDK memanggil model dengan output fungsi yang dipanggil.
- Model merespons dengan jawaban yang andal untuk perintah akhir yang dilengkapi dengan output fungsi yang dipanggil.
- SDK menampilkan respons kepada pengguna.
Jika Anda memilih untuk tidak memanggil modul fungsi SAP secara otomatis, SDK akan memungkinkan Anda menggunakan fitur panggilan fungsi tanpa pemanggilan modul fungsi SAP. Dalam hal ini, Anda dapat mengikuti alur kerja panggilan fungsi yang umum untuk menggunakan alat eksternal seperti API dan fungsi.
Sebelum memulai
Sebelum menggunakan Vertex AI SDK for ABAP untuk panggilan fungsi SAP dengan Gemini, pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:
- Mengaktifkan Vertex AI API di project Google Cloud Anda.
- Menginstal Vertex AI SDK untuk ABAP di lingkungan SAP Anda.
- Siapkan autentikasi untuk mengakses Vertex AI API.
Untuk Gemini:
Untuk Claude:
- Mengaktifkan model Claude yang didukung dari Model Garden di project Google Cloud Anda.
- Mengonfigurasi parameter pembuatan model.
Memperkaya konteks model AI dengan data SAP
Bagian ini menjelaskan cara memperkaya konteks model AI dengan data SAP menggunakan Vertex AI SDK untuk ABAP.
Buat instance class pemanggil multimodal
Untuk memanggil panggilan fungsi di SAP dengan model Gemini , Anda menggunakan class /GOOG/CL_GENERATIVE_MODEL
.
Untuk memanggil pemanggilan fungsi di SAP dengan model Claude , Anda menggunakan class /GOOG/CL_MODEL_CLAUDE
.
Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model.
Gemini
DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).
Claude
DATA(lo_model) = NEW /goog/cl_model_claude( iv_model_key = 'MODEL_KEY' ).
Ganti MODEL_KEY
dengan nama kunci model, yang dikonfigurasi
dalam parameter pembuatan model.
Membuat modul fungsi SAP
Untuk membuat modul fungsi SAP untuk pemanggilan otomatis oleh SDK, ikuti skema yang disediakan:
Kategori | Nama parameter | Jenis terkait |
---|---|---|
Mengimpor | IT_FUNCTION_PARAMETERS |
/GOOG/T_FUNCTION_PARAMETERS |
Mengekspor | EV_FUNCTION_RESPONSE |
STRING |
Mengubah | CV_PROMPT |
STRING |
Pengecualian | /GOOG/CX_SDK |
Exception Class |
Berdasarkan parameter impor, tulis logika kustom Anda dalam modul fungsi,
yang dapat berupa pengambilan data SAP melalui kueri SELECT
, atau memanggil API atau modul eksternal
untuk mendapatkan informasi yang tidak ada.
Tetapkan parameter ekspor EV_FUNCTION_RESPONSE
dengan informasi
untuk memberikan masukan ke konteks LLM. Anda juga dapat mengubah atau memodifikasi teks perintah
di CV_PROMPT
berdasarkan logika kustom dan persyaratan bisnis Anda untuk
lebih lanjut menginstruksikan LLM berdasarkan berbagai skenario bisnis.
Menambahkan deklarasi fungsi
Untuk menambahkan deklarasi fungsi ke konteks LLM, Anda dapat menggunakan
metode ADD_FUNCTION_DECLARATION
. Panggil metode ADD_FUNCTION_DECLARATION
setiap kali Anda perlu menambahkan fungsi ke konteks.
Gemini
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 ).
Claude
DATA lt_parameters TYPE /goog/cl_model_claude=>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 ).
Ganti kode berikut:
PARAMETER_NAME
: Nama parameter.PARAMETER_TYPE
: Jenis data parameter, sepertistring
,integer
, atauboolean
.PARAMETER_DESCRIPTION
: Penjelasan yang jelas tentang tujuan dan format yang diharapkan dari parameter.PARAMETER_IS_REQUIRED
: Jika parameter ini wajib agar fungsi dapat beroperasi, tetapkan nilai keABAP_TRUE
.FUNCTION_MODULE_NAME
: Nama modul fungsi SAP.FUNCTION_MODULE_DESCRIPTION
: Deskripsi modul fungsi SAP.
Anda juga dapat mendeklarasikan fungsi tanpa parameter, yang dapat berfungsi sebagai fungsi penggantian atau cadangan. Jika perintah pengguna tidak memberikan informasi yang cukup untuk memanggil fungsi tertentu, Anda dapat menginstruksikan model untuk memilih fungsi penggantian ini.
Menetapkan pemanggilan otomatis modul fungsi SAP
Untuk menyetel pemanggilan otomatis
fungsi SAP yang dipilih oleh model, Anda dapat menggunakan metode
SET_AUTO_INVOKE_SAP_FUNCTION
.
Jika ABAP_TRUE
diteruskan dalam parameter impor IV_AUTO_INVOKE
, maka
modul fungsi dipanggil oleh SDK dan responsnya
disertakan dengan konteks LLM untuk menghasilkan respons akhir.
Anda harus menentukan modul fungsi dengan mengikuti skema yang dijelaskan di bagian Buat modul fungsi SAP.
lo_model->set_auto_invoke_sap_function( abap_true ).
Membuat konten dengan panggilan fungsi
Untuk meneruskan teks perintah ke model, Anda dapat menggunakan metode GENERATE_CONTENT
.
Untuk mendapatkan respons yang dihasilkan oleh model dengan konteks tambahan yang ditambahkan dari modul fungsi SAP melalui panggilan fungsi, gunakan metode GET_TEXT
.
DATA(lv_response) = lo_model->generate_content( iv_prompt_text ='PROMPT'
)->get_text( ).
Ganti PROMPT
dengan perintah teks Anda.
Mendapatkan nama fungsi dan nilai parameter yang dipilih
Untuk mendapatkan fungsi yang dipilih oleh model
(dari antara fungsi yang dideklarasikan) dan parameter yang disarankan,
gunakan metode 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) ).
Ganti PROMPT
dengan perintah teks Anda.
Anda bisa mendapatkan nama fungsi yang dipilih dari
LV_FUNCTION_NAME
dan parameter yang disarankan dari LT_FUNCTION_PARAMETERS
.
Anda dapat menggunakan informasi ini untuk memvalidasi, melacak, dan mencatat tindakan model sesuai dengan panduan manajemen informasi dan peristiwa keamanan perusahaan Anda.
Contoh kode
Contoh kode berikut mengilustrasikan cara menggunakan panggilan fungsi SAP untuk menerima respons akhir dari model.
Gemini
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.
Claude
DATA lt_parameters TYPE /goog/cl_model_claude=>tt_parameter_properties. TRY. DATA(lo_model) = NEW /goog/cl_model_claude( 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.
Ganti kode berikut:
MODEL_KEY
: Nama kunci model, yang dikonfigurasi dalam parameter pembuatan model.PARAMETER_NAME
: Nama parameter.PARAMETER_TYPE
: Jenis data parameter, sepertistring
,integer
, atauboolean
.PARAMETER_DESCRIPTION
: Penjelasan yang jelas tentang tujuan dan format yang diharapkan dari parameter.PARAMETER_IS_REQUIRED
: Jika parameter ini wajib agar fungsi dapat beroperasi, tetapkan nilai keABAP_TRUE
.FUNCTION_MODULE_NAME
: Nama modul fungsi SAP.FUNCTION_MODULE_DESCRIPTION
: Deskripsi modul fungsi SAP.PROMPT
: Perintah teks Anda.
Perantaian fungsi otomatis
Fitur chaining fungsi otomatis memungkinkan Anda memanggil beberapa modul fungsi yang ditentukan pengguna untuk membuat respons. Fitur ini hanya didukung jika pemanggilan otomatis modul fungsi SAP diaktifkan.
Contoh kode berikut menggambarkan rangkaian fungsi otomatis.
Untuk perintah Get the air quality in my current location
, model
terlebih dahulu memanggil modul fungsi Z_GET_CURRENT_LOCATION
untuk mendapatkan
informasi bujur dan lintang, lalu meneruskan informasi bujur dan
lintang ke modul fungsi Z_GET_CURRENT_AIR_QUALITY
untuk mendapatkan kualitas udara untuk titik bujur dan lintang tertentu.
Gemini
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.
Claude
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//goog/cl_model_claude( iv_model_key = 'claude' ). 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.
Untuk menonaktifkan penggabungan fungsi otomatis dan hanya mendapatkan respons fungsi pertama dari LLM, gunakan metode SET_FUNCTION_CALLING_CONFIG
dan tetapkan parameter IV_DISABLE_FUNCTION_CHAINING
ke ABAP_TRUE
. Contoh:
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 ).
Jika Anda ingin mendapatkan semua modul fungsi yang dipanggil oleh SDK dan parameter yang diteruskan ke modul tersebut, panggil metode 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( ).
Langkah berikutnya
- Pelajari pengembangan aplikasi dengan edisi ABAP SDK untuk Google Cloud di cloud atau lokal.
- Ajukan pertanyaan dan diskusikan Vertex AI SDK untuk ABAP dengan komunitas di Forum Cloud.