Menggunakan panggilan fungsi SAP dengan Gemini

Dokumen ini memberikan ringkasan tentang cara menggunakan panggilan fungsi SAP dengan Gemini, dengan menggunakan Vertex AI SDK untuk ABAP di lingkungan SAP BTP, ABAP Anda.

Anda dapat menentukan fungsi kustom dan menyediakannya ke model Gemini menggunakan fitur Panggilan Fungsi. Model tidak langsung memanggil fungsi kustom, 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 digabungkan 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 atau nama layanan OData (Open Data Protocol) ke model sebagai deklarasi fungsi, yang menjelaskan nama fungsi atau layanan, tujuannya, dan parameter terkait.
  • Menetapkan pemanggilan otomatis modul fungsi SAP atau layanan OData secara implisit saat memanggil model.

Sebelum memulai

Sebelum menggunakan Vertex AI SDK for ABAP untuk panggilan fungsi SAP dengan Gemini, pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Memperkaya konteks model AI Gemini dengan data SAP dengan memanggil modul fungsi SAP

Bagian ini menjelaskan cara memperkaya konteks model Gemini AI dengan data SAP dengan memanggil modul fungsi SAP.

Berikut adalah perjalanan developer ABAP yang khas untuk memanggil modul fungsi SAP:

  1. Pengguna memberikan perintah input.
  2. SDK meneruskan perintah input dan deklarasi fungsi ke model.
  3. Model meninjau perintah dan fungsi yang dideklarasikan untuk mendapatkan fungsi yang akan dipanggil dan menyarankan nilai parameter untuk memanggil fungsi.
  4. Jika pemanggilan otomatis ditetapkan, SDK akan memanggil modul fungsi SAP.
  5. SDK kemudian memanggil model dengan output fungsi yang dipanggil.
  6. Model merespons dengan jawaban yang andal untuk perintah akhir yang diperkaya dengan output fungsi yang dipanggil.
  7. 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 umum untuk menggunakan alat eksternal seperti API dan fungsi.

Panggilan fungsi SAP dengan Gemini di lingkungan SAP BTP, ABAP

Membuat instance class pemanggil multimodal Gemini

Untuk memanggil panggilan fungsi di SAP, Anda menggunakan class /GOOG/CL_GENERATIVE_MODEL. Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model.

DATA(lo_model) = NEW /goog/cl_generative_model( 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 mengambil data SAP melalui kueri SELECT, atau memanggil API atau modul eksternal untuk mendapatkan informasi yang hilang.

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 memberi petunjuk lebih lanjut kepada 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.

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 ).

Ganti kode berikut:

  • PARAMETER_NAME: Nama parameter.
  • PARAMETER_TYPE: Jenis data parameter, seperti string, integer, atau boolean.
  • PARAMETER_DESCRIPTION: Penjelasan yang jelas tentang tujuan parameter dan format yang diharapkan.
  • PARAMETER_IS_REQUIRED: Jika parameter ini wajib agar fungsi dapat beroperasi, tetapkan nilai ke ABAP_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 memadai untuk memanggil fungsi tertentu, Anda dapat menginstruksikan Gemini untuk memilih fungsi penggantian ini.

Menetapkan pemanggilan otomatis modul fungsi SAP

Untuk menetapkan 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, modul fungsi akan 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 Membuat modul fungsi SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Membuat konten dengan panggilan fungsi

Untuk meneruskan teks perintah ke model Gemini, Anda dapat menggunakan metode GENERATE_CONTENT. Untuk mendapatkan respons yang dihasilkan oleh Gemini 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 Gemini (dari antara fungsi yang dideklarasikan) dan parameter yang disarankannya, 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 Gemini dari LV_FUNCTION_NAME dan parameter yang disarankan dari LT_FUNCTION_PARAMETERS. Anda dapat menggunakan informasi ini untuk memvalidasi, melacak, dan mencatat tindakan Gemini sesuai dengan panduan informasi keamanan dan pengelolaan peristiwa perusahaan Anda.

Contoh kode

Contoh kode berikut mengilustrasikan cara menggunakan panggilan fungsi SAP untuk menerima respons akhir dari model.

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.

