Membuat embedding

Dokumen ini menjelaskan cara memanggil model penyematan untuk menghasilkan teks dan penyematan multimodal, menggunakan Vertex AI SDK untuk ABAP.

Embedding pada dasarnya adalah kode numerik yang mewakili teks, gambar, atau video dengan cara yang menunjukkan hubungannya. Aplikasi menggunakan kode ini untuk memahami dan menghasilkan bahasa, bahkan mengenali makna dan hubungan yang paling kompleks dalam konten spesifik Anda. Proses ini berfungsi dengan mengubah teks, gambar, dan video menjadi daftar angka, yang dikenal sebagai vektor, yang dirancang untuk menangkap makna konten asli secara efektif.

Beberapa kasus penggunaan umum untuk embedding teks adalah:

  • Penelusuran semantik: Penelusuran teks yang diberi peringkat berdasarkan kemiripan semantik.
  • Klasifikasi: Menampilkan class item yang atribut teksnya mirip dengan teks yang diberikan.
  • Pengelompokan: Mengelompokkan item yang atribut teksnya mirip dengan teks yang diberikan.
  • Deteksi pencilan: Menampilkan item yang atribut teksnya paling tidak berkaitan dengan teks yang diberikan.
  • Antarmuka percakapan: Mengelompokkan grup kalimat yang dapat menyebabkan respons serupa, seperti dalam ruang sematan tingkat percakapan.

Dengan Vertex AI SDK untuk ABAP, Anda dapat membuat penyematan dari logika aplikasi ABAP menggunakan class dan metode yang disertakan dengan SDK. SDK juga menyediakan metode siap pakai untuk mendorong penyematan yang dihasilkan ke datastore berikut:

  • Cloud Storage: Anda dapat menggunakan penyematan dari bucket Cloud Storage untuk membuat indeks vektor dan melakukan Vector Search.
  • BigQuery: Anda dapat menggunakan penyematan dari set data BigQuery sebagai database vektor untuk data perusahaan Anda.

Anda juga dapat memublikasikan penyematan ke topik Pub/Sub yang dapat diarahkan ke set data BigQuery atau ke sistem pelanggan.

Sebelum memulai

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

Membuat embedding

Bagian ini menjelaskan cara membuat penyematan menggunakan Vertex AI SDK untuk ABAP.

Membuat instance class embeddings multimodal

Untuk memanggil model embedding multimodal Vertex AI menggunakan input teks atau multimodal, Anda dapat menggunakan class /GOOG/CL_EMBEDDINGS_MODEL. Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model.

DATA(lo_embeddings_model) = NEW /goog/cl_embeddings_model( iv_model_key = 'MODEL_KEY' ).

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

Membuat embedding teks

Untuk membuat penyematan untuk cuplikan teks, Anda dapat menggunakan metode GEN_TEXT_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda juga dapat menentukan dimensi untuk penyematan output secara opsional.

DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                                output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings(
                                             iv_content      = 'INPUT_TEXT'
                                             is_addln_params = ls_addln_params
                                        )->get_vector( ).

Ganti kode berikut:

  • DIMENSION: Opsional. Dimensi penyematan output. Dimensi default-nya adalah 768.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding-nya.

Anda juga dapat membuat penyematan untuk cuplikan teks menggunakan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE yang siap pakai, yang dikirimkan bersama SDK. Template ini memungkinkan Anda mengambil informasi skema khusus perusahaan dalam file penyematan yang dihasilkan beserta penyematan.

Untuk membuat penyematan untuk cuplikan teks, berdasarkan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, Anda dapat menggunakan metode GEN_TEXT_EMBEDDINGS_BY_STRUCT.

DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                          output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings_by_struct(
                                             is_input        = ls_embedding_template
                                             is_addln_params = ls_addln_params
                                        )->get_vector_by_struct( ).

Ganti kode berikut:

  • ENTITY_ID: ID entity untuk data penyematan.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding-nya.
  • SOURCE_MODULE: Modul sumber konten penyematan.
  • DIMENSION: Opsional. Dimensi penyematan output. Dimensi default-nya adalah 768.

Membuat embedding gambar

Untuk membuat penyematan gambar input, Anda dapat menggunakan metode GEN_IMAGE_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda dapat meneruskan data mentah gambar atau URI Cloud Storage file gambar. Anda juga dapat menentukan teks kontekstual untuk gambar dan dimensi untuk penyematan output secara opsional.

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings( iv_image           = ls_image
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                        )->get_vector( ).

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage gambar target yang akan diberikan embedding.
  • CONTEXTUAL_TEXT: Opsional. Konteks dan makna tambahan untuk konten gambar ke model penyematan.

Anda juga dapat membuat penyematan untuk gambar menggunakan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE yang siap pakai, yang dikirimkan dengan SDK. Template ini memungkinkan Anda mengambil informasi skema khusus perusahaan dalam file penyematan yang dihasilkan beserta penyematan.

Untuk membuat penyematan gambar, berdasarkan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, Anda dapat menggunakan metode GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings_by_struct(
                                             iv_image = ls_image
                                             is_input = ls_embedding_template
                                        )->get_vector_by_struct( ).

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage gambar target yang akan diberikan embedding.
  • ENTITY_ID: ID entity untuk data penyematan.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding-nya.
  • SOURCE_MODULE: Modul sumber konten penyematan.

Untuk mengambil penyematan teks kontekstual, gunakan kode berikut:

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

Opsi ini hanya tersedia untuk pembuatan penyematan satu gambar.

Membuat embedding video

