Obtenir des réponses et des suivis

Cette page présente la recherche avec réponse et les questions complémentaires pour Vertex AI Search. Elle explique également comment l'implémenter pour les applications de recherche personnalisées à l'aide d'appels de méthode.

La recherche avec réponse et questions complémentaires est basée sur la méthode de réponse. La méthode answer remplace les fonctionnalités de synthèse de l'ancienne méthode search et toutes les fonctionnalités de la méthode converse obsolète. La méthode de réponse présente également d'autres fonctionnalités importantes, comme la capacité à traiter des requêtes complexes.

Fonctionnalités de la méthode de réponse

Voici les principales caractéristiques de la méthode de réponse :

  • La capacité à générer des réponses à des requêtes complexes. Par exemple, la méthode de réponse peut décomposer les requêtes composées, telles que les suivantes, en plusieurs requêtes plus petites pour renvoyer de meilleurs résultats qui sont utilisés pour générer de meilleures réponses :

    • "Quels sont les revenus respectifs de Google Cloud et Google Ads en 2024 ?"
    • "Combien d'années après sa création Google a-t-il atteint un milliard de dollars de revenus ?"
  • La possibilité de combiner la recherche et la génération de réponses dans une conversation en plusieurs tours en appelant la méthode de réponse à chaque tour.

  • Possibilité de l'associer à la méthode de recherche pour réduire la latence de recherche. Vous pouvez appeler la méthode de recherche et la méthode de réponse séparément, et afficher les résultats de recherche et les réponses dans différents iFrames à des moments différents. Cela signifie que vous pouvez afficher les résultats de recherche (les 10 liens bleus) à vos utilisateurs en quelques millisecondes. Vous n'avez pas besoin d'attendre que les réponses soient générées pour afficher les résultats de recherche.

Les fonctionnalités de réponse et de suivi peuvent être divisées en trois phases de la requête, de la recherche et de la réponse :

Quand utiliser la réponse et quand utiliser la recherche

Vertex AI Search propose deux méthodes pour interroger les applications. Elles présentent des fonctionnalités différentes, mais qui se chevauchent.

Utilisez la méthode answer lorsque :

  • Vous souhaitez obtenir une réponse (ou un résumé) générée par l'IA à partir des résultats de recherche.

  • Vous souhaitez effectuer des recherches multitours, c'est-à-dire des recherches qui conservent le contexte et permettent de poser des questions complémentaires.

Utilisez la méthode search dans les cas suivants :

  • Vous n'avez besoin que des résultats de recherche, pas d'une réponse générée.

  • Vous présentez l'un des symptômes suivants :

    • Données média ou de santé
    • Vos propres embeddings
    • Contrôles de synonymes ou de redirection
    • Attributs
    • Codes pays des utilisateurs
  • Vous devez parcourir les données de votre data store générique.

Utilisez les méthodes de réponse et de recherche ensemble lorsque :

  • Vous souhaitez renvoyer plus de dix résultats de recherche et obtenir une réponse générée.

  • Vous rencontrez des problèmes de latence et vous souhaitez renvoyer et afficher rapidement les résultats de recherche avant que la réponse générée ne soit renvoyée.

Fonctionnalités de la phase de requête

La fonctionnalité de réponse et de suivi prend en charge le traitement des requêtes en langage naturel.

Cette section décrit et illustre les différentes options de reformulation et de classification des requêtes.

Reformulation des requêtes

La reformulation des requêtes est activée par défaut. Cette fonctionnalité choisit automatiquement la meilleure façon de reformuler les requêtes pour améliorer les résultats de recherche. Cette fonctionnalité peut également traiter les requêtes qui ne nécessitent pas d'être reformulées.

  • Décomposez les requêtes complexes en plusieurs requêtes et effectuez des sous-requêtes synchrones.

    Par exemple, une requête complexe est divisée en quatre requêtes plus petites et plus simples.

    Entrée utilisateur Sous-requêtes créées à partir de la requête complexe
    Quels sont les métiers et les loisirs qu'Andie Ram et Arnaud Clément ont en commun ?
    • Andie Ram occupation
    • Profession d'Arnaud Clément
    • Andie Ram hobby
    • Loisir d'Arnaud Clément
  • Synthétiser les requêtes multitours pour que les questions de suivi soient contextuelles et avec état.

    Par exemple, les requêtes synthétisées à partir des saisies utilisateur à chaque tour peuvent ressembler à ceci :

    Entrée utilisateur Requête synthétisée
    Tour 1 : ordinateurs portables pour l'école ordinateurs portables pour l'école
    Turn 2: not mac ordinateurs portables pour l'école (pas Mac)
    Tour 3 : écran plus grand et clavier et souris sans fil ordinateurs portables à grand écran pour l'école (pas Mac) avec clavier et souris sans fil
    Tour 4 : et un sac à dos pour le transporter des ordinateurs portables à grand écran pour l'école (pas des Mac) avec un clavier et une souris sans fil, et un sac à dos pour les transporter
  • Simplifiez les requêtes longues pour améliorer la récupération (nécessite les fonctionnalités LLM avancées).

    Par exemple, une longue requête est raccourcie pour devenir une requête typique.

    Entrée utilisateur Requête simplifiée
    Je cherche à comprendre pourquoi le bouton "Ajouter au panier" de notre site Web ne fonctionne pas correctement. Il semble que lorsqu'un utilisateur clique sur le bouton, l'article n'est pas ajouté au panier et un message d'erreur s'affiche. J'ai vérifié le code et il semble correct. Je ne suis donc pas sûr de ce qui pourrait poser problème. Pouvez-vous m'aider à résoudre ce problème ? Le bouton "Ajouter au panier" ne fonctionne pas sur le site Web.
  • Effectuer un raisonnement en plusieurs étapes

    Le raisonnement en plusieurs étapes est basé sur le paradigme ReAct (raisonner et agir), qui permet aux LLM de résoudre des tâches complexes à l'aide du raisonnement en langage naturel. Par défaut, le nombre maximal d'étapes est de cinq.

    Exemple :

    Entrée utilisateur Deux étapes pour générer la réponse
    Combien d'années après sa création Google a-t-il atteint un milliard de dollars de revenus ? Étape 1 :
    [Pensée]: Je dois savoir quand Google a été fondé pour pouvoir interroger ses revenus depuis cette date.
    [Act] Search: When was Google founded?[Observe Search Results]: "1998"

    Step 2:
    [Thought]: Now I need to Google's yearly revenue since 1998, and find out when it exceeded 1 billion for the first time.
    [Act] Search: Google revenue since 1998
    [Observe Search Results] Google revenue in 1998, Google revenue in 1999…..
    [Réponse]: Google a généré plus d'un milliard de dollars de revenus en 2003[1], cinq ans après sa fondation en 1998[2].

    Le raisonnement en plusieurs étapes nécessite les fonctionnalités LLM avancées.

