Einbettungen in BigQuery generieren und verwalten

Mit dem BigQuery AI and ML SDK for ABAP können Sie in BigQuery embeddings für Ihre Unternehmensdaten generieren und verwalten.

BigQuery kann als kostengünstige Vektordatenbank dienen, da Sie mithilfe der Vektorsuchfunktionen Vektordarstellungen von Daten direkt im Data Warehouse speichern und abfragen können. Dadurch wird möglicherweise die Notwendigkeit einer separaten Vektordatenbankinfrastruktur reduziert. Mit der BigQuery-Funktion ML.GENERATE_EMBEDDING können Sie Einbettungen für Ihre in BigQuery-Datasets gespeicherten Unternehmensdaten generieren.

Wenn Sie auf Einbettungsmodelle in Vertex AI zugreifen möchten, erstellen Sie in BigQuery ML ein Remote-Modell, das den Endpunkt des Vertex AI-Modells darstellt. Nachdem Sie ein Remote-Modell für das Vertex AI-Modell erstellt haben, das Sie verwenden möchten, können Sie die Funktionalität dieses Modells nutzen. Dazu führen Sie die BigQuery ML-Funktion für das Remote-Modell aus.

Mit dem BigQuery AI & ML SDK for ABAP können Sie Einbettungsmodelle für Folgendes verwenden:

  • Einbettungen für Textdaten generieren und speichern
  • Einbettungen für multimodale Daten generieren und speichern
  • BigQuery-Vektordatenbank mit den neuesten Unternehmensdaten auf dem neuesten Stand halten

Hinweise

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

Preise

Das BigQuery AI and ML SDK for ABAP wird kostenlos angeboten. Sie sind jedoch für die Kosten auf den BigQuery- und Vertex AI-Plattformen verantwortlich:

  • BigQuery ML: Für die Daten, die Sie in BigQuery verarbeiten, fallen Kosten an.
  • Vertex AI: Es fallen Kosten für Aufrufe an den Vertex AI-Dienst an, der durch das Remote-Modell dargestellt wird.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Weitere Informationen zu den Preisen von BigQuery finden Sie auf der Seite BigQuery-Preise.

Weitere Informationen zu den Preisen für Vertex AI finden Sie auf der Seite Vertex AI-Preise.

Einbettungen in BigQuery generieren

In diesem Abschnitt wird erläutert, wie Sie mit dem BigQuery AI & ML SDK für ABAP embeddings für die in BigQuery gespeicherten Unternehmensdaten aus Ihrer ABAP-Anwendungslogik generieren.

Instanziieren Sie die BigQuery-Klasse für die Aufrufe von Einbettungen.

Wenn Sie die Texteinbettungen und multimodalen Modelle in BigQuery-Datasets aufrufen möchten, müssen Sie die Klasse /GOOG/CL_BQ_GENERATIVE_MODEL instanziieren.

TRY.
    DATA(lo_bqml_embeddings_model) = NEW /goog/cl_bq_embeddings_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Ersetzen Sie CLIENT_KEY durch den Clientschlüssel, den Sie während der Einrichtung der Authentifizierung für die Authentifizierung bei Google Cloud konfiguriert haben.

Einbettungen generieren

Wenn Sie Abfragen ausführen möchten, um mit der BigQuery-Funktion ML.GENERATE_EMBEDDING Einbettungen für Text und multimodale Daten zu generieren, verwenden Sie die Methode GENERATE_EMBEDDINGS der Klasse /GOOG/CL_BQ_EMBEDDINGS_MODEL.

Das mit der Abfrage festgelegte Objekt der Klasse /GOOG/CL_BQ_QUERY wird als Eingabe an die Methode übergeben.

lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query ).

LO_BQ_QUERY ist die Referenz der Klasse /GOOG/CL_BQ_QUERY nach dem Festlegen der Abfrage.

Parameter für die Modellgenerierung überschreiben

Sie können Generierungsparameter für das Einbettungsmodell in der gespeicherten Abfrage in BigQuery oder im übergebenen Abfragetext definieren. Wenn Sie die Parameter für dieselbe Abfrage jedoch über die ABAP-Anwendungslogik überschreiben möchten, können Sie die Methode SET_GENERATION_CONFIG der Klasse /GOOG/CL_BQ_EMBEDDINGS_MODEL verwenden. Die Generierungsparameter in der ursprünglichen Abfrage werden durch die Parameter überschrieben, die über diese Methode übergeben werden.

