Recherche avec questions complémentaires

Cette page présente la recherche avec des suivis pour Vertex AI Search et vous explique comment l'implémenter à l'aide d'appels d'API.

Si vous souhaitez ajouter une fonction de recherche avec suivi au widget Recherche, reportez-vous à la section Configurer pour le widget Recherche.

La recherche avec suivi s'applique aux applications de recherche avec des données non structurées et aux sites Web.

La recherche avec suivi ne s'applique pas aux applications Vertex AI Agents. Agents Vertex AI applications utilisent un agent qui peut avoir des conversations sur le contenu avec votre aux utilisateurs finaux. Pour en savoir plus sur les agents Vertex AI, consultez la Présentation des agents Vertex AI.

À propos de la recherche avec questions complémentaires

La recherche avec suivi s'appuie sur des modèles d'IA générative. Recherche avec questions complémentaires est différente des données non structurées standards rechercher, car rechercher avec Les requêtes de suivi prennent en compte les requêtes précédentes dans la même session de recherche.

La recherche avec questions complémentaires est compatible avec les éléments suivants :

  • Traitement des requêtes en langage naturel : processus qui traite et comprend les entrées en langage humain, identifie l'intention derrière une requête et renvoie des résultats pertinents.

  • Reconnaissance du contexte:elle comprend le contexte des interactions et des fournit des réponses contextuelles.

  • Multitour:il permet aux utilisateurs de poser des questions de suivi et de recevoir des réponses pertinentes.

Exemple de recherche avec questions complémentaires

Voici un exemple de recherche avec questions complémentaires. Supposons que vous voulez savoir sur les vacances au Mexique:

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

  • Recherche avec questions complémentaires:la saison des vacances au Mexique est la meilleure période (de novembre à avril).

  • Vous:Quel est le taux de change ?

  • Recherche avec suivi : 1 USD équivaut à environ 17,65 pesos mexicains.

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

  • Recherche avec suivi : la température moyenne varie entre 21 et 26 °C. La température moyenne de Cancún est d'environ 25 °C.

Avec la recherche standard, votre question "Quel est le taux de change ?" ne recevrait pas de réponse, car la recherche standard ne saurait pas que vous souhaitez connaître le taux de change mexicain. De même, une recherche standard ne conserverait pas le contexte pour vous indiquer les températures au Mexique.

À propos des conversations

Dans la recherche avec suivi, une conversation est composé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 messages. Dans l'exemple précédent, le deuxième message est composé de "Quel est le taux de change ?" et de "1 USD équivaut à environ 17,65 pesos mexicains."

