Rechercher à l'aide d'embeddings

Pour les instances de magasin en ligne créées pour la diffusion en ligne optimisée, vous pouvez effectuer une recherche de similarité de vecteurs pour récupérer une liste d'entités sémantiquement similaires ou associées, également appelées voisins approximatifs les plus proches. Vous pouvez effectuer une recherche en fonction d'un ID d'entité ou d'une intégration.

Selon le type de point de terminaison configuré pour votre instance de magasin en ligne, vous pouvez effectuer l'une des opérations suivantes :

Avant de commencer

Pour rechercher les voisins approximatifs les plus proches, vous devez d'abord effectuer les opérations suivantes :

  • Configurez la source de données BigQuery pour accepter les représentations vectorielles continues en incluant la colonne embedding. Vous pouvez également inclure des colonnes de filtrage et de regroupement. Pour en savoir plus, consultez les consignes de préparation des sources de données.

  • Créez une instance de magasin en ligne pour la diffusion en ligne optimisée.

  • Créez une vue de caractéristiques compatible avec les représentations vectorielles continues en associant directement la source de données BigQuery. Lors de la création de la vue des caractéristiques, spécifiez la colonne embedding. Pour savoir comment créer une vue de caractéristiques compatible avec les embeddings, consultez Configurer la récupération vectorielle pour une vue de caractéristiques.

  • Si vous souhaitez rechercher les correspondances les plus proches à l'aide d'un point de terminaison Private Service Connect, installez la dernière version du SDK Python ou mettez à niveau votre version actuelle. Exécutez la commande suivante :
    pip3 install --upgrade --quiet google-cloud-aiplatform

  • Suivez ces instructions pour vous authentifier auprès de Vertex AI, sauf si vous l'avez déjà fait.

    Select the tab for how you plan to use the samples on this page:

    Python

    Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez la gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

      Installez la Google Cloud CLI.

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Pour en savoir plus, consultez la section Set up authentication for a local development environment.

    REST

    Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.

      Installez la Google Cloud CLI.

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .

Rechercher les correspondances des voisins les plus proches à l'aide d'un point de terminaison public

Si vous avez configuré votre instance de magasin en ligne pour diffuser des valeurs de caractéristiques à l'aide de la diffusion en ligne optimisée à partir d'un point de terminaison public, vous devez effectuer les étapes suivantes pour récupérer les correspondances de voisins les plus proches approximatifs :

  1. Récupérer le nom de domaine du point de terminaison public pour le magasin en ligne

  2. Récupérer les correspondances des voisins les plus proches d'un embedding ou d'une entité

Récupérer le nom de domaine du point de terminaison public pour le magasin en ligne

Lorsque vous créez une instance de magasin en ligne pour la diffusion en ligne optimisée, Vertex AI Feature Store génère un nom de domaine de point de terminaison public pour le magasin en ligne. Avant de pouvoir rechercher les voisins les plus proches à partir d'une vue des caractéristiques de la boutique en ligne, vous devez récupérer le nom de domaine du point de terminaison public à partir des détails de la boutique en ligne.

Basez-vous sur l'exemple suivant pour récupérer les détails d'une instance de magasin en ligne.

REST

Pour récupérer les détails d'une ressource FeatureOnlineStore au sein de votre projet, envoyez une requête GET à l'aide de la méthode featureOnlineStores.get.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • LOCATION_ID : région où se trouve le magasin en ligne, par exemple us-central1.
  • PROJECT_ID : ID de votre projet
  • FEATUREONLINESTORE_NAME : nom de l'instance de magasin en ligne.

Méthode HTTP et URL :

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "publicEndpointDomainName": "PUBLIC_ENDPOINT_DOMAIN_NAME"
  },
  "optimized": {}
}

Vous aurez besoin de la valeur PUBLIC_ENDPOINT_DOMAIN_NAME, fournie dans la réponse, pour récupérer les voisins les plus proches approximatifs à l'étape suivante.

Récupérer les voisins approximatifs les plus proches à l'aide d'un point de terminaison public

Après avoir récupéré le nom de domaine du point de terminaison public pour le magasin en ligne, vous pouvez l'utiliser pour rechercher les voisins approximatifs les plus proches d'un embedding ou d'une entité.

Récupérer les voisins approximatifs les plus proches d'un embedding

