Vertex AI Vektorsuche verwenden

In diesem Dokument wird beschrieben, wie Sie mit dem Vertex AI SDK for ABAP die Vertex AI Vektorsuche für Vektorähnlichkeitssuchen verwenden. Mit der Vektorsuche können Sie mithilfe von hochdimensionalen Vektoren semantisch ähnliche Datenpunkte in großen Datensätzen finden. Sie eignet sich hervorragend für Aufgaben wie die Bild- und Textabrufe, wobei der Bedeutung mehr Gewicht beigemessen wird als genauen Keyword-Übereinstimmungen.

Mit der Vektorsuche können Sie die Leistung Ihrer Unternehmensdaten nutzen, um die Effizienz zu steigern, das Kundenerlebnis zu verbessern und einen Wettbewerbsvorteil zu erzielen. Sie kann Ihrer SAP-Umgebung einen erheblichen Mehrwert bieten und Ihnen z. B. folgende Vorteile bieten:

  • Suchfunktionen verbessern: Sie können die Genauigkeit und Relevanz von Suchergebnissen in großen Mengen von SAP-Daten verbessern, einschließlich strukturierter und unstrukturierter Informationen, die auf verschiedene Systeme verteilt sind. Das führt zu einer schnelleren und effektiveren Informationsabfrage relevanter Unternehmensdaten.

  • Wertvolle Informationen aus unstrukturierten Daten gewinnen: Nutzen Sie die Vektorsuche, um wertvolle Informationen aus bisher ungenutzten unstrukturierten Daten aus SAP-Systemen zu extrahieren, z. B. Produktdaten, Kundendaten, Kundenrezensionen, Support-Tickets oder interne Dokumente.

  • Kundenerfahrung verbessern: Mit der Vektorsuche können Sie personalisierte und kontextbezogene Interaktionen mit Kunden ermöglichen. Dazu nutzen Sie sie für Produktempfehlungen, intelligente Chatbots und andere kundenorientierte Anwendungen.

  • Geschäftsprozesse optimieren: Optimieren Sie interne Prozesse und nutzen Sie die Vektorsuche, um schnell relevante Informationen zu finden, Muster zu identifizieren und datengestützte Entscheidungen zu treffen.

  • Innovationen beschleunigen: Kombinieren Sie die Vektorsuche mit anderen Vertex AI-Funktionen wie generative KI, um neue und innovative Lösungen zu entwickeln, die das Geschäftswachstum vorantreiben.

Vertex AI Vektorsuche verwenden

Der semantische Abgleich mit der Vektorsuche lässt sich auf die folgenden Schritte reduzieren:

  1. Generieren Sie Einbettungsdarstellungen Ihrer Unternehmensdaten.
  2. Laden Sie die Einbettungen in einen Cloud Storage-Bucket hoch.
  3. Erstellen Sie einen Vektorindex und verknüpfen Sie ihn mit dem Cloud Storage-Bucket, der die Einbettungen enthält. Je nachdem, wie Sie sie mit den neuesten Daten aktualisieren möchten, können Sie zwei Arten von Indexen erstellen:

    • Batchindex: Ein Batchindex ist für die Aktualisierung eines Index in einem Batch gedacht, und zwar mit Daten, die über einen bestimmten Zeitraum gespeichert wurden, z. B. Daten, die wöchentlich oder monatlich verarbeitet werden.
    • Streamingindex: Ein Streamingindex wird verwendet, wenn Indexdaten aktualisiert werden sollen, sobald dem Datenspeicher neue Daten hinzugefügt werden.
  4. Erstellen Sie einen Indexendpunkt und stellen Sie den Vektorindex auf dem Endpunkt bereit, um Abfragen für Empfehlungen oder Ergebnisse durchzuführen. Ein Index-Endpunkt fungiert als Serverinstanz, die Abfrageanfragen für Ihren Index akzeptiert.

  5. Stellen Sie eine Abfrage an den Indexendpunkt, indem Sie eine Entitäts-ID, einen Suchstring oder eine Einbettung verwenden.

