Genera incorporamenti

Questo documento descrive come richiamare i modelli di embedding per generare embedding di testo e multimodali utilizzando l'SDK Vertex AI per ABAP.

Incorporamenti sono essenzialmente codici numerici che rappresentano testo, immagini o video in modo da capire in che modo sono correlati. Le applicazioni utilizzano questi codici per comprendere e generare il linguaggio, riconoscendo anche i significati e le relazioni più complessi all'interno dei tuoi contenuti specifici. Il processo funziona trasformando testi, immagini e video in elenchi di numeri, chiamati vettori, che vengono progettati per catturare in modo efficace il significato dei contenuti originali.

Ecco alcuni casi d'uso comuni per gli embedding di testo:

  • Ricerca semantica: il testo di ricerca viene classificato in base alla somiglianza semantica.
  • Classificazione: restituisce la classe degli elementi i cui attributi di testo sono simili al testo specificato.
  • Cluster: elementi del cluster i cui attributi di testo sono simili al testo specificato.
  • Rilevamento di valori anomali: restituisce gli elementi in cui gli attributi di testo sono meno correlati al testo specificato.
  • Interfaccia conversazionale: raggruppa gruppi di frasi che possono portare a risposte simili, ad esempio in uno spazio di incorporamento a livello di conversazione.

Con l'SDK Vertex AI per ABAP, puoi generare incorporamenti dalla logica dell'applicazione ABAP utilizzando le classi e i metodi che forniti con l'SDK. L'SDK fornisce anche metodi pronti all'uso per inviare gli embedding generati ai seguenti datastore:

  • Cloud Storage: puoi utilizzare gli incorporamenti da un bucket per creare indici vettoriali ed eseguire la ricerca vettoriale.
  • BigQuery: puoi utilizzare gli embedding di un set di dati BigQuery come database vettoriale per i dati aziendali.

Puoi anche pubblicare gli embedding in un argomento Pub/Sub che può essere indirizzato a un set di dati BigQuery o a un sistema di abbonati.

Prima di iniziare

Prima di utilizzare l'SDK Vertex AI per ABAP con l'incorporamento assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:

Genera embedding

Questa sezione spiega come generare embedding utilizzando l'SDK Vertex AI per ABAP.

Crea un'istanza della classe di embedding multimodali

Per richiamare i modelli di embedding multimodali di Vertex AI utilizzando input di testo o multimodali, puoi utilizzare la classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi creare un'istanza della classe passando la chiave del modello configurata nei parametri di generazione del modello.

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

Sostituisci MODEL_KEY con il nome della chiave del modello, configurata nei parametri di generazione del modello.

Genera incorporamenti di testo

Per generare incorporamenti per uno snippet di testo, puoi utilizzare il metodo GEN_TEXT_EMBEDDINGS della classe /GOOG/CL_EMBEDDINGS_MODEL. Se vuoi, puoi anche specificare una dimensione per gli embedding di output.

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

Sostituisci quanto segue:

  • DIMENSION: facoltativo. La dimensionalità degli incorporamenti di output. La dimensione predefinita è 768.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.

Puoi anche generare incorporamenti per uno snippet di testo utilizzando una modello /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, fornito con l'SDK. Questo modello ti consente di acquisire informazioni schematiche specifiche per l'azienda nel file degli incorporamenti generato.

Per generare incorporamenti per uno snippet di testo, in base al /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE modello, puoi utilizzare il metodo 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( ).

Sostituisci quanto segue:

  • ENTITY_ID: ID entità per il record degli embedding.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.
  • SOURCE_MODULE: modulo di origine dei contenuti degli incorporamenti.
  • DIMENSION: facoltativo. La dimensionalità degli incorporamenti di output. La dimensione predefinita è 768.

Genera embedding di immagini

Per generare incorporamenti per un'immagine di input, puoi utilizzare GEN_IMAGE_EMBEDDINGS della classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi passare i dati non elaborati di un'immagine o l'URI Cloud Storage di un file immagine. Se vuoi, puoi anche specificare un testo contestuale per l'immagine e una dimensione per gli incorporamenti in uscita.

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

Sostituisci quanto segue:

  • IMAGE_URI: URI Cloud Storage dell'immagine di destinazione per cui ottenere gli incorporamenti.
  • CONTEXTUAL_TEXT: facoltativo. Contesto e significato aggiuntivi ai contenuti di un'immagine per il modello di embedding.

Puoi anche generare incorporamenti per le immagini utilizzando una modello /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, fornito con l'SDK. Questo modello ti consente di acquisire informazioni schematiche specifiche per l'azienda nel file degli incorporamenti generato.

Per generare embedding per un'immagine in base al /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE modello, puoi utilizzare il metodo 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( ).

Sostituisci quanto segue:

  • IMAGE_URI: URI Cloud Storage dell'immagine di destinazione per cui ottenere gli incorporamenti.
  • ENTITY_ID: ID entità per il record degli embedding.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.
  • SOURCE_MODULE: modulo di origine dei contenuti degli incorporamenti.

Per recuperare gli embedding per un testo contestuale, utilizza il seguente codice:

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

Questa opzione è disponibile solo per la creazione di singoli incorporamenti di immagini.

Genera embedding video