Utilisez l'exemple suivant pour rechercher des entités sémantiquement liées en spécifiant un embedding tout en utilisant un point de terminaison public.

REST

Pour rechercher les représentations voisines les plus proches, envoyez une requête POST à l'aide de la méthode featureViews.searchNearestEntities.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PUBLIC_ENDPOINT_DOMAIN_NAME : nom de domaine du point de terminaison public pour l'instance de magasin en ligne, que vous avez récupéré à l'aide de la méthode featureOnlineStores.get.
  • PROJECT_ID : ID de votre projet
  • LOCATION_ID : région où se trouve l'instance de boutique en ligne, telle que us-central1.
  • FEATUREONLINESTORE_NAME : nom de l'instance de boutique en ligne contenant la vue de la caractéristique dans laquelle vous souhaitez rechercher des correspondances de type "plus proches voisins approximatifs".
  • FEATUREVIEW_NAME : nom de la vue de la caractéristique dans laquelle vous souhaitez rechercher les correspondances voisines approximatives les plus proches.
  • EMBEDDING : embedding pour lequel vous souhaitez récupérer les correspondances de voisins approximatifs les plus proches. Un embedding est représenté par un tableau de valeurs double.
  • RETURN_FULL_ENTITY Facultatif : indiquez si vous souhaitez inclure ou exclure les caractéristiques des entités de la réponse. Pour inclure les caractéristiques avec les entités dans la réponse, saisissez true. La valeur par défaut est false.
  • NEIGHBOR_COUNT : nombre de voisins approximatifs les plus proches que vous souhaitez récupérer.

Méthode HTTP et URL :

POST https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities

Corps JSON de la requête :

{
  "query": {
    "embedding": {
      "value": EMBEDDING
    },
    "neighbor_count": NEIGHBOR_COUNT
  },
  "return_full_entity": RETURN_FULL_ENTITY
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

{
  "nearestNeighbors": {
    "neighbors": [
    {
      "entityId": "305281",
      "distance": -41.115459442138672
    },
    {
      "entityId": "80280",
      "distance": -38.703567504882812
    },
    {
      "entityId": "80280",
      "distance":-38.703567504882812
    },
    {
      "entityId": "903779",
      "distance": -38.214759826660156
    },
    {
      "entityId": "1008145",
      "distance": -36.271354675292969
    },
    {
      "entityId": "606431",
      "distance": -34.791431427001953
    } ]
  }
}

Récupérer les voisins approximatifs les plus proches d'une entité

Utilisez l'exemple suivant pour rechercher des entités sémantiquement liées en spécifiant un ID d'entité lors de l'utilisation d'un point de terminaison public.

REST

Pour rechercher les ID des entités voisines les plus proches, envoyez une requête POST à l'aide de la méthode featureViews.searchNearestEntities.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PUBLIC_ENDPOINT_DOMAIN_NAME : nom de domaine du point de terminaison public pour l'instance de magasin en ligne, que vous avez récupéré à l'aide de la méthode featureOnlineStores.get.
  • PROJECT_ID : ID de votre projet
  • LOCATION_ID : région où se trouve l'instance de boutique en ligne, telle que us-central1.
  • FEATUREONLINESTORE_NAME : nom de l'instance de boutique en ligne contenant la vue de la caractéristique dans laquelle vous souhaitez rechercher des correspondances de type "plus proches voisins approximatifs".
  • FEATUREVIEW_NAME : nom de la vue de la caractéristique dans laquelle vous souhaitez rechercher les correspondances voisines approximatives les plus proches.
  • ENTITY_ID : ID de l'entité pour laquelle vous souhaitez récupérer les correspondances des voisins approximatifs les plus proches.
  • RETURN_FULL_ENTITY Facultatif : indiquez si vous souhaitez inclure ou exclure les caractéristiques des entités de la réponse. Pour inclure les caractéristiques avec les entités dans la réponse, saisissez true. La valeur par défaut est false.
  • NEIGHBOR_COUNT : nombre de voisins approximatifs les plus proches que vous souhaitez récupérer.

Méthode HTTP et URL :

POST https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities

Corps JSON de la requête :

{
  "query": {
    "entity_id": ENTITY_ID,
    "neighbor_count": NEIGHBOR_COUNT
  },
  "return_full_entity": RETURN_FULL_ENTITY
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

{
  "nearestNeighbors": {
    "neighbors": [
    {
      "entityId": "305281",
      "distance": -41.115459442138672
    },
    {
      "entityId": "80280",
      "distance": -38.703567504882812
    },
    {
      "entityId": "80280",
      "distance":-38.703567504882812
    },
    {
      "entityId": "903779",
      "distance": -38.214759826660156
    },
    {
      "entityId": "1008145",
      "distance": -36.271354675292969
    },
    {
      "entityId": "606431",
      "distance": -34.791431427001953
    } ]
  }
}

Rechercher les correspondances les plus proches à l'aide d'un point de terminaison Private Service Connect

Si vous avez configuré votre instance de magasin en ligne pour diffuser des valeurs de caractéristiques à l'aide de la diffusion en ligne optimisée à partir d'un point de terminaison Private Service Connect, vous devez effectuer les étapes suivantes pour récupérer les correspondances de voisins les plus proches approximatifs :

  1. Récupérez la chaîne de rattachement de service pour la boutique en ligne.

  2. Ajoutez un point de terminaison pour Private Service Connect à votre configuration réseau.

  3. Connectez-vous au point de terminaison Private Service Connect via gRPC.

  4. Récupérer les correspondances des voisins les plus proches d'un embedding ou d'une entité

Récupérer la chaîne de rattachement de service pour le magasin en ligne

Lorsque vous créez une instance de magasin en ligne pour la diffusion en ligne optimisée avec un point de terminaison Private Service Connect, Vertex AI Feature Store génère une chaîne de rattachement de service. Vous pouvez récupérer la chaîne de rattachement de service à partir des détails du magasin en ligne et l'utiliser pour configurer le point de terminaison Private Service Connect.

Basez-vous sur l'exemple suivant pour récupérer les détails d'une instance de magasin en ligne.

REST

Pour récupérer les détails d'une ressource FeatureOnlineStore au sein de votre projet, envoyez une requête GET à l'aide de la méthode featureOnlineStores.get.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • LOCATION_ID : région où se trouve le magasin en ligne, par exemple us-central1.
  • PROJECT_ID : ID de votre projet
  • FEATUREONLINESTORE_NAME : nom de l'instance de magasin en ligne.

Méthode HTTP et URL :

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "privateServiceConnectConfig": {
      "enablePrivateServiceConnect": "true",
      "projectAllowlist": [
        "PROJECT_NAME"
      ]
    },
    serviceAttachment: "SERVICE_ATTACHMENT_STRING"
  },
  "optimized": {}
}