Das Vertex AI SDK für ABAP deckt alle diese Aspekte der Vertex AI-Vektorsuche ab, damit Sie Vertex AI-gesteuerte Vektorsuchanwendungen in Ihrer ABAP-Umgebung erstellen können.

Vektorindex erstellen und verwalten

In diesem Abschnitt wird erläutert, wie Sie mit dem Vertex AI SDK für ABAP einen Vektorindex erstellen und verwalten.

Hinweise

Sie oder Ihre Administratoren müssen die folgenden Voraussetzungen erfüllen:

Einbettungen vorbereiten

Sie müssen Ihre Einbettungen bereit haben. Informationen zum Generieren von Einbettungen für Ihre Unternehmensdaten mit dem Vertex AI SDK für ABAP finden Sie unter Embeddings generieren.

Einbettungen in Cloud Storage hochladen

Laden Sie Ihre Einbettungen in einen Cloud Storage-Bucket hoch, damit Sie diese einem Vektorindex zuordnen können. Auch wenn Sie Ihre Einbettungsdateien außerhalb von Google Cloud erstellt haben, können Sie diese in einen Cloud Storage-Bucket hochladen.

Informationen zum Senden der mit dem Vertex AI SDK for ABAP generierten Einbettungen an einen Cloud Storage-Bucket finden Sie unter Embeddings in Cloud Storage speichern.

Klasse für den Vektorindex instanziieren

Wenn Sie einen Vektorindex erstellen und verwalten möchten, können Sie die Klasse /GOOG/CL_VECTOR_INDEX instanziieren. Sie Instanziieren die Klasse, indem Sie den für die Authentifizierung konfigurierten Clientschlüssel übergeben.

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

Ersetzen Sie CLIENT_KEY durch den für die Authentifizierung konfigurierten Clientschlüssel.

Vektorindex erstellen

Zum Erstellen eines Vektorindexes können Sie die Methode CREATE_TREE_AH_INDEX der Klasse /GOOG/CL_VECTOR_INDEX verwenden. Sie erstellt einen Index auf Grundlage des Tree-AH-Algorithmus.

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

Ersetzen Sie Folgendes:

  • INDEX_NAME: Der Anzeigename des Index.
  • INDEX_DESCRIPTION: Beschreibung des Index.
  • LOCATION_ID: Google Cloud-Region, in der Sie den Index speichern möchten. Informationen zu den verfügbaren Standorten finden Sie unter Vertex AI-Standorte.
  • CONTENT_URI: URI des Cloud Storage-Bucket mit den Einbettungen, der zum Erstellen des Index verwendet wird.
  • DIMENSIONS: Anzahl der Dimensionen der Eingabevektoren.
  • NEIGHBORS_COUNT: Anzahl der Nachbarn, die über die ungefähre Suche gefunden werden sollen, bevor eine Neusortierung ausgeführt wird.
  • INDEX_UPDATE_METHOD: Aktualisierungsmodus des Index: BATCH_UPDATE oder STREAM_UPDATE.
  • DISTANCE_MEASURE_TYPE: Bestimmt den Algorithmus, der für die Entfernungsberechnung zwischen Datenpunkten und dem Abfragevektor verwendet wird. Weitere Informationen finden Sie unter Art der Entfernungsmessung.
  • SHARD_SIZE: Größe der einzelnen Shards. Wenn ein Index groß ist, wird er basierend auf der angegebenen Shard-Größe fragmentiert. Während der Bereitstellung wird jeder Shard auf einem separaten Knoten bereitgestellt und unabhängig skaliert.
  • LEAF_NODE_EMBEDDING_COUNT: Anzahl der Einbettungen pro Blattknoten. Wenn nicht festgelegt, ist der Standardwert 1000.
  • LEAF_NODE_TO_SEARCH: Der Standardprozentsatz von Blattknoten, die bei einer beliebigen Abfrage durchsucht werden können. Muss zwischen 1 und 100 liegen, inklusive. Wenn nicht angegeben wird der Standardwert 10 (bedeutet 10%) genutzt.
  • ETAG: Ein ETag-Wert für konsistente Lese-/Änderungs-/Schreibvorgänge.
  • KEY_FOR_ENCRYPTION: Cloud KMS-Ressourcen-ID des vom Kunden verwalteten Verschlüsselungsschlüssels.