Ganti kode berikut:

  • MODEL_KEY: Nama kunci model, yang dikonfigurasi di parameter pembuatan model.
  • PARAMETER_NAME: Nama parameter.
  • PARAMETER_TYPE: Jenis data parameter, seperti string, integer, atau boolean.
  • PARAMETER_DESCRIPTION: Penjelasan yang jelas tentang tujuan parameter dan format yang diharapkan.
  • PARAMETER_IS_REQUIRED: Jika parameter ini wajib agar fungsi dapat beroperasi, tetapkan nilai ke ABAP_TRUE.
  • FUNCTION_MODULE_NAME: Nama modul fungsi SAP.
  • FUNCTION_MODULE_DESCRIPTION: Deskripsi modul fungsi SAP.
  • PROMPT: Perintah teks Anda.

Memperkaya konteks model AI Gemini dengan data SAP dengan memanggil layanan OData

Bagian ini menjelaskan cara memperkaya konteks model Gemini AI dengan data SAP dengan memanggil layanan OData.

Berikut adalah perjalanan developer ABAP standar untuk memanggil layanan OData:

  1. Pengguna memberikan perintah input.
  2. SDK meneruskan perintah input dan deklarasi fungsi ke model.
  3. Model meninjau perintah dan fungsi yang dideklarasikan untuk mendapatkan fungsi yang akan dipanggil dan menyarankan nilai parameter untuk memanggil fungsi.
  4. Jika pemanggilan otomatis ditetapkan, SDK akan memanggil layanan OData.
  5. SDK kemudian memanggil model dengan output layanan OData yang dipanggil.
  6. Model merespons dengan jawaban yang andal untuk perintah akhir yang diperkaya dengan output layanan OData yang dipanggil.
  7. SDK menampilkan respons kepada pengguna.

Jika Anda memilih untuk tidak memanggil layanan OData secara otomatis, SDK akan memungkinkan Anda menggunakan fitur panggilan fungsi tanpa pemanggilan layanan OData. Dalam hal ini, Anda dapat mengikuti alur kerja panggilan fungsi umum untuk menggunakan alat eksternal seperti API dan fungsi.

Panggilan fungsi SAP dengan Gemini di lingkungan SAP BTP, ABAP

Membuat layanan OData

Untuk membuat layanan OData untuk pemanggilan otomatis oleh SDK sebagai fungsi, gunakan skema berikut:

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

Tabel berikut memberikan informasi tentang kolom yang digunakan dalam skema ini:

Kolom skema Jenis kolom Mode Input/Output Deskripsi
UserRequest String Hanya input Perintah input yang dimasukkan pengguna.
FunctionResponse String Hanya output Output layanan OData. Nilai ini dapat berupa nilai tunggal atau string JSON yang diserialisasi.
ModifiedUserRequest String Hanya output UserRequest yang diubah, yang dimasukkan ke Gemini sebagai perintah.
ContextParameters Table of parameters Hanya input Tabel parameter, yang mencakup nama dan nilai parameter.
ParameterName String Hanya input Nama parameter fungsi.
ParameterValue String Hanya input Nilai parameter fungsi, seperti yang disarankan oleh Gemini.

Membuat entity layanan OData

  1. Buat entitas menggunakan skema sebelumnya.

    Entitas ini menerima permintaan pengguna sebagai perintah, meneruskannya ke Gemini, dan dideklarasikan sebagai fungsi menggunakan Vertex AI SDK untuk ABAP. Entitas ini juga membawa kembali respons fungsi OData dari sistem SAP backend ke BTP, yang kemudian ditambahkan ke konteks model AI Gemini.

    1. Tetapkan nama yang sesuai untuk item baru.
    2. Tetapkan nilai untuk atribut berikut. Pertahankan nilai default untuk semua atribut lainnya.

      Nama Adalah kunci? Jenis core EDM Nama kolom ABAP
      UserRequest Ya Edm.String USER_REQUEST
      FunctionResponse Tidak Edm.String FUNCTION_RESPONSE
      ModifiedUserRequest Tidak Edm.String MODIFIED_USER_REQUEST

    Jika Anda ingin menempatkan lebih banyak entitas di layanan OData yang sama, buat entitas tersebut menggunakan skema yang sama.

  2. Buat entity lain bernama ContextParameters dengan atribut berikut. Pertahankan nilai default untuk semua atribut lainnya.

    Entitas ini berisi parameter fungsi dan nilainya yang disediakan oleh model Gemini.

    Nama Adalah kunci? Jenis core EDM Nama kolom ABAP
    ParameterName Ya Edm.String PARAMETER_NAME
    ParameterValue Ya Edm.String PARAMETER_VALUE
  3. Buat kumpulan entitas untuk semua entitas yang Anda buat sebagai bagian dari langkah-langkah sebelumnya.

  4. Buat pengaitan antara setiap entitas yang Anda buat di langkah 1 dengan entitas ContextParameters yang Anda buat di langkah 2 sebagai berikut:

    1. Tetapkan nama untuk pengaitan.
    2. Di kolom Principal Entity, tetapkan nama entitas yang Anda buat di langkah 1.
    3. Di kolom Principal Entity Cardinality, tetapkan M.
    4. Di kolom Dependent Entity, tetapkan ContextParameters.
    5. Di kolom Dependent Entity Cardinality, tetapkan M.
    6. Simpan dan buat artefak runtime OData.
  5. Tambahkan layanan OData yang dibuat di SAP Gateway dan aktifkan node ICF.

  6. Buat file EDMX untuk metadata OData sebagai berikut:

    1. Buka TCode /iwfnd/maint_services dan dapatkan metadata untuk layanan OData.
    2. Format dan simpan XML yang dihasilkan dengan ekstensi file .edmx.

