Utilizzare Vertex AI Vector Search

Questo documento descrive come utilizzare Vertex AI Vector Search per eseguire ricerche di somiglianza vettoriale utilizzando l'SDK Vertex AI per ABAP. Con la ricerca vettoriale, puoi trovare punti dati semanticamente simili all'interno di set di dati di grandi dimensioni utilizzando vettori di alta dimensione. Eccelle in attività come il recupero di immagini e testo, dando la priorità al significato rispetto alle corrispondenze esatte delle parole chiave.

La ricerca di vettori ti consente di sfruttare la potenza dei dati aziendali per migliorare l'efficienza, migliorare le esperienze dei clienti e ottenere un vantaggio competitivo. Può apportare un valore significativo al tuo ambiente SAP, offrendo vantaggi come:

  • Migliora le funzionalità di ricerca: migliora la precisione e la pertinenza dei risultati di ricerca tra enormi quantità di dati SAP, incluse informazioni strutturate e non strutturate sparse su sistemi diversi. Ciò porta a un recupero più rapido ed efficace delle informazioni relative ai dati aziendali pertinenti.

  • Ottieni informazioni strategiche dai dati non strutturati: utilizza la ricerca vettoriale per estrarre informazioni preziose da dati non strutturati precedentemente inutilizzati all'interno dei sistemi SAP, come dati di prodotto, dati dei clienti, recensioni dei clienti, richieste di assistenza o documenti interni.

  • Migliora l'esperienza dei clienti: offri interazioni personalizzate e basate sul contesto con i clienti utilizzando la ricerca vettoriale per consigli sui prodotti, chatbot intelligenti e altre applicazioni rivolte ai clienti.

  • Semplifica i processi aziendali: ottimizza i processi interni utilizzando la ricerca vettoriale per trovare rapidamente informazioni pertinenti, identificare schemi e prendere decisioni basate sui dati.

  • Accelera l'innovazione: combina la ricerca vettoriale con altre funzionalità di Vertex AI, come l'IA generativa, per sviluppare soluzioni nuove e innovative che promuovano la crescita aziendale.

Come utilizzare Vertex AI Vector Search

L'associazione semantica mediante la ricerca vettoriale può essere semplificata nei seguenti passaggi:

  1. Genera rappresentazioni incorporate dei dati aziendali.
  2. Carica le rappresentazioni in un bucket Cloud Storage.
  3. Creare un indice vettoriale e associarlo al bucket Cloud Storage contenente gli incorporamenti. Puoi creare due tipi di indici, a seconda di come prevedi di aggiornarli con i dati più recenti:

    • Indice batch: un indice batch è utile quando vuoi aggiornare l'indice in un batch con i dati archiviati in un determinato periodo di tempo, ad esempio i dati elaborati settimanalmente o mensilmente.
    • Indice stream: un indice stream è utile quando vuoi che i dati dell'indice vengano aggiornati non appena vengono aggiunti nuovi dati al tuo datastore.
  4. Crea un endpoint indice ed esegui il deployment dell'indice di vettori nell'endpoint per eseguire query per ottenere consigli o risultati. Un endpoint dell'indice funziona come un'istanza di server che accetta richieste di query per l'indice.

  5. Esegui una query sull'endpoint dell'indice utilizzando un ID entità, una stringa di ricerca o un'evidenziazione.

L'SDK Vertex AI per ABAP copre tutti questi aspetti di Vertex AI Vector Search per consentirti di creare applicazioni di ricerca vettoriale basate su Vertex AI nel tuo ambiente ABAP.

Creare e gestire un indice di vettori

Questa sezione spiega come creare e gestire un indice vettoriale utilizzando l'SDK Vertex AI per ABAP.

Prima di iniziare

Assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:

Prepara gli incorporamenti

Devi avere già preparato gli embedding. Per informazioni su come generare embedding per i dati aziendali utilizzando l'SDK Vertex AI per ABAP, consulta Generare embedding.

Carica gli incorporamenti su Cloud Storage

