Générer des réponses ancrées avec le RAG

Dans le cadre de votre expérience de génération augmentée par récupération (RAG) dans Vertex AI Agent Builder, vous pouvez générer des réponses ancrées aux requêtes en fonction des sources d'ancrage suivantes :

  • Recherche Google: utilisez Ancrage avec la recherche Google si vous qui souhaitent l'associer à des connaissances du monde entier, un large éventail des sujets ou des informations à jour sur Internet. L'ancrage dans la recherche Google est compatible avec la récupération dynamique, qui vous permet de générer des résultats ancrés avec la recherche Google uniquement lorsque cela est nécessaire. Par conséquent, la configuration de la récupération dynamique évalue si une invite nécessite des connaissances sur les événements récents et active l'ancrage avec la recherche Google. Pour en savoir plus, consultez la section Récupération dynamique.
  • Texte intégré : utilisez l'ancrage avec du texte intégré pour ancrer la réponse dans des éléments de texte appelés texte factuel fournis dans la requête. Un texte factuel est une déclaration fournie par l'utilisateur qui est considérée comme factuelle pour une requête donnée. Le modèle ne vérifie pas l'authenticité du fait.
  • Data stores Vertex AI Search : utilisez l'ancrage avec Vertex AI Search si vous souhaitez connecter le modèle à vos documents d'entreprise à partir de data stores Vertex AI Search.

Cette page explique comment générer des réponses fondées sur ces sources d'ancrage à l'aide des approches suivantes:

Vous pouvez également visionner en streaming les réponses de le modèle. La génération d'une réponse fondée en streaming est une fonctionnalité expérimentale.

Vous pouvez utiliser d'autres méthodes pour générer des réponses fondées, adaptées à vos application. Pour en savoir plus, consultez API Vertex AI pour créer des expériences de recherche et de RAG

Terminologie

Avant d'utiliser la méthode de génération de réponses ancrées, il est utile de comprendre les entrées et les résultats, comment structurer votre demande et la terminologie RAG.

Termes du RAG

La génération augmentée par récupération est une méthodologie qui permet aux grands modèles de langage (LLM) de générer des réponses basées sur votre source de données de choix. La méthode RAG comporte deux étapes :

  1. Récupération: il est fréquent de recueillir rapidement les informations les plus pertinentes problème de recherche. Avec le RAG, vous pouvez rapidement récupérer les faits importants pour générer une réponse.
  2. Génération:les faits récupérés sont utilisés par le LLM pour générer une sur le terrain.

Par conséquent, la méthode de génération de réponse ancrée récupère les faits à partir de l'ancrage et génère une réponse fondée sur le terrain.

Données d'entrée