Les conversations sont stockées dans le data store où les données non structurées est conservé. Dans le data store, une conversation est représentée par l'expression Conversation ressource. En plus de contenir les messages de requête et de réponse, la conversation ressource comporte:

  • Nom unique (l'ID de conversation).

  • Un état (en cours ou terminé)

  • Un pseudo-identifiant utilisateur, qui est un ID de visiteur qui suit l'utilisateur. Il peut s'agir attribuées de façon programmatique.

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

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes. Les exigences varient en fonction du type d'application que vous possédez.

Stocker des conversations et obtenir des réponses

Vous pouvez utiliser la ligne de commande ou les bibliothèques clientes pour générer des réponses de recherche et stocker la conversation de recherche avec des questions de suivi.

REST

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

  1. Spécifiez le data store dans lequel vous souhaitez stocker l'historique des conversations:

    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/dataStores/DATA_STORE_ID/conversations" \
    -d '{
      "user_pseudo_id": "USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • USER_PSEUDO_ID : identifiant unique permettant de suivre un visiteur de recherche. Par exemple, vous pouvez l'implémenter avec un cookie HTTP, qui identifie de façon unique un visiteur sur un seul appareil.

    Cliquez pour voir un exemple de réponse de la commande POST.

    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
  2. Générez une réponse de recherche et ajoutez-la à une conversation nouvelle ou existante dans votre data store :

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "filter": "FILTER"
    }'
    
    • PROJECT_ID : numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • CONVERSATION_ID: identifiant unique de la conversation, par Exemple : 123456. Dans le cas d'une conversation de recherche avec suivi, utiliser le même ID de conversation à chaque tour.

    • FREE_TEXT : chaîne de texte libre contenant la question de l'utilisateur (par exemple, what is bigquery?)

    • 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 manière dont vous créez votre filtre varie selon que vous disposez de données de site Web ou de données non structurées avec des métadonnées. Pour en savoir plus, consultez la section Filtres sur le Réseau de Recherche avec suivi.

    Cliquez pour voir un exemple de réponse POST.

    {
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
    }
    },
    "conversation": {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id",
    "messages": [
      {
        "userInput": {
          "input": "what is bigquery?"
        }
      },
      {
        "reply": {
          "summary": {
            "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
          }
        }
      }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    },
    "searchResults": [
    {
      "id": "c86f19582746b56f71c9bb6929893835",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/c86f19582746b56f71c9bb6929893835",
        "id": "c86f19582746b56f71c9bb6929893835",
        "derivedStructData": {
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/94627ee0249dfdfda25b1b158c717bca.txt",
          "snippets": [
            {
              "snippet_status": "SUCCESS",
              "snippet": "For larger websites, talk to the IT team and/or utilize a big data solution such as Google \u003cb\u003eBigQuery\u003c/b\u003e to extract all URLs. It may also be necessary to ask the ..."
            }
          ],
          "extractive_answers": [
            {
              "content": "Alternatively, load the Server Log Files into Google BigQuery and use the Google BigQuery interface or the 360 Data Studio to analyze the data. To monitor the indexation numbers of the HTTP and the HTTPS version, keep an eye on all submitted XML Sitemaps."
            }
          ]
        }
      }
    },
    {
      "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/774bd7ce2a3509ab4bbd1fc876f39dc2",
        "id": "774bd7ce2a3509ab4bbd1fc876f39dc2",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "This consists of a collection of virtual tables. A virtual table exists for every queryable object type (content type if you prefer) in the repository. Each row in these virtual tables correspond to an instance of the corresponding object type (or of one of its subtypes)."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/28841ef8590a105e9415f1390648a811.txt"
        }
      }
    },
    {
      "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/3e1d306e49aefd9e23f2d5f7a66e6c76",
        "id": "3e1d306e49aefd9e23f2d5f7a66e6c76",
        "derivedStructData": {
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "extractive_answers": [
            {
              "content": "Other logo switches are based on search terms. For instance, if the term "ASCII art" is searched, an ASCII art version of the Google logo will appear next to the search box."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/98008df3eef5d3ee1661c52f23189190.txt"
        }
      }
    },
    {
      "id": "cf94e24aacd47cd2c2f5effcbdeda832",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/cf94e24aacd47cd2c2f5effcbdeda832",
        "id": "cf94e24aacd47cd2c2f5effcbdeda832",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "The company is listed on the NASDAQ stock exchange under the ticker symbols GOOGL and GOOG, and on the Frankfurt Stock Exchange under the ticker symbol GGQ1. These ticker symbols now refer to Alphabet Inc., Google's holding company, since the fourth quarter of 2015."
            }
          ],
          "snippets": [
            {
              "snippet": "No snippet is available for this page.",
              "snippet_status": "NO_SNIPPET_AVAILABLE"
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/d80204083ef1096799fa4b7257548b33.txt"
        }
      }
    },
    {
      "id": "05bc6497a4e7e6ca36b2e495b354b764",
      "document": {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/branches/0/documents/05bc6497a4e7e6ca36b2e495b354b764",
        "id": "05bc6497a4e7e6ca36b2e495b354b764",
        "derivedStructData": {
          "extractive_answers": [
            {
              "content": "SQL injection countermeasures are designed to utilize secure programming methods. By changing the variables used by the application code, weaknesses in applications can be greatly minimized. This report will detail how to perform a SQL injection and explore the best countermeasures to prevent the attack."
            }
          ],
          "link": "gs://aquamuse-data-ucs-eval-dev/documents/7cba75d646f5774a21d96801bec68bb3.txt",
          "snippets": [
            {
              "snippet_status": "NO_SNIPPET_AVAILABLE",
              "snippet": "No snippet is available for this page."
            }
          ]
        }
      }
    }
    ]
    }
  3. Répétez l'étape 2 pour chaque nouvelle question de la conversation.