Carica gli incorporamenti in un bucket Cloud Storage in modo da poterli associare a un indice di vettori. Anche se hai generato i file di incorporamento al di fuori di Google Cloud, puoi caricarli in un bucket Cloud Storage.

Per informazioni su come inviare gli embedding generati utilizzando l'SDK Vertex AI per ABAP a un bucket Cloud Storage, consulta Archiviare gli embedding in Cloud Storage.

Crea un'istanza della classe per l'indice di vettori

Per creare e gestire l'indice di vettori, puoi creare un'istanza della classe /GOOG/CL_VECTOR_INDEX. Puoi creare un'istanza della classe passando la chiave client configurata per l'autenticazione.

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

Sostituisci CLIENT_KEY con la chiave client configurata per l'autenticazione.

Creare un indice di vettori

Per creare un indice di vettori, puoi utilizzare il metodo CREATE_TREE_AH_INDEX della classe /GOOG/CL_VECTOR_INDEX. Crea un indice basato sull'algoritmo 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' ).

Sostituisci quanto segue:

  • INDEX_NAME: nome visualizzato dell'indice.
  • INDEX_DESCRIPTION: descrizione dell'indice.
  • LOCATION_ID: la regione Google Cloud in cui vuoi memorizzare l'indice. Per informazioni sulle località disponibili, consulta le località di Vertex AI.
  • CONTENT_URI: URI del bucket Cloud Storage contenente gli embedding, utilizzato per creare l'indice.
  • DIMENSIONS: numero di dimensioni dei vettori di input.
  • NEIGHBORS_COUNT: numero di vicini da trovare tramite una ricerca approssimativa prima che venga eseguito il riordinamento.
  • INDEX_UPDATE_METHOD: modalità di aggiornamento dell'indice: BATCH_UPDATE o STREAM_UPDATE.
  • DISTANCE_MEASURE_TYPE: determina l'algoritmo utilizzato per il calcolo della distanza tra i punti dati e il vettore di query. Per ulteriori informazioni, vedi Tipo di misura della distanza.
  • SHARD_SIZE: dimensioni di ogni shard. Quando un indice è di grandi dimensioni, viene suddiviso in base alle dimensioni dello shard specificate. Durante la pubblicazione, ogni shard viene pubblicato su un nodo separato e viene scalato in modo indipendente.
  • LEAF_NODE_EMBEDDING_COUNT: numero di incorporamenti su ciascun nodo foglia. Se non è impostato, il valore predefinito è 1000.
  • LEAF_NODE_TO_SEARCH: la percentuale predefinita di nodi foglia in cui è possibile eseguire ricerche con qualsiasi query. Deve essere compreso tra 1 e 100, inclusi. Se non è impostato, il valore predefinito è 10 (significa 10%).
  • ETAG: un valore ETag per eseguire aggiornamenti di lettura, modifica e scrittura coerenti.
  • KEY_FOR_ENCRYPTION: identificatore della risorsa Cloud KMS della chiave di crittografia gestita dal cliente.

Crea un endpoint di indice di vettori

Per creare un endpoint indice di vettori, puoi utilizzare il metodo CREATE_INDEX_ENDPOINT della classe /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' ).

Sostituisci quanto segue:

  • INDEX_ENDPOINT_NAME: nome visualizzato dell'endpoint dell'indice.
  • INDEX_ENDPOINT_DESCRIPTION: descrizione dell'endpoint indice.
  • LOCATION_ID: la regione Google Cloud in cui vuoi creare l'endpoint dell'indice. Per informazioni sulle località disponibili, consulta le località di Vertex AI.
  • ENABLE_PUBLIC_ENDPOINT: se l'indice di cui è stato eseguito il deployment è accessibile tramite un endpoint pubblico, imposta questo valore parametro su ABAP_TRUE.
  • ETAG: un valore ETag per eseguire aggiornamenti di lettura, modifica e scrittura coerenti.
  • KEY_FOR_ENCRYPTION: identificatore della risorsa Cloud KMS della chiave di crittografia gestita dal cliente.