Vous aurez besoin de la valeur SERVICE_ATTACHMENT_STRING, fournie dans la réponse, pour extraire les valeurs de caractéristiques à l'étape suivante.

Ajouter un point de terminaison pour Private Service Connect

Procédez comme suit pour ajouter à votre configuration réseau un point de terminaison Private Service Connect pour la diffusion en ligne optimisée :

  1. Dans la console Google Cloud , sélectionnez le projet contenant l'instance de magasin en ligne.

  2. Créez un point de terminaison pour Private Service Connect en spécifiant SERVICE_ATTACHMENT_STRING comme service cible.

Une fois le point de terminaison créé, il apparaît dans l'onglet Points de terminaison connectés sur la page Private Service Connect. L'adresse IP du point de terminaison apparaît dans la colonne Adresses IP.

Accéder à l'onglet "Points de terminaison connectés"

Vous devrez utiliser cette adresse IP pour vous connecter au point de terminaison Private Service Connect créé pour votre instance de magasin en ligne via gRPC à l'étape suivante.

Se connecter au point de terminaison Private Service Connect via gRPC

Utilisez l'exemple de code suivant pour vous connecter au point de terminaison Private Service Connect créé pour votre magasin en ligne via gRPC.

Python

from google.cloud.aiplatform_v1 import FeatureOnlineStoreServiceClient
from google.cloud.aiplatform_v1.services.feature_online_store_service.transports.grpc import FeatureOnlineStoreServiceGrpcTransport
import grpc

data_client = FeatureOnlineStoreServiceClient(
  transport = FeatureOnlineStoreServiceGrpcTransport(
    # Add the IP address of the Endpoint you just created.
    channel = grpc.insecure_channel("ENDPOINT_IP:10002")
  )
)

Remplacez les éléments suivants :

  • ENDPOINT_IP : adresse IP du point de terminaison dans la colonne Adresses IP de la page Private Service Connect.

