Menggunakan Vertex AI Vector Search

Dokumen ini menjelaskan cara menggunakan Vertex AI Vector Search untuk melakukan kesamaan vektor penelusuran, dengan menggunakan Vertex AI SDK untuk ABAP. Dengan Penelusuran Vektor, Anda dapat menemukan titik data yang mirip secara semantik dalam {i>dataset<i} besar dengan menggunakan dimensi vektor. Model ini unggul dalam tugas seperti pengambilan gambar dan teks, dengan memprioritaskan makna daripada pencocokan kata kunci persis.

Penelusuran Vektor memungkinkan Anda memanfaatkan kekuatan data perusahaan Anda untuk meningkatkan efisiensi, meningkatkan pengalaman pelanggan, dan mendapatkan keunggulan kompetitif. Ini dapat membawa nilai yang signifikan bagi lingkungan SAP, memberikan manfaat seperti hal berikut:

  • Meningkatkan kemampuan penelusuran: Meningkatkan akurasi dan relevansi penelusuran hasil di sejumlah besar data SAP, termasuk data terstruktur dan informasi tidak terstruktur yang tersebar di berbagai sistem yang berbeda. Ini mengarahkan untuk pengambilan informasi yang lebih cepat dan efektif dari data perusahaan yang relevan.

  • Mendapatkan insight dari data tidak terstruktur: Memanfaatkan Vector Search untuk mengekstrak wawasan berharga dari data tidak terstruktur yang sebelumnya belum dimanfaatkan dalam Sistem SAP, seperti data produk, data pelanggan, ulasan pelanggan, tiket dukungan, atau dokumen internal.

  • Meningkatkan pengalaman pelanggan: Berikan interaksi yang dipersonalisasi dan berbasis konteks dengan pelanggan menggunakan Penelusuran Vektor untuk rekomendasi produk, chatbot cerdas, dan aplikasi lain yang ditampilkan kepada pelanggan.

  • Menyederhanakan proses bisnis: Optimalkan proses internal menggunakan Penelusuran Vektor untuk menemukan informasi yang relevan, mengidentifikasi pola, dan membuat keputusan berdasarkan data.

  • Mempercepat inovasi: Menggabungkan Vector Search dengan kemampuan Vertex AI lainnya, seperti AI generatif, untuk mengembangkan solusi baru dan inovatif yang mendorong pertumbuhan bisnis.

Cara menggunakan Vertex AI Vector Search

Pencocokan semantik menggunakan Penelusuran Vektor dapat disederhanakan menjadi langkah-langkah berikut:

  1. Buat representasi embedding dari data perusahaan.
  2. Upload penyematan ke bucket Cloud Storage.
  3. Buat indeks vektor dan kaitkan indeks vektor dengan atribut Bucket Cloud Storage yang berisi embedding. Anda dapat membuat dua jenis indeks, tergantung pada bagaimana Anda berencana untuk memperbaruinya dengan data terbaru:

    • Indeks batch: Indeks batch adalah saat Anda ingin memperbarui indeks secara file, dengan data yang telah disimpan selama jangka waktu tertentu, seperti data yang diproses secara mingguan atau bulanan.
    • Indeks streaming: Indeks streaming digunakan saat Anda ingin data indeks diperbarui segera setelah data baru ditambahkan ke datastore Anda.
  4. Membuat endpoint indeks dan men-deploy indeks vektor ke endpoint untuk menjalankan kueri untuk mendapatkan rekomendasi atau hasil. Endpoint indeks berfungsi sebagai server yang menerima permintaan kueri untuk indeks Anda.

  5. Buat kueri endpoint indeks menggunakan ID entitas, string penelusuran, atau penyematan.

Vertex AI SDK untuk ABAP mencakup semua aspek ini Vertex AI Vector Search untuk Anda untuk membangun Vertex AI aplikasi Vector Search berbasis di lingkungan ABAP Anda.

Membuat dan mengelola indeks vektor

Bagian ini menjelaskan cara membuat dan mengelola vektor indeks dengan menggunakan Vertex AI SDK untuk ABAP.

Sebelum memulai

Pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Menyiapkan embedding Anda

Anda harus menyiapkan embedding Anda. Untuk informasi tentang cara membuat penyematan untuk data perusahaan Anda menggunakan Vertex AI SDK untuk ABAP, lihat Membuat penyematan.

Mengupload embedding Anda ke Cloud Storage