Esegui il deployment di un indice di vettori in un endpoint indice

Per eseguire il deployment di un indice vettoriale in un endpoint indice, puoi utilizzare il metodo DEPLOY_INDEX della classe /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' ).

Sostituisci quanto segue:

  • DEPLOYMENT_ID: l'ID dell'implementazione dell'indice.
  • LOCATION_ID: la regione Google Cloud in cui vuoi eseguire il deployment dell'indice. Per informazioni sulle località disponibili, consulta le località di Vertex AI.
  • INDEX_ID: il nome della risorsa dell'indice.
  • INDEX_ENDPOINT_ID: nome della risorsa dell'endpoint dell'indice a cui eseguire il deployment.
  • MIN_REPLICA_COUNT: numero minimo di repliche della macchina per il modello di cui è stato eseguito il deployment.
  • MAX_REPLICA_COUNT: numero massimo di repliche della macchina per il modello di cui è stato eseguito il deployment.
  • ENABLE_ACCESS_LOGGING: per inviare i log di accesso dell'endpoint privato a Cloud Logging, imposta il valore di questo parametro su ABAP_TRUE.
  • DEPLOYMENT_GROUP: il nome del gruppo di deployment, ad esempio test, prod.

Aggiorna e ricostruisci un indice di vettori

Per ottenere i risultati di ricerca vettoriale più accurati per una soluzione di AI aziendale, devi anche mantenere aggiornato l'indice con i dati aziendali più recenti.

Aggiornare un indice batch

Per aggiornare un indice batch con le informazioni aggiornate presenti in un bucket Cloud Storage, puoi utilizzare il metodo PATCH_TREE_AH_INDEX della classe /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' ).

Sostituisci quanto segue:

  • INDEX_ID: il nome della risorsa dell'indice.
  • CONTENT_URI: URI del bucket Cloud Storage con gli incorporamenti per i dati aziendali più recenti.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • IS_COMPLETE_OVERWRITE: per sovrascrivere completamente l'indice con i dati nel bucket Cloud Storage specificato, imposta questo valore parametro su ABAP_TRUE.

Puoi utilizzare il seguente flusso di architettura di esempio per aggiornare un indice batch con i tuoi dati SAP:

  • Aggiorna il bucket Cloud Storage con gli embedding per i dati più recenti utilizzando la classe /GOOG/CL_STORAGE_V1 tramite un job in background SAP. Per i dati non SAP, questa operazione può essere eseguita anche tramite un processo esterno a SAP.
  • Attiva gli aggiornamenti dell'indice batch utilizzando il metodo PATCH_TREE_AH_INDEX della classe /GOOG/CL_VECTOR_INDEX tramite un job in background in SAP eseguito con una frequenza.

Aggiornare un indice di stream

Per eseguire l'upsert delle informazioni per un punto dati per un indice dello stream, puoi utilizzare il metodo UPSERT_DATAPOINTS della classe /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' ).

Sostituisci quanto segue:

  • INDEX_ID: il nome della risorsa dell'indice.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • ENTITY_ID: ID entità a cui eseguire l'operazione upsert.
  • EMBEDDINGS: incorporamenti da eseguire per il punto dati.

Per rimuovere le informazioni relative a un punto dati da un indice dello stream, puoi utilizzare il metodo REMOVE_DATAPOINTS della classe /GOOG/CL_VECTOR_INDEX.

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

Sostituisci quanto segue:

  • INDEX_ID: il nome della risorsa dell'indice.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • ENTITY_ID: l'ID entità da rimuovere.

Le operazioni di upsert e rimozione vengono eseguite in tempo reale per l'indice.

