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:
- Generieren Sie Einbettungsdarstellungen Ihrer Unternehmensdaten.
- Laden Sie die Einbettungen in einen Cloud Storage-Bucket hoch.
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.
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.
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:
- Sie haben die Vertex AI API in Ihrem Google Cloud-Projekt aktiviert.
- Richten Sie die Authentifizierung für den Zugriff auf die Vertex AI API ein.
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
oderSTREAM_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 Standardwert1000
.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 Standardwert10
(bedeutet10%
) 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 IndexendpunktsINDEX_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 aufABAP_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 aufABAP_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 aufABAP_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
undREMOVE_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 aufABAP_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 Standardwert1000
.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 Standardwert10
(bedeutet10%
) 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 Standardwert1000
.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 Standardwert10
(bedeutet10%
) 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:
- Sie haben die Vertex AI API in Ihrem Google Cloud-Projekt aktiviert.
- Richten Sie die Authentifizierung für den Zugriff auf die Vertex AI API ein.
- Sie haben die Parameter für die Vektorsuche konfiguriert.
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.
Rufen Sie den Hostnamen für den Indexendpunkt ab:
-
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. - Klicken Sie auf ABAP SDK for Google Cloud > Dienstprogramme > Vertex AI SDK: RFC-Informationen für Feature Store und Vektorsuche abrufen.
- Wählen Sie Vektorsuchdetails abrufen aus.
Wählen Sie eine der folgenden Optionen aus:
- Suchschlüssel
- Endpunkt-ID des Vektorindex
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.
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.
Klicken Sie auf Ausführen, um die Details aufzurufen. Notieren Sie sich den Endpunkt unter dem Label Host.
-
Führen Sie in der SAP-GUI den Transaktionscode
Erstellen Sie ein RFC-Ziel für den Indexendpunkt:
Führen Sie in der SAP-GUI den Transaktionscode
SM59
aus.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
.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.
Gehen Sie zum Tab Anmeldung und Sicherheit und prüfen Sie, ob Feld SSL-Zertifikat auf die Option DEFAULT-SSL-Client (Standard) festgelegt ist.
Speichern Sie die Änderungen.
Konfigurieren Sie die Dienstzuordnungstabelle für die Vertex AI API:
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.Klicken Sie auf ABAP SDK for Google Cloud > Grundlegende Einstellungen > Dienstzuordnung konfigurieren.
Klicken Sie auf Neue Einträge.
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. Speichern Sie den neuen Eintrag.
Klasse für die Vektorsuche instanziieren
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 aufABAP_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 aufABAP_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 aufABAP_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 aufABAP_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 aufABAP_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 aufABAP_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 aufABAP_TRUE
fest.
Nächste Schritte
In den Cloud-Foren können Sie Ihre Fragen stellen und über das Vertex AI SDK für ABAP mit der Community sprechen.