Vektorindexendpunkt erstellen

Zum Erstellen eines Vektorindexendpunkts können Sie die Methode CREATE_INDEX_ENDPOINT der Klasse /GOOG/CL_VECTOR_INDEX verwenden.

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

Ersetzen Sie Folgendes:

  • INDEX_ENDPOINT_NAME: Der Anzeigename des Indexendpunkts
  • INDEX_ENDPOINT_DESCRIPTION: Beschreibung des Indexendpunkts.
  • LOCATION_ID: Google Cloud-Region, in der Sie den Indexendpunkt erstellen möchten. Informationen zu den verfügbaren Standorten finden Sie unter Vertex AI-Standorte.
  • ENABLE_PUBLIC_ENDPOINT: Wenn auf den bereitgestellten Index über einen öffentlichen Endpunkt zugegriffen werden kann, legen Sie diesen Parameterwert auf ABAP_TRUE fest.
  • ETAG: Ein ETag-Wert für konsistente Lese-/Änderungs-/Schreibvorgänge.
  • KEY_FOR_ENCRYPTION: Cloud KMS-Ressourcen-ID des vom Kunden verwalteten Verschlüsselungsschlüssels.

Vektorindex auf einem Indexendpunkt bereitstellen

Mit der Methode DEPLOY_INDEX der Klasse /GOOG/CL_VECTOR_INDEX können Sie einem Vektorindex einen Indexendpunkt bereitstellen.

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

Ersetzen Sie Folgendes:

  • DEPLOYMENT_ID: ID der Indexbereitstellung.
  • LOCATION_ID: Google Cloud-Region, in der Sie den Index bereitstellen möchten. Informationen zu den verfügbaren Standorten finden Sie unter Vertex AI-Standorte.
  • INDEX_ID: Ressourcenname des Index.
  • INDEX_ENDPOINT_ID: Ressourcenname des Indexendpunkts, an dem bereitgestellt werden soll.
  • MIN_REPLICA_COUNT: Mindestanzahl an Maschinenreplikaten für das bereitgestellte Modell.
  • MAX_REPLICA_COUNT: Maximale Anzahl von Maschinenreplikaten für das bereitgestellte Modell.
  • ENABLE_ACCESS_LOGGING: Wenn Sie die Zugriffslogs des privaten Endpunkts an Cloud Logging senden möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.
  • DEPLOYMENT_GROUP: Name der Bereitstellungsgruppe, z. B. test, prod.

Vektorindex aktualisieren und neu erstellen

Damit Sie für eine KI-Lösung für Unternehmen über die Vektorsuche möglichst genaue Ergebnisse erhalten, müssen Sie den Index außerdem mit den neuesten Unternehmensdaten aktualisieren.

Batch-Index aktualisieren

Wenn Sie einen Batchindex mit aktualisierten Informationen in einem Cloud Storage-Bucket aktualisieren möchten, können Sie die Methode PATCH_TREE_AH_INDEX der Klasse /GOOG/CL_VECTOR_INDEX verwenden.

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

Ersetzen Sie Folgendes:

  • INDEX_ID: Ressourcenname des Index.
  • CONTENT_URI: URI des Cloud Storage-Bucket mit den Einbettungen für die neuesten Unternehmensdaten.
  • LOCATION_ID: Google Cloud-Region des Index.
  • IS_COMPLETE_OVERWRITE: Wenn Sie den Index vollständig mit Daten aus dem angegebenen Cloud Storage-Bucket überschreiben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Mit dem folgenden Beispielarchitekturablauf können Sie einen Batchindex mit Ihren SAP-Daten aktualisieren:

  • Aktualisieren Sie den Cloud Storage-Bucket mit Einbettungen für die neuesten Daten mithilfe der Klasse /GOOG/CL_STORAGE_V1 über einen SAP-Hintergrundjob. Bei nicht-SAP-Daten kann dies auch über einen Prozess außerhalb von SAP erfolgen.
  • Sie können Batch-Indexaktualisierungen mit der Methode PATCH_TREE_AH_INDEX der Klasse /GOOG/CL_VECTOR_INDEX über einen Hintergrundjob in SAP auslösen, der mit einer Frequenz ausgeführt wird.