La méthode de génération de réponses ancrées requiert les entrées suivantes dans le champ requête:

  • Rôle : expéditeur d'un texte donné, qui peut être un utilisateur (user) ou un modèle (model).

  • Text (Texte) : lorsque le rôle est user, le texte est une invite, et lorsque le rôle est model, le texte est une réponse étayée. La manière dont vous spécifiez le rôle et le texte dans une requête est déterminée comme suit :

    • Pour une génération de réponse en une seule étape, l'utilisateur envoie le texte de la requête dans la requête et le modèle envoie le texte de la réponse dans la réponse.
    • Pour une génération de réponse multitour, la requête contient la paire requête-réponse pour tous les changements de direction précédents et le texte d'invite de l'utilisateur pour tour actuel. Par conséquent, dans une telle requête, le rôle est user pour un texte d'invite et model pour le texte de réponse.
  • Instruction système: préambule de votre requête qui régit le comportement le modèle et modifie le résultat en conséquence. Par exemple, vous pouvez ajouter un persona à la réponse générée ou demander au modèle de mettre en forme le texte de sortie d'une certaine manière. Pour générer des réponses à plusieurs tours, vous devez fournir des instructions au système à chaque tour. Pour plus d'informations, consultez la section Utiliser les instructions système.

  • Grounding source (Source de référence) : il s'agit de la source dans laquelle la réponse est ancrée et peut être un ou plusieurs des éléments suivants:

    • Recherche Google: posez des questions grâce à la recherche Google résultats. Lorsque la source de référence est la recherche Google, vous pouvez spécifier une configuration de récupération dynamique avec un seuil de récupération dynamique. Pour en savoir plus, consultez la section Récupération dynamique.

    • Texte intégré: ancrez la réponse dans un texte réel, fournies dans la demande. Il s'agit d'une déclaration fournie par l'utilisateur sont considérées comme factuelles pour une demande donnée. Le modèle ne vérifie pas l'authenticité du texte factuel. Vous pouvez ajouter jusqu'à 100 informations textuelles par texte intégré. source. Les éléments textuels des faits peuvent être pris en charge à l'aide de méta-attributs, tels que le titre, l'auteur et l'URI. Ces méta-attributs sont renvoyés dans la réponse lorsque vous citez les morceaux qui appuient la réponse.

    • Datastores Vertex AI Search: ancrer la réponse dans les documents des data stores Vertex AI Search.

    Dans une requête donnée, vous pouvez fournir à la fois une source de texte intégrée et un Source du data store Vertex AI Search. Vous ne pouvez pas combiner la recherche Google avec l'une de ces sources. Par conséquent, si vous souhaitez basez vos réponses avec les résultats de recherche Google, vous devez envoyer un une requête distincte spécifiant la recherche Google comme la seule base d'ancrage source.

    Vous pouvez fournir jusqu'à 10 sources de terre dans n'importe quel ordre. Par exemple : supposons que vous fournissiez aux sources d'ancrage le nombre suivant, dans l'ordre suivant pour obtenir un total de 10 sources d'ancrage:

    • Trois sources de texte intégrées, chacune pouvant contenir jusqu'à 100 faits SMS
    • Six data stores Vertex AI Search
    • Quatre sources de texte intégrées, chacune pouvant contenir jusqu'à 100 faits SMS

    Chaque source se voit attribuer un indice dans l'ordre dans lequel elle est spécifiée dans la requête. Par exemple, si vous avez spécifié une combinaison de sources dans votre l'index source est attribué comme illustré dans l'exemple tableau:

    Source d'ancrage Index
    Texte intégré n° 1 0
    Texte intégré 2 1
    Data store Vertex AI Search n° 1 2
    Texte intégré n° 3 3
    Data store Vertex AI Search n° 2 4

    Cet index est cité dans la réponse et est utile pour tracer comme la provenance des données.

  • Spécifications de génération: spécifications de configuration de modèle qui comporte les informations suivantes:

    • ID du modèle : spécifie le modèle Vertex AI Gemini à utiliser pour générer des réponses. Pour obtenir la liste des modèles que vous pouvez utiliser pour générer des réponses fondées, consultez la section Modèles compatibles.
    • Paramètres du modèle: spécifiez les paramètres que vous pouvez définir pour le modèle. que vous choisissez d'utiliser. Ces paramètres sont: la langue, la température, top-P et top-K. Pour en savoir plus sur ces paramètres, consultez la section Paramètres du modèle Gemini.

Données de sortie