Python

Pour en savoir plus, consultez les API Python de Vertex AI Agent Builder documentation de référence.

Pour vous authentifier auprès de Vertex AI Agent Builder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

from typing import List

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"
# data_store_id = "YOUR_DATA_STORE_ID"
# search_queries = ["YOUR_FIRST_SEARCH_QUERY", "YOUR_SECOND_SEARCH_QUERY"]


def multi_turn_search_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    search_queries: List[str],
) -> List[discoveryengine.ConverseConversationResponse]:
    #  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
    )

    # Initialize Multi-Turn Session
    conversation = client.create_conversation(
        # The full resource name of the data store
        # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}
        parent=client.data_store_path(
            project=project_id, location=location, data_store=data_store_id
        ),
        conversation=discoveryengine.Conversation(),
    )


    for search_query in search_queries:
        # Add new message to session
        request = discoveryengine.ConverseConversationRequest(
            name=conversation.name,
            query=discoveryengine.TextInput(input=search_query),
            serving_config=client.serving_config_path(
                project=project_id,
                location=location,
                data_store=data_store_id,
                serving_config="default_config",
            ),
            # Options for the returned summary
            summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
                # Number of results to include in summary
                summary_result_count=3,
                include_citations=True,
            ),
        )
        response = client.converse_conversation(request)

        print(f"Reply: {response.reply.summary.summary_text}\n")

        for i, result in enumerate(response.search_results, 1):
            result_data = result.document.derived_struct_data
            print(f"[{i}]")
            print(f"Link: {result_data['link']}")
            print(f"First Snippet: {result_data['snippets'][0]['snippet']}")
            print(
                "First Extractive Answer: \n"
                f"\tPage: {result_data['extractive_answers'][0]['pageNumber']}\n"
                f"\tContent: {result_data['extractive_answers'][0]['content']}\n\n"
            )
        print("\n\n")

Filtrer la recherche avec questions complémentaires

Lorsque vous effectuez une requête avec la recherche avec suivis, vous pouvez inclure le champ filter pour limiter le pool de documents à partir duquel une réponse est dérivée. Vous créez votre filtre à l'aide d'expressions de filtre. Les expressions de filtre que vous utilisez varient selon que vous disposez de données de site Web ou de données non structurées avec des métadonnées.

Filtrer les expressions pour les données de site Web

Si vous disposez d'un datastore contenant des données de site Web, vous pouvez filtrer votre recherche à l'aide d'une requête de suivi à l'aide des expressions de filtre dans Expressions de filtre avec l'indexation avancée des sites Web. Une fois que vous avez créé votre expression de filtre, utilisez-la pour la valeur du champ filter à l'étape 2 de Enregistrer les conversations et obtenir des réponses.

Expressions de filtrage pour les données non structurées avec métadonnées

Si vous disposez d'un magasin de données contenant des données non structurées avec des métadonnées, vous pouvez filtrer votre recherche avec une requête de suivi afin qu'elle renvoie des documents en fonction des champs de métadonnées qu'ils contiennent. Consultez l'article Filtrer la recherche pour les données structurées des données non structurées pour comprendre comment utiliser les métadonnées filtrer la recherche standard (sans suivi). Vous pouvez utiliser ces mêmes principes d'utiliser les métadonnées pour filtrer la recherche avec des questions de suivi. Une fois que vous avez créé votre expression de filtre, utilisez-la pour la valeur du champ filter à l'étape 2 de la section Enregistrer les conversations et obtenir des réponses.