Upload embedding Anda ke bucket Cloud Storage agar dapat mengaitkan embedding dengan indeks vektor. Bahkan jika Anda telah membuat file penyematan di luar Google Cloud, Anda dapat dan mengupload file yang menyematkan tersebut ke bucket Cloud Storage.

Untuk mengetahui informasi tentang cara mengirim embedding yang dihasilkan dengan Vertex AI SDK untuk ABAP ke bucket Cloud Storage, lihat Menyimpan embedding di Cloud Storage.

Membuat instance class untuk indeks vektor

Untuk membuat dan mengelola indeks vektor, Anda dapat membuat instance Class /GOOG/CL_VECTOR_INDEX. Anda membuat instance class dengan meneruskan kunci klien yang dikonfigurasi untuk autentikasi.

DATA(lo_vector_index) = NEW /goog/cl_vector_index( iv_key_name = 'CLIENT_KEY' ).

Ganti CLIENT_KEY dengan kunci klien yang dikonfigurasi untuk autentikasi.

Membuat indeks vektor

Untuk membuat indeks vektor, Anda dapat menggunakan metode CREATE_TREE_AH_INDEX class /GOOG/CL_VECTOR_INDEX. Fungsi ini membuat indeks berdasarkan algoritma tree-AH.

lo_vector_index->create_tree_ah_index( iv_display_name                = 'INDEX_NAME'
                                       iv_description                 = 'INDEX_DESCRIPTION'
                                       iv_location_id                 = 'LOCATION_ID'
                                       iv_gcs_content_uri             = 'CONTENT_URI'
                                       iv_dimensions                  = 'DIMENSIONS'
                                       iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                       iv_index_update_method         = 'INDEX_UPDATE_METHOD'
                                       iv_distance_measure_type       = 'DISTANCE_MEASURE_TYPE'
                                       iv_shard_size                  = 'SHARD_SIZE'
                                       iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                       iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH'
                                       iv_etag                        = 'ETAG'
                                       iv_cloud_kms_encryption_key     = 'KEY_FOR_ENCRYPTION' ).

Ganti kode berikut:

  • INDEX_NAME: Nama tampilan indeks.
  • INDEX_DESCRIPTION: Deskripsi indeks.
  • LOCATION_ID: Region Google Cloud tempat Anda ingin untuk menyimpan indeks. Untuk mengetahui informasi tentang lokasi yang tersedia, lihat Lokasi Vertex AI.
  • CONTENT_URI: URI bucket Cloud Storage berisi embeddings, yang digunakan untuk membuat indeks.
  • DIMENSIONS: Jumlah dimensi vektor input.
  • NEIGHBORS_COUNT: Jumlah tetangga yang akan ditemukan melalui perkiraan penelusuran sebelum pengurutan ulang dilakukan.
  • INDEX_UPDATE_METHOD: Mode pembaruan indeks: BATCH_UPDATE atau STREAM_UPDATE.
  • DISTANCE_MEASURE_TYPE: Menentukan algoritma yang digunakan perhitungan jarak antara titik data dan vektor kueri. Untuk mengetahui informasi selengkapnya, lihat Jenis pengukuran jarak.
  • SHARD_SIZE: Ukuran setiap shard. Jika indeks berukuran besar, indeks tersebut akan di-sharding berdasarkan ukuran shard yang ditentukan. Selama penayangan, setiap shard disajikan pada node terpisah dan diskalakan secara independen.
  • LEAF_NODE_EMBEDDING_COUNT: Jumlah embedding pada setiap node daun. Nilai defaultnya adalah 1000, jika tidak ditetapkan.
  • LEAF_NODE_TO_SEARCH: Persentase default node daun bahwa kueri apa pun dapat ditelusuri. Harus dalam rentang 1-100, inklusif. Nilai defaultnya adalah 10 (berarti 10%), jika tidak ditetapkan.
  • ETAG: Nilai ETag untuk melakukan update baca-modifikasi-tulis yang konsisten.
  • KEY_FOR_ENCRYPTION: Cloud KMS ID resource kunci enkripsi yang dikelola pelanggan.

Membuat endpoint indeks vektor

Untuk membuat endpoint indeks vektor, Anda dapat menggunakan metode CREATE_INDEX_ENDPOINT dari class /GOOG/CL_VECTOR_INDEX.