Récupérer les voisins approximatifs les plus proches à l'aide d'un point de terminaison Private Service Connect

Une fois que vous êtes connecté au point de terminaison Private Service Connect via gRPC, vous pouvez rechercher les voisins les plus proches approximatifs d'un embedding ou d'une entité.

Récupérer les voisins approximatifs les plus proches d'un embedding

Utilisez l'exemple suivant pour rechercher des entités sémantiquement liées en spécifiant un embedding lors de l'utilisation d'un point de terminaison privé.

Python

data_client.search_nearest_entities(
  request=feature_online_store_service_pb2.SearchNearestEntitiesRequest(
      feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
      query=feature_online_store_service_pb2.NearestNeighborQuery(
          embedding = "EMBEDDING",
          neighbor_count = NEIGHBOR_COUNT,
      ),
      return_full_entity=RETURN_FULL_ENTITY
  ))

Remplacez les éléments suivants :

  • LOCATION_ID : région où se trouve la boutique en ligne, par exemple us-central1.

  • PROJECT_ID : ID de votre projet

  • FEATUREONLINESTORE_NAME : nom du magasin en ligne contenant la vue de caractéristiques.

  • FEATUREVIEW_NAME : nom de la vue de caractéristiques dans laquelle vous souhaitez rechercher les correspondances de type "plus proches voisins approximatifs".

  • EMBEDDING : embedding pour lequel vous souhaitez récupérer les correspondances de voisins approximatifs les plus proches. Un embedding est représenté par un tableau de valeurs double.

  • FORMAT (facultatif) : format dans lequel vous souhaitez récupérer les valeurs des caractéristiques. Les formats acceptés incluent les paires clé-valeur JSON et les formats proto Struct. Notez que le format proto Struct n'est pas compatible avec le type de valeur de fonctionnalité bytes. Si vous souhaitez récupérer des valeurs de caractéristiques au format octet, utilisez JSON comme format de réponse.

  • RETURN_FULL_ENTITY : facultatif : indiquez si vous souhaitez inclure ou exclure les caractéristiques des entités de la réponse. Pour inclure les caractéristiques avec les entités dans la réponse, saisissez true. La valeur par défaut est false.

  • NEIGHBOR_COUNT : nombre de voisins approximatifs les plus proches que vous souhaitez récupérer.

Récupérer les voisins approximatifs les plus proches d'une entité

Utilisez l'exemple suivant pour rechercher des entités sémantiquement liées en spécifiant un ID d'entité lors de l'utilisation d'un point de terminaison privé.

Python

data_client.search_nearest_entities(
  request=feature_online_store_service_pb2.SearchNearestEntitiesRequest(
      feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
      query=feature_online_store_service_pb2.NearestNeighborQuery(
          entity_id = "ENTITY_ID",
          neighbor_count = NEIGHBOR_COUNT,
      ),
      return_full_entity=RETURN_FULL_ENTITY
  ))
 ```

Remplacez les éléments suivants :

  • LOCATION_ID : région où se trouve la boutique en ligne, par exemple us-central1.

  • PROJECT_ID : ID de votre projet

  • FEATUREONLINESTORE_NAME : nom du magasin en ligne contenant la vue de caractéristiques.

  • FEATUREVIEW_NAME : nom de la vue de caractéristiques dans laquelle vous souhaitez rechercher les correspondances de type "plus proches voisins approximatifs".

  • ENTITY_ID : ID de l'entité pour laquelle vous souhaitez récupérer les correspondances des voisins approximatifs les plus proches.

  • FORMAT (facultatif) : format dans lequel vous souhaitez récupérer les valeurs des caractéristiques. Les formats acceptés incluent les paires clé-valeur JSON et les formats proto Struct. Notez que le format proto Struct n'est pas compatible avec le type de valeur de fonctionnalité bytes. Si vous souhaitez récupérer des valeurs de caractéristiques au format octet, utilisez JSON comme format de réponse.

  • RETURN_FULL_ENTITY : facultatif : indiquez si vous souhaitez inclure ou exclure les caractéristiques des entités de la réponse. Pour inclure les caractéristiques avec les entités dans la réponse, saisissez true. La valeur par défaut est false.

  • NEIGHBOR_COUNT : nombre de voisins approximatifs les plus proches que vous souhaitez récupérer.