Vektorsuche in BigQuery durchführen

Mit dem BigQuery AI and ML SDK for ABAP können Sie eine Vektorsuche in Ihren vektorisierten Unternehmensdaten in BigQuery mithilfe von Suchstrings in natürlicher Sprache durchführen und die Ergebnisse von Ihren ABAP-basierten Agenten oder Anwendungen zurückgeben.

Mit der BigQuery-Vektorsuche können Sie mit GoogleSQL eine semantische Suche mit Vektorindexen für ungefähre Ergebnisse durchführen. Mit der Vektorsuche können Sie mithilfe von hochdimensionalen Vektoren oder Einbettungen semantisch ähnliche Datenpunkte in großen Datensätzen finden. Sie können Ihre Vektor-Embeddings in BigQuery speichern, BigQuery als Vektordatenbank verwenden und mithilfe der BigQuery-Funktion VECTOR_SEARCH eine Vektorähnlichkeitssuche darauf anwenden.

Hinweise

Bevor Sie das BigQuery AI & ML SDK for ABAP mit den Gemini-Modellen 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 für die CREATE VECTOR INDEX-Anweisung und die VECTOR_SEARCH-Funktion verantwortlich, für die die BigQuery-Computing-Preise gelten.

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.

Vektorsuche in BigQuery durchführen

In diesem Abschnitt wird beschrieben, wie Sie mit dem BigQuery AI & ML SDK für ABAP eine semantische Vektorsuche in Ihren in BigQuery gespeicherten Unternehmensdaten aus Ihrer ABAP-Anwendung ausführen.

Klasse für die BigQuery-Vektorsuche instanziieren

Wenn Sie eine Vektorsuche mit einem Suchstring ausführen möchten, müssen Sie die Klasse /GOOG/CL_BQ_VECTOR_SEARCH instanziieren.

TRY.
    DATA(lo_bq_vector_search) = NEW /goog/cl_bq_vector_search( 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.

Ähnliche Elemente für einen Suchstring finden

Wenn Sie Abfragen für die Vektorsuche mit der BigQuery-Funktion VECTOR_SEARCH ausführen möchten, verwenden Sie die Methode FIND_NEAREST_NEIGHBORS der Klasse /GOOG/CL_BQ_VECTOR_SEARCH.

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

lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).

LO_BQ_QUERY ist die Referenz der Klasse /GOOG/CL_BQ_QUERY nach dem Festlegen der Abfrage. Sie können den Suchstring aus dem Abfragetext übergeben.

Parameter für die Vektorsuche überschreiben

Sie können Parameter für die Vektorsuche (unter VECTOR_SEARCH-Funktionsdefinitionen) 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 dazu die Methode SET_SEARCH_PARAMETERS der Klasse /GOOG/CL_BQ_VECTOR_SEARCH verwenden. Die Suchparameter in der ursprünglichen Abfrage werden dann vollständig durch die Parameter überschrieben, die über diese Methode übergeben werden.

lo_bq_vector_search->set_search_parameters( iv_top_k            = TOP_K
    iv_distance_type            = DISTANCE_TYPE
    iv_fraction_lists_to_search = 'FRACTION_LISTS_TO_SEARCH' ).

Ersetzen Sie Folgendes:

  • TOP_K: Ein INT64-Wert, der die Anzahl der nächsten Nachbarn angibt, die zurückgegeben werden sollen.
  • DISTANCE_TYPE: Ein Stringwert, der den Messwerttyp angibt, der zum Berechnen der Entfernung zwischen zwei Vektoren verwendet werden soll. Mögliche Werte für das Argument DISTANCE_TYPE finden Sie in den Definitionen für die Funktion VECTOR_SEARCH.
  • FRACTION_LISTS_TO_SEARCH: Ein Stringwert, der den Prozentsatz der Listen angibt, in denen nach wahrscheinlichen Werten aus dem Argument FRACTION_LISTS_TO_SEARCH gesucht werden soll. Sie finden ihn unter den Definitionsmöglichkeiten der Funktion VECTOR_SEARCH.

Antwort der Vektorsuche abrufen

Wenn Sie verarbeitete Antworten von BigQuery ML für Vektorsuchanfragen erhalten und auf sinnvolle Weise präsentieren möchten, verwenden Sie die Klasse /GOOG/CL_BQ_SEARCH_RESPONSE.

Die von der Klasse /GOOG/CL_BQ_SEARCH_RESPONSE erfasste Antwort wird mit den Anfragen verkettet, die über die Methoden der Klasse /GOOG/CL_BQ_VECTOR_SEARCH gestellt werden. Sie können also in einer einzigen Anweisung direkt auf die Antwort zugreifen, ohne Variablen zum Speichern der Zwischenergebnisse nutzen zu müssen.

Nächste Nachbarn für den Suchstring abrufen

Verwenden Sie die Methode GET_NEAREST_NEIGHBORS, um die nächsten Nachbarn für den Suchstring abzurufen. Die Anzahl der zurückgegebenen Nachbarn hängt vom Wert ab, der im Parameter TOP_K der Funktion VECTOR_SEARCH in der aufgerufenen Abfrage angegeben oder festgelegt wurde.

DATA(lt_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbors( ).

LT_SEARCH_RESPONSE enthält auch den Abstand des Suchantwortelements vom Suchstring, um den Grad der Ähnlichkeit anzugeben.

Nächsten Nachbarn für den Suchstring abrufen

Verwenden Sie die Methode GET_NEAREST_NEIGHBOR, um den nächsten Nachbarn für den Suchstring abzurufen. Dabei wird unabhängig vom Wert, der im Parameter TOP_K der Funktion VECTOR_SEARCH in der aufgerufenen Abfrage angegeben oder festgelegt ist, nur der nächste Nachbar für den Suchstring abgerufen.

DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
                                             )->get_nearest_neighbor( ).

LS_SEARCH_RESPONSE enthält auch die Entfernung der Suchantwort vom Suchstring, um den Grad der Ähnlichkeit anzugeben.