lo_vector_index->create_index_endpoint( iv_display_name             = 'INDEX_ENDPOINT_NAME'
                                        iv_description              = 'INDEX_ENDPOINT_DESCRIPTION'
                                        iv_location_id              = 'LOCATION_ID'
                                        iv_public_endpoint_enabled  = 'ENABLE_PUBLIC_ENDPOINT'
                                        iv_etag                     = 'ETAG'
                                        iv_cloud_kms_encryption_key = 'KEY_FOR_ENCRYPTION' ).

Ganti kode berikut:

  • INDEX_ENDPOINT_NAME: Nama tampilan endpoint indeks.
  • INDEX_ENDPOINT_DESCRIPTION: Deskripsi endpoint indeks.
  • LOCATION_ID: Region Google Cloud tempat Anda ingin membuat endpoint indeks. Untuk mengetahui informasi tentang lokasi yang tersedia, lihat lokasi Vertex AI.
  • ENABLE_PUBLIC_ENDPOINT: Jika indeks yang di-deploy dapat diakses melalui endpoint publik, lalu tetapkan nilai parameter ini ke ABAP_TRUE.
  • ETAG: Nilai ETag untuk melakukan pembaruan baca-ubah-tulis yang konsisten.
  • KEY_FOR_ENCRYPTION: Cloud KMS ID resource kunci enkripsi yang dikelola pelanggan.

Men-deploy indeks vektor ke endpoint indeks

Untuk men-deploy indeks vektor ke endpoint indeks, Anda dapat menggunakan metode DEPLOY_INDEX dari class /GOOG/CL_VECTOR_INDEX.

lo_vector_index->deploy_index( iv_deployed_index_id     = 'DEPLOYMENT_ID'
                               iv_location_id           = 'LOCATION_ID'
                               iv_index_id              = 'INDEX_ID'
                               iv_index_endpoint_id     = 'INDEX_ENDPOINT_ID>'
                               iv_min_replica_count     = 'MIN_REPLICA_COUNT'
                               iv_max_replica_count     = 'MAX_REPLICA_COUNT'
                               iv_enable_access_logging = 'ENABLE_ACCESS_LOGGING'
                               iv_deployment_group      = 'DEPLOYMENT_GROUP' ).

Ganti kode berikut:

  • DEPLOYMENT_ID: ID deployment indeks.
  • LOCATION_ID: Region Google Cloud tempat Anda ingin untuk men-deploy indeks. Untuk mengetahui informasi tentang lokasi yang tersedia, lihat lokasi Vertex AI.
  • INDEX_ID: Nama resource indeks.
  • INDEX_ENDPOINT_ID: Nama resource endpoint indeks tempat deployment akan dilakukan.
  • MIN_REPLICA_COUNT: Jumlah minimum replika mesin untuk model yang di-deploy.
  • MAX_REPLICA_COUNT: Jumlah maksimum replika mesin untuk model yang di-deploy.
  • ENABLE_ACCESS_LOGGING: Untuk mengirim log akses endpoint pribadi ke Cloud Logging, tetapkan nilai parameter ini ke ABAP_TRUE.
  • DEPLOYMENT_GROUP: Nama grup deployment, misalnya, test, prod.

Memperbarui dan membuat ulang indeks vektor

Untuk mendapatkan hasil Penelusuran Vektor yang paling akurat untuk solusi AI perusahaan, Anda juga harus terus memperbarui indeks dengan data perusahaan terbaru.

Memperbarui indeks batch

Untuk memperbarui indeks batch dengan informasi terbaru yang ada di Cloud Storage Anda dapat menggunakan metode PATCH_TREE_AH_INDEX dari class /GOOG/CL_VECTOR_INDEX.