Classification des requêtes

Les options de classification des requêtes permettent d'identifier les requêtes adversariales et celles qui ne cherchent pas de réponse. Par défaut, les options de classification des requêtes sont désactivées.

Pour en savoir plus sur les requêtes contradictoires et celles qui ne cherchent pas de réponse, consultez Ignorer les requêtes contradictoires et Ignorer les requêtes qui ne cherchent pas de résumé.

Fonctionnalités de la phase de recherche

Pour la recherche, la méthode de réponse propose les mêmes options que la méthode de recherche. Exemple :

Fonctionnalités de la phase de réponse

Pendant la phase de réponse, lorsque des réponses sont générées à partir des résultats de recherche, vous pouvez activer les mêmes fonctionnalités que dans la méthode de recherche. Exemple :

Voici les fonctionnalités supplémentaires de la phase de réponse qui ne sont pas disponibles dans la méthode de recherche :

  • Obtenir un score de soutien pour chaque affirmation (phrase de la réponse générée). Le score de soutien est une valeur à virgule flottante comprise entre 0 et 1. Il indique dans quelle mesure l'affirmation est ancrée dans les données du data store. Pour en savoir plus, consultez Renvoi des scores d'ancrage du grounding.

  • Obtenir un score d'assistance agrégé pour la réponse. Le score de pertinence indique dans quelle mesure la réponse est ancrée dans les données du data store. Pour en savoir plus, consultez Renvoyer les scores d'ancrage au sol.

  • Ne renvoie que des réponses bien ancrées. Vous pouvez choisir de ne renvoyer que les réponses qui atteignent un certain seuil de score d'assistance. Pour en savoir plus, consultez Afficher uniquement les réponses bien ancrées.

  • Choisissez de renvoyer les questions associées. Les questions associées sont des suggestions que vos utilisateurs peuvent choisir au lieu de saisir leurs propres questions.

  • Ajoutez des informations de personnalisation aux requêtes pour que les réponses puissent être personnalisées pour chaque utilisateur. Pour en savoir plus, consultez Personnaliser les réponses.

Pour recevoir des réponses multimodales incluant des graphiques ou des images en plus du texte, les options suivantes sont disponibles :

  • Obtenir des réponses incluant des graphiques qui représentent les données contenues dans les réponses. Pour en savoir plus, consultez Générer des graphiques pour les réponses.

  • Récupération des images depuis le data store. Si le data store contient des images, la méthode de réponse peut renvoyer une image dans la réponse. Les images du data store peuvent également être renvoyées dans des références si des citations sont demandées. Pour en savoir plus, consultez Récupérer des images existantes à partir du data store.

Avant de commencer

Selon le type d'application dont vous disposez, respectez les exigences suivantes :

  • Si vous disposez d'une application de recherche structurée, non structurée ou sur un site Web, activez les options suivantes :

    • Fonctionnalités de l'édition Enterprise : vous avez accès aux principales fonctionnalités de réponses génératives. Cela inclut toutes les fonctionnalités de génération de réponses, à l'exception des fonctionnalités avancées de génération de réponses, telles que les questions associées, la simplification des requêtes, les requêtes multitours et les réponses multimodales qui renvoient des images et des graphiques.
    • Fonctionnalités LLM avancées : vous avez accès aux fonctionnalités avancées de réponses génératives qui nécessitent un raisonnement en plusieurs étapes, la simplification des requêtes, les requêtes multitours, les questions associées et les réponses multimodales qui renvoient des images et des graphiques.
  • De plus, si vous disposez d'un data store de recherche sur le site Web, activez l'indexation avancée de sites Web.

