Mendapatkan insight Gemini pada data BigQuery

BigQuery AI dan ML SDK untuk ABAP memungkinkan Anda menggunakan kueri Gemini pada data perusahaan yang disimpan di BigQuery dan menampilkan hasilnya, dari agen atau aplikasi berbasis ABAP. Dengan SDK, Anda dapat menggunakan model Gemini untuk melakukan hal berikut:

  • Menghasilkan insight dari data teks di BigQuery
  • Menghasilkan insight dari data gambar atau video di BigQuery

Anda dapat menjalankan insight berbasis Gemini pada data perusahaan yang disimpan di set data BigQuery menggunakan fungsi BigQuery ML.GENERATE_TEXT.

Anda dapat mengakses model Gemini di Vertex AI dengan membuat model jarak jauh di BigQuery ML yang mewakili endpoint model Vertex AI. Setelah membuat model jarak jauh melalui model Vertex AI yang ingin digunakan, Anda dapat mengakses kemampuan model tersebut dengan menjalankan fungsi BigQuery ML terhadap model jarak jauh.

Sebelum memulai

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

Harga

BigQuery AI dan ML SDK untuk ABAP ditawarkan tanpa biaya. Namun, Anda bertanggung jawab atas biaya di platform BigQuery dan Vertex AI sebagai berikut:

  • BigQuery ML: Anda akan dikenai biaya untuk data yang diproses di BigQuery.
  • Vertex AI: Anda dikenai biaya panggilan ke layanan Vertex AI yang direpresentasikan oleh model jarak jauh.

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Untuk mengetahui informasi selengkapnya tentang harga BigQuery, lihat halaman harga BigQuery.

Untuk mengetahui informasi selengkapnya tentang harga Vertex AI, lihat halaman harga Vertex AI.

Menjalankan kueri Gemini di BigQuery

Bagian ini menjelaskan cara menghasilkan insight berbasis Gemini dari data perusahaan di BigQuery menggunakan BigQuery AI dan ML SDK untuk ABAP.

Class ABAP /GOOG/CL_BQ_GENERATIVE_MODEL yang dikirimkan dengan SDK memungkinkan Anda menjalankan kueri Gemini menggunakan fungsi BigQuery ML.GENERATE_TEXT.

Menetapkan kueri Gemini

Anda dapat menggunakan SDK untuk menjalankan kueri Gemini dengan cara berikut:

  • Simpan kueri Anda untuk menjalankan Gemini di BigQuery. Gunakan class /GOOG/CL_BQ_QUERY dan berikan nama kueri yang disimpan saat Anda membuat instance class dari logika aplikasi.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_name  = 'SAVED_QUERY_NAME' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Ganti kode berikut:

    • CLIENT_KEY: Kunci klien yang telah Anda konfigurasikan untuk autentikasi ke Google Cloud selama penyiapan autentikasi.
    • QUERY_LOCATION_ID: Google Cloud Lokasi tempat kueri disimpan.
    • SAVED_QUERY_NAME: Nama kueri yang digunakan untuk menyimpan kueri di BigQuery.
  • Teruskan teks kueri untuk memanggil Gemini saat Anda membuat instance class /GOOG/CL_BQ_QUERY dari logika aplikasi.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_text  = 'QUERY_TEXT' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Ganti kode berikut:

    • CLIENT_KEY: Kunci klien yang telah Anda konfigurasikan untuk autentikasi ke Google Cloud selama penyiapan autentikasi.
    • QUERY_LOCATION_ID: Google Cloud Lokasi tempat kueri disimpan.
    • QUERY_TEXT: Teks kueri yang ingin Anda jalankan dengan Gemini.

Saat Anda membuat instance class /GOOG/CL_BQ_QUERY dengan nama kueri tersimpan atau teks kueri langsung, class tersebut akan menetapkan kueri dalam class. Kemudian, Anda dapat meneruskan referensi class sebagai input ke class ABAP /GOOG/CL_BQ_GENERATIVE_MODEL untuk memanggil kueri.

Membuat instance class pemanggil BigQuery Gemini

Untuk memanggil model teks dan multimodal Gemini pada set data BigQuery, gunakan class /GOOG/CL_BQ_GENERATIVE_MODEL.

