Memanggil model Gemini

Dokumen ini menjelaskan cara memanggil model Gemini untuk menghasilkan respons untuk input teks dan multimodal, menggunakan Vertex AI SDK untuk ABAP. Model Gemini dapat menerima beberapa mode input, termasuk teks, gambar, video, audio, dan dokumen. Anda dapat menggunakan model Gemini untuk kasus penggunaan seperti berikut:

  • Meringkas teks bentuk bebas
  • Menjelaskan atau menafsirkan aset media
  • Menerjemahkan antarbahasa

Menggunakan model generatif untuk membuat fitur yang berfokus pada AI tidak memerlukan keahlian machine learning (ML). Anda tidak perlu mengumpulkan set data besar atau melatih model. Yang diperlukan untuk memulai program pertama adalah menjelaskan apa yang Anda inginkan dari model dalam beberapa kalimat. Vertex AI SDK untuk ABAP menyediakan class dan metode ABAP untuk mengakses model Gemini dari lingkungan SAP Anda. Untuk memulai, lihat contoh kode ini.

Sebelum memulai

Sebelum menggunakan Vertex AI SDK untuk ABAP dengan model Gemini, pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Mengirim permintaan ke Gemini

Bagian ini menjelaskan cara mengirim permintaan ke model Gemini melalui Vertex AI API menggunakan Vertex AI SDK for ABAP.

Membuat instance class pemanggil multimodal Gemini

Untuk memanggil teks Gemini dan model multimodal menggunakan perintah teks atau multimodal, Anda dapat 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 konten dengan perintah

Untuk membuat konten dengan memberikan perintah teks ke model, Anda dapat menggunakan metode GENERATE_CONTENT.

lo_model->generate_content( 'PROMPT' ).

Ganti PROMPT dengan perintah teks Anda.

Memberikan petunjuk sistem ke model

Untuk meneruskan petunjuk sistem berbasis teks ke model, Anda dapat menggunakan metode SET_SYSTEM_INSTRUCTIONS.

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Ganti SYSTEM_INSTRUCTIONS dengan petunjuk sistem Anda ke model.

Menambahkan setelan keamanan

Untuk menambahkan setelan keamanan agar model dapat menghasilkan respons, Anda dapat menggunakan metode ADD_SAFETY_SETTINGS. Fitur ini digunakan untuk menerapkan pedoman keamanan pada model untuk memblokir konten yang tidak aman.

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                               iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                               iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

Ganti kode berikut:

Dengan setiap panggilan metode, metode ADD_SAFETY_SETTINGS akan menambahkan setelan keamanan yang ditentukan ke input model.

Menetapkan konfigurasi pembuatan untuk model

Anda mempertahankan konfigurasi pembuatan untuk model di tabel /GOOG/AI_CONFIG. Untuk mengganti konfigurasi pembuatan untuk panggilan tertentu, Anda dapat menggunakan metode SET_GENERATION_CONFIG. Jika parameter impor untuk properti pembuatan ditetapkan, nilai parameter yang diteruskan akan diterapkan.

lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
                                 iv_temperature        = 'TEMPERATURE'
                                 iv_top_p              = 'TOP_P'
                                 iv_top_k              = 'TOP_K'
                                 iv_candidate_count    = 'CANDIDATE_COUNT'
                                 iv_max_output_tokens  = 'MAX_OUTPUT_TOKENS'
                                 iv_presence_penalty   = 'PRESENCE_PENALTY'
                                 iv_frequency_penalty  = 'FREQUENCY_PENALTY' ).

Ganti kode berikut:

  • RESPONSE_MIME_TYPE: Jenis MIME respons untuk model.
  • TEMPERATURE: Suhu acak.
  • TOP_P: Sampling Top-P.
  • TOP_K: Sampling Top-K.
  • CANDIDATE_COUNT: Jumlah kandidat yang akan dibuat.
  • MAX_OUTPUT_TOKENS: Jumlah maksimum token output per pesan
  • PRESENCE_PENALTY: Sanksi positif.
  • FREQUENCY_PENALTY: Penalti frekuensi.

Untuk mengetahui informasi selengkapnya tentang parameter ini, lihat Mengonfigurasi parameter pembuatan model.

Meneruskan input multimodal ke model

Anda dapat memanggil model Gemini menggunakan input multimodal, yang dapat berupa teks, gambar, video, dokumen, atau kombinasi dari semuanya. Anda dapat meneruskan input dalam bentuk data mentah atau dengan memberikan URI Cloud Storage objek file.

