Einbettungen generieren

In diesem Dokument wird beschrieben, wie Sie die Einbettungsmodelle aufrufen, um mit dem Vertex AI SDK für ABAP Text- und multimodale Einbettungen zu generieren.

Einbettungen sind im Wesentlichen numerische Codes, die Text, Bilder oder Videos so darstellen, dass ihre Beziehung zueinander erfasst wird. Anwendungen verwenden diese Codes, um die Sprache zu verstehen und zu generieren. Dadurch werden selbst die komplexesten Bedeutungen und Beziehungen in Ihren spezifischen Inhalten erkannt. Dabei werden Text, Bilder und Videos in Listen mit Zahlen umgewandelt, die als Vektoren bezeichnet werden. Diese sollen die Bedeutung der ursprünglichen Inhalte effektiv erfassen.

Typische Anwendungsfälle für Texteinbettungen sind:

  • Semantische Suche: Suchtext, geordnet nach der semantischen Ähnlichkeit.
  • Klassifizierung: Gibt die Klasse von Elementen zurück, deren Textattribute dem angegebenen Text ähneln.
  • Clustering: Clusterelemente, deren Textattribute dem angegebenen Text ähneln.
  • Ausreißererkennung: Gibt Elemente zurück, bei denen Textattribute am wenigsten mit dem angegebenen Text zusammenhängen.
  • Unterhaltungsschnittstelle: Gruppiert Gruppen von Sätzen, die zu ähnlichen Antworten führen können, z. B. in einem Einbettungsbereich auf Unterhaltungsebene.

Mit dem Vertex AI SDK für ABAP können Sie mithilfe der Klassen und Methoden, die im SDK enthalten sind, Einbettungen aus der ABAP-Anwendungslogik generieren. Das SDK bietet auch vorkonfigurierte Methoden, um die generierten Einbettungen in die folgenden Datenspeicher zu übertragen:

  • Cloud Storage: Sie können die Einbettungen aus einem Cloud Storage-Bucket zum Erstellen von Vektorindexen und Ausführen der Vektorsuche verwenden.
  • BigQuery: Sie können die Einbettungen aus einem BigQuery-Dataset als Vektordatenbank für Ihre Unternehmensdaten verwenden.

Sie können die Einbettungen auch in einem Pub/Sub-Thema veröffentlichen, das an ein BigQuery-Dataset oder ein Abonnentensystem weitergeleitet werden kann.

Hinweise

Bevor Sie das Vertex AI SDK for ABAP mit den Einbettungsmodellen verwenden, müssen Sie oder Ihre Administratoren die folgenden Voraussetzungen erfüllen:

Einbettungen generieren

In diesem Abschnitt wird beschrieben, wie Sie mit dem Vertex AI SDK für ABAP Einbettungen generieren.

Klasse für multimodale Einbettungen instanziieren

Wenn Sie die multimodalen Einbettungsmodelle von Vertex AI mithilfe von Text- oder multimodalen Eingaben aufrufen möchten, können Sie die Klasse /GOOG/CL_EMBEDDINGS_MODEL verwenden. Sie instanziieren die Klasse, indem Sie den Modellschlüssel übergeben, der in den Parametern zur Modellgenerierung konfiguriert ist.

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

Ersetzen Sie MODEL_KEY durch den Modellschlüsselnamen, der in den Modellgenerierungsparametern konfiguriert ist.

Texteinbettungen generieren

Zum Generieren von Einbettungen für ein Text-Snippet können Sie die Methode GEN_TEXT_EMBEDDINGS der Klasse /GOOG/CL_EMBEDDINGS_MODEL verwenden. Optional können Sie auch eine Dimension für die Ausgabe-Einbettungen angeben.

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

Ersetzen Sie Folgendes:

  • DIMENSION: Optional. Die Dimensionalität der Ausgabeeinbettungen. Die Standarddimension ist 768.
  • INPUT_TEXT: Text, für den Einbettungen generiert werden sollen.

Sie können auch Einbettungen für ein Snippet aus Text generieren, indem Sie eine vorkonfigurierte Vorlage /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE verwenden, die mit dem SDK geliefert wird. Mit dieser Vorlage können Sie unternehmensspezifische schematische Informationen zusammen mit den Einbettungen in der generierten Einbettungsdatei erfassen.

Wenn Sie anhand der Vorlage /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE Einbettungen für einen Textausschnitt generieren möchten, können Sie die Methode GEN_TEXT_EMBEDDINGS_BY_STRUCT verwenden.

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