Streamindex aktualisieren

Mit der Methode UPSERT_DATAPOINTS der Klasse /GOOG/CL_VECTOR_INDEX können Sie Informationen für einen Datenpunkt für einen Streamindex upserten.

lo_vector_index->upsert_datapoints( iv_index_id     = 'INDEX_ID'
                                    iv_location_id  = 'LOCATION_ID'
                                    iv_datapoint_id = 'ENTITY_ID'
                                    it_embeddings   = 'EMBEDDINGS' ).

Ersetzen Sie Folgendes:

  • INDEX_ID: Ressourcenname des Index.
  • LOCATION_ID: Google Cloud-Region des Index.
  • ENTITY_ID: Entitäts-ID, zu der das Upsert ausgeführt werden soll.
  • EMBEDDINGS: Einbettungen, für die für den Datenpunkt ein Upsert ausgeführt werden soll.

Mit der Methode REMOVE_DATAPOINTS der Klasse /GOOG/CL_VECTOR_INDEX können Sie Informationen für einen Datenpunkt aus einem Streamindex entfernen.

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

Ersetzen Sie Folgendes:

  • INDEX_ID: Ressourcenname des Index.
  • LOCATION_ID: Google Cloud-Region des Index.
  • ENTITY_ID: Entitäts-ID, die entfernt werden soll.

Upsert- und Löschvorgänge werden für den Index in Echtzeit ausgeführt.

Mit dem folgenden Beispiel für einen Architekturablauf können Sie einen Streamindex mit Ihren SAP-Daten aktualisieren:

  • Identifizieren Sie die Platzhalter in Ihrer SAP-Unternehmenslösung, z. B. BADIs, Exits, Verbesserungen und benutzerdefinierte SAP-Logik, die Punkte für SAP-Datenänderungen sind.
  • Lösen Sie den Upsert- oder Entfernungsvorgang für SAP-Daten aus dem Streamindex mithilfe der Methoden UPSERT_DATAPOINTS und REMOVE_DATAPOINTS der Klasse /GOOG/CL_VECTOR_INDEX über den angegebenen Platzhalter aus.

Status der Vektorindexvorgänge abrufen

Google Cloud führt die folgenden Aktionen als Vorgang mit langer Ausführungszeit aus: Erstellen eines Vektorindexes und eines Indexendpunkts, Bereitstellen des Indexes an einen Indexendpunkt oder Aktualisieren eines Vektor-Batchindexes.

Zum Ermitteln der ID des Vorgangs mit langer Ausführungszeit, der Ressourcen-ID der Vertex AI-Artefakte und der Fehlermeldungen bietet das SDK die Klasse /GOOG/CL_VECTORINDEX_RESPONSE.

Die von der Klasse /GOOG/CL_VECTORINDEX_RESPONSE erfasste Antwort wird mit den Anfragen verkettet, die über die Methoden der Klasse /GOOG/CL_VECTOR_INDEX 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.

ID des Vorgangs mit langer Ausführungszeit abrufen

Um die ID des Vorgangs mit langer Ausführungszeit für die einzelnen Vektorsuchaufgaben abzurufen, können Sie die Methode GET_LRO der Klasse /GOOG/CL_VECTORINDEX_RESPONSE verwenden. Nach der Ausführung einer Aufgabe können Sie die Methode GET_LRO mit derselben Instanz aufrufen, um die entsprechende ID des lang andauernden Vorgangs abzurufen.