Menulis logika fungsi OData

  1. Di class MPC_EXT yang dihasilkan, tambahkan dan aktifkan jenis entity mendalam:

    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. Tentukan ulang metode CREATE_DEEP_ENTITY dari class DPC_EXT yang dihasilkan dengan menyelesaikan langkah-langkah berikut:

    1. Jika Anda membuat lebih dari satu entitas OData di bagian Membuat entitas layanan OData, tambahkan pernyataan CASE untuk setiap entitas OData.
    2. Tulis logika ABAP ke get atau prepare respons untuk meningkatkan konteks untuk Gemini di aplikasi BTP.
    3. Di kolom FUNCTION_RESPONSE, tetapkan respons.
    4. Di kolom MODIFIED_USER_REQUEST, tetapkan perintah yang diubah.
    5. Dengan menggunakan metode OData COPY_DATA_TO_REF, hubungkan respons secara keseluruhan dalam pesan.

    Cuplikan berikut adalah contoh logika 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.
     ```
    

Ganti kode berikut:

  • ENTITY_TYPE: nama entity OData yang Anda buat di langkah 1 bagian Membuat entity layanan OData
  • MODIFIED_GEMINI_PROMPT: perintah yang diubah yang disediakan oleh Gemini
  • ODATA_FUNCTION_RESPONSE: respons yang disediakan oleh layanan OData

Jika memiliki lebih dari satu kolom, atau struktur atau tabel bertingkat yang akan diteruskan sebagai respons fungsi, Anda dapat melakukan serialisasi jenis ABAP menjadi string dengan menggunakan metode SERIALIZE_JSON dari class /GOOG/CL_JSON_UTIL SDK.

Menentukan layanan OData sebagai model penggunaan layanan di SAP BTP

Setelah membuat layanan OData, Anda perlu menentukannya sebagai model konsumsi layanan di lingkungan SAP BTP. Anda melakukannya dengan membuat model konsumsi layanan, layanan keluar HTTP, skenario komunikasi, dan pengaturan komunikasi.

Membuat model penggunaan layanan

  1. Di project ABAP, buka menu konteks, lalu pilih New > Other ABAP Repository Object > Business Services > Service Consumption Model.
  2. Di jendela New Service Consumption Model, selesaikan langkah-langkah berikut:
    1. Di kolom Package, pilih dan upload file EDMX yang Anda buat sebelumnya di bagian sebelumnya.
    2. Masukkan nama dan deskripsi.
    3. Di kolom Remote Consumption Mode, pilih OData.
    4. Klik Selesai.

Membuat layanan keluar HTTP

  1. Di project ABAP, buka menu konteks.
  2. Pilih paket Anda, lalu klik New > Other ABAP Repository Object.
  3. Di kolom Service Type, pilih HTTP Service.
  4. Di kolom Default Path Prefix, masukkan awalan jalur untuk layanan OData Anda di sistem SAP backend.

    Anda dapat mengetahui awalan jalur OData dengan mengakses Klien SAP Gateway. Nilai yang Anda lihat di kolom Request URI adalah awalan jalur untuk layanan OData Anda.

  5. Klik Berikutnya.

Membuat skenario komunikasi

Setelah membuat layanan keluar HTTP, Anda harus membuat skenario komunikasi dan menetapkan layanan keluar ke layanan tersebut. Caranya, ikuti langkah-langkah berikut:

  1. Di project ABAP, pilih Communication Scenario, lalu klik Next.
  2. Di jendela New Communication Scenario, selesaikan langkah-langkah berikut:
    1. Masukkan nama dan deskripsi.
    2. Klik Berikutnya.
    3. Di kolom Communication Scenario Type, pilih Customer Managed.
    4. Buka tab Keluar.
    5. Di kolom Allowed Instances, pilih One instance per scenario & communication system.
    6. Di kolom Supported Authentication methods, pilih kotak centang berikut: Basic, X.509, dan OAuth 2.0.
    7. Di kolom OAuth 2.0 Grant Type, pilih SAML 2.0 Bearer Assertion.
    8. Di bagian Outbound Services, klik Add, lalu pilih layanan keluar yang Anda buat di bagian sebelumnya.
    9. Di bagian Outbound Service, pastikan Default Path Prefix sudah benar. Jika tidak, klik Sinkronkan.
    10. Simpan skenario komunikasi.

Membuat pengaturan komunikasi

  1. Akses peluncur SAP Fiori dari sistem ABAP BTP tempat ABAP SDK untuk Google Cloud diinstal.
  2. Buka aplikasi Pengaturan Komunikasi.

    1. Klik New.
    2. Pada dialog New Communication Arrangement yang muncul, masukkan nilai untuk kolom berikut:

      • Skenario: pilih skenario komunikasi yang Anda buat di bagian Membuat skenario komunikasi.
      • Nama pengaturan: masukkan nama untuk pengaturan komunikasi.
    3. Klik Buat.

    4. Untuk pengaturan komunikasi yang muncul, di kolom Communication System, pilih sistem komunikasi yang Anda buat di langkah sebelumnya.

    5. Klik Simpan.

Membuat instance class pemanggil multimodal Gemini

Untuk memanggil panggilan fungsi di SAP, Anda menggunakan class /GOOG/CL_GENERATIVE_MODEL. Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model.

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

Ganti MODEL_KEY dengan nama kunci model, yang dikonfigurasi dalam parameter pembuatan model.

Menambahkan deklarasi fungsi

Untuk menambahkan layanan OData sebagai deklarasi fungsi ke konteks LLM, Anda dapat menggunakan metode ADD_FUNCTION_DECLARATION. Panggil metode ADD_FUNCTION_DECLARATION setiap kali Anda perlu menambahkan layanan OData sebagai fungsi ke konteks.

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 ).

Ganti kode berikut:

  • PARAMETER_NAME: nama parameter
  • PARAMETER_TYPE: jenis data parameter, seperti string, integer, atau boolean
  • PARAMETER_DESCRIPTION: penjelasan yang jelas tentang tujuan parameter dan format yang diharapkan
  • PARAMETER_IS_REQUIRED: tetapkan nilai ke ABAP_TRUE jika parameter ini wajib agar fungsi dapat beroperasi
  • COMMUNICATION_SCENARIO: ID skenario komunikasi yang Anda buat
  • ODATA_SERVICE_ID: ID layanan keluar yang Anda buat untuk layanan OData
  • ODATA_SERVICE_CONSUMPTION_MODEL_ID: ID model konsumsi layanan yang Anda buat untuk layanan OData
  • ODATA_ROOT_URI: URI root layanan OData di sistem SAP backend
  • ODATA_ENTITY_SET_NAME: nama set entity layanan OData yang akan dideklarasikan sebagai fungsi
  • FUNCTION_NAME: nama fungsi yang Anda deklarasikan untuk layanan OData yang ingin Anda gunakan
  • FUNCTION_DESCRIPTION: deskripsi fungsi yang Anda deklarasikan untuk layanan OData yang ingin Anda gunakan

Menetapkan pemanggilan otomatis layanan OData

Untuk menetapkan pemanggilan otomatis layanan OData fungsi SAP yang dipilih oleh model Gemini, Anda dapat menggunakan metode SET_AUTO_INVOKE_SAP_FUNCTION. Jika ABAP_TRUE diteruskan dalam parameter impor IV_AUTO_INVOKE, modul fungsi akan 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 Membuat modul fungsi SAP.

lo_model->set_auto_invoke_sap_function( abap_true ).

Membuat konten dengan panggilan fungsi

Untuk meneruskan teks perintah ke model Gemini, Anda dapat menggunakan metode GENERATE_CONTENT. Untuk mendapatkan respons yang dihasilkan oleh Gemini 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 Gemini (dari antara fungsi yang dideklarasikan) dan parameter yang disarankannya, 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) ).

Contoh kode

Contoh kode berikut mengilustrasikan cara menggunakan panggilan fungsi SAP dengan layanan Odata untuk menerima respons akhir dari model:

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.

Langkah berikutnya