Puoi utilizzare il seguente flusso di architettura di esempio per aggiornare un indice spostamento con i tuoi dati SAP:

  • Identifica i segnaposto nella soluzione SAP aziendale, ad esempio BADI, uscite, miglioramenti e logica SAP personalizzata, che sono punti di variazione dei dati SAP.
  • Attiva l'operazione di upsert o rimozione per i dati SAP dall'indice dello stream utilizzando i metodi UPSERT_DATAPOINTS e REMOVE_DATAPOINTS della classe /GOOG/CL_VECTOR_INDEX dal segnaposto identificato.

Recupera lo stato delle operazioni dell'indice di vettori

Google Cloud esegue quanto segue come operazione a lunga esecuzione: creazione di un indice di vettori e di un endpoint indice, deployment dell'indice in un endpoint indice, o aggiornamento di un indice batch di vettori.

Per determinare l'ID operazione a lunga esecuzione, l'ID risorsa degli elementi Vertex AI e i messaggi di errore, l'SDK fornisce la classe /GOOG/CL_VECTORINDEX_RESPONSE.

La risposta acquisita dalla classe /GOOG/CL_VECTORINDEX_RESPONSE viene collegata alle richieste effettuate tramite i metodi della classe /GOOG/CL_VECTOR_INDEX, in modo da poter accedere direttamente alla risposta in un'unica istruzione senza dover richiedere variabili per memorizzare i risultati intermedi.

Recuperare l'ID operazione a lunga esecuzione

Per ottenere l'ID operazione a lunga esecuzione per ogni attività di ricerca di vettori, puoi utilizzare il metodo GET_LRO della classe /GOOG/CL_VECTORINDEX_RESPONSE. Dopo aver eseguito un'attività, puoi chiamare il metodo GET_LRO con la stessa istanza per ottenere l'ID operazione a lunga esecuzione corrispondente.

Il seguente esempio di codice illustra come ottenere l'ID operazione a lunga esecuzione per un'attività di aggiornamento dell'indice 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( ).

Sostituisci quanto segue:

  • INDEX_ID: il nome della risorsa dell'indice.
  • CONTENT_URI: URI del bucket Cloud Storage con gli incorporamenti per i dati aziendali più recenti.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • IS_COMPLETE_OVERWRITE: per sovrascrivere completamente l'indice con i dati nel bucket Cloud Storage specificato, imposta il valore di questo parametro su ABAP_TRUE.

Recuperare lo stato dell'operazione a lunga esecuzione

A ogni operazione a lunga esecuzione è associato uno stato. Per verificare se l'attività pianificata come operazione a lunga esecuzione è riuscita o meno, puoi controllare lo stato dell'operazione.

Per determinare o monitorare continuamente lo stato di un'operazione a lunga esecuzione per qualsiasi attività correlata a Vertex AI, puoi utilizzare il metodo GET_LRO_STATUS della classe /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

Sostituisci quanto segue:

  • CLIENY_KEY: chiave client per l'autenticazione.
  • LONG_RUNNING_OPERATION_ID: ID operazione a lunga esecuzione.
  • LOCATION_ID: la regione Google Cloud dell'indice.

Ottieni l'ID risorsa dell'elemento Vertex AI

Per determinare l'ID risorsa dell'indice creato, dell'endpoint indice creato, dell'indice di cui è attivata la patch, puoi utilizzare il metodo GET_ID della classe /GOOG/CL_VECTORINDEX_RESPONSE.

Dopo aver eseguito un'attività, puoi chiamare il metodo GET_ID con la stessa istanza per ottenere l'ID risorsa corrispondente.

Il seguente esempio di codice illustra come ottenere l'ID dell'indice in fase di creazione dopo aver chiamato il metodo CREATE_TREE_AH_INDEX della classe /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( ).

Sostituisci quanto segue:

  • INDEX_NAME: nome visualizzato dell'indice.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • CONTENT_URI: URI del bucket Cloud Storage contenente gli embedding, utilizzato per creare l'indice.
  • DIMENSIONS: numero di dimensioni dei vettori di input.
  • NEIGHBORS_COUNT: vicini da trovare tramite una ricerca approssimativa prima che venga eseguito il riordinamento.
  • LEAF_NODE_EMBEDDING_COUNT: numero di incorporamenti su ciascun nodo foglia. Se non è impostato, il valore predefinito è 1000.
  • LEAF_NODE_TO_SEARCH: la percentuale predefinita di nodi foglia in cui è possibile eseguire ricerche con qualsiasi query. Deve essere compreso tra 1 e 100, inclusi. Se non è impostato, il valore predefinito è 10 (significa 10%).