Im folgenden Codebeispiel wird gezeigt, wie Sie die ID des Vorgangs mit langer Ausführungszeit für eine Aufgabe zum Index-Batchupdate abrufen:

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

Ersetzen Sie Folgendes:

  • INDEX_ID: Ressourcenname des Index.
  • CONTENT_URI: URI des Cloud Storage-Bucket mit den Einbettungen für die neuesten Unternehmensdaten.
  • LOCATION_ID: Google Cloud-Region des Index.
  • IS_COMPLETE_OVERWRITE: Wenn Sie den Index vollständig mit Daten aus dem angegebenen Cloud Storage-Bucket überschreiben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Rufen Sie den Status des Vorgangs mit langer Ausführungszeit ab.

Jedem Vorgang mit langer Ausführungszeit ist ein Status zugeordnet. Sie können den Status des Vorgangs prüfen, um festzustellen, ob die als Vorgang mit langer Ausführungszeit geplante Aufgabe erfolgreich war.

Wenn Sie den Status eines Vorgangs mit langer Ausführungszeit für Vertex AI-Aufgaben ermitteln oder kontinuierlich überwachen möchten, können Sie die Methode GET_LRO_STATUS der Klasse /GOOG/CL_VERTEX_AI_SDK_UTILITY verwenden.

/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

Ersetzen Sie Folgendes:

  • CLIENY_KEY: Clientschlüssel für die Authentifizierung.
  • LONG_RUNNING_OPERATION_ID: ID des Vorgangs mit langer Ausführungszeit.
  • LOCATION_ID: Google Cloud-Region des Index.

Ressourcen-ID des Vertex AI-Artefakts abrufen

Mit der Methode GET_ID der Klasse /GOOG/CL_VECTORINDEX_RESPONSE können Sie die Ressourcen-ID des erstellten Index, des erstellten Indexendpunkts, des bereitgestellten Index und die Index-ID ermitteln, für die der Patch ausgelöst wird.

Nach der Ausführung einer Aufgabe können Sie die Methode GET_ID mit derselben Instanz aufrufen, um die entsprechende Ressourcen-ID abzurufen.

Das folgende Codebeispiel zeigt, wie Sie die ID des zu erstellenden Index abrufen, nachdem die Methode CREATE_TREE_AH_INDEX der Klasse /GOOG/CL_VECTOR_INDEX aufgerufen wurde:

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

Ersetzen Sie Folgendes:

  • INDEX_NAME: Der Anzeigename des Index.
  • LOCATION_ID: Google Cloud-Region des Index.
  • CONTENT_URI: URI des Cloud Storage-Bucket mit den Einbettungen, der zum Erstellen des Index verwendet wird.
  • DIMENSIONS: Anzahl der Dimensionen der Eingabevektoren.
  • NEIGHBORS_COUNT: Anzahl der Nachbarn, die über die ungefähre Suche gefunden werden sollen, bevor eine Neusortierung ausgeführt wird.
  • LEAF_NODE_EMBEDDING_COUNT: Anzahl der Einbettungen pro Blattknoten. Wenn nicht festgelegt, ist der Standardwert 1000.
  • LEAF_NODE_TO_SEARCH: Der Standardprozentsatz von Blattknoten, die bei einer beliebigen Abfrage durchsucht werden können. Muss zwischen 1 und 100 liegen, inklusive. Wenn nicht angegeben wird der Standardwert 10 (bedeutet 10%) genutzt.

Fehlercode und Fehlermeldung abrufen

Fehler können während der Auslösung von Vektorindexaufgaben über das Vertex AI SDK für ABAP auftreten.

Um den Fehlercode und die Fehlermeldung repektive (falls vorhanden) nach dem Triggern einer Aufgabe abzurufen, können Sie die Methoden GET_ERROR_CODE und GET_ERROR_MESSAGE der Klasse /GOOG/CL_VECTORINDEX_RESPONSE verwenden.

Nach der Ausführung einer Aufgabe können Sie die Methoden GET_ERROR_CODE und GET_ERROR_MESSAGE mit derselben Instanz aufrufen, um den entsprechenden Fehlercode oder die entsprechende Fehlermeldung abzurufen.