Rechercher et répondre (de base)

La commande suivante montre comment appeler la méthode answer et renvoyer une réponse générée ainsi qu'une liste de résultats de recherche, avec des liens vers les sources.

Cette commande n'affiche que l'entrée requise. Les options sont laissées à leurs valeurs par défaut.

REST

Pour effectuer une recherche et obtenir des résultats avec une réponse générée :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"}
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple, "Compare les bases de données BigQuery et Spanner".

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Commandes de phase de requête

Cette section explique comment spécifier les options de la phase de requête de l'appel de méthode answer.

Rechercher et répondre (reformulation désactivée)

La commande suivante montre comment appeler la méthode answer et renvoyer une réponse générée ainsi qu'une liste de résultats de recherche. La réponse peut être différente de la précédente, car l'option de reformulation est désactivée.

REST

Pour effectuer une recherche et obtenir des résultats avec une réponse générée sans appliquer de reformulation de la requête :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
               "queryRephraserSpec": {
                  "disable": true
            }
        }
          }'
    
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple, "Compare les bases de données BigQuery et Spanner".

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Recherche et réponse (spécifiez le nombre maximal d'étapes)

La commande suivante montre comment appeler la méthode answer et renvoyer une réponse générée ainsi qu'une liste de résultats de recherche. La réponse est différente des précédentes, car le nombre d'étapes de reformulation a été augmenté.

REST

Pour effectuer une recherche et obtenir des résultats avec une réponse générée autorisant jusqu'à cinq étapes de reformulation, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryRephraserSpec": {
                    "maxRephraseSteps": MAX_REPHRASE
                 }
             }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple, "Compare les bases de données BigQuery et Spanner".
    • MAX_REPHRASE : nombre maximal d'étapes de reformulation. La valeur maximale autorisée est de 5. Si la valeur n'est pas définie ou est inférieure à 1, la valeur par défaut est 1.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Rechercher et répondre avec la classification des requêtes

La commande suivante montre comment appeler la méthode answer pour savoir si une requête est contradictoire, ne cherche pas de réponse ou n'est ni l'un ni l'autre.

La réponse inclut le type de classification de la requête, mais la réponse elle-même n'est pas affectée par la classification. Si vous souhaitez modifier le comportement de la réponse en fonction du type de requête, vous pouvez le faire lors de la phase de réponse. Consultez Ignorer les requêtes contradictoires et Ignorer les requêtes ne visant pas à obtenir un résumé.

REST

Pour déterminer si une requête est malveillante ou ne cherche pas de réponse, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryClassificationSpec": {
                    "types": ["QUERY_CLASSIFICATION_TYPE"]
                 }
             }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple, "bonjour".
    • QUERY_CLASSIFICATION_TYPE : types de requêtes que vous souhaitez identifier : ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY ou les deux.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Commandes de la phase de recherche : rechercher et répondre avec des options de résultats de recherche

Cette section explique comment spécifier des options pour la partie de la phase de recherche de l'appel de méthode answer, telles que la définition du nombre maximal de documents renvoyés, l'amplification et le filtrage, et comment obtenir une réponse lorsque vous fournissez vos propres résultats de recherche.

La commande suivante montre comment appeler la méthode answer et spécifier différentes options pour le mode de renvoi du résultat de recherche. (Les résultats de recherche sont indépendants de la réponse.)

REST

Pour définir différentes options liées aux résultats de recherche renvoyés et à la façon dont ils le sont :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults": MAX_RETURN_RESULTS,
                "filter": "FILTER",
                "boostSpec": BOOST_SPEC,
                "orderBy": "ORDER_BY",
                "searchResultMode": SEARCH_RESULT_MODE
               }
             }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple : "Compare les bases de données BigQuery et Spanner."
    • MAX_RETURN_RESULTS : nombre de résultats de recherche à renvoyer. La valeur par défaut est 10. La valeur maximale est 25.
    • FILTER : le filtre spécifie les documents interrogés. Si les métadonnées d'un document répondent aux spécifications du filtre, le document sera interrogé. Pour en savoir plus, y compris sur la syntaxe des filtres, consultez Filtrer la recherche personnalisée pour les données structurées ou non structurées.
    • BOOST_SPEC : la spécification de boost vous permet de booster certains documents dans les résultats de recherche, ce qui peut avoir une incidence sur la réponse. Pour en savoir plus, y compris sur la syntaxe de la spécification du boost, consultez Booster les résultats de recherche.
    • ORDER_BY : ordre dans lequel les documents sont renvoyés. Les documents peuvent être triés par champ dans un objet Document. L'expression orderBy est sensible à la casse. Si ce champ n'est pas reconnaissable, une INVALID_ARGUMENT est renvoyée.
    • SEARCH_RESULT_MODE : spécifie le mode de résultat de recherche : DOCUMENTS ou CHUNKS. Pour en savoir plus, consultez Analyser et segmenter des documents et ContentSearchSpec. Ce champ n'est disponible que dans la version v1alpha de l'API.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Commandes de la phase de réponse

Cette section explique comment personnaliser l'appel de méthode answer. Vous pouvez combiner les options suivantes selon vos besoins.