Configurer le résumé

Le message de réponse de la recherche avec suivis est un résumé généré renvoyé dans summaryText. Vous pouvez configurer le résumé généré de différentes manières. Ils sont décrits dans les sections suivantes :

Obtenir des citations avec les résultats de recherche

Les citations, le cas échéant, sont des nombres placés en ligne dans un résumé de recherche. Ces chiffres indiquent à partir de quels résultats de recherche des phrases spécifiques la création du résumé.

Pour obtenir des citations:

  • Suivez les conversations précédentes sur le Store et accédez au chat. des réponses, sauf à l'étape 2, exécutez cette commande qui inclut le champ summarySpec qui définit includeCitations sur "true".

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "include_citations": true }
    }'
    

    Cliquez pour voir une partie de la réponse d'un exemple de commande.

    {
    "reply": {
    "summary": {
    }
    "reply": {
    "summary": {
      "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly [1]. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data [2, 3].",
      "safetyAttributes": {
        "categories": [
          "Finance",
          "Legal"
        ]

Les numéros de citation sont inclus dans le texte récapitulatif. Les numéros de citation les résultats de recherche renvoyés et sont indexés avec le niveau 1. Par exemple, [1] signifie que la phrase est attribuée au premier résultat de recherche. [2, 3] signifie que phrase est attribuée aux deuxième et troisième résultats de recherche.

Ignorer les requêtes antagonistes

Les requêtes malveillantes incluent des commentaires négatifs ou sont conçues pour générer des résultats dangereux et non conformes aux règles. Vous pouvez spécifier qu'aucun résumé de recherche ne doit être renvoyé pour les requêtes malveillantes. Lorsqu'une requête malveillante est ignorée, la propriété summaryText contient un texte standard indiquant qu'aucun résumé de recherche n'est renvoyé. Les documents de recherche sont renvoyés pour les requêtes malveillantes, même si les résumés de recherche ne le sont pas.

Pour spécifier qu'aucun résumé de recherche ne doit être renvoyé pour les requêtes hostiles:

  • Suivez la procédure Conserver les conversations et obtenir des réponses par chat précédente, sauf à l'étape 2. Exécutez cette commande qui inclut le champ summarySpec qui définit ignoreAdversarialQuery sur "true".

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignoreAdversarialQuery": true }
    }'
    

    Cliquez pour voir une partie de la réponse d'un adversaire requête.

    "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "ADVERSARIAL_QUERY_IGNORED"
      ]

Ignorer les requêtes de recherche non récapitulatives

Les requêtes qui ne recherchent pas de résumé renvoient des résultats non adaptés aux et la synthèse. Par exemple, "pourquoi le ciel est bleu" et "Qui est le meilleur dans le monde entier ? » sont des requêtes de résumé, alors que "aéroport de San Francisco" et "monde tasse 2026" ne le sont pas. Il s'agit très probablement de requêtes de navigation. Vous pouvez spécifier qu'aucun résumé de recherche ne doit être renvoyé pour les requêtes de recherche non récapitulatives. Les documents de recherche sont renvoyés pour des requêtes de recherche non récapitulatives, même si la recherche les résumés ne le sont pas.

Pour spécifier qu'aucun résumé de recherche ne doit être renvoyé pour les requêtes de recherche ne comportant pas de résumé :

  • Suivez la procédure Conserver les conversations et obtenir des réponses par chat précédente, sauf à l'étape 2. Exécutez cette commande qui inclut le champ summarySpec qui définit ignoreNonSummarySeekingQuery sur "true".

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "ignore_non_summary_seeking_query": true }
    }'
    

    Cliquez pour afficher une partie de la réponse d'une requête malveillante.

     "reply": {
    "summary": {
      "summaryText": "A summary could not be generated for your search query. Here are some search results.",
      "summarySkippedReasons": [
        "NON_SUMMARY_SEEKING_QUERY_IGNORED"
      ]

Définir le nombre de résultats à utiliser dans le résumé

Vous pouvez spécifier le nombre de résultats à utiliser pour générer le résumé. Par défaut, si le champ summaryResultCount n'est pas défini, tous les résultats renvoyés sont utilisés pour générer le résumé.

Pour définir le nombre de meilleurs résultats à utiliser pour le résumé :

  • Suivez les conversations précédentes sur le Store et accédez au chat. des réponses, sauf à l'étape 2, exécutez cette commande qui inclut le champ summarySpec qui définit summaryResultCount

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "summarySpec": { "summary_result_count": NUMBER_OF_RESULTS }
    }'
    

    NUMBER_OF_RESULTS: nombre de meilleurs résultats pour générer le du résumé de la recherche. Si le nombre de résultats renvoyés est inférieur à summaryResultCount : le résumé est généré à partir de tous les résultats. La valeur maximale est 5.

Obtenir des résumés personnalisés

Vous pouvez obtenir des résumés personnalisés en fournissant des instructions en langage naturel dans le champ modelPromptSpec.preamble lorsque vous demandez un résumé.

Vous pouvez demander des personnalisations telles que la longueur et le niveau de détail, le style de sortie (par exemple, "simple"), la langue de sortie, l'objet de la réponse et le format (par exemple, tableaux, puces et XML).

Par exemple, pour la requête "Quels sont les avantages de BigQuery ?", vous pourriez saisir de personnalisation, comme dans les exemples suivants:

  • Exemple d'instruction: "please show the answer format in an ordered list"

    Exemple de réponse :

    The benefits of BigQuery are:
    
    1. Increased business productivity
    2. IT staff productivity
    3. Reduced infrastructure costs
    4. Loading and exporting data are free
    
  • Exemple d'instruction : give a very detailed answer

    Exemple de réponse:

    BigQuery is a serverless, highly scalable, and cost-effective cloud data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that takes care of provisioning, scaling, and managing the underlying infrastructure, so you can focus on analyzing your data. BigQuery is also integrated with other Google Cloud services, such as Google Kubernetes Engine, Cloud Data Fusion, and Cloud Dataproc, making it easy to build and deploy data pipelines.
    
    Here are some of the benefits of using BigQuery:
    
    * **Fast and scalable:** BigQuery can process petabytes of data very quickly, and it can scale to handle even the most demanding workloads. * **Cost-effective:** BigQuery is a very cost-effective way to store and analyze data. You only pay for the data that you use, and there are no upfront costs or commitments. * **Secure:** BigQuery is a secure platform that meets the needs of even the most security-conscious organizations. * **Easy to use:** BigQuery is easy to use, even for non-technical users. It has a simple and intuitive user interface, and it supports a variety of data sources. * **Integrated with other Google Cloud services:** BigQuery is integrated with other Google Cloud services, making it easy to build and deploy data pipelines.
    
    If you are looking for a fast, scalable, and cost-effective way to analyze your data, then BigQuery is a great option.
    

Pour obtenir un résumé personnalisé:

  • Suivez la procédure Enregistrer les conversations et obtenir des réponses par chat précédente, sauf à l'étape 2. Exécutez cette commande qui inclut le champ summarySpec qui spécifie l'instruction de personnalisation dans modelPromptSpec.preamble.

      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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
      -d '{
        "query": { "input": "FREE_TEXT"},
        "summarySpec": {
          "modelPromptSpec": {
            "preamble": "CUSTOMIZATION_INSTRUCTIONS"
          }
        }
      }'
    
    • CUSTOMIZATION_INSTRUCTIONS: instruction pour personnalisée, sous forme de chaîne.

SafeSearch peut être utilisé pour filtrer les contenus explicites, dangereux et non conformes aux règles des réponses récapitulatives. Pour en savoir plus sur SafeSearch, consultez les paramètres de sécurité pour Vertex AI Search.

Pour appliquer une recherche sécurisée à une réponse de chat:

  • Suivez les conversations précédentes sur le Store et accédez au chat. des réponses, sauf à l'étape 2, sous la requête, spécifiez safe_search.

    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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID:converse" \
    -d '{
      "query": { "input": "FREE_TEXT"},
      "safe_search": true
    }'
    