lo_bqml_embeddings_model->set_generation_config( iv_flatten_json_output   = 'IS_FLATTEN_JSON_OUTPUT'
                                 iv_task_type             = 'TASK_TYPE'
         iv_output_dimensionality = 'OUTPUT_DIMENSIONALITY' ).

Ersetzen Sie Folgendes:

  • IS_FLATTEN_JSON_OUTPUT: Ein boolescher Wert, der bestimmt, ob der von der Funktion zurückgegebene JSON-Inhalt in separate Spalten geparst wird.
  • TASK_TYPE: Der Wert, der die beabsichtigte nachgelagerte Anwendung angibt, um dem Modell zu helfen, Einbettungen mit höherer Qualität zu erstellen. Suchen Sie unter Eingabesyntax nach wahrscheinlichen Werten für das task_type-Argument für ML.GENERATE_EMBEDDING.
  • OUTPUT_DIMENSIONALITY: Der Wert, der die Anzahl der Dimensionen angibt, die beim Generieren von Einbettungen verwendet werden sollen. Suchen Sie unter Eingabesyntax nach wahrscheinlichen Werten für das output_dimensionality-Argument für ML.GENERATE_EMBEDDING.

Abfrageergebnisse von Abfragen zum Generieren von Einbettungen abrufen

Um verarbeitete Antworten von BigQuery ML zum Generieren von Einbettungen und zur sinnvollen Darstellung zu erhalten, verwendet das SDK verkettete Methoden in der Klasse /GOOG/CL_BQ_GENERATIVE_MODEL. So können Sie direkt in einer einzigen Anweisung auf die Antwort zugreifen, ohne Variablen zum Speichern der Zwischenergebnisse nutzen zu müssen.

Texteinbettungsvektoren abrufen

Verwenden Sie die Methode GET_TEXT_EMBEDDING_VECTORS, um die Text-Embedding-Vektoren für jede Zeile in Ihrer ABAP-Anwendungslogik abzurufen.

DATA(lt_embeddings) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
                                             )->get_text_embedding_vectors( ).

Status von Texteinbettungen abrufen

Verwenden Sie die Methode GET_TEXT_EMBEDDING_STATUS, um den Status der Text-Embedding-Generierung für jede Zeile abzurufen.

Wenn der Vorgang erfolgreich war, ist der Status leer.

DATA(lt_embeddings_status) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
                                                    )->get_text_embedding_status( ).

Abfragejobstatus abrufen

Jede Abfrage in BigQuery wird als Abfragejob ausgeführt.

Verwenden Sie die Methode GET_QUERY_JOB_STATUS, um den Status des Jobs für die Einbettungsabfrage abzurufen.

lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
                       )->get_query_job_status(
IMPORTING ev_job_complete          = DATA(lv_job_complete)
  ev_job_creation_reason   = DATA(lv_job_creation_reason)
  ev_job_id                = DATA(lv_job_id)
  ev_query_id              = DATA(lv_query_id)
  ev_total_bytes_processed = DATA(lv_total_bytes_processed)
  ev_total_rows            = DATA(lv_total_rows) ).

Die Methode gibt die folgenden Jobstatusmesswerte zurück:

  • Gibt an, ob die Abfrage abgeschlossen wurde oder nicht.
  • Der Grund, warum ein Job erstellt wurde.
  • Verweis auf den Job, der zum Ausführen der Abfrage erstellt wurde.
  • Automatisch generierte ID für die Abfrage.
  • Die Gesamtzahl der für diese Abfrage verarbeiteten Byte.
  • Die Gesamtzahl der Zeilen im vollständigen Abfrageergebnissatz.

Abfragejobfehler abrufen

Verwenden Sie die Methode GET_QUERY_JOB_ERRORS, um die Fehler des Abfragejobs abzurufen (falls vorhanden).

DATA(lt_query_job_errors) = lo_bqml_embeddings_model->execute_query( io_query = lo_bq_query
                                                   )->get_query_job_errors( ).

Gesamtantwort für Texteinbettungen abrufen

Wenn Sie eine Gesamtantworttabelle für die von Ihnen ausgeführte Abfrage für Texteinbettungen abrufen möchten, verwenden Sie die Methode GET_TEXT_EMBEDDING_RESPONSE.

Eine Antwort wird nur dann ausgefüllt, wenn der Parameter für die Modellgenerierung FLATTEN_JSON_OUTPUT in der Abfrage auf TRUE gesetzt ist.

DATA(lt_text_embeddings_response) = lo_bqml_embeddings_model->execute_query( io_query = lo_bq_query
                                                           )->get_text_embedding_response( ).