lo_vector_index->patch_tree_ah_index( iv_index_id              = 'INDEX_ID'
                                      iv_gcs_content_uri       = 'CONTENT_URI'
                                      iv_location_id           = 'LOCATION_ID'
                                      iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE' ).

Ganti kode berikut:

  • INDEX_ID: Nama resource indeks.
  • CONTENT_URI: URI bucket Cloud Storage memiliki embedding untuk data perusahaan terbaru.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • IS_COMPLETE_OVERWRITE: Untuk sepenuhnya menimpa indeks dengan data di bucket Cloud Storage tertentu, tetapkan nilai parameter ini ke ABAP_TRUE.

Anda dapat menggunakan contoh alur arsitektur berikut untuk memperbarui indeks batch dengan data SAP:

  • Perbarui bucket Cloud Storage dengan penyematan untuk data terbaru menggunakan class /GOOG/CL_STORAGE_V1, melalui tugas latar belakang SAP. Untuk data non-SAP, hal ini juga dapat dilakukan melalui proses di luar SAP.
  • Memicu pembaruan indeks batch menggunakan metode PATCH_TREE_AH_INDEX dari class /GOOG/CL_VECTOR_INDEX, melalui tugas latar belakang di SAP, yang berjalan pada frekuensi tertentu.

Memperbarui indeks aliran data

Untuk memperbarui dan memasukkan informasi untuk titik data untuk indeks aliran data, Anda dapat menggunakan metode UPSERT_DATAPOINTS dari class /GOOG/CL_VECTOR_INDEX.

lo_vector_index->upsert_datapoints( iv_index_id     = 'INDEX_ID'
                                    iv_location_id  = 'LOCATION_ID'
                                    iv_datapoint_id = 'ENTITY_ID'
                                    it_embeddings   = 'EMBEDDINGS' ).

Ganti kode berikut:

  • INDEX_ID: Nama resource indeks.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • ENTITY_ID: ID entity yang akan diupdate dan dimasukkan.
  • EMBEDDINGS: Embeddings untuk memperbarui dan menyisipkan titik data.

Untuk menghapus informasi titik data dari indeks aliran data, Anda dapat menggunakan metode REMOVE_DATAPOINTS dari class /GOOG/CL_VECTOR_INDEX.

lo_vector_index->remove_datapoints( iv_index_id     = 'INDEX_ID'
                                    iv_location_id  = 'LOCATION_ID'
                                    iv_datapoint_id = 'ENTITY_ID' ).

Ganti kode berikut:

  • INDEX_ID: Nama resource indeks.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • ENTITY_ID: ID entity yang akan dihapus.

Operasi pembaruan dan penghapusan dilakukan secara real time untuk indeks.

Anda dapat menggunakan contoh alur arsitektur berikut untuk mengupdate aliran data dengan data SAP:

  • Mengidentifikasi placeholder dalam solusi SAP perusahaan Anda, seperti BADI, keluar, peningkatan, dan logika SAP kustom, yang merupakan titik untuk perubahan data SAP.
  • Picu operasi pembaruan dan penghapusan untuk data SAP dari indeks aliran data menggunakan metode UPSERT_DATAPOINTS dan REMOVE_DATAPOINTS dari /GOOG/CL_VECTOR_INDEX, dari placeholder yang Anda identifikasi.

Mendapatkan status operasi indeks vektor

Google Cloud melakukan hal berikut sebagai operasi yang berjalan lama: pembuatan indeks vektor dan endpoint indeks, deployment indeks ke endpoint indeks, atau pembaruan indeks batch vektor.

Untuk menentukan ID operasi yang berjalan lama, ID resource Artefak Vertex AI, dan pesan error, SDK menyediakan class /GOOG/CL_VECTORINDEX_RESPONSE.

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

Mendapatkan ID operasi yang berjalan lama

Untuk mendapatkan ID operasi yang berjalan lama untuk setiap tugas penelusuran vektor, Anda dapat menggunakan metode GET_LRO dari class /GOOG/CL_VECTORINDEX_RESPONSE. Setelah menjalankan tugas, Anda dapat memanggil metode GET_LRO dengan instance yang sama untuk mendapatkan ID operasi yang berjalan lama yang sesuai.

Contoh kode berikut mengilustrasikan cara mendapatkan ID operasi yang berjalan lama untuk tugas pembaruan indeks batch:

DATA(lv_patch_index_lro) = lo_vector_index->patch_tree_ah_index(
                                              iv_index_id              = 'INDEX_ID'
                                              iv_gcs_content_uri       = 'CONTENT_URI'
                                              iv_location_id           = 'LOCATION_ID'
                                              iv_is_complete_overwrite = 'IS_COMPLETE_OVERWRITE'
                                         )->get_lro( ).

Ganti kode berikut:

  • INDEX_ID: Nama resource indeks.
  • CONTENT_URI: URI bucket Cloud Storage memiliki embedding untuk data perusahaan terbaru.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • IS_COMPLETE_OVERWRITE: Untuk menimpa sepenuhnya indeks dengan data di bucket Cloud Storage tertentu, tetapkan parameter ini nilai ke ABAP_TRUE.

Mendapatkan status operasi yang berjalan lama

Setiap operasi yang berjalan lama memiliki status yang terkait dengannya. Untuk memvalidasi apakah tugas yang dijadwalkan sebagai operasi yang berjalan lama berhasil atau tidak, Anda dapat memeriksa status operasinya.

Untuk menentukan atau terus memantau status operasi yang berjalan lama untuk tugas terkait Vertex AI, Anda dapat menggunakan metode GET_LRO_STATUS dari class /GOOG/CL_VERTEX_AI_SDK_UTILITY.

/goog/cl_vertex_ai_sdk_utility=>get_lro_status(
    EXPORTING
        iv_key           = 'CLIENY_KEY'
        iv_operations_id = 'LONG_RUNNING_OPERATION_ID'
        iv_location_id   = 'LOCATION_ID'
    IMPORTING
        ev_is_done       = DATA(lv_is_done)          "Is the long-running operation complete
        ev_is_successful = DATA(lv_is_successful)    "Is the long-running operation successful
        ev_error_code    = DATA(lv_error_code)       "Error code in the long-running operation in case of errors
        ev_error_message = DATA(lv_error_message) ). "Error message in the long-running operation in case of errors

Ganti kode berikut:

  • CLIENY_KEY: Kunci klien untuk autentikasi.
  • LONG_RUNNING_OPERATION_ID: ID operasi yang berjalan lama.
  • LOCATION_ID: Region Google Cloud pada indeks.

Mendapatkan ID resource artefak Vertex AI

Untuk menentukan ID resource dari indeks yang dibuat, buat endpoint indeks, indeks yang di-deploy, ID indeks yang patch-nya dipicu, Anda dapat menggunakan Metode GET_ID dari class /GOOG/CL_VECTORINDEX_RESPONSE.

Setelah mengeksekusi tugas, Anda dapat memanggil metode GET_ID dengan instance yang sama untuk mendapatkan ID resource yang sesuai.

Contoh kode berikut mengilustrasikan cara mendapatkan ID indeks yang dibuat setelah memanggil metode CREATE_TREE_AH_INDEX dari class /GOOG/CL_VECTOR_INDEX:

DATA(lv_id) = lo_vector_index->create_tree_ah_index(
                                 iv_display_name                = 'INDEX_NAME'
                                 iv_location_id                 = 'LOCATION_ID'
                                 iv_gcs_content_uri             = 'CONTENT_URI'
                                 iv_dimensions                  = 'DIMENSIONS'
                                 iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                 iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                 iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH'
                            )->get_id( ).

Ganti kode berikut:

  • INDEX_NAME: Nama tampilan indeks.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • CONTENT_URI: URI bucket Cloud Storage berisi embeddings, yang digunakan untuk membuat indeks.
  • DIMENSIONS: Jumlah dimensi vektor input.
  • NEIGHBORS_COUNT: Tetangga untuk mencari melalui perkiraan sebelum mengurutkan ulang dilakukan.
  • LEAF_NODE_EMBEDDING_COUNT: Jumlah embedding pada setiap node daun. Nilai defaultnya adalah 1000, jika tidak ditetapkan.
  • LEAF_NODE_TO_SEARCH: Persentase default node daun bahwa kueri apa pun dapat ditelusuri. Harus dalam rentang 1-100, inklusif. Nilai defaultnya adalah 10 (berarti 10%), jika tidak ditetapkan.

Mendapatkan kode error dan pesan error

Error mungkin terjadi selama pemicu tugas indeks vektor melalui Vertex AI SDK untuk ABAP.

Untuk mendapatkan kode error dan pesan error (jika ada) setelah pemicu tugas, Anda dapat menggunakan metode GET_ERROR_CODE dan GET_ERROR_MESSAGE dari class `/GOOG/CL_VECTORINDEX_RESPONSE.

Setelah mengeksekusi tugas, Anda dapat memanggil GET_ERROR_CODE dan GET_ERROR_MESSAGE dengan instance yang sama untuk mendapatkan kode error atau pesan error yang sesuai.

Contoh kode berikut menggambarkan cara menampilkan kode error dan pesan error jika pembuatan indeks gagal:

DATA(lo_vectorindex_response) = lo_vector_index->create_tree_ah_index(
                                                   iv_display_name                = 'INDEX_NAME'
                                                   iv_location_id                 = 'LOCATION_ID'
                                                   iv_gcs_content_uri             = 'CONTENT_URI'
                                                   iv_dimensions                  = 'DIMENSIONS'
                                                   iv_approximate_neighbors_count = 'NEIGHBORS_COUNT'
                                                   iv_leaf_node_embedding_count   = 'LEAF_NODE_EMBEDDING_COUNT'
                                                   iv_leaf_nodes_to_search        = 'LEAF_NODE_TO_SEARCH' ).
IF lo_vectorindex_response->get_error_code( ) IS NOT INITIAL.
  cl_demo_output=>display( 'Error Code-' && lo_vectorindex_response->get_error_code( ) &&
                           'Error Message-' && lo_vectorindex_response->get_error_message( ) ).
ENDIF.

Ganti kode berikut:

  • INDEX_NAME: Nama tampilan indeks.
  • LOCATION_ID: Region Google Cloud pada indeks.
  • CONTENT_URI: URI bucket Cloud Storage berisi embeddings, yang digunakan untuk membuat indeks.
  • DIMENSIONS: Jumlah dimensi vektor input.
  • NEIGHBORS_COUNT: Tetangga untuk mencari melalui perkiraan sebelum mengurutkan ulang dilakukan.
  • LEAF_NODE_EMBEDDING_COUNT: Jumlah embedding pada setiap node daun. Nilai defaultnya adalah 1000, jika tidak ditetapkan.
  • LEAF_NODE_TO_SEARCH: Persentase default node daun bahwa kueri apa pun dapat ditelusuri. Harus dalam rentang 1-100, inklusif. Nilai defaultnya adalah 10 (berarti 10%), jika tidak ditetapkan.

Telusuri tetangga terdekat

Bagian ini menjelaskan cara menelusuri tetangga terdekat dengan menggunakan Vertex AI SDK untuk ABAP.

Sebelum memulai

Pastikan Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Membuat tujuan RFC

Anda perlu membuat tujuan RFC untuk endpoint indeks tempat Anda telah men-deploy indeks yang memiliki data perusahaan dalam bentuk file penyematan.

  1. Ambil nama host untuk endpoint indeks:

    1. Di GUI SAP, jalankan kode transaksi /GOOG/SDK_IMG.

      Atau, jalankan kode transaksi SPRO, lalu klik SAP Reference IMG.

    2. Klik ABAP SDK for Google Cloud &gt; Utilitas &gt; Vertex AI SDK: Dapatkan informasi RFC untuk Feature Store dan Vector Search.
    3. Pilih Dapatkan Detail Penelusuran Vektor.
    4. Pilih salah satu opsi berikut:

      • Tombol penelusuran
      • ID endpoint indeks vektor
    5. Jika telah memilih opsi Tombol penelusuran, masukkan kunci penelusuran yang dikonfigurasi di Parameter Penelusuran Vektor.

    6. Jika Anda telah memilih opsi Vector index endpoint ID, masukkan parameter berikut:

      • Nama Kunci Google Cloud: Kunci klien untuk autentikasi ke Google Cloud.
      • Lokasi: Region tempat endpoint indeks berada.
      • ID Endpoint Indeks: Nama endpoint indeks.
    7. Klik Execute untuk melihat detailnya. Catat endpoint terhadap label Host.

  2. Buat tujuan RFC untuk endpoint indeks:

    1. Di SAP GUI, jalankan kode transaksi SM59.

    2. Buat tujuan RFC baru. Untuk tujuan RFC yang Anda buat, pastikan Connection Type ditetapkan sebagai berikut: G - HTTP connection to external server.

    3. Buka tab Technical Settings dan masukkan detail berikut:

      • Target Host: Berikan nama host untuk endpoint indeks.

      • Nomor Layanan: Masukkan 443. Nomor port ini digunakan untuk komunikasi yang aman.

    4. Buka jendela Logon & Keamanan dan pastikan bahwa Sertifikat SSL ditetapkan dengan opsi DFAULT SSL Client (Standard).

    5. Simpan perubahan Anda.

  3. Konfigurasi tabel pemetaan layanan untuk Vertex AI API:

    1. Di GUI SAP, jalankan kode transaksi /GOOG/SDK_IMG.

      Atau, jalankan kode transaksi SPRO, lalu klik SAP Reference IMG.

    2. Klik ABAP SDK for Google Cloud &gt; Setelan Dasar &gt; Konfigurasi Pemetaan Layanan.

    3. Klik New Entries.

    4. Tentukan tujuan RFC untuk Vertex AI API:

      Nama Nama Layanan Tujuan RFC
      Kunci klien untuk autentikasi. apiinvoker:v1 Nama tujuan RFC.
    5. Simpan entri baru.

Untuk memanggil Vector Search, Anda dapat membuat instance Class /GOOG/CL_VECTOR_SEARCH. Anda membuat instance class dengan meneruskan kunci penelusuran, yang dikonfigurasi di parameter Vektor Search.

DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_name = 'SEARCH_KEY' ).

Ganti SEARCH_KEY dengan kunci penelusuran, yang dikonfigurasi di parameter Vektor Search.

Telusuri menggunakan ID entitas

Untuk melakukan kueri indeks vektor sehubungan dengan ID entitas tertentu, Anda dapat menggunakan metode FIND_NEIGHBORS_BY_ENTITY_ID Class /GOOG/CL_VECTOR_SEARCH. ID entitas sesuai dengan titik data yang disimpan dalam indeks vektor Anda.

lo_vector_search->find_neighbors_by_entity_id( iv_entity_id             = 'ENTITY_ID'
                                               iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                               iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).

Ganti kode berikut:

  • ENTITY_ID: ID entitas yang akan ditelusuri.
  • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan yang diambil untuk kueri.
  • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.

Menelusuri menggunakan string penelusuran

Untuk melakukan kueri indeks vektor sehubungan dengan string penelusuran, Anda dapat menggunakan Metode FIND_NEIGHBORS_BY_STRING dari class /GOOG/CL_VECTOR_SEARCH.

Pertama-tama, SDK mengonversi string penelusuran menjadi embedding, dan kemudian mengambil tetangga terdekat untuk kueri.

DATA(lo_response) = lo_vector_search->find_neighbors_by_string(
                                        iv_search_string         = 'SEARCH_STRING'
                                        iv_embeddings_model_key  = 'MODEL_KEY'
                                        iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                        iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).

Ganti kode berikut:

  • SEARCH_STRING: Memasukkan string penelusuran.
  • MODEL_KEY: Kunci model untuk menghasilkan embeddings, yang dikonfigurasi di parameter pembuatan model.
  • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
  • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.

Menelusuri menggunakan penyematan

Untuk mengkueri indeks vektor sehubungan dengan penyematan, Anda dapat menggunakan metode FIND_NEIGHBORS_BY_EMBEDDING dari class /GOOG/CL_VECTOR_SEARCH.

DATA(lo_response) = lo_vector_search->find_neighbors_by_embeddings(
                                        iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                        iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                        it_embeddings            = 'EMBEDDINGS' ).

Ganti kode berikut:

  • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
  • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.
  • EMBEDDINGS: Penyematan input.

Mendapatkan respons penelusuran

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

Respons yang diambil oleh class /GOOG/CL_VECTORSEARCH_RESPONSE dirantai ke permintaan yang dibuat melalui metode class /GOOG/CL_VECTOR_SEARCH, sehingga Anda dapat langsung mengakses respons dalam satu pernyataan tanpa mengharuskan variabel untuk menyimpan hasil menengah.

Memperoleh tetangga terdekat untuk kueri penelusuran

Untuk menentukan tetangga terdekat yang ditemukan untuk kueri penelusuran yang dieksekusi sehubungan dengan titik data, string pencarian, atau embedding, Anda dapat menggunakan Metode class GET_NEAREST_NEIGHBOR dan GET_NEAREST_NEIGHBORS /GOOG/CL_VECTORSEARCH_RESPONSE.

Metode ini dapat dipanggil dalam rantai setelah menjalankan penelusuran kueri dengan menggunakan metode FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING, dan FIND_NEIGHBORS_BY_ENTITY_ID dari class /GOOG/CL_VECTOR_SEARCH.

  • Untuk mendapatkan tetangga terdekat yang paling dekat dengan titik data, {i>string<i}, atau {i>embedding<i} yang dicari, panggil metode GET_NEAREST_NEIGHBOR. Respons dari metode ini mencantumkan ID titik data terdekat, jaraknya dari kueri penelusuran, dan vektor fitur yang terkait dengannya dalam indeks.

    Contoh kode berikut mengilustrasikan cara mendapatkan tetangga terdekat untuk string penelusuran:

    DATA(ls_nearest_neighbor) = lo_vector_search->find_neighbors_by_string(
                                                    iv_search_string         = 'SEARCH_STRING'
                                                    iv_embeddings_model_key  = 'MODEL_KEY'
                                                    iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                    iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                               )->get_nearest_neighbor( ).
    

    Ganti kode berikut:

    • SEARCH_STRING: Input string penelusuran.
    • MODEL_KEY: Kunci model untuk menghasilkan embeddings, yang dikonfigurasi di parameter pembuatan model.
    • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
    • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.
  • Untuk mendapatkan kumpulan tetangga terdekat yang terdekat ke titik data, string, atau embedding yang ditelusuri, panggil GET_NEAREST_NEIGHBORS . Respons dari metode ini adalah tabel yang berisi titik data terdekat, dengan daftar ID titik data, jaraknya dari pencarian kueri dan vektor fitur yang terkait dengannya pada indeks.

    Contoh kode berikut mengilustrasikan cara mendapatkan tetangga terdekat untuk string penelusuran:

    DATA(lt_nearest_neighbors) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT'
                                                )->get_nearest_neighbors( ).
    

    Ganti kode berikut:

    • SEARCH_STRING: Memasukkan string penelusuran.
    • MODEL_KEY: Kunci model untuk menghasilkan embeddings, yang dikonfigurasi di parameter pembuatan model.
    • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
    • RETURN_FULL_DATAPOINT: Untuk menampilkan penyematan vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.

Mendapatkan jarak tetangga yang diambil

Untuk menentukan jarak respons yang diambil dari kueri yang ditelusuri, Anda dapat menggunakan metode GET_DATAPOINT_DISTANCE dari class /GOOG/CL_VECTORSEARCH_RESPONSE.

Jarak dalam respons penelusuran menunjukkan ukuran perbedaan antara kueri (string, embedding, atau ID entitas) dan vektor hasil yang diambil. Arti spesifik dari jarak bergantung pada "Ukuran Jarak" digunakan saat membuat indeks.

Nilai jarak membantu Anda memahami seberapa relevan setiap hasil penelusuran sesuai dengan kueri Anda. Hasil dengan jarak yang lebih rendah umumnya dianggap lebih serupa atau relevan, sedangkan mereka dengan jaraknya kurang mirip atau tidak relevan.

Contoh kode berikut mengilustrasikan cara mendapatkan jarak tetangga terdekat untuk string penelusuran:

DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lv_distance) = lo_vectorsearch_response->get_datapoint_distance( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).

Ganti kode berikut:

  • SEARCH_STRING: Memasukkan string penelusuran.
  • MODEL_KEY: Kunci model untuk membuat penyematan, yang dikonfigurasi di parameter pembuatan model.
  • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
  • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.

Mendapatkan vektor embedding dari tetangga yang diambil

Untuk menentukan vektor embedding dari respons yang diambil dari kueri yang ditelusuri, Anda dapat menggunakan metode GET_DATAPOINT_FEATURE_VECTOR dari class /GOOG/CL_VECTORSEARCH_RESPONSE.

Untuk mendapatkan vektor embedding, parameter IV_RETURN_FULL_DATAPOINT dari elemen FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING, dan FIND_NEIGHBORS_BY_ENTITY_ID harus ditetapkan ke ABAP_TRUE.

Contoh kode berikut mengilustrasikan cara mendapatkan vektor fitur tetangga terdekat untuk string penelusuran:

DATA(lo_vectorsearch_response) = lo_vector_search->find_neighbors_by_string(
                                                     iv_search_string         = 'SEARCH_STRING'
                                                     iv_embeddings_model_key  = 'MODEL_KEY'
                                                     iv_neighbor_count        = 'NEIGHBOR_COUNT'
                                                     iv_return_full_datapoint = 'RETURN_FULL_DATAPOINT' ).
DATA(ls_nearest_neighbor) = lo_vectorsearch_response->get_nearest_neighbor( ).
DATA(lt_feature_vector) = lo_vectorsearch_response->get_datapoint_feature_vector( iv_datapoint_id = ls_nearest_neighbor-datapoint_id ).

Ganti kode berikut:

  • SEARCH_STRING: Memasukkan string penelusuran.
  • MODEL_KEY: Kunci model untuk membuat penyematan, yang dikonfigurasi di parameter pembuatan model.
  • NEIGHBOR_COUNT: Jumlah tetangga terdekat yang akan diambil untuk kueri.
  • RETURN_FULL_DATAPOINT: Untuk menampilkan embedding vektor untuk titik data yang diambil, tetapkan nilai parameter ini ke ABAP_TRUE.

Langkah selanjutnya