Ottenere il codice e il messaggio di errore

Potrebbero verificarsi errori durante l'attivazione delle attività di indicizzazione di vettori tramite l'SDK Vertex AI per ABAP.

Per ottenere rispettivamente il codice di errore e il messaggio di errore (se presenti) dopo l'attivazione di un'attività, puoi utilizzare i metodi GET_ERROR_CODE e GET_ERROR_MESSAGE della classe /GOOG/CL_VECTORINDEX_RESPONSE.

Dopo aver eseguito un'attività, puoi chiamare i metodi GET_ERROR_CODE e GET_ERROR_MESSAGE con la stessa istanza per ottenere il codice o il messaggio di errore corrispondente.

Il seguente esempio di codice mostra come visualizzare il codice e il messaggio di errore se la creazione di un indice non va a buon fine:

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.

Sostituisci quanto segue:

  • INDEX_NAME: nome visualizzato dell'indice.
  • LOCATION_ID: la regione Google Cloud dell'indice.
  • CONTENT_URI: URI del bucket Cloud Storage contenente gli embedding, utilizzato per creare l'indice.
  • DIMENSIONS: numero di dimensioni dei vettori di input.
  • NEIGHBORS_COUNT: vicini da trovare tramite una ricerca approssimativa prima che venga eseguito il riordinamento.
  • LEAF_NODE_EMBEDDING_COUNT: numero di incorporamenti su ciascun nodo foglia. Se non è impostato, il valore predefinito è 1000.
  • LEAF_NODE_TO_SEARCH: la percentuale predefinita di nodi foglia in cui è possibile eseguire ricerche con qualsiasi query. Deve essere compreso tra 1 e 100, inclusi. Se non è impostato, il valore predefinito è 10 (significa 10%).

Cerca i vicini più prossimi

Questa sezione spiega come cercare i vicini più prossimi utilizzando l'SDK Vertex AI per ABAP.

Prima di iniziare

Assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:

Creare una destinazione RFC

Devi creare una destinazione RFC per l'endpoint dell'indice a cui hai eseguito il deployment dell'indice con i dati aziendali sotto forma di file di incorporamento.

  1. Recupera il nome host per l'endpoint dell'indice:

    1. In SAP GUI, esegui il codice transazione /GOOG/SDK_IMG.

      In alternativa, esegui il codice transazione SPRO e poi fai clic su Immagine di riferimento SAP.

    2. Fai clic su ABAP SDK for Google Cloud > Utilità > SDK Vertex AI: ottieni informazioni sulle RFC per Feature Store e Vector Search.
    3. Seleziona Ottieni i dettagli di Ricerca di vettori.
    4. Seleziona una delle seguenti opzioni:

      • Tasto per la ricerca
      • ID endpoint dell'indice vettoriale
    5. Se hai selezionato l'opzione Chiave di ricerca, inserisci la chiave di ricerca, configurata nei parametri di ricerca di vektori.

    6. Se hai selezionato l'opzione ID endpoint di indice Vector Search, inserisci i seguenti parametri:

      • Nome chiave Google Cloud: la chiave client per l'autenticazione su Google Cloud.
      • Località: la regione in cui si trova l'endpoint dell'indice.
      • ID endpoint indice: il nome dell'endpoint indice.
    7. Fai clic su Esegui per visualizzare i dettagli. Prendi nota dell'endpoint accanto all'etichetta Host.

  2. Crea una destinazione RFC per l'endpoint indice:

    1. In SAP GUI, esegui il codice transazione SM59.

    2. Crea una nuova destinazione RFC. Per la destinazione RFC che hai creato, assicurati che il Tipo di connessione sia impostato come segue: G - HTTP connection to external server.

    3. Vai alla scheda Impostazioni tecniche e inserisci i seguenti dettagli:

      • Host di destinazione: fornisci il nome host per l'endpoint indice.

      • N.servizio: Inserisci 443. Questo numero di porta viene utilizzato per la comunicazione sicura.

    4. Vai alla scheda Accesso e sicurezza e assicurati che il campo Certificato SSL sia impostato sull'opzione Client SSL predefinito (standard).

    5. Salva le modifiche.

  3. Configura la tabella di mappatura dei servizi per l'API Vertex AI:

    1. In SAP GUI, esegui il codice transazione /GOOG/SDK_IMG.

      In alternativa, esegui il codice transazione SPRO e poi fai clic su Immagine di riferimento SAP.

    2. Fai clic su ABAP SDK for Google Cloud > Impostazioni di base > Configura mappatura servizio.

    3. Fai clic su Nuove voci.

    4. Specifica la destinazione RFC per l'API Vertex AI:

      Nome Nome servizio Destinazione RFC
      Chiave client per l'autenticazione. apiinvoker:v1 Nome della destinazione RFC.
    5. Salva la nuova voce.