Afficher et modifier les conversations stockées

Vous pouvez utiliser la ligne de commande pour obtenir, supprimer, mettre à jour et lister les conversations stockées.

Obtenir une conversation à partir du data store

Pour obtenir tous les détails d'une conversation spécifique à partir d'un data store:

  • 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID:ID du data store associé avec votre application.

    • CONVERSATION_ID: ID de la conversation

    Cliquez pour voir un exemple de réponse GET.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
    "state": "IN_PROGRESS",
    "userPseudoId": "2040473575290303058",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:11:24.046735Z"
    }

Supprimer une conversation du data store

Par défaut, les conversations datant de plus de 60 jours sont automatiquement supprimées. Toutefois, si vous souhaitez supprimer une conversation spécifique (par exemple, si elle contenait accidentellement du contenu sensible), utilisez cet appel d'API pour la supprimer.

Pour supprimer une conversation d'un datastore :

  • 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID"
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • CONVERSATION_ID : ID de la conversation

    La réponse de la commande DELETE se présente comme suit :

    {}
    

Mettre à jour une conversation

Vous pouvez modifier une conversation pour diverses raisons. Par exemple, pour effectuer l'une des opérations suivantes:

  • Marquer une conversation comme terminée

  • Fusionner les messages d'une conversation avec ceux d'une autre

  • Modifier user_pseudo_id