TRY.
    DATA(lo_bq_generative_model) = NEW /goog/cl_bq_generative_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Ganti CLIENT_KEY dengan kunci klien yang telah Anda konfigurasikan untuk autentikasi ke Google Cloud selama penyiapan autentikasi.

Menjalankan kueri Gemini

Untuk menjalankan kueri Gemini dengan fungsi BigQuery ML.GENERATE_TEXT, gunakan metode EXECUTE_QUERY dari class /GOOG/CL_BQ_GENERATIVE_MODEL. Objek class /GOOG/CL_BQ_QUERY yang ditetapkan dengan kueri diteruskan sebagai input ke metode.

lo_bq_generative_model->execute_query( io_query = lo_bq_query ).

LO_BQ_QUERY adalah referensi class /GOOG/CL_BQ_QUERY setelah menetapkan kueri.

Mengganti parameter pembuatan model

Anda dapat menentukan parameter pembuatan model Gemini dalam kueri tersimpan di BigQuery atau teks kueri yang diteruskan. Namun, jika perlu mengganti parameter untuk kueri yang sama dari logika aplikasi ABAP, Anda dapat menggunakan metode SET_GENERATION_CONFIG dari class /GOOG/CL_BQ_GENERATIVE_MODEL. Parameter pembuatan dalam kueri awal diganti dengan parameter yang diteruskan melalui metode ini.

DATA lt_stop_sequences TYPE /goog/cl_bigquery_v2=>ty_t_string.
DATA lt_safety_settings TYPE /goog/cl_bq_generative_model=>ty_t_safety_settings.
DATA ls_safety_settings TYPE /goog/cl_bq_generative_model=>ty_safety_setting.

APPEND 'STOP_SEQUENCE' TO lt_stop_sequences.

ls_safety_settings-category = 'CATEGORY'.
ls_safety_settings-threshold = 'THRESHOLD'.

APPEND ls_safety_settings TO lt_safety_settings.

lo_bq_generative_model->set_generation_config( iv_temperature               = 'TEMPERATURE'
                               iv_top_p                     = 'TOP_P'
       iv_top_k                     = 'TOP_K'
       iv_max_output_tokens         = 'MAX_OUTPUT_TOKENS'
       iv_flatten_json_output       = 'IS_FLATTEN_JSON_OUTPUT'
       iv_ground_with_google_search = 'IS_GROUND_WITH_GOOGLE_SEARCH'
it_stop_sequences            = lt_stop_sequences
it_safety_settings           = lt_safety_settings ).

Ganti kode berikut:

  • STOP_SEQUENCE: Nilai yang menghapus string yang ditentukan jika disertakan dalam respons dari model.
  • CATEGORY: Kategori keamanan konten untuk memfilter respons, cari kemungkinan nilai dari argumen setelan keamanan di bagian sintaksis input untuk ML.GENERATE_TEXT.
  • THRESHOLD: Nilai minimum pemblokiran yang sesuai untuk memfilter respons, cari kemungkinan nilai dari argumen setelan keamanan di bagian sintaksis input untuk ML.GENERATE_TEXT.
  • TEMPERATURE: Nilai yang mengontrol tingkat keacakan dalam pemilihan token.
  • TOP_P: Nilai yang mengubah cara model memilih token untuk output.
  • TOP_K: Nilai yang mengubah cara model memilih token untuk output.
  • MAX_OUTPUT_TOKENS: Nilai yang menetapkan jumlah maksimum token yang dapat dibuat dalam respons.
  • IS_FLATTEN_JSON_OUTPUT: Nilai boolean yang menentukan apakah konten JSON yang ditampilkan oleh fungsi diuraikan menjadi kolom terpisah.
  • IS_GROUND_WITH_GOOGLE_SEARCH: Nilai boolean yang menentukan apakah model Vertex AI menggunakan Pemrosesan dengan Google Penelusuran saat membuat respons.

Mendapatkan hasil kueri dari kueri Gemini

Untuk menerima respons yang diproses dari BigQuery ML untuk kueri Gemini dan menampilkannya dengan cara yang bermakna, gunakan class /GOOG/CL_BQ_MODEL_RESPONSE.