Ignorer les requêtes antagonistes et celles qui ne cherchent pas de réponse

La commande suivante montre comment éviter de répondre aux requêtes contradictoires et aux requêtes qui ne cherchent pas de réponse lorsque vous appelez la méthode answer.

REST

Pour ignorer les requêtes hostiles ou qui ne cherchent pas de réponse, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreAdversarialQuery": true,
               "ignoreNonAnswerSeekingQuery": true
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Afficher uniquement les réponses pertinentes

Vertex AI Search peut évaluer la pertinence des résultats par rapport à une requête. Si aucun résultat n'est jugé suffisamment pertinent, vous pouvez choisir de renvoyer une réponse de remplacement au lieu de générer une réponse à partir de résultats non pertinents ou peu pertinents : We do not have a summary for your query.

La commande suivante montre comment renvoyer la réponse de secours en cas de résultats non pertinents lors de l'appel de la méthode answer.

REST

Pour renvoyer une réponse de remplacement si aucun résultat pertinent n'est trouvé, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreLowRelevantContent": true
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Renvoyer les scores de support d'ancrage

La commande suivante montre comment renvoyer les scores de prise en compte pour les réponses et les affirmations.

Pour obtenir des informations générales sur l'ancrage dans Vertex AI, consultez Vérifier l'ancrage avec la RAG. La méthode groundingConfigs.check est appelée par la méthode answer.

REST

Pour renvoyer un score de soutien pour chaque affirmation (phrase de la réponse) et un score de soutien agrégé pour la réponse, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "includeGroundingSupports": true,
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.

Afficher uniquement les réponses bien ancrées

La commande suivante montre comment ne renvoyer que les réponses considérées comme bien ancrées dans le corpus, c'est-à-dire les informations du data store. Les réponses mal ancrées sont filtrées.

Vous choisissez un seuil de niveau faible ou élevé pour le score de prise en compte. La réponse n'est renvoyée que si elle atteint ou dépasse ce niveau. Vous pouvez tester les deux seuils de filtrage et l'absence de seuil pour déterminer le niveau de filtrage le plus susceptible de fournir les meilleurs résultats pour vos utilisateurs.

Pour obtenir des informations générales sur l'ancrage dans Vertex AI, consultez Vérifier l'ancrage avec la RAG. La méthode groundingConfigs.check est appelée par la méthode answer.

REST

Pour ne renvoyer une réponse que si elle atteint un seuil de score de soutien, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "filteringLevel": "FILTER_LEVEL"
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • FILTER_LEVEL : énumération permettant de filtrer les réponses en fonction du score de prise en compte. Les options sont les suivantes : FILTERING_LEVEL_LOW et FILTERING_LEVEL_HIGH. Si filteringLevel n'est pas inclus, aucun filtre de score d'assistance n'est appliqué à la réponse.

Spécifier le modèle de réponse

La commande suivante montre comment modifier la version du modèle utilisée pour générer des réponses.

Pour en savoir plus sur les modèles compatibles, consultez Versions et cycle de vie des modèles de génération de réponses.

REST

Pour générer une réponse à l'aide d'un modèle autre que celui par défaut :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "modelSpec": {
                  "modelVersion": "MODEL_VERSION",
               }
             }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • MODEL_VERSION : version du modèle que vous souhaitez utiliser pour générer la réponse. Pour en savoir plus, consultez Versions et cycle de vie des modèles de génération de réponses.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Spécifier un préambule personnalisé

La commande suivante montre comment définir un préambule pour la réponse générée. Un préambule contient des instructions en langage naturel pour personnaliser la réponse. Vous pouvez demander des personnalisations telles que la longueur, le niveau de détail, le style de sortie (par exemple, "simple"), la langue de sortie, l'orientation de la réponse et le format (par exemple, tableaux, puces et XML). Par exemple, un préambule peut être "Explique comme si tu avais dix ans."

Le préambule peut avoir un impact significatif sur la qualité de la réponse générée. Pour savoir ce qu'il faut écrire dans les préambules et pour obtenir des exemples de bons préambules, consultez À propos des préambules personnalisés.

REST

Pour générer une réponse à l'aide d'un modèle autre que celui par défaut :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "promptSpec": {
                   "preamble": "PREAMBLE",
               }
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • PREAMBLE : instruction en langage naturel pour personnaliser la réponse. Par exemple, essayez show the answer format in an ordered list ou give a very detailed answer.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

La méthode de réponse peut suggérer des questions associées que vos utilisateurs peuvent choisir au lieu de saisir leurs propres questions. Par exemple, lorsque vous demandez "Quelle est la meilleure période de l'année pour partir en vacances au Mexique ?", en plus de répondre à votre question, la méthode de réponse peut suggérer d'autres questions que vous pourriez poser, comme "Quel est le mois le moins cher pour partir en vacances au Mexique ?" et "Quels sont les mois touristiques au Mexique ?".

Pour recevoir des questions associées, vous devez spécifier leur inclusion dans chaque requête. Elles sont renvoyées sous forme de tableau de chaînes dans la réponse.

Avant de commencer

Assurez-vous d'avoir activé les fonctionnalités LLM avancées pour l'application.

Procédure

La commande suivante montre comment demander à inclure des questions associées à la réponse.

REST