Im folgenden Codebeispiel wird gezeigt, wie Fehlercode und Fehlermeldung angezeigt werden, wenn beim Erstellen eines Index Fehler auftreten:

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.

Ersetzen Sie Folgendes:

  • INDEX_NAME: Der Anzeigename des Index.
  • LOCATION_ID: Google Cloud-Region des Index.
  • CONTENT_URI: URI des Cloud Storage-Bucket mit den Einbettungen, der zum Erstellen des Index verwendet wird.
  • DIMENSIONS: Anzahl der Dimensionen der Eingabevektoren.
  • NEIGHBORS_COUNT: Anzahl der Nachbarn, die über die ungefähre Suche gefunden werden sollen, bevor eine Neusortierung ausgeführt wird.
  • LEAF_NODE_EMBEDDING_COUNT: Anzahl der Einbettungen pro Blattknoten. Wenn nicht festgelegt, ist der Standardwert 1000.
  • LEAF_NODE_TO_SEARCH: Der Standardprozentsatz von Blattknoten, die bei einer beliebigen Abfrage durchsucht werden können. Muss zwischen 1 und 100 liegen, inklusive. Wenn nicht angegeben wird der Standardwert 10 (bedeutet 10%) genutzt.

Nächste Nachbarn suchen

In diesem Abschnitt wird erläutert, wie Sie mit dem Vertex AI SDK für ABAP die nächsten Nachbarn suchen.

Hinweise

Sie oder Ihre Administratoren müssen die folgenden Voraussetzungen erfüllen:

RFC-Ziel erstellen

Sie müssen ein RFC-Ziel für den Indexendpunkt erstellen, an dem Sie Ihren Index mit Ihren Unternehmensdaten in Form von Einbettungsdateien bereitgestellt haben.

  1. Rufen Sie den Hostnamen für den Indexendpunkt ab:

    1. Führen Sie in der SAP-GUI den Transaktionscode /GOOG/SDK_IMG aus.

      Alternativ können Sie den Transaktionscode SPRO ausführen und dann auf SAP-Referenz-IMG klicken.

    2. Klicken Sie auf ABAP SDK for Google Cloud > Dienstprogramme > Vertex AI SDK: RFC-Informationen für Feature Store und Vektorsuche abrufen.
    3. Wählen Sie Vektorsuchdetails abrufen aus.
    4. Wählen Sie eine der folgenden Optionen aus:

      • Suchschlüssel
      • Endpunkt-ID des Vektorindex
    5. Wenn Sie die Option Suchschlüssel ausgewählt haben, geben Sie den Suchschlüssel ein, der in den Parametern für die Vektorsuche konfiguriert ist.

    6. Wenn Sie die Option Endpunkt-ID des Vektorindex ausgewählt haben, geben Sie die folgenden Parameter ein:

      • Google Cloud-Schlüsselname: Der Clientschlüssel für die Authentifizierung bei Google Cloud.
      • Standort: Die Region, in der sich der Indexendpunkt befindet.
      • Indexendpunkt-ID: Der Name des Indexendpunkts.
    7. Klicken Sie auf Ausführen, um die Details aufzurufen. Notieren Sie sich den Endpunkt unter dem Label Host.

  2. Erstellen Sie ein RFC-Ziel für den Indexendpunkt:

    1. Führen Sie in der SAP-GUI den Transaktionscode SM59 aus.

    2. Erstellen Sie ein neues RFC-Ziel. Achten Sie darauf, dass für das von Ihnen erstellte RFC-Ziel der Verbindungstyp so festgelegt ist: G - HTTP connection to external server.

    3. Gehen Sie zum Tab Technische Einstellungen und geben Sie folgende Details ein:

      • Zielhost: Geben Sie den Hostnamen für den Indexendpunkt an.

      • Dienstnummer: Geben Sie 443 ein. Diese Portnummer wird für die sichere Kommunikation verwendet.

    4. Gehen Sie zum Tab Anmeldung und Sicherheit und prüfen Sie, ob Feld SSL-Zertifikat auf die Option DEFAULT-SSL-Client (Standard) festgelegt ist.

    5. Speichern Sie die Änderungen.

  3. Konfigurieren Sie die Dienstzuordnungstabelle für die Vertex AI API:

    1. Führen Sie in der SAP-GUI den Transaktionscode /GOOG/SDK_IMG aus.

      Alternativ können Sie den Transaktionscode SPRO ausführen und dann auf SAP-Referenz-IMG klicken.

    2. Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Dienstzuordnung konfigurieren.

    3. Klicken Sie auf Neue Einträge.

    4. Geben Sie das RFC-Ziel für die Vertex AI API an:

      Name Dienstname RFC-Ziel
      Clientschlüssel für die Authentifizierung. apiinvoker:v1 Name des RFC-Ziels.
    5. Speichern Sie den neuen Eintrag.