Respons yang diambil oleh class /GOOG/CL_BQ_MODEL_RESPONSE dirantai ke permintaan yang dibuat melalui metode class /GOOG/CL_BQ_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, gunakan metode GET_TEXT_RESPONSE.

DATA(lt_bq_response) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                            )->get_text_response( ).

Mendapatkan status tugas kueri

Setiap kueri di BigQuery dieksekusi sebagai tugas kueri. Untuk mendapatkan status tugas kueri, gunakan metode GET_QUERY_JOB_STATUS.

lo_bq_generative_model->execute_query( io_query = lo_bq_query
                     )->get_query_job_status(
IMPORTING ev_job_complete          = DATA(lv_job_complete)
  ev_job_creation_reason   = DATA(lv_job_creation_reason)
  ev_job_id                = DATA(lv_job_id)
  ev_query_id              = DATA(lv_query_id)
  ev_total_bytes_processed = DATA(lv_total_bytes_processed)
  ev_total_rows            = DATA(lv_total_rows) ).

Metode ini menampilkan metrik status tugas berikut:

  • Apakah kueri telah selesai atau belum
  • Alasan Tugas dibuat
  • Referensi ke Tugas yang dibuat untuk menjalankan kueri
  • ID yang dibuat secara otomatis untuk kueri
  • Jumlah total byte yang diproses untuk kueri ini
  • Jumlah total baris dalam kumpulan hasil kueri lengkap

Mendapatkan error tugas kueri

Untuk mengambil error (jika ada), gunakan metode GET_QUERY_JOB_ERRORS.

DATA(lt_query_job_errors) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                 )->get_query_job_errors( ).

Mendapatkan alasan selesai

Untuk mendapatkan alasan mengapa model berhenti membuat token untuk setiap baris, gunakan metode GET_FINISH_REASON.

DATA(lt_finish_reason) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                              )->get_finish_reason( ).

Mendapatkan metadata penggunaan

Untuk mendapatkan metadata penggunaan tentang respons yang dihasilkan untuk setiap baris, gunakan metode GET_USAGE_METADATA .

DATA(lt_usage_metadata) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_usage_metadata( ).

Metadata penggunaan terdiri dari metrik berikut:

  • Total jumlah token dalam respons untuk baris
  • Jumlah token dalam perintah input
  • Total jumlah token

Mendapatkan rating keselamatan

Untuk mendapatkan rating keamanan respons, gunakan metode GET_SAFETY_RATING. Rating keamanan harus ditetapkan sebagai parameter pembuatan model dalam kueri input untuk mendapatkan rating keamanan respons.

DATA(lt_safety_ratings) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_safety_rating( ).

Mendapatkan tabel respons keseluruhan

Untuk mendapatkan tabel respons keseluruhan untuk kueri Gemini yang Anda jalankan, gunakan metode GET_RESPONSE_TABLE.

lo_bq_model_response->get_response_table(
IMPORTING et_bqml_response              = DATA(lt_bqml_response)
                  et_bqml_response_flatten_json = DATA(lt_bqml_response_flatten_json)
                  et_bqml_response_grounding    = DATA(lt_bqml_response_grounding) ).

Hanya satu tabel respons yang diisi berdasarkan parameter pembuatan yang ditetapkan dalam kueri:

  • ET_BQML_RESPONSE diisi saat parameter FLATTEN_JSON_OUTPUT tidak disetel ke TRUE dalam kueri input.
  • ET_BQML_RESPONSE_FLATTEN_JSON diisi saat parameter FLATTEN_JSON_OUTPUT ditetapkan ke TRUE dalam kueri input.
  • ET_BQML_RESPONSE_GROUNDING diisi saat parameter FLATTEN_JSON_OUTPUT ditetapkan ke TRUE dalam kueri input dan parameter GROUNDING_WITH_GOOGLE_SEARCH juga ditetapkan ke TRUE dalam kueri input.

Mendapatkan sumber grounding

Untuk mencantumkan sumber dasar yang digunakan model untuk menghasilkan respons, gunakan metode GET_GROUNDING_SOURCE.

DATA(lt_query_grounding_sources) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                        )->get_grounding_source( ).