Pour obtenir des questions associées avec une réponse générée :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "relatedQuestionsSpec": { "enable": true }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche. Par exemple, "Quels types de données puis-je importer dans Vertex AI Search ?".

Inclure les citations

La commande suivante montre comment demander l'inclusion de citations dans la réponse.

REST

Pour générer une réponse à l'aide d'un modèle autre que celui par défaut :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "includeCitations": INCLUDE_CITATIONS
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • INCLUDE_CITATIONS : indique s'il faut inclure les métadonnées de citation dans la réponse. La valeur par défaut est false.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Définir le code de langue de la réponse

La commande suivante montre comment définir le code de langue pour les réponses.

REST

Pour générer une réponse à l'aide d'un modèle autre que celui par défaut :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "answerLanguageCode": "ANSWER_LANGUAGE_CODE"
               }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • ANSWER_LANGUAGE_CODE : code de langue de la réponse. Utilisez les balises de langue définies par BCP47 : Tags for Identifying Languages.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"                    # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.ConversationalSearchServiceClient(
        client_options=client_options
    )

    # The full resource name of the Search serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_serving_config"

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-2.0-flash-001/answer_gen/v1",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Personnaliser les réponses

Si des informations spécifiques sur l'utilisateur sont disponibles (par exemple, des données dans un profil), vous pouvez les spécifier dans l'objet endUserMetadata afin que les résultats de la requête puissent être personnalisés pour l'utilisateur.

Par exemple, si un utilisateur connecté recherche des informations sur la mise à niveau d'un téléphone mobile, les informations de son profil (comme le modèle de téléphone actuel et l'abonnement mobile) peuvent être utilisées pour personnaliser la réponse générée.

Pour ajouter des informations personnelles sur l'utilisateur qui effectue une requête et générer une réponse qui tient compte de ces informations, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
    -d '{
        "query": { "text": "QUERY"},
        "endUserSpec": {
           "endUserMetadata": [
             {
               "chunkInfo": {
                  "content": "PERSONALIZED_INFO",
                  "documentMetadata":  { "title": "INFO_DESCRIPTION"}
               }
             }
           ]
        }
      }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • PERSONALIZATION_INFO : chaîne contenant des informations spécifiques à l'utilisateur qui effectue la requête. Par exemple, This customer has a Pixel 6 Pro purchased over a period of 24-months starting 2023-01-15. This customer is on the Business Plus International plan. No payment is due at this time. La longueur de cette chaîne est limitée à 8 000 caractères.
    • INFO_DESCRIPTION : chaîne qui décrit brièvement les informations de personnalisation (par exemple, Customer profile data, including model, plan, and billing status.). Le modèle utilise à la fois cette description et les informations de personnalisation pour générer une réponse personnalisée à la requête.

Générer des graphiques pour les réponses

La méthode answer peut générer des graphiques et les renvoyer dans la réponse à une requête.

Vous pouvez demander spécifiquement qu'une réponse inclue un graphique, par exemple "Représente le taux de croissance annuel des paiements des petites entreprises au fil des années avec les données disponibles". Si le système détermine que les données sont suffisantes, un graphique est renvoyé. En général, un texte de réponse est renvoyé avec le graphique.

De plus, s'il y a suffisamment de données pour créer un graphique, la méthode de réponse peut renvoyer un graphique même si la requête n'en demandait pas explicitement. Par exemple : "Quelle a été l'amélioration des scores HDI associée à un meilleur accès à l'eau potable au cours de la décennie entre 2010 et 2020 ?"

Un seul graphique est généré par réponse. Toutefois, le graphique peut être un graphique composite contenant d'autres graphiques plus petits. Exemple de graphique composite :

Un graphique composite contenant quatre graphiques plus petits

Limite

Les requêtes doivent être en anglais.

Scénarios d'échec courants

Vous ne recevrez pas toujours une image avec votre réponse. Si les données sont insuffisantes, aucun chiffre ne peut être généré.

D'autres scénarios d'échec incluent les échecs d'exécution de code et les délais d'attente. Si l'un de ces cas se produit, reformulez votre requête et réessayez.

Avant de commencer

Avant d'exécuter une requête demandant des graphiques générés, procédez comme suit :

Procédure

REST

Appelez la méthode answer comme suit pour renvoyer une réponse pouvant inclure un graphique généré à partir des données du data store :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
             },
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre en anglais contenant la question ou la requête de recherche.
    • MODEL_VERSION : version du modèle gemini-2.0-flash-001/answer_gen/v1 ou ultérieure. Pour en savoir plus, consultez Versions et cycle de vie des modèles de génération de réponses.
    • IMAGE_SOURCE : énumération permettant de demander que la réponse inclue un graphique généré, FIGURE_GENERATION_ONLY, ou qu'elle puisse inclure un graphique généré ou une image existante provenant des data stores, ALL_AVAILABLE_SOURCES.

Récupérer des images existantes à partir du data store

Vous pouvez choisir d'afficher les images du data store dans la réponse et dans les références de citation. Le data store doit être un data store non structuré avec l'analyseur de mise en page activé.

Pour obtenir des graphiques dans les réponses renvoyées, vous devez activer les fonctionnalités LLM avancées.