La réponse générée par le modèle est appelée candidat et contient les données suivantes. Il est possible que tous les champs ne soient pas présents dans la sortie.

  • Rôle: expéditeur de la réponse terre à terre. La réponse contient toujours le de la réponse ancrée. Par conséquent, le rôle dans une réponse est toujours un modèle.

  • Texte: réponse fondée sur le fond.

  • Score d'ancrage : valeur flottante comprise dans la plage [0, 1] qui indique dans quelle mesure une réponse est fondée sur les sources données.

  • Métadonnées d'ancrage: métadonnées sur la source d'ancrage. Les métadonnées de mise à la terre contiennent les informations suivantes :

    • Blocs de justification : liste des blocs qui justifient la réponse. Chaque bloc de support se voit attribuer un index de blocs de support qui est utile lorsque en traçant la provenance. Chaque bloc d'assistance contient les éléments suivants:

      • Texte de bloc : partie du texte citée textuellement à partir de la source à partir de laquelle la réponse ou une partie de la réponse (appelée texte de la revendication) est extraite. Il est possible que cet élément ne soit pas toujours présent dans la réponse.
      • Source: index attribué à la source dans la requête.
      • Métadonnées source : métadonnées sur le segment. Selon la source, les métadonnées de la source peuvent être l'un des éléments suivants:

        • Pour une source intégrée, les métadonnées peuvent correspondre aux détails supplémentaires qui ont été spécifiées dans la demande, telles que le titre, l'auteur ou l'URI.
        • Pour le magasin de données Vertex AI Search, les métadonnées peuvent être l'ID du document, le titre du document, l'URI (emplacement Cloud Storage) ou le numéro de page.
        • Pour l'ancrage avec la recherche Google, lorsqu'un résultat ancré à la recherche est généré, les métadonnées contient un URI qui redirige vers l'éditeur du le contenu qui a été utilisé pour générer le résultat de référence. Les métadonnées contient également le domaine de l'éditeur. Les URI fournis restent accessibles. jusqu'à 30 jours après la génération du résultat ancré.
    • Support de fond: informations d'ancrage pour une affirmation dans la réponse. Le support d'ancrage contient les informations suivantes:

      • Texte de la revendication : réponse ou partie de la réponse étayée par le texte du bloc d'informations.
      • Indice de bloc d'assistance : indice attribué au bloc d'assistance dans l'ordre dans lequel le bloc apparaît dans la liste des blocs d'assistance.
      • Requêtes de recherche Web : requêtes de recherche suggérées pour les suggestions de recherche Google.
      • Suggestions de recherche: si vous recevez les suggestions de recherche Google avec une réponse, cette réponse est une "réponse Résultat" soumis aux conditions d'utilisation du service Ancrage avec la recherche Google. Pour en savoir plus, consultez Pour en savoir plus, consultez Conditions d'utilisation Le champ renderedContent dans le champ searchEntryPoint est vous fournit du code pour implémenter les suggestions de recherche Google. À utiliser les suggestions de recherche Google, consultez l'article Utiliser la recherche Google Suggestions.

Générer une réponse pertinente en un seul tour

Cette section explique comment générer des réponses basées sur les sources suivantes :

Basez la réponse dans du texte intégré et dans un data store Vertex AI Search

L'exemple suivant montre comment envoyer du texte d'invite en spécifiant un texte intégré et un data store Vertex AI Search comme source d'ancrage. Cet exemple utilise la méthode generateGroundedContent.