Ersetzen Sie Folgendes:

  • ENTITY_ID: Entitäts-ID für den Einbettungsdatensatz.
  • INPUT_TEXT: Text, für den Einbettungen generiert werden sollen.
  • SOURCE_MODULE: Quellmodul des Einbettungsinhalts.
  • DIMENSION: Optional. Die Dimensionalität der Ausgabeeinbettungen. Die Standarddimension ist 768.

Bildeinbettungen generieren

Mit der Methode GEN_IMAGE_EMBEDDINGS der Klasse /GOOG/CL_EMBEDDINGS_MODEL können Sie Einbettungen für ein Eingabebild generieren. Sie können entweder die Rohdaten eines Bilds oder den Cloud Storage-URI einer Bilddatei übergeben. Optional können Sie auch einen kontextbezogenen Text für das Bild und eine Dimension für die Ausgabe-Einbettungen angeben.

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

Ersetzen Sie Folgendes:

  • IMAGE_URI: Der Cloud Storage-URI des Zielbildes, für das Einbettungen abgerufen werden sollen.
  • CONTEXTUAL_TEXT: Optional. Zusätzlicher Kontext und zusätzliche Bedeutung für den Inhalt eines Bildes im Einbettungsmodell.

Sie können auch Einbettungen für Bilder mithilfe einer vorkonfigurierten Vorlage /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE generieren, die mit dem SDK geliefert wird. Mit dieser Vorlage können Sie unternehmensspezifische schematische Informationen zusammen mit den Einbettungen in der generierten Einbettungsdatei erfassen.

Wenn Sie anhand der Vorlage /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE Einbettungen für ein Bild generieren möchten, können Sie die Methode GEN_IMAGE_EMBEDDINGS_BY_STRUCT verwenden.

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

Ersetzen Sie Folgendes:

  • IMAGE_URI: Der Cloud Storage-URI des Zielbildes, für das Einbettungen abgerufen werden sollen.
  • ENTITY_ID: Entitäts-ID für den Einbettungsdatensatz.
  • INPUT_TEXT: Text, für den Einbettungen generiert werden sollen.
  • SOURCE_MODULE: Quellmodul des Einbettungsinhalts.

Verwenden Sie folgenden Code, um Einbettungen für einen kontextbezogenen Text abzurufen:

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

Diese Option ist nur für das Einbetten eines einzelnen Bildes verfügbar.

Videoeinbettungen generieren

Mit der Methode GET_VIDEO_EMBEDDINGS der Klasse /GOOG/CL_EMBEDDINGS_MODEL können Sie Einbettungen für ein Eingabevideo generieren. Sie können den Cloud Storage-URI einer Videodatei zusammen mit einem optionalen Start- und Endversatz in Sekunden übergeben. Optional können Sie auch einen kontextbezogenen Text für das Video und eine Dimension für die Ausgabe-Einbettungen angeben.

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: Der Cloud Storage-URI des Zielvideos, für das Einbettungen abgerufen werden sollen.
  • CONTEXTUAL_TEXT: Optional. Zusätzlicher Kontext und Bedeutung für den Inhalt eines Videos für das Einbettungsmodell.
  • DIMENSION: Optional. Die Dimensionalität der Ausgabeeinbettungen. Verfügbare Dimensionen sind 128, 256, 512 und 1408 (Standard).

Die Methode GET_VECTOR gibt die Einbettungen nur für das erste Segment des Videos zurück.

Verwenden Sie den folgenden Code, um das Einbetten für kontextbezogenen Text abzurufen:

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

Diese Option ist nur für das Einbetten einzelner Videos verfügbar.

Alle generierten Einbettungen erfassen

Um alle generierten Einbettungen in einer internen Tabelle vom Typ /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE zu erfassen, können Sie die Methode COLLECT der Klasse /GOOG/CL_EMBEDDINGS_MODEL in Kombination mit den Methoden GEN_TEXT_EMBEDDINGS_BY_STRUCT und GEN_IMAGE_EMBEDDINGS_BY_STRUCT verwenden.

Das ist nützlich, wenn Sie Einbettungen für ein Array von Elementen (text/image) generieren möchten und die Einbettungen in einer Schleifeniteration generieren und nach der Iteration alle Einbettungen gleichzeitig in einer internen Tabelle abrufen möchten. Mit der Methode GET_VECTOR_BY_TABLE können Sie die endgültige interne Tabelle der Einbettungen abrufen.

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

Einbettungen an einen Datenspeicher senden

Sie können die generierten Einbettungen mit der mit dem SDK gelieferten Vorlage an einen Cloud Storage-Bucket oder ein BigQuery-Dataset senden.