Lorsque imageSource est défini sur CORPUS_IMAGE_ONLY ou ALL_AVAILABLE_SOURCES, la méthode answer peut récupérer les images du data store, le cas échéant. Toutefois, l'activation de cette option ne signifie pas que des images seront toujours renvoyées.

Vous obtenez une image (maximum) par réponse. Les citations peuvent contenir plusieurs images.

Limites

  • L'application que vous utilisez doit être connectée à un data store non structuré. Les images ne peuvent pas être renvoyées à partir de sites Web ni de magasins de données structurées.

  • Les requêtes doivent être en anglais.

  • L'annotation d'image via l'analyseur de mise en page doit être appliquée au data store. Pour en savoir plus sur l'analyseur de mise en page, consultez Analyser et segmenter des documents.

Procédure

REST

Appelez la méthode answer comme suit pour renvoyer une réponse pouvant inclure une image du data store :

  1. Exécutez la commande curl suivante :

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
              },
              includeCitations: true,
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger.
    • QUERY : chaîne de texte libre en anglais contenant la question ou la requête de recherche.
    • MODEL_VERSION : version du modèle gemini-2.0-flash-001/answer_gen/v1 ou ultérieure. Pour en savoir plus, consultez Versions et cycle de vie des modèles de génération de réponses.
    • IMAGE_SOURCE : énumération permettant de demander que la réponse inclue une image provenant du data store (CORPUS_IMAGE_ONLY) ou qu'elle puisse inclure une image provenant du data store ou un graphique généré (ALL_AVAILABLE_SOURCES).

Commandes pour les questions de suivi

Les requêtes de suivi sont des requêtes multitours. Après la première requête d'une session de suivi, les "tours" suivants tiennent compte des interactions précédentes. Avec les questions complémentaires, la méthode de réponse peut également suggérer des questions associées que vos utilisateurs peuvent choisir au lieu de saisir leurs propres questions complémentaires. Pour obtenir des suggestions de questions associées, vous devez activer les fonctionnalités LLM avancées.

Toutes les fonctionnalités de réponse et de suivi décrites dans les sections précédentes, telles que les citations, les filtres, le filtre SafeSearch, l'ignorance de certains types de requêtes et l'utilisation d'un préambule pour personnaliser les réponses, peuvent être appliquées avec les suivis.

Exemple de session de suivi

Voici un exemple de session avec des questions complémentaires. Supposons que vous souhaitiez en savoir plus sur les vacances au Mexique :

  • Tour 1 :

    • Vous : Quel est le meilleur moment de l'année pour partir en vacances au Mexique ?

    • Réponse avec suivi : la meilleure période pour partir en vacances au Mexique est la saison sèche, qui s'étend de novembre à avril.

  • Tour 2 :

    • Vous : Quel est le taux de change ?

    • Réponse avec questions complémentaires : 1 USD équivaut à environ 17,65 pesos mexicains.

  • Tour 3 :

    • Vous : Quelle est la température moyenne en décembre ?

    • Réponse avec questions complémentaires : la température moyenne varie entre 21 et 26 °C. La température moyenne à Cancún est d'environ 25 °C.

Sans suivi, votre question "Quel est le taux de change ?" ne pourrait pas être traitée, car la recherche classique ne saurait pas que vous vouliez connaître le taux de change mexicain. De même, sans suivi, il n'y aurait pas le contexte nécessaire pour vous donner des températures spécifiques au Mexique.

À propos des sessions

Pour comprendre le fonctionnement des relances dans Vertex AI Search, vous devez comprendre les sessions.

Une session est constituée de requêtes textuelles fournies par un utilisateur et de réponses fournies par Vertex AI Search.

Ces paires de requêtes et de réponses sont parfois appelées tours. Dans l'exemple précédent, le deuxième tour est composé de "Quel est le taux de change ?" et "1 USD équivaut à environ 17,65 pesos mexicains."

Les sessions sont stockées avec l'application. Dans l'application, une session est représentée par la ressource de session.