REST

  1. Envoyez l'invite dans la requête 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_1",
               "attributes": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ]
         }
       },
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_2",
               "attributes": {
                 "title": "TITLE_2",
                 "uri": "URI_2"
               }
             },
             {
               "factText": "FACT_TEXT_3",
               "attributes": {
                 "title": "TITLE_3",
                 "uri": "URI_3"
               }
             }
           ]
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_1/servingConfigs/default_search"
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_2/servingConfigs/default_search"
         }
       }
      ]
    },
    "generationSpec": {
      "modelId": "MODEL_ID",
      "temperature": TEMPERATURE,
      "topP": TOP_P,
      "topK": TOP_K
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud.
    • PROMPT_TEXT: la requête de l'utilisateur.
    • SYSTEM_INSTRUCTION: un champ facultatif pour fournir un préambule ou un contexte supplémentaire.
    • FACT_TEXT_N : texte intégré pour étayer la réponse. Vous pouvez fournir un maximum de 100 informations SMS.
    • TITLE_N: Champ facultatif permettant de définir l'attribut Meta title pour le texte intégré.
    • URI_N: champ facultatif permettant de définir l'attribut Meta URI pour le texte intégré.
    • AUTHOR_N: Champ facultatif permettant de définir l'attribut Meta "author" pour le texte intégré.
    • APP_ID_N: ID de l'application Vertex AI Search.
    • MODEL_ID: un champ facultatif permettant de définir l'ID du modèle Gemini que vous souhaitez utiliser pour générer le concrète. Pour obtenir la liste des ID de modèle disponibles, consultez Modèles compatibles.
    • TEMPERATURE : champ facultatif permettant de définir la température utilisée pour l'échantillonnage. Google recommande une température de 0,0. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
    • TOP_P: un champ facultatif permettant de définir la valeur "top-P" du modèle. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • TOP_K: un champ facultatif permettant de définir la valeur de top-K pour le modèle. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# engine_id = "YOUR_ENGINE_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How did Google do in 2020? Where can I find BigQuery docs?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(
                text="Add a smiley emoji after the answer."
            )
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                inline_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.InlineSource(
                    grounding_facts=[
                        discoveryengine.GroundingFact(
                            fact_text=(
                                "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction"
                            ),
                            attributes={
                                "title": "BigQuery Overview",
                                "uri": "https://cloud.google.com/bigquery/docs/introduction",
                            },
                        ),
                    ]
                ),
            ),
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.SearchSource(
                    # The full resource name of the serving config for a Vertex AI Search App
                    serving_config=f"projects/{project_number}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_search",
                ),
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Exemple de génération de réponses en un seul tour basées sur du texte intégré et sur Vertex AI Search