Per richiamare la ricerca vettoriale, puoi creare un'istanza della classe /GOOG/CL_VECTOR_SEARCH. Puoi creare un'istanza della classe passando la chiave di ricerca, che è configurata nei parametri di ricerca di vettori.

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

Sostituisci SEARCH_KEY con la chiave di ricerca, configurata nei parametri di ricerca di vektori.

Cercare utilizzando un ID entità

Per eseguire una query su un indice di vettori rispetto a un ID entità specifico, puoi utilizzare il metodo FIND_NEIGHBORS_BY_ENTITY_ID della classe /GOOG/CL_VECTOR_SEARCH. Gli ID entità corrispondono ai punti dati archiviati nell'indice vettoriale.

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

Sostituisci quanto segue:

  • ENTITY_ID: l'ID entità da cercare.
  • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
  • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.

Eseguire una ricerca utilizzando una stringa di ricerca

Per eseguire una query su un indice di vettori rispetto a una stringa di ricerca, puoi utilizzare il metodo FIND_NEIGHBORS_BY_STRING della classe /GOOG/CL_VECTOR_SEARCH.

L'SDK converte prima la stringa di ricerca in embedding, quindi recupera i vicini più prossimi per la query.

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

Sostituisci quanto segue:

  • SEARCH_STRING: inserisci la stringa di ricerca.
  • MODEL_KEY: la chiave del modello per la generazione di embedding, configurata nei parametri di generazione del modello.
  • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
  • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.

Eseguire una ricerca utilizzando un'evidenziazione

Per eseguire query su un indice di vettori rispetto agli embedding, puoi utilizzare il metodo FIND_NEIGHBORS_BY_EMBEDDING della classe /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' ).

Sostituisci quanto segue:

  • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
  • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.
  • EMBEDDINGS: rappresentazioni distribuite di input.

Ottenere la risposta alla ricerca

Per ricevere le risposte elaborate dal modello e presentarle in modo significativo, l'SDK fornisce la classe ABAP /GOOG/CL_VECTORSEARCH_RESPONSE.

La risposta acquisita dalla classe /GOOG/CL_VECTORSEARCH_RESPONSE viene collegata alle richieste effettuate tramite i metodi della classe /GOOG/CL_VECTOR_SEARCH, in modo da poter accedere direttamente alla risposta in un'unica istruzione senza dover utilizzare variabili per memorizzare i risultati intermedi.

Ottenere i vicini più prossimi per la query di ricerca

Per determinare i vicini più prossimi trovati per la query di ricerca eseguita rispetto a un punto dati, una stringa di ricerca o incorporamenti, puoi utilizzare i metodi GET_NEAREST_NEIGHBOR e GET_NEAREST_NEIGHBORS della classe /GOOG/CL_VECTORSEARCH_RESPONSE.