Untuk membuat penyematan video input, Anda dapat menggunakan metode GET_VIDEO_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda dapat meneruskan URI Cloud Storage file video bersama dengan waktu offset awal dan akhir opsional dalam hitungan detik. Anda juga dapat menentukan teks kontekstual untuk video dan dimensi untuk penyematan output secara opsional.

DATA(ls_video) = VALUE /goog/cl_embeddings_model=>ty_video( gcs_uri = 'VIDEO_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_video_embeddings( iv_video           = ls_video
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                                                 iv_dimension       = 'DIMENSION'
                                        )->get_vector( ).
  • VIDEO_URI: Cloud Storage URI video target untuk mendapatkan penyematan.
  • CONTEXTUAL_TEXT: Opsional. Konteks dan makna tambahan untuk konten video ke model penyematan.
  • DIMENSION: Opsional. Dimensi penyematan output. Dimensi yang tersedia adalah: 128, 256, 512, dan 1408 (default).

Metode GET_VECTOR hanya menampilkan penyematan untuk segmen pertama video.

Untuk mengambil penyematan teks kontekstual, gunakan kode berikut:

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

Opsi ini hanya tersedia untuk pembuatan penyematan video tunggal.

Mengumpulkan semua penyematan yang dihasilkan

Untuk mengumpulkan semua penyematan yang dihasilkan dalam tabel internal jenis /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE, Anda dapat menggunakan metode COLLECT dari class /GOOG/CL_EMBEDDINGS_MODEL bersama dengan metode GEN_TEXT_EMBEDDINGS_BY_STRUCT dan GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

Hal ini berguna jika Anda memiliki persyaratan untuk membuat penyematan untuk array item (text/image), dan Anda ingin membuat penyematan dalam iterasi loop dan mendapatkan semua penyematan sekaligus dalam tabel internal setelah iterasi. Metode GET_VECTOR_BY_TABLE dapat digunakan untuk mendapatkan tabel internal akhir dari penyematan.

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

DATA(lt_embeddings) = lo_embeddings_model->get_vector_by_table( ).

Mengirim penyematan ke datastore

Anda dapat mengirim penyematan yang dihasilkan ke bucket Cloud Storage atau set data BigQuery menggunakan template yang disertakan dengan SDK.

Menyimpan penyematan di Cloud Storage

Untuk mengirim penyematan yang dihasilkan ke bucket Cloud Storage, Anda dapat menggunakan metode SEND_STRUCT_TO_GCS dari class /GOOG/CL_EMBEDDINGS_MODEL.

Sebelum mengirim penyematan ke Cloud Storage, pastikan Anda memiliki bucket Cloud Storage yang ingin Anda kirimkan penyematan.

Mengirim setiap penyematan ke bucket Cloud Storage

Contoh kode berikut mengilustrasikan cara mengirim penyematan gambar individual ke bucket Cloud Storage:

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage gambar target yang akan diberikan embedding.
  • CLIENT_KEY: Kunci klien untuk memanggil Cloud Storage API.
  • BUCKET_NAME: Nama bucket Cloud Storage target.
  • FILE_NAME: Nama file penyematan.

Mengirimkan embedding yang dikumpulkan ke bucket Cloud Storage

Contoh kode berikut mengilustrasikan cara mengirim penyematan yang dikumpulkan ke bucket Cloud Storage:

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Cloud Storage API.
  • BUCKET_NAME: Nama bucket Cloud Storage target.
  • FILE_NAME: Nama file penyematan.

Menyimpan penyematan di BigQuery

Untuk mengirim penyematan yang dihasilkan ke set data BigQuery, Anda dapat menggunakan metode SEND_STRUCT_TO_BQ dari /GOOG/CL_EMBEDDINGS_MODEL.

Sebelum mengirim penyematan ke BigQuery, pastikan Anda memiliki set data BigQuery dan tabel yang ingin Anda kirimkan penyematan.

Mengirim setiap penyematan ke set data BigQuery

Contoh kode berikut mengilustrasikan cara mengirim setiap penyematan gambar ke set data BigQuery:

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil BigQuery API.
  • DATASET_ID: ID set data BigQuery.
  • TABLE_ID: ID tabel BigQuery.

Mengirimkan penyematan yang dikumpulkan ke set data BigQuery

Contoh kode berikut mengilustrasikan cara mengirim penyematan yang dikumpulkan ke set data BigQuery:

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil BigQuery API.
  • DATASET_ID: ID set data BigQuery.
  • TABLE_ID: ID tabel BigQuery.

Memublikasikan penyematan ke topik Pub/Sub

Untuk memublikasikan penyematan yang dihasilkan ke topik Pub/Sub, Anda dapat menggunakan metode SEND_STRUCT_TO_PUBSUB dari class /GOOG/CL_EMBEDDINGS_MODEL. Hal ini dapat berguna untuk skenario saat Anda perlu membuat pipeline kustom sendiri untuk menyimpan penyematan dan membuat proses bisnis lanjutan.

Sebelum mengirim penyematan ke topik Pub/Sub, pastikan Anda memiliki topik Pub/Sub yang ingin Anda kirimi penyematan.

Memublikasikan setiap penyematan ke topik Pub/Sub

Contoh kode berikut mengilustrasikan cara memublikasikan setiap penyematan gambar ke topik Pub/Sub:

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Pub/Sub API.
  • TOPIC_ID: ID topik Pub/Sub.

Memublikasikan penyematan yang dikumpulkan ke topik Pub/Sub

Contoh kode berikut mengilustrasikan cara memublikasikan penyematan yang dikumpulkan ke topik Pub/Sub:

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Pub/Sub API.
  • TOPIC_ID: ID topik Pub/Sub.

Langkah selanjutnya