Menetapkan data mentah

Untuk memberikan data mentah file sebagai input ke model, beserta jenis MIME-nya, Anda dapat menggunakan metode SET_INLINE_DATA. Untuk input video, agar hanya mempertimbangkan bagian tertentu dari video, Anda dapat menetapkan waktu mulai dan waktu berakhir menggunakan parameter impor opsional IV_VIDEO_START_OFFSET dan IV_VIDEO_END_OFFSET.

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

Ganti kode berikut:

  • MIME_TYPE: Jenis MIME standar IANA dari data mentah. Secara default, jenis MIME disetel ke application/pdf.
  • RAW_DATA: Data mentah gambar, PDF, atau video yang dienkode base64 untuk disertakan secara inline dalam perintah.

Untuk menghapus data mentah file dari input model dengan instance class /GOOG/CL_GENERATIVE_MODEL yang sama, Anda dapat menggunakan metode CLEAR_INLINE_DATA.

lo_model->clear_inline_data( ).

Menetapkan objek dari Cloud Storage

Untuk memberikan URI objek file yang disimpan di bucket Cloud Storage sebagai input ke model, beserta jenis MIME-nya, Anda dapat menggunakan metode SET_FILE_DATA. Untuk input video, agar hanya mempertimbangkan bagian tertentu dari video, Anda dapat menetapkan waktu mulai dan waktu berakhir menggunakan parameter impor opsional IV_VIDEO_START_OFFSET dan IV_VIDEO_END_OFFSET.

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

Ganti kode berikut:

  • MIME_TYPE: Jenis MIME standar IANA dari data file. Secara default, jenis MIME disetel ke application/pdf.
  • FILE_URI: URI file yang disimpan di bucket Cloud Storage.

Jika Anda ingin meneruskan semua file yang ada di bucket Cloud Storage sebagai input ke model, gunakan metode SET_FILES_FROM_GCS untuk menentukan nama bucket Cloud Storage target.

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

Ganti STORAGE_BUCKET_NAME dengan nama bucket Cloud Storage yang berisi file.

Jika Anda memiliki kunci klien terpisah untuk memanggil Cloud Storage API melalui ABAP SDK untuk Google Cloud, teruskan nama kunci klien dalam mengimpor parameter IV_KEY_NAME.

Untuk menghapus objek yang ditetapkan melalui URI Cloud Storage dari input model dengan instance class /GOOG/CL_GENERATIVE_MODEL yang sama, Anda dapat menggunakan metode CLEAR_FILE_DATA.

lo_model->clear_file_data( ).

Menetapkan jenis MIME respons

Untuk menetapkan jenis MIME respons yang direspons model, Anda dapat menggunakan metode SET_RESPONSE_MIME_TYPE. Jika tidak ditetapkan, model akan menggunakan text/plain sebagai jenis MIME respons secara default.

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

Ganti RESPONSE_MIME_TYPE dengan jenis MIME respons dari konten yang dihasilkan.

Menghitung jumlah token dalam perintah teks

Untuk menghitung jumlah token dalam perintah teks sebelum memanggil model dengan perintah, Anda dapat menggunakan metode COUNT_TOKENS.

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                               )->get_total_tokens( ).

DATA(lv_total_billable_characters) = lo_model->count_tokens(
                                                 iv_prompt_text         = 'PROMPT'
                                                 iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                                            )->get_total_billable_characters( ).

Ganti kode berikut:

Menerima respons dari Gemini

Untuk menerima respons yang diproses dari model dan menampilkannya dengan cara yang bermakna bagi developer ABAP, SDK menyediakan class /GOOG/CL_MODEL_RESPONSE.

Respons yang diambil oleh class /GOOG/CL_MODEL_RESPONSE dirantai ke permintaan yang dibuat melalui metode class /GOOG/CL_GENERATIVE_MODEL, sehingga Anda dapat langsung mengakses respons dalam satu pernyataan tanpa memerlukan variabel untuk menyimpan hasil perantara.

Mendapatkan respons teks

Untuk menerima respons teks dari model, Anda dapat menggunakan metode GET_TEXT.

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

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan rating keselamatan

Untuk menerima daftar rating keamanan respons model, Anda dapat menggunakan metode GET_SAFETY_RATING.

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan jumlah token dalam perintah permintaan