Questi metodi possono essere chiamati in una catena dopo l'esecuzione della query di ricerca utilizzando i metodi FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING e FIND_NEIGHBORS_BY_ENTITY_ID della classe /GOOG/CL_VECTOR_SEARCH.

  • Per ottenere il vicino più prossimo al punto dati, alla stringa o agli incorporamenti cercati, chiamate il metodo GET_NEAREST_NEIGHBOR. La risposta di questo metodo elenca l'ID del punto dati più vicino, la sua distanza dalla query di ricerca e il vettore di funzionalità associato nell'indice.

    Il seguente esempio di codice illustra come ottenere il vicino più prossimo per una stringa di ricerca:

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

    Sostituisci quanto segue:

    • SEARCH_STRING: inserisci la stringa di ricerca.
    • MODEL_KEY: la chiave del modello per la generazione di embedding, configurata nei parametri di generazione del modello.
    • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
    • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.
  • Per ottenere l'insieme di vicini più prossimi al punto dati, alla stringa o agli incorporamenti cercati, chiama il metodo GET_NEAREST_NEIGHBORS. La risposta di questo metodo è una tabella dei punti dati più vicini, che elenca gli ID dei punti dati, la loro distanza dalla query di ricerca e il vettore di caratteristiche associato nell'indice.

    Il seguente esempio di codice mostra come ottenere i vicini più prossimi per una stringa di ricerca:

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

    Sostituisci quanto segue:

    • SEARCH_STRING: inserisci la stringa di ricerca.
    • MODEL_KEY: la chiave del modello per la generazione di embedding, configurata nei parametri di generazione del modello.
    • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
    • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.

Ottenere la distanza del vicino recuperato

Per determinare la distanza di una risposta recuperata dalla query cercata, puoi utilizzare il metodo GET_DATAPOINT_DISTANCE della classe /GOOG/CL_VECTORSEARCH_RESPONSE.

La distanza nella risposta alla ricerca rappresenta una misura della dissimmetria tra la query (stringa, embedding o ID entità) e un vettore di risultati recuperato. Il significato specifico della distanza dipende dalla "Misura della distanza" utilizzata per creare un indice.

Il valore di distanza ti aiuta a capire quanto è pertinente ogni risultato di ricerca per la tua query. I risultati con distanze più brevi sono generalmente considerati più simili o pertinenti, mentre quelli con distanze più elevate sono meno simili o pertinenti.

Il seguente esempio di codice illustra come ottenere la distanza del vicino più prossimo per una stringa di ricerca:

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

Sostituisci quanto segue:

  • SEARCH_STRING: inserisci la stringa di ricerca.
  • MODEL_KEY: la chiave del modello per la generazione di embedding, configurata nei parametri di generazione del modello.
  • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
  • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.

Ottieni il vettore degli embedding del vicino recuperato

Per determinare il vettore di embedding della risposta recuperata dalla query cercata, puoi utilizzare il metodo GET_DATAPOINT_FEATURE_VECTOR della classe /GOOG/CL_VECTORSEARCH_RESPONSE.

Per ottenere un vettore di embedding, il parametro IV_RETURN_FULL_DATAPOINT dei metodi FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING e FIND_NEIGHBORS_BY_ENTITY_ID deve essere impostato su ABAP_TRUE.

Il seguente esempio di codice illustra come ottenere il vettore di funzionalità del vicino più vicino per una stringa di ricerca:

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

Sostituisci quanto segue:

  • SEARCH_STRING: inserisci la stringa di ricerca.
  • MODEL_KEY: la chiave del modello per la generazione di embedding, configurata nei parametri di generazione del modello.
  • NEIGHBOR_COUNT: numero di vicini più vicini da recuperare per la query.
  • RETURN_FULL_DATAPOINT: per restituire le rappresentazioni vettoriali per i punti dati recuperati, imposta il valore di questo parametro su ABAP_TRUE.

Passaggi successivi