Dans l'exemple suivant, la requête spécifie les éléments suivants : Sources d'ancrage: un texte intégré et une vue Vertex AI Search dans le data store. Cet exemple utilise le generateGroundedContent . Cet exemple utilise également une instruction système pour terminer la réponse avec un emoji souriant.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "How did google do in 2020? Where can I find Bigquery docs?"
        }
      ]
    }
  ],
  "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
  },
  "groundingSpec": {
    "groundingSources": [
      {
        "inline_source": {
          "grounding_facts": [
            {
              "fact_text": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction",
              "attributes": {
                "title": "BigQuery Overview",
                "uri": "https://cloud.google.com/bigquery/docs/introduction"
              }
            }
          ]
        }
      },
      {
        "searchSource": {
          "servingConfig": "projects/123456/locations/global/collections/default_collection/engines/app_id_example/servingConfigs/default_search"
        }
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}'

Générer une réponse fondée sur la recherche Google

Vous pouvez baser les réponses générées avec des données Web accessibles au public.

Récupération dynamique

Vous pouvez utiliser la récupération dynamique dans votre requête pour choisir quand désactiver l'ancrage avec la recherche Google. Cela est utile lorsque la requête n'exige pas une réponse basée sur la recherche Google modèles compatibles peuvent fournir une réponse en fonction de leur des connaissances sans s'ancrer. Cela vous permet de gérer plus efficacement la latence, la qualité et les coûts.

Score et seuil de prédiction de la récupération dynamique

Lorsque vous envoyez une requête pour générer une réponse fondée, Vertex AI Agent Builder attribue un score de prédiction à la requête. Le score de prédiction est une valeur à virgule flottante compris dans la plage [0,1]. Sa valeur dépend de la possibilité d'ancrer la réponse avec les informations les plus récentes de la recherche Google. Par conséquent, une requête qui nécessite réponse basée sur les faits les plus récents sur le Web a une prédiction plus élevée et une requête pour laquelle une réponse générée par le modèle est suffisante a une score de prédiction.

Voici quelques exemples de requêtes et de scores de prédiction.

Requête Score de prédiction Commentaire
"Écris un poème sur les pivoines" 0,13 Le modèle peut s'appuyer sur ses connaissances et la réponse n'a pas besoin d'ancrage
"Suggérez un jouet pour un enfant de 2 ans" 0,36 Le modèle peut s'appuyer sur ses connaissances et la réponse n'a pas besoin d'ancrage
"Peux-tu donner une recette de guacamole d'inspiration asiatique ?" 0.55 La recherche Google peut donner une réponse fondée sur la base, mais ce n'est pas obligatoire. la connaissance du modèle peut suffire
"Qu'est-ce qu'Agent Builder ? Comment l'ancrage est-il facturé dans Agent Builder ? 0.72 Nécessite la recherche Google pour générer une réponse claire
"Qui a remporté le dernier Grand Prix de F1 ?" 0,97 Nécessite la recherche Google pour générer une réponse pertinente

Dans votre requête de génération de réponses étayées, vous pouvez spécifier une configuration de récupération dynamique avec un seuil. Le seuil est une valeur à virgule flottante de la plage [0,1] et les valeurs par défaut sont 0,7. Si la valeur du seuil est zéro, est toujours ancrée dans la recherche Google. Pour toutes les autres valeurs de seuil, les conditions suivantes s'appliquent:

  • Si le score de prédiction est supérieur ou égal au seuil, le s'appuie sur la recherche Google. Un seuil inférieur implique que davantage de requêtes génèrent des réponses à l'aide de l'ancrage avec la recherche Google.
  • Si le score de prédiction est inférieur au seuil, le modèle peut quand même générer la réponse, mais celle-ci n'est pas fondée sur la recherche Google.

Pour trouver un seuil adapté aux besoins de votre entreprise, vous pouvez créer un un ensemble représentatif de requêtes que vous pensez rencontrer. Vous pouvez ensuite trier les requêtes en fonction du score de prédiction dans la réponse et sélectionner un bon seuil pour votre cas d'utilisation.

Ancrer la réponse avec la recherche Google

L'exemple suivant montre comment générer une réponse ancrée à partir d'une requête en spécifiant Google Search comme source d'ancrage. Cet exemple utilise generateGroundedContent.

REST

  1. Envoyez l'invite dans la requête 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
     {
         "googleSearchSource": {
              "dynamicRetrievalConfig": {
                  "predictor":{
                      "threshold": DYNAMIC_RETRIEVAL_THRESHOLD
                  }
              }
         }
     }
    ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud.
    • PROMPT_TEXT: la requête de l'utilisateur.
    • SYSTEM_INSTRUCTION : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire.
    • MODEL_ID: un champ facultatif permettant de définir l'ID du modèle Gemini que vous souhaitez utiliser pour générer le concrète. Pour obtenir la liste des ID de modèle disponibles, consultez Modèles compatibles.
    • TEMPERATURE: champ facultatif permettant de définir la température utilisée pour l'échantillonnage. Google recommande une température de 0,0. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur de P supérieure pour le modèle. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • TOP_K: un champ facultatif permettant de définir la valeur de top-K pour le modèle. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • DYNAMIC_RETRIEVAL_THRESHOLD: champ facultatif permettant de définir le seuil pour appeler la configuration de récupération dynamique. Il s'agit d'une valeur à virgule flottante dans la plage [0,1]. Si vous ajoutez dynamicRetrievalConfig , mais que vous ne définissez pas le champ predictor ni threshold, par défaut est 0,7. Si vous ne définissez pas le champ dynamicRetrievalConfig, la réponse est toujours basée sur la terre.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How much is Google stock?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(text="Be comprehensive.")
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource(
                    # Optional: For Dynamic Retrieval
                    dynamic_retrieval_config=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration(
                        predictor=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration.DynamicRetrievalPredictor(
                            threshold=0.7
                        )
                    )
                )
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Dans l'exemple suivant, la requête spécifie la recherche Google comme comme source d'ancrage. Cet exemple utilise la méthode generateGroundedContent. Cet exemple utilise également une instruction système pour terminer la réponse par un émoji souriant.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
"contents": [{
  "role": "user",
  "parts": [{
    "text": "What is vertex ai agent builder?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-1.5-flash"
}
}
'

Générer une réponse fondée en plusieurs tours

Dans la génération de réponses multi-tours, vous devez envoyer dans chaque requête tout le texte échangé entre l'utilisateur et le modèle dans tous les tours précédents. Cela garantit la continuité et conserve le contexte pour générer la réponse à la dernière requête.

Pour obtenir une réponse fondée en générant plusieurs réponses, procédez comme suit :

REST

Les exemples suivants montrent comment envoyer un texte d'invite de suivi sur plusieurs tours. Ces exemples utilisent la méthode generateGroundedContent et ancrent les réponses avec la recherche Google. Vous pouvez suivre des étapes similaires pour générer des réponses ancrées à l’aide d’autres sources d’ancrage.

  1. Envoyez la première invite dans la requête 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_1"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud.
    • PROMPT_TEXT_TURN_1: texte de la requête de l'utilisateur dans le premier tour.
    • SYSTEM_INSTRUCTION_TURN_1 : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire. Pour génération de réponse multitour, vous devez fournir les instructions système pour chaque tour.
    • MODEL_ID : champ facultatif permettant de définir l'ID du modèle Gemini que vous souhaitez utiliser pour générer la réponse étayée. Pour obtenir la liste des ID de modèle disponibles, consultez la section Modèles compatibles.
    • TEMPERATURE : champ facultatif permettant de définir la température utilisée pour l'échantillonnage. Google recommande une température de 0,0. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • TOP_P : champ facultatif permettant de définir la valeur de P supérieure pour le modèle. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • TOP_K: un champ facultatif permettant de définir la valeur de top-K pour le modèle. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
  2. Envoyez la deuxième invite en guise de suivi. Ajoutez la première invite de l'utilisateur, suivie de la réponse correspondante du modèle pour le contexte.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "ANSWER_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_2"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_2"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud.
    • PROMPT_TEXT_TURN_1: texte de la requête de l'utilisateur dans le premier tour.
    • ANSWER_TEXT_TURN_1: texte de la réponse dans dans le premier tour.
    • PROMPT_TEXT_TURN_2: texte de la requête de l'utilisateur dans le deuxième tour.
    • SYSTEM_INSTRUCTION_TURN_2: un champ facultatif pour fournir un préambule ou un contexte supplémentaire. Pour générer des réponses à plusieurs tours, vous devez fournir les instructions système pour chaque tour.
    • MODEL_ID : champ facultatif permettant de définir l'ID du modèle Gemini que vous souhaitez utiliser pour générer la réponse étayée. Pour obtenir la liste des ID de modèle disponibles, consultez la section Modèles compatibles.
    • TEMPERATURE: champ facultatif permettant de définir la température utilisée pour l'échantillonnage. Ce que Google recommande une température de 0,0. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur de P supérieure pour le modèle. Pour en savoir plus, consultez la page Modèle Gemini paramètres.
    • TOP_K: un champ facultatif permettant de définir la valeur de top-K pour le modèle. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
  3. Répétez ce processus pour obtenir d'autres réponses. À chaque tour, ajoutez tous Les invites précédentes de l'utilisateur, suivies des réponses correspondantes à partir du modèle.

Exemple de génération de réponse multitour

Dans l'exemple suivant, la requête spécifie trois informations factuelles intégrées. comme source d'ancrage pour générer des réponses en deux tours. Ce utilise la méthode generateGroundedContent. Cet exemple utilise également un une instruction système permettant de terminer la réponse au premier tour avec un emoji souriant.

REST

  1. Envoyez la première invite dans la requête curl suivante.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     }
    ],
    "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
    },
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    
  2. Envoyez la deuxième invite en guise de suivi. Ajoutez la première invite de l'utilisateur, suivie de la réponse correspondante du modèle pour le contexte.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "Rephrase the answer in an abstracted list."
         }
       ]
     }
    ],
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    