Um die Vektorsuche aufzurufen, können Sie die Klasse /GOOG/CL_VECTOR_SEARCH instanziieren. Sie instanziieren die Klasse, indem Sie den Suchschlüssel übergeben, der in den Parametern für die Vektorsuche konfiguriert ist.

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

Ersetzen Sie SEARCH_KEY durch den Suchschlüssel, der in den Parametern für die Vektorsuche konfiguriert ist.

Suche mithilfe einer Entitäts-ID

Wenn Sie einen Vektorindex in Bezug auf eine bestimmte Entitäts-ID abfragen möchten, können Sie die Methode FIND_NEIGHBORS_BY_ENTITY_ID der Klasse /GOOG/CL_VECTOR_SEARCH verwenden. Entitäts-IDs entsprechen den Datenpunkten, die in Ihrem Vektorindex gespeichert sind.

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

Ersetzen Sie Folgendes:

  • ENTITY_ID: Zu suchende Entitäts-ID.
  • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
  • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Mit einem Suchstring suchen

Wenn Sie einen Vektorindex in Bezug auf einen Suchstring abfragen möchten, können Sie die Methode FIND_NEIGHBORS_BY_STRING der Klasse /GOOG/CL_VECTOR_SEARCH verwenden.

Das SDK wandelt Ihren Suchstring zuerst in Einbettungen um und ruft dann die nächsten Nachbarn für die Suchanfrage ab.

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

Ersetzen Sie Folgendes:

  • SEARCH_STRING: Suchstring eingeben.
  • MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
  • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Mithilfe einer Einbettung suchen

Mit der Methode FIND_NEIGHBORS_BY_EMBEDDING der Klasse /GOOG/CL_VECTOR_SEARCH können Sie einen Vektorindex in Bezug auf Einbettungen abfragen.

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

Ersetzen Sie Folgendes:

  • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
  • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.
  • EMBEDDINGS: Eingabe-Ebenen.

Suchantwort abrufen

Das SDK bietet die ABAP-Klasse /GOOG/CL_VECTORSEARCH_RESPONSE, um verarbeitete Antworten vom Modell zu erhalten und auf sinnvolle Weise zu präsentieren.

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

Nächste Nachbarn für die Suchanfrage abrufen

Mit den Methoden GET_NEAREST_NEIGHBOR und GET_NEAREST_NEIGHBORS der Klasse /GOOG/CL_VECTORSEARCH_RESPONSE können Sie die nächsten Nachbarn ermitteln, die für die ausgeführte Suchanfrage in Bezug auf einen Datenpunkt, einen Suchstring oder auf Einbettungen gefunden wurden.