En plus de contenir les messages de requête et de réponse, la ressource de session comporte les éléments suivants :

  • Un nom unique (l'ID de session).

  • Un état (en cours ou terminé).

  • Un pseudo-identifiant utilisateur, qui est un ID de visiteur permettant de suivre l'utilisateur. Elle peut être attribuée de manière programmatique. Lorsqu'il est associé à l'ID pseudo-utilisateur dans les événements utilisateur de votre application, le modèle peut vous aider à diffuser des résultats personnalisés pour l'utilisateur.

  • une heure de début et une heure de fin.

  • Un tour, qui est une paire question-réponse.

Avant de commencer

Avant d'exécuter une requête demandant des questions complémentaires, assurez-vous d'avoir activé les fonctionnalités LLM avancées pour l'application.

Stocker les informations de session et obtenir des réponses

Vous pouvez utiliser la ligne de commande pour générer des réponses et des réponses de recherche, et pour les stocker, ainsi que chaque requête d'une session.

REST

Pour créer une session et générer des réponses à partir de la saisie de l'utilisateur à l'aide de la ligne de commande, procédez comme suit :

  1. Spécifiez l'application dans laquelle vous souhaitez stocker la session :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions" \
      -d '{
            "userPseudoId": "USER_PSEUDO_ID"
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .

    • APP_ID : ID de l'application Vertex AI Search.

    • USER_PSEUDO_ID : chaîne encodée en UTF-8, qui sert d'identifiant pseudonymisé unique pour suivre les utilisateurs. Il peut comporter jusqu'à 128 caractères. Google vous recommande vivement d'utiliser ce champ, car il améliore les performances du modèle et la qualité de la personnalisation. Vous pouvez utiliser un cookie HTTP pour ce champ, qui identifie de manière unique un visiteur sur un seul appareil. Voici quelques points importants à prendre en compte :

      • Cet identifiant ne change pas lorsque le visiteur se connecte ou se déconnecte d'un site Web.
      • Ce champ ne doit pas être défini sur le même identifiant pour plusieurs utilisateurs. Sinon, le même ID utilisateur peut combiner les historiques d'événements de différents utilisateurs et nuire à la qualité du modèle.
      • Ce champ ne doit pas inclure d'informations permettant d'identifier personnellement l'utilisateur.
      • Pour une requête de recherche ou de navigation donnée, ce champ doit correspondre au champ userPseudoId correspondant dans les événements utilisateur.

      Pour en savoir plus, consultez les sections sur userPseudoId

    Exemple de commande et résultat

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/sessions"
    -d '{
    "userPseudoId": "test_user"
    }'
    
    { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }
  2. Notez l'ID de session, c'est-à-dire les chiffres à la fin du champ name: dans la réponse JSON. Dans l'exemple de résultat, l'ID est 5386462384953257772. Vous en aurez besoin à l'étape suivante.

  3. Générez une réponse et ajoutez-la à une session dans votre application :

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
              "searchSpec":{ "searchParams": {"filter": "FILTER"} }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • QUERY : chaîne de texte libre contenant la question ou la requête de recherche.
    • SESSION_ID : ID de la session que vous avez créée à l'étape 1. Il s'agit des chiffres à la fin du champ name:, notés à l'étape 2. Pour une session, utilisez le même ID de session à chaque tour.
    • FILTER : champ de texte permettant de filtrer la recherche à l'aide d'une expression de filtre. La valeur par défaut de cet attribut est une chaîne vide. La façon dont vous construisez votre filtre varie selon que vous disposez de données non structurées avec des métadonnées, de données structurées ou de données de site Web. Pour en savoir plus, consultez Filtrer la recherche personnalisée pour les données structurées ou non structurées et Filtrer la recherche sur le site Web.

    Exemple de commande et résultat

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:answer"
    -d '{
    "query": { "text": "Compare bigquery with spanner database?"},
    "session":  "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943",
    }'
        
    { "answer": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072", "state": "SUCCEEDED", "answerText": "BigQuery and Spanner are both powerful tools that can be used together to handle transactional and analytical workloads. Spanner is a fully managed relational database optimized for transactional workloads, while BigQuery is a serverless data warehouse designed for business agility. Spanner provides seamless replication across regions in Google Cloud and processes over 1 billion requests per second at peak. BigQuery analyzes over 110 terabytes of data per second. Users can leverage federated queries to read data from Spanner and write to a native BigQuery table. \n", "steps": [ { "state": "SUCCEEDED", "description": "Rephrase the query and search.", "actions": [ { "searchAction": { "query": "Compare bigquery with spanner database?" }, "observation": { "searchResults": [ { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/ecc0e7547253f4ca3ff3328ce89995af", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/how-spanner-and-bigquery-work-together-handle-transactional-and-analytical-workloads", "title": "How Spanner and BigQuery work together to handle transactional and analytical workloads | Google Cloud Blog", "snippetInfo": [ { "snippet": "Using Cloud \u003cb\u003eSpanner\u003c/b\u003e and \u003cb\u003eBigQuery\u003c/b\u003e also allows customers to build their \u003cb\u003edata\u003c/b\u003e clouds using Google Cloud, a unified, open approach to \u003cb\u003edata\u003c/b\u003e-driven transformation ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/d7e238f73608a860e00b752ef80e2941", "uri": "https://cloud.google.com/blog/products/databases/cloud-spanner-gets-stronger-with-bigquery-federated-queries", "title": "Cloud Spanner gets stronger with BigQuery-federated queries | Google Cloud Blog", "snippetInfo": [ { "snippet": "As enterprises compete for market share, their need for real-time insights has given rise to increased demand for transactional \u003cb\u003edatabases\u003c/b\u003e to support \u003cb\u003edata\u003c/b\u003e ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/e10a5a3c267dc61579e7c00fefe656eb", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/replicating-cloud-spanner-bigquery-scale", "title": "Replicating from Cloud Spanner to BigQuery at scale | Google Cloud Blog", "snippetInfo": [ { "snippet": "... \u003cb\u003eSpanner data\u003c/b\u003e into \u003cb\u003eBigQuery\u003c/b\u003e for analytics. In this post, you will learn how to efficiently use this feature to replicate large tables with high throughput ...", "snippetStatus": "SUCCESS" } ] }, ... { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/8100ad36e1cac149eb9fc180a41d8f25", "uri": "https://cloud.google.com/blog/products/gcp/from-nosql-to-new-sql-how-spanner-became-a-global-mission-critical-database", "title": "How Spanner became a global, mission-critical database | Google Cloud Blog", "snippetInfo": [ { "snippet": "... SQL \u003cb\u003evs\u003c/b\u003e. NoSQL dichotomy may no longer be relevant." The \u003cb\u003eSpanner\u003c/b\u003e SQL query processor, while recognizable as a standard implementation, has unique ...", "snippetStatus": "SUCCESS" } ] } ] } } ] } ] }, "session": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "turns": [ { "query": { "queryId": "projects/123456/locations/global/questions/741830", "text": "Compare bigquery with spanner database?" }, "answer": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072" } ], "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }, "answerQueryToken": "NMwKDAjFkpK3BhDU24uZAhIkNjZlNDIyZWYtMDAwMC0yMjVmLWIxMmQtZjQwMzA0M2FkYmNj" }
  4. Répétez l'étape 3 pour chaque nouvelle requête de la session.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def create_session(
    project_id: str,
    location: str,
    engine_id: str,
    user_pseudo_id: str,
) -> discoveryengine.Session:
    """Creates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        user_pseudo_id: A unique identifier for tracking visitors. For example, this
          could be implemented with an HTTP cookie, which should be able to
          uniquely identify a visitor on a single device.
    Returns:
        discoveryengine.Session: The newly created Session.
    """

    client = discoveryengine.SessionServiceClient()

    session = client.create_session(
        # The full resource name of the engine
        parent=f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}",
        session=discoveryengine.Session(user_pseudo_id=user_pseudo_id),
    )

    # Send Session name in `answer_query()`
    print(f"Session: {session.name}")
    return session