Pour mettre à jour le state dans une conversation:

  • 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=state" \
    -d '{
      "state": "NEW_STATE"
    }'
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID: ID du data store associé avec votre application.

    • CONVERSATION_ID: ID de la conversation que vous souhaitez mettre à jour

    • NEW_STATE : nouvelle valeur de l'état (par exemple, COMPLETED)

    Cliquez pour voir un exemple de réponse PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "COMPLETED",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

Pour mettre à jour le user_pseudo_id dans une conversation :

  • 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/dataStores/DATA_STORE_ID/conversations/CONVERSATION_ID?updateMask=user_pseudo_id" \
    -d '{
      "user_pseudo_id": "NEW_USER_PSEUDO_ID"
    }'
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • CONVERSATION_ID: ID de la conversation que vous souhaitez mettre à jour

    • NEW_USER_PSEUDO_ID: nouvelle valeur du pseudo-identifiant de l'utilisateur

    Cliquez pour voir un exemple de réponse PATCH.

    {
    "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
    "state": "IN_PROGRESS",
    "userPseudoId": "test_id1",
    "messages": [
    {
      "userInput": {
        "input": "what is bigquery?"
      }
    },
    {
      "reply": {
        "summary": {
          "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
        }
      }
    }
    ],
    "startTime": "2023-08-15T20:08:12.094639Z"
    }

La commande précédente vous montre comment modifier le user_pseudo_id.. Toutefois, vous peut mettre à jour d'autres champs de la conversation en remplaçant user_pseudo_id avec d'autres champs dans la Conversation ressource.

Lister toutes les conversations

Pour répertorier toutes les conversations d'un data store:

  • 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/dataStores/DATA_STORE_ID/conversations"
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID: ID du data store associé avec votre application.

    Cliquez pour voir un exemple de réponse de la commande GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    },
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/2040473575290303058",
      "state": "IN_PROGRESS",
      "userPseudoId": "2040473575290303058",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ]
    }
    ]
    }

