Effectuer une recherche vectorielle dans BigQuery

Le SDK BigQuery AI et ML pour ABAP vous permet d'effectuer une recherche vectorielle sur vos données d'entreprise vectorisées dans BigQuery à l'aide de chaînes de recherche basées sur le langage naturel, et d'afficher les résultats à partir de vos agents ou applications basés sur ABAP.

La recherche vectorielle BigQuery vous permet d'utiliser GoogleSQL pour effectuer une recherche sémantique à l'aide d'index vectoriels afin d'obtenir des résultats approximatifs. Avec Vector Search, vous pouvez trouver des points de données sémantiquement similaires dans de grands ensembles de données à l'aide de vecteurs ou d'embeddings de grande dimension. Vous pouvez stocker vos embeddings vectoriels dans BigQuery, en faisant de BigQuery votre base de données vectorielle et en y appliquant la recherche de similarité vectorielle à l'aide de la fonction BigQuery VECTOR_SEARCH.

Avant de commencer

Avant d'utiliser le SDK BigQuery AI et ML pour ABAP avec les modèles Gemini, assurez-vous que vous ou vos administrateurs avez rempli les conditions préalables suivantes:

Tarifs

Le SDK BigQuery AI et ML pour ABAP est proposé sans frais. Toutefois, vous êtes responsable des frais liés à l'instruction CREATE VECTOR INDEX et à la fonction VECTOR_SEARCH, qui utilisent la tarification de calcul BigQuery.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Pour en savoir plus sur les tarifs de BigQuery, consultez la page Tarifs de BigQuery.

Effectuer une recherche vectorielle dans BigQuery

Cette section explique comment effectuer une recherche sémantique vectorielle sur vos données d'entreprise stockées dans BigQuery à partir de votre application ABAP à l'aide du SDK BigQuery AI et ML pour ABAP.

Instancier la classe d'appelant de la recherche vectorielle BigQuery

Pour effectuer une recherche vectorielle à l'aide d'une chaîne de recherche, vous devez instancier la classe /GOOG/CL_BQ_VECTOR_SEARCH.

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.

Remplacez CLIENT_KEY par la clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.

Rechercher des éléments similaires pour une chaîne de recherche

Pour exécuter des requêtes afin d'effectuer une recherche vectorielle avec la fonction BigQuery VECTOR_SEARCH, utilisez la méthode FIND_NEAREST_NEIGHBORS de la classe /GOOG/CL_BQ_VECTOR_SEARCH.

L'objet de la classe /GOOG/CL_BQ_QUERY défini avec la requête est transmis en entrée à la méthode.

lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).

LO_BQ_QUERY est la référence de la classe /GOOG/CL_BQ_QUERY après avoir défini la requête. Vous pouvez transmettre la chaîne de recherche à partir du texte de la requête.

Remplacer les paramètres de recherche vectorielle

Vous pouvez définir des paramètres de recherche vectorielle (sous les définitions de fonction VECTOR_SEARCH) dans la requête enregistrée dans BigQuery ou dans le texte de la requête transmise. Toutefois, si vous devez remplacer les paramètres de la même requête à partir de la logique d'application ABAP, vous pouvez utiliser la méthode SET_SEARCH_PARAMETERS de la classe /GOOG/CL_BQ_VECTOR_SEARCH. Les paramètres de recherche de la requête initiale sont complètement remplacés par les paramètres transmis via cette méthode.

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

Remplacez les éléments suivants :

  • TOP_K: valeur INT64 spécifiant le nombre de voisins les plus proches à renvoyer.
  • DISTANCE_TYPE: valeur de chaîne qui spécifie le type de métrique à utiliser pour calculer la distance entre deux vecteurs. Recherchez les valeurs probables de l'argument DISTANCE_TYPE sous les définitions de la fonction VECTOR_SEARCH.
  • FRACTION_LISTS_TO_SEARCH: valeur de chaîne qui spécifie le pourcentage de listes à rechercher. Recherchez les valeurs probables de l'argument FRACTION_LISTS_TO_SEARCH sous les options de définition de la fonction VECTOR_SEARCH.

Obtenir la réponse de la recherche vectorielle

Pour recevoir des réponses traitées par BigQuery ML pour les requêtes de recherche vectorielle et les présenter de manière pertinente, utilisez la classe /GOOG/CL_BQ_SEARCH_RESPONSE.

La réponse capturée par la classe /GOOG/CL_BQ_SEARCH_RESPONSE est associée aux requêtes effectuées via les méthodes de la classe /GOOG/CL_BQ_VECTOR_SEARCH. Vous pouvez ainsi accéder directement à la réponse dans une seule instruction sans avoir besoin de variables pour stocker les résultats intermédiaires.

Obtenir les voisins les plus proches pour la chaîne de recherche

Pour obtenir les voisins les plus proches de la chaîne de recherche, utilisez la méthode GET_NEAREST_NEIGHBORS. Le nombre de voisins renvoyés dépend de la valeur spécifiée ou définie dans le paramètre TOP_K de la fonction VECTOR_SEARCH dans la requête appelée.

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

LT_SEARCH_RESPONSE contient également la distance de l'élément de la réponse de recherche par rapport à la chaîne de recherche pour indiquer le degré de similarité.

Obtenir le voisin le plus proche de la chaîne de recherche

Pour obtenir le voisin le plus proche de la chaîne de recherche, utilisez la méthode GET_NEAREST_NEIGHBOR. Dans ce cas, seul le voisin le plus proche est extrait par rapport à la chaîne de recherche, quelle que soit la valeur spécifiée ou définie dans le paramètre TOP_K de la fonction VECTOR_SEARCH dans la requête appelée.

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

LS_SEARCH_RESPONSE contient également la distance de la réponse de recherche par rapport à la chaîne de recherche pour indiquer le degré de similarité.