Obtenir une session à partir du data store

La commande suivante montre comment appeler la méthode get et obtenir une session à partir du data store.

REST

Pour obtenir une session à partir d'un data store, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • SESSION_ID : ID de la session que vous souhaitez obtenir.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def get_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Retrieves a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = client.get_session(name=name)

    print(f"Session details: {session}")
    return session

Supprimer une session depuis l'application

La commande suivante montre comment appeler la méthode delete et supprimer une session du data store.

Par défaut, les sessions de plus de 60 jours sont automatiquement supprimées. Toutefois, si vous souhaitez supprimer une session spécifique (par exemple, si elle contient du contenu sensible), utilisez cet appel d'API.

REST

Pour supprimer une session d'une application :

  1. Exécutez la commande curl suivante :

    curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • SESSION_ID : ID de la session que vous souhaitez supprimer.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def delete_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> None:
    """Deletes a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    client.delete_session(name=name)

    print(f"Session {name} deleted.")

Modifier une session

Plusieurs raisons peuvent vous pousser à modifier une session. Par exemple, pour effectuer l'une des actions suivantes :

  • Marquer une session comme terminée
  • Fusionner les messages d'une session dans une autre
  • Modifier le pseudo-identifiant d'un utilisateur

La commande suivante montre comment appeler la méthode patch et mettre à jour une session dans le data store.

REST

Pour mettre à jour une session depuis une application, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID?updateMask=state" \
      -d '{
            "state": "NEW_STATE"
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • SESSION_ID : ID de la session que vous souhaitez mettre à jour.
    • NEW_STATE : nouvelle valeur de l'état (par exemple, IN_PROGRESS).

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine
from google.protobuf import field_mask_pb2


def update_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Updates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    Returns:
        discoveryengine.Session: The updated Session.
    """
    client = discoveryengine.SessionServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = discoveryengine.Session(
        name=name,
        state=discoveryengine.Session.State.IN_PROGRESS,  # Options: IN_PROGRESS, STATE_UNSPECIFIED
    )

    # Fields to Update
    update_mask = field_mask_pb2.FieldMask(paths=["state"])

    session = client.update_session(session=session, update_mask=update_mask)
    print(f"Updated session: {session.name}")
    return session

Lister toutes les sessions

La commande suivante montre comment appeler la méthode list et lister les sessions dans le data store.

REST

Pour lister les sessions d'une application :

  1. Exécutez la commande curl suivante :

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Lister les sessions d'un utilisateur

La commande suivante montre comment appeler la méthode list pour lister les sessions associées à un utilisateur ou un visiteur.

REST

Pour lister les sessions associées à un utilisateur ou un visiteur :

  1. Exécutez la commande curl suivante :

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • USER_PSEUDO_ID : ID pseudo de l'utilisateur dont vous souhaitez lister les sessions.

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Lister les sessions pour un utilisateur et un état

La commande suivante montre comment appeler la méthode list pour lister les sessions dans un état donné pour un utilisateur spécifique.

REST

Pour lister les sessions ouvertes ou fermées d'un utilisateur associées à un utilisateur ou un visiteur donné, procédez comme suit :

  1. Exécutez la commande curl suivante :

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions?filter=userPseudoId=USER_PSEUDO_ID%20AND%20state=STATE"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search.
    • USER_PSEUDO_ID : ID pseudo de l'utilisateur dont vous souhaitez lister les sessions.
    • STATE : état de la session : STATE_UNSPECIFIED (fermée ou inconnue) ou IN_PROGRESS (ouverte).

Python

Pour en savoir plus, consultez la documentation de référence de l'API AI Applications Python.

Pour vous authentifier auprès des applications d'IA, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from google.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.SessionServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response