La réponse contient une liste de conversations et le next_page_token. Si aucun next_page_token n'est renvoyé, il n'y a plus de conversations à afficher.

La taille de page par défaut est de 50.

Lister les conversations par filtre

Au lieu de lister toutes les conversations d'un datastore, vous pouvez lister toutes les conversations ouvertes ou toutes les conversations associées à un utilisateur particulier.

Par exemple, vous pouvez présenter à l'utilisateur ses recherches fermées avec une option permettant de rouvrir l'une d'entre elles.

Pour ce faire, listez les conversations correspondant à un filtre donné : user_pseudo_id ou state (IN_PROGRESS ou COMPLETED).

Lister les conversations d'un utilisateur

Pour afficher les conversations associées à un utilisateur ou à un visiteur:

  • 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/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID"
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • USER_PSEUDO_ID : ID pseudo de l'utilisateur dont vous souhaitez lister les conversations.

    La réponse de la commande GET se présente comme suit :

    Cliquez pour voir un exemple de réponse GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Lister les conversations d'un utilisateur et d'un état

Pour lister les conversations dans un état particulier (ouverte ou fermée) et associées à un utilisateur ou à un visiteur :

  • 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/dataStores/DATA_STORE_ID/conversations?filter=user_pseudo_id=USER_PSEUDO_ID%20AND%20state=STATE"
    
    • PROJECT_ID: numéro ou ID de votre projet Google Cloud

    • DATA_STORE_ID : ID du magasin de données associé à votre application.

    • USER_PSEUDO_ID: pseudo-identifiant de l'utilisateur dont les conversations que vous souhaitez répertorier.

    • STATE: indique si la conversation est ouverte ou fermée. (IN_PROGRESS ou COMPLETED)

    La réponse de la commande GET se présente comme suit :

    Cliquez pour voir un exemple de réponse GET.

    {
    "conversations": [
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/conversations/11078281986791420687",
      "state": "IN_PROGRESS",
      "userPseudoId": "test_id",
      "messages": [
        {
          "userInput": {
            "input": "what is bigquery?"
          }
        },
        {
          "reply": {
            "summary": {
              "summaryText": "BigQuery is a cloud-based data warehouse that enables businesses to analyze all their data very quickly. It is a fully managed service that provides a simple and cost-effective way to store and analyze large amounts of data."
            }
          }
        }
      ],
      "startTime": "2023-08-15T20:08:12.094639Z"
    }
    ]
    }

Pour obtenir des informations générales sur la syntaxe de filtrage, consultez la section Filtrage AIP-160.

Les questions associées sont une fonctionnalité Preview avec une liste d'autorisation qui peut renvoyer des questions associées en plus des résultats de recherche.

Par exemple, lorsque vous demandez "Quel est le meilleur moment de l'année pour passer des vacances à sur le Mexique ?", en plus de répondre à votre question, la recherche suggère d'autres des questions que vous pourriez vous poser, telles que "Quel est le mois le moins cher ? en vacances au Mexique ? » et "Quels sont les mois pour les touristes au Mexique ?".

Si vous souhaitez que votre application de recherche affiche des questions associées, contactez l'équipe chargée de votre compte Google et indiquez-lui les projets et les applications pour lesquels vous souhaitez activer les questions associées. Si vous n'utilisez pas la configuration de diffusion par défaut, vous devez également le nom de la configuration de diffusion.

Une fois la fonctionnalité Questions associées activée, les questions sont renvoyées sous forme de chaînes dans ConverseConversationResponse.

En savoir plus

  • Pour en savoir plus sur les summaryResultCount, les includeCitations, ignoreAdversarialQuery, ignoreNonSummarySeekingQuery champs, voir SummarySpec dans la documentation de l'API Vertex AI Agent Builder.

  • Pour obtenir d'autres exemples d'obtention de résumés de recherche, consultez la section Obtenir des résumés.