Per generare embedding per un video di input, puoi utilizzare il GET_VIDEO_EMBEDDINGS metodo della classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi passare l'URI di Cloud Storage di un file video insieme all'ora di offset di inizio e di fine facoltativa in secondi. Se vuoi, puoi anche specificare un testo contestuale per il video e una dimensione per gli embedding di output.

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: URI Cloud Storage del video di destinazione per cui ottenere gli incorporamenti.
  • CONTEXTUAL_TEXT: facoltativo. Contesto e significato aggiuntivi ai contenuti di un video per il modello di embedding.
  • DIMENSION: facoltativo. La dimensionalità degli embedding di output. Le dimensioni disponibili sono: 128, 256, 512 e 1408 (valore predefinito).

Il metodo GET_VECTOR restituisce gli elementi incorporati solo per il primo segmento del video.

Per recuperare l'embedding per il testo contestuale, utilizza il seguente codice:

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

Questa opzione è disponibile solo per la creazione di singoli video incorporati.

Raccogli tutti gli incorporamenti generati

a raccogliere tutti gli incorporamenti generati in una tabella interna di tipo. /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE, puoi usare COLLECT della classe /GOOG/CL_EMBEDDINGS_MODEL in combinazione con i metodi GEN_TEXT_EMBEDDINGS_BY_STRUCT e GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

Questa operazione è utile quando devi generare embedding per un array di elementi (text/image) e vuoi generare embedding in un'iterazione del ciclo e ottenere tutti gli embedding contemporaneamente in una tabella interna dopo l'iterazione. Il metodo GET_VECTOR_BY_TABLE può essere utilizzato per ottenere la tabella interna finale degli embedding.

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

Invia incorporamenti a un datastore

Puoi inviare gli incorporamenti generati a un bucket Cloud Storage o un set di dati BigQuery utilizzando il modello viene fornito con l'SDK.

Memorizzare le incorporazioni in Cloud Storage

Per inviare gli incorporamenti generati a un bucket Cloud Storage, puoi utilizzare il metodo SEND_STRUCT_TO_GCS della classe /GOOG/CL_EMBEDDINGS_MODEL.

Prima di inviare gli incorporamenti a Cloud Storage, assicurati di avere un bucket Cloud Storage a cui inviarli.

Invia singoli incorporamenti a un bucket Cloud Storage

Il seguente esempio di codice mostra come inviare singoli embedding di immagini in un 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' ).

Sostituisci quanto segue:

  • IMAGE_URI: l'URI Cloud Storage dell'immagine di destinazione per cui ottenere gli embedding.
  • CLIENT_KEY: chiave client per l'invocazione dell'API Cloud Storage.
  • BUCKET_NAME: nome del bucket Cloud Storage di destinazione.
  • FILE_NAME: nome file degli incorporamenti.

Invia gli embedding raccolti a un bucket Cloud Storage

Il seguente esempio di codice mostra come inviare gli embedding raccolti in un 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Cloud Storage.
  • BUCKET_NAME: nome del bucket Cloud Storage di destinazione.
  • FILE_NAME: nome del file degli incorporamenti.

Memorizza gli embedding in BigQuery

Per inviare gli incorporamenti generati a un set di dati BigQuery, puoi usare il metodo SEND_STRUCT_TO_BQ di /GOOG/CL_EMBEDDINGS_MODEL.

Prima di inviare gli incorporamenti a un BigQuery, assicurati di avere un dataset BigQuery e una tabella a cui vuoi inviare gli incorporamenti.

Invia singoli embedding a un set di dati BigQuery

Il seguente esempio di codice illustra come inviare singoli incorporamenti di immagini in un set di dati 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per richiamare l'API BigQuery.
  • DATASET_ID: ID set di dati BigQuery.
  • TABLE_ID: ID tabella BigQuery.

Invia gli incorporamenti raccolti a un set di dati BigQuery

Il seguente esempio di codice illustra come inviare gli embedding raccolti a un set di dati 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per richiamare l'API BigQuery.
  • DATASET_ID: ID set di dati BigQuery.
  • TABLE_ID: ID tabella BigQuery.

Pubblicare gli embedding in un argomento Pub/Sub

Per pubblicare gli incorporamenti generati in un argomento Pub/Sub, puoi utilizzare il metodo SEND_STRUCT_TO_PUBSUB della classe /GOOG/CL_EMBEDDINGS_MODEL. Può essere utile per scenari in cui devi creare pipeline personalizzate per l'archiviazione degli incorporamenti e la creazione di processi aziendali aggiuntivi.

Prima di inviare gli incorporamenti a un argomento Pub/Sub, assicurati di avere un argomento Pub/Sub a cui vuoi inviare gli incorporamenti.

Pubblicare singoli embedding in un argomento Pub/Sub

Il seguente esempio di codice illustra come pubblicare singoli incorporamenti di immagini in un argomento 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Pub/Sub.
  • TOPIC_ID: ID argomento Pub/Sub.

Pubblica gli incorporamenti raccolti in un argomento Pub/Sub

Il seguente esempio di codice illustra come pubblicare gli embedding raccolti in un argomento 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Pub/Sub.
  • TOPIC_ID: ID argomento Pub/Sub.

Passaggi successivi