Einbettungen in Cloud Storage speichern

Um die generierten Einbettungen an einen Cloud Storage-Bucket zu senden, können Sie die Methode SEND_STRUCT_TO_GCS der Klasse /GOOG/CL_EMBEDDINGS_MODEL verwenden.

Vor dem Senden der Einbettungen an einen Cloud Storage benötigen Sie einen Cloud Storage-Bucket, an den Sie die Einbettungen senden möchten.

Einzelne Einbettungen an einen Cloud Storage-Bucket senden

Im folgenden Codebeispiel wird gezeigt, wie Sie einzelne Bildeinbettungen an einen Cloud Storage-Bucket senden:

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

Ersetzen Sie Folgendes:

  • IMAGE_URI: Der Cloud Storage-URI des Zielbildes, für das Einbettungen abgerufen werden sollen.
  • CLIENT_KEY: Clientschlüssel zum Aufrufen der Cloud Storage API.
  • BUCKET_NAME: Name des Cloud Storage-Ziel-Buckets.
  • FILE_NAME: Dateiname der Einbettungen.

Erfasste Einbettungen an einen Cloud Storage-Bucket senden

Im folgenden Codebeispiel wird gezeigt, wie erfasste Einbettungen an einen Cloud Storage-Bucket gesendet werden:

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

Ersetzen Sie Folgendes:

  • CLIENT_KEY: Clientschlüssel zum Aufrufen der Cloud Storage API.
  • BUCKET_NAME: Name des Cloud Storage-Ziel-Buckets.
  • FILE_NAME: Dateiname der Einbettungen.

Einbettungen in BigQuery speichern

Wenn Sie die generierten Einbettungen an ein BigQuery-Dataset senden möchten, können Sie die SEND_STRUCT_TO_BQ-Methode des /GOOG/CL_EMBEDDINGS_MODEL verwenden.

Bevor Sie die Einbettungen an BigQuery senden, benötigen Sie ein Dataset und eine Tabelle, an die Sie die Einbettungen senden möchten.

Einzelne Einbettungen an ein BigQuery-Dataset senden

Im folgenden Codebeispiel wird gezeigt, wie einzelne Bildeinbettungen an ein BigQuery-Dataset gesendet werden:

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

Ersetzen Sie Folgendes:

  • CLIENT_KEY: Clientschlüssel zum Aufrufen der BigQuery API.
  • DATASET_ID: BigQuery-Dataset-ID.
  • TABLE_ID: BigQuery-Tabellen-ID.

Erfasste Einbettungen an ein BigQuery-Dataset senden

Im folgenden Codebeispiel wird gezeigt, wie Sie erfasste Einbettungen an ein BigQuery-Dataset senden:

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

Ersetzen Sie Folgendes:

  • CLIENT_KEY: Clientschlüssel zum Aufrufen der BigQuery API.
  • DATASET_ID: BigQuery-Dataset-ID.
  • TABLE_ID: BigQuery-Tabellen-ID.

Einbettungen in einem Pub/Sub-Thema veröffentlichen

Zum Veröffentlichen der generierten Einbettungen in einem Pub/Sub-Thema können Sie die Methode SEND_STRUCT_TO_PUBSUB der Klasse /GOOG/CL_EMBEDDINGS_MODEL verwenden. Dies kann nützlich sein, wenn Sie eigene benutzerdefinierte Pipelines erstellen müssen, um Einbettungen zu speichern und nachfolgende Geschäftsprozesse zu erstellen.

Bevor Sie die Einbettungen an ein Pub/Sub-Thema senden, benötigen Sie ein Pub/Sub-Thema, an das Sie die Einbettungen senden möchten.

Einzelne Einbettungen in einem Pub/Sub-Thema veröffentlichen

Das folgende Codebeispiel zeigt, wie Sie einzelne Bildeinbettungen in einem Pub/Sub-Thema veröffentlichen:

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

Ersetzen Sie Folgendes:

  • CLIENT_KEY: Clientschlüssel für das Aufrufen der Pub/Sub API.
  • TOPIC_ID: Pub/Sub-Themen-ID.

Erfasste Einbettungen in einem Pub/Sub-Thema veröffentlichen

Das folgende Codebeispiel zeigt, wie Sie erfasste Einbettungen in einem Pub/Sub-Thema veröffentlichen:

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

Ersetzen Sie Folgendes:

  • CLIENT_KEY: Clientschlüssel für das Aufrufen der Pub/Sub API.
  • TOPIC_ID: Pub/Sub-Themen-ID.

Nächste Schritte