Diffusez des réponses ancrées en streaming

Vous pouvez choisir de diffuser les réponses du modèle en flux continu. Cela est utile dans les cas d'utilisation où la réponse est particulièrement longue et que l'envoi de l'ensemble de la réponse en une seule fois entraîne un retard important. Le streaming de la réponse décompose la réponse en un tableau de plusieurs candidats contenant des parties séquentielles du texte de la réponse.

Pour obtenir une réponse factuelle et concrète, procédez comme suit:

REST

L'exemple suivant montre comment diffuser une réponse ancrée. Cet exemple utilise streamGenerateGroundedContent et base la réponse sur Recherche Google sans configuration de récupération dynamique. Vous pouvez suivre une procédure similaire pour générer des réponses étayées à l'aide d'autres sources d'ancrage.

  1. Envoyez l'invite dans la requête curl suivante.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global:streamGenerateGroundedContent" \
    -d '
    [
    {
     "contents": [
       {
         "role": "user",
         "parts": [
           {
             "text": "PROMPT_TEXT"
           }
         ]
       }
     ],
     "systemInstruction": {
         "parts": {
             "text": "SYSTEM_INSTRUCTION"
         }
     },
     "groundingSpec": {
       "groundingSources": [
         {
           "googleSearchSource": {}
         }
       ]
     },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    }
    }
    ]'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud.
    • PROMPT_TEXT: la requête de l'utilisateur.
    • SYSTEM_INSTRUCTION : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire.
    • MODEL_ID: un champ facultatif permettant de définir l'ID du modèle Gemini que vous souhaitez utiliser pour générer le concrète. Pour obtenir la liste des ID de modèle disponibles, consultez Modèles compatibles.
    • TEMPERATURE : champ facultatif permettant de définir la température utilisée pour l'échantillonnage. Google recommande une température de 0,0. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
    • TOP_P: un champ facultatif permettant de définir la valeur "top-P" du modèle. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K du modèle. Pour en savoir plus, consultez la section Paramètres du modèle Gemini.