Diese Methoden können nach Ausführung der Suchanfrage in einer Kette aufgerufen werden. Verwenden Sie dazu die Methoden FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING und FIND_NEIGHBORS_BY_ENTITY_ID der Klasse /GOOG/CL_VECTOR_SEARCH.

  • Wenn Sie den nächsten Nachbarn abrufen möchten, der dem gesuchten Datenpunkt, String oder den Einbettungen am nächsten ist, rufen Sie die Methode GET_NEAREST_NEIGHBOR auf. Die Antwort dieser Methode listet die ID des nächstgelegenen Datenpunkts, seine Distanz zurr Suchanfrage und den damit verknüpften Featurevektor im Index auf.

    Im folgenden Codebeispiel wird gezeigt, wie der nächste Nachbar für einen Suchstring abgerufen wird:

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

    Ersetzen Sie Folgendes:

    • SEARCH_STRING: Suchstring eingeben.
    • MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
    • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
    • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.
  • Rufen Sie die Methode GET_NEAREST_NEIGHBORS auf, um die nächsten Nachbarn zu erhalten, die dem gesuchten Datenpunkt, String oder den Einbettungen am nächsten sind. Die Antwort dieser Methode ist eine Tabelle mit den nächstgelegenen Datenpunkten, in der die Datenpunkt-IDs, ihre Distanz zur Suchanfrage und der zugehörige Featurevektor im Index aufgeführt sind.

    Im folgenden Codebeispiel wird gezeigt, wie die nächsten Nachbarn für einen Suchstring abgerufen werden:

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

    Ersetzen Sie Folgendes:

    • SEARCH_STRING: Suchstring eingeben.
    • MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
    • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
    • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Distanz des abgerufenen Nachbarn abrufen

Mit der Methode GET_DATAPOINT_DISTANCE der Klasse /GOOG/CL_VECTORSEARCH_RESPONSE können Sie die Entfernung einer abgerufenen Antwort von der Suchanfrage ermitteln.

Die Distanz in der Suchantwort ist ein Maß für die Ähnlichkeit zwischen der Suchanfrage (String, Einbettung oder Entitäts-ID) und einem abgerufenen Ergebnisvektor. Die spezifische Bedeutung einer Distanz hängt von der "Entfernungsmessung" ab, die beim Erstellen eines Index verwendet wird.

Anhand des Entfernungswerts können Sie nachvollziehen, wie relevant die einzelnen Suchergebnisse für Ihre Suchanfrage sind. Ergebnisse mit niedrigeren Distanzen werden im Allgemeinen als ähnlicher oder relevanter eingestuft, während Ergebnisse mit höheren Distanzen als weniger ähnlich oder relevant eingestuft werden.

Im folgenden Codebeispiel wird gezeigt, wie die Distanz des nächsten Nachbarn für einen Suchstring abgerufen wird:

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

Ersetzen Sie Folgendes:

  • SEARCH_STRING: Suchstring eingeben.
  • MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
  • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Vektor der Einbettung des abgerufenen Nachbarn abrufen

Mit der Methode GET_DATAPOINT_FEATURE_VECTOR der Klasse /GOOG/CL_VECTORSEARCH_RESPONSE können Sie den Einbettungsvektor der abgerufenen Antwort aus der Suchanfrage ermitteln.

Wenn Sie einen Einbettungsvektor erhalten möchten, muss der Parameter IV_RETURN_FULL_DATAPOINT der Methoden FIND_NEIGHBORS_BY_STRING, FIND_NEIGHBORS_BY_EMBEDDING und FIND_NEIGHBORS_BY_ENTITY_ID auf ABAP_TRUE festgelegt sein.

Im folgenden Codebeispiel wird gezeigt, wie der Featurevektor des nächsten Nachbarn für einen Suchstring abgerufen wird:

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

Ersetzen Sie Folgendes:

  • SEARCH_STRING: Suchstring eingeben.
  • MODEL_KEY: Der Modellschlüssel zum Generieren von Einbettungen, der in den Parametern für die Modellgenerierung konfiguriert wird.
  • NEIGHBOR_COUNT: Anzahl der nächsten Nachbarn, die für die Abfrage abgerufen werden sollen.
  • RETURN_FULL_DATAPOINT: Wenn Sie die Vektoreinbettungen für die abgerufenen Datenpunkte zurückgeben möchten, legen Sie diesen Parameterwert auf ABAP_TRUE fest.

Nächste Schritte