Untuk menerima jumlah token dalam perintah input ke model, Anda dapat menggunakan metode GET_PROMPT_TOKEN_COUNT.

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan jumlah token dalam respons model

Untuk menerima jumlah token dalam respons dari model, Anda dapat menggunakan metode GET_CANDIDATES_TOKEN_COUNT.

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan alasan pemblokiran

Untuk menerima alasan model memblokir pembuatan respons, Anda dapat menggunakan metode GET_BLOCK_REASON.

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).

Ganti PROMPT dengan perintah teks Anda.

Mendapatkan pesan alasan pemblokiran

Untuk menerima pesan alasan yang dapat dibaca karena pemblokiran pembuatan respons oleh model, Anda dapat menggunakan metode GET_BLOCK_REASON_MESSAGE.

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

Ganti PROMPT dengan perintah teks Anda.

Contoh kode

Contoh kode berikut menunjukkan cara memanggil model Gemini untuk menghasilkan respons untuk berbagai jenis input.

Pembuatan berbasis teks

Contoh kode berikut menunjukkan cara membuat respons dari perintah teks beserta petunjuk sistem. Instruksi sistem bersifat opsional dan dapat diteruskan bersama perintah untuk menginstruksikan model agar berperilaku dengan cara tertentu.

Contoh kode

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

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

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->generate_content( lv_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:

Generasi multimodal

Contoh kode berikut menunjukkan cara membuat respons dari input multimodal, seperti teks dan gambar. Anda dapat menyebutkan URI Cloud Storage atau data file mentah dari gambar, video, atau dokumen beserta perintah teks. Petunjuk sistem bersifat opsional dan dapat diteruskan bersama dengan perintah untuk menginstruksikan model agar berperilaku dengan cara tertentu.

Contoh kode

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

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

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->generate_content( lv_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.
  • PROMPT: Perintah teks Anda.
  • SYSTEM_INSTRUCTIONS: Petunjuk sistem Anda ke model.
  • MIME_TYPE: Jenis MIME standar IANA dari data file. Secara default, jenis MIME disetel ke application/pdf.
  • FILE_URI: URI file yang disimpan di bucket Cloud Storage.
  • INLINE_DATA: Data mentah gambar, PDF, atau video yang dienkode base64 untuk disertakan secara inline dalam perintah.

Menambahkan setelan keamanan untuk model

Contoh kode berikut menunjukkan cara menambahkan setelan keamanan agar model dapat menghasilkan respons.

Contoh kode

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

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

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                                                       iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                                                       iv_harm_block_method    = 'HARM_BLOCK_METHOD'
                               )->generate_content( lv_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.
  • PROMPT: Perintah teks Anda.
  • SYSTEM_INSTRUCTIONS: Petunjuk sistem Anda ke model.
  • MIME_TYPE: Jenis MIME standar IANA dari data file. Secara default, jenis MIME disetel ke application/pdf.
  • FILE_URI: URI file yang disimpan di bucket Cloud Storage.
  • INLINE_DATA: Data mentah gambar, PDF, atau video yang dienkode base64 untuk disertakan secara inline dalam perintah.
  • HARM_CATEGORY: Kategori bahaya yang ingin Anda terapkan.
  • HARM_BLOCK_THRESHOLD: Tingkat nilai minimum berbasis probabilitas yang ingin Anda terapkan.
  • HARM_BLOCK_METHOD: Metode pemblokiran konten berbahaya yang ingin Anda terapkan.

Menemukan jumlah token dan karakter yang dapat ditagih dalam perintah

Sebelum memanggil model dengan perintah, sebaiknya periksa jumlah token dalam perintah dan jumlah karakter yang dapat ditagih dalam token untuk merencanakan penagihan project Google Cloud Anda. Contoh kode berikut menunjukkan cara menemukan angka ini dan mengevaluasi penagihan Anda untuk panggilan model serupa.

Contoh kode

DATA:
  lv_prompt      TYPE string.

lv_prompt      = 'PROMPT'.

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

    DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
                                   )->get_total_tokens( ).

    DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
                                                )->get_total_billable_characters( ).
    IF lv_total_tokens IS NOT INITIAL.
      cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).

    ENDIF.

    IF lv_total_billable_characters IS NOT INITIAL.
      cl_demo_output=>display( 'Total Billable Characters -' && lv_total_billable_characters ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Ganti kode berikut:

Langkah selanjutnya