Python

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="Summarize how to delete a data store in Vertex AI Agent Builder?"
                )
            ],
        )
    ],
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource()
            ),
        ]
    ),
)
responses = client.stream_generate_grounded_content(iter([request]))

for response in responses:
    # Handle the response
    print(response)

Exemple de streaming de réponses avec ancrage

Dans l'exemple suivant, la requête spécifie la recherche Google comme d'ancrage pour diffuser une réponse en continu sans la récupération dynamique configuration. La réponse lue en streaming est répartie sur plusieurs réponses candidates. Cet exemple utilise la méthode streamGenerateGroundedContent.

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/123456/locations/global:streamGenerateGroundedContent" \
-d '
[
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Summarize How to delete a data store in Vertex AI Agent Builder?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

Modèles compatibles

Les modèles suivants sont compatibles avec l'ancrage :

  • Gemini 1.5 Pro avec saisie de texte uniquement
  • Gemini 1.5 Flash avec saisie de texte uniquement
  • Gemini 1.0 Pro avec saisie de texte uniquement

Pour en savoir plus sur ces modèles Gemini, consultez la page Versions et cycle de vie des modèles Gemini.

Lorsque vous appelez la méthode generateGroundedContent, vous pouvez utiliser les éléments suivants : ID de modèle:

ID du modèle Mise à jour automatique
default Oui
gemini-1.0-pro Oui
gemini-1.0-pro-001 Non
gemini-1.0-pro-002 Non
gemini-1.5-flash Oui
gemini-1.5-flash-001 Non
gemini-1.5-pro Oui
gemini-1.5-pro-001 Non

Étape suivante

Apprenez à utiliser la méthode de génération ancrée avec d'autres API RAG pour générer des réponses fondées à partir de données non structurées.