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

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

  • Recherche Google : utilisez l'ancrage avec la recherche Google si vous souhaitez associer le modèle à des connaissances du monde entier, à un large éventail de sujets ou à des informations à jour sur Internet. L'ancrage avec 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 récupération dynamique évalue si une requête nécessite des connaissances sur les événements récents et active la fonctionnalité Grounding avec la recherche Google. Pour en savoir plus, consultez Récupération dynamique.
  • Texte intégré : utilisez l'ancrage avec du texte intégré pour ancrer la réponse dans des extraits de texte appelés texte factuel qui sont fournis dans la requête. Un texte factuel est une déclaration fournie par l'utilisateur et considérée comme factuelle pour une requête donnée. Le modèle ne vérifie pas l'authenticité du texte factuel.
  • Datastores Vertex AI Search : utilisez l'ancrage avec Vertex AI Search si vous souhaitez connecter le modèle à vos documents d'entreprise provenant de datastores Vertex AI Search.

Cette page explique comment générer des réponses ancrées en fonction de ces sources d'ancrage à l'aide des approches suivantes :

Vous pouvez également choisir de diffuser les réponses du modèle. La génération d'une réponse ancrée par streaming est une fonctionnalité expérimentale.

Vous pouvez utiliser d'autres méthodes pour générer des réponses ancrées, en fonction de votre application. Pour en savoir plus, consultez API Vertex AI pour créer des expériences de recherche et 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 sorties, comment structurer votre requête et la terminologie liée à la RAG.

Termes liés au RAG

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

  1. Récupération : obtenir rapidement les faits les plus pertinents peut être un problème de recherche courant. Avec le RAG, vous pouvez récupérer rapidement les faits importants pour générer une réponse.
  2. Génération : le LLM utilise les faits récupérés pour générer une réponse ancrée.

Par conséquent, la méthode de génération de réponses ancrées récupère les faits à partir de la source d'ancrage et génère une réponse ancrée.

Données d'entrée

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

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

  • Texte : lorsque le rôle est user, le texte est une requête, et lorsqu'il est model, le texte est une réponse ancrée. La façon dont vous spécifiez le rôle et le texte dans une requête est déterminée comme suit :

    • Pour la génération de réponses en un seul tour, l'utilisateur envoie le texte de la requête dans la demande et le modèle envoie le texte de la réponse dans la réponse.
    • Pour une génération de réponses multitours, la requête contient la paire prompt-réponse pour tous les tours précédents et le texte du prompt de l'utilisateur pour le tour actuel. Par conséquent, dans une telle requête, le rôle est user pour le texte de la requête et model pour le texte de la réponse.
  • Instruction système : préambule de votre requête qui régit le comportement du modèle et modifie la sortie en conséquence. Par exemple, vous pouvez ajouter un personnage à 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 la génération de réponses multitours, vous devez fournir les instructions système pour chaque tour. Pour en savoir plus, consultez Utiliser les instructions système.

  • Source d'ancrage : source sur laquelle la réponse est ancrée. Il peut s'agir d'une ou de plusieurs des sources suivantes :

    • Recherche Google : ancrez les réponses avec les résultats de recherche Google. Lorsque la source d'ancrage 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 Récupération dynamique.

    • Texte intégré : ancrez la réponse dans le texte factuel fourni dans la requête. Un texte factuel est une déclaration fournie par l'utilisateur et considérée comme factuelle pour une requête donnée. Le modèle ne vérifie pas l'authenticité du texte factuel. Vous pouvez fournir jusqu'à 100 textes factuels dans chaque source de texte intégré. Les textes factuels peuvent être pris en charge à l'aide d'attributs méta, tels que le titre, l'auteur et l'URI. Ces attributs de métadonnées sont renvoyés dans la réponse lorsque les blocs qui soutiennent la réponse sont cités.

    • Data stores Vertex AI Search : ancrez la réponse dans les documents des data stores Vertex AI Search. Vous ne pouvez pas spécifier de data store de recherche sur un site Web comme source d'ancrage.

    Dans une requête donnée, vous pouvez fournir à la fois une source de texte intégrée et une source de 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 ancrer vos réponses avec des résultats de recherche Google, vous devez envoyer une demande distincte spécifiant la recherche Google comme seule source d'ancrage.

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

    • Trois sources de texte intégré, chacune pouvant contenir jusqu'à 100 textes factuels
    • Six datastores Vertex AI Search
    • Une source de texte intégré, contenant un maximum de 100 textes factuels

    Chaque source se voit attribuer un index 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 requête, l'index de source est attribué comme illustré dans le tableau suivant :

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

    Cet index est cité dans la réponse et est utile pour retracer la provenance.

  • Spécifications de génération : spécifications de configuration du modèle, qui comprennent 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 ancrées, consultez 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 les suivants : langue, température, top-P et top-K. Pour en savoir plus sur ces paramètres, consultez Paramètres du modèle Gemini.

  • Code de langue : la langue de la réponse générée est généralement définie pour correspondre à celle de la requête. S'il n'y a pas de langue unique dans la requête (par exemple, si la requête est très courte et peut être valide dans plusieurs langues), le champ du code de langue détermine la langue de la réponse.

    Pour obtenir la liste des codes de langue, consultez Langues.

  • Latitude et longitude : spécifie la latitude et la longitude de l'utilisateur. Ces champs sont utilisés si la requête contient des questions spécifiques à un lieu, comme "Trouve un café près de moi". Si la langue de la requête ne peut pas être déterminée et que le code de langue n'est pas défini, la latitude et la longitude sont utilisées pour déterminer la langue de la réponse.

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 le résultat.

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

  • Texte : réponse ancrée.

  • Score d'ancrage : valeur flottante comprise entre 0 et 1 indiquant dans quelle mesure une réponse est ancrée dans les sources fournies.

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

    • Segments d'assistance : liste des segments qui correspondent à la réponse. Chaque bloc de support est associé à un index de bloc de support qui est utile pour retracer la provenance. Chaque bloc d'assistance contient les éléments suivants :

      • Texte du segment : partie du texte citée mot pour mot à partir de la source à partir de laquelle la réponse ou une partie de la réponse (appelée texte de l'affirmation) est extraite. Il n'est pas toujours présent dans la réponse.
      • Source : index attribué à la source dans la demande.
      • Métadonnées sources : métadonnées sur le bloc. Selon la source, les métadonnées de la source peuvent être les suivantes :

        • Pour une source intégrée, les métadonnées peuvent être les informations supplémentaires spécifiées dans la requête, telles que le titre, l'auteur ou l'URI.
        • Pour le data store 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é est généré, les métadonnées contiennent un URI qui redirige vers l'éditeur du contenu utilisé pour générer le résultat ancré. Les métadonnées contiennent également le domaine de l'éditeur. Les URI fournis restent accessibles pendant 30 jours maximum après la génération du résultat.
    • Supports d'ancrage : informations d'ancrage pour une affirmation dans la réponse. L'aide à l'ancrage contient les informations suivantes :

      • Texte de l'affirmation : réponse ou partie de la réponse étayée par le texte du segment de soutien.
      • Index du segment d'appui : index attribué au segment d'appui dans l'ordre dans lequel il apparaît dans la liste des segments d'appui.
      • Requêtes de recherche sur le Web : requêtes de recherche suggérées pour les suggestions de recherche Google.
      • Suggestions de recherche : si vous recevez des suggestions de recherche Google avec une réponse, cette réponse est un "Résultat ancré" soumis aux conditions d'utilisation du service d'ancrage dans la recherche Google. Pour en savoir plus, consultez les Conditions d'utilisation du service. Le champ renderedContent dans le champ searchEntryPoint est le code fourni pour implémenter les suggestions de recherche Google. Pour utiliser les suggestions de recherche Google, consultez Utiliser les suggestions de recherche Google.

Générer une réponse ancrée en une seule étape

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

Ancrer la réponse dans du texte intégré et 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. Vous ne pouvez pas spécifier de data store de recherche sur un site Web comme source d'ancrage. Cet exemple utilise la méthode generateGroundedContent.

REST

  1. Envoyez la requête 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
    },
    "user_context": {
      "languageCode: "LANGUAGE_CODE",
      "latLng": {
        "latitude": LATITUDE,
        "longitude": LONGITUDE
     },
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud .
    • PROMPT_TEXT : requête de l'utilisateur.
    • SYSTEM_INSTRUCTION : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire.
    • FACT_TEXT_N : texte intégré pour ancrer la réponse. Vous pouvez fournir jusqu'à 100 textes factuels.
    • 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 de métadonnées URI pour le texte intégré.
    • AUTHOR_N : champ facultatif permettant de définir l'attribut de métadonnées de l'auteur pour le texte intégré.
    • APP_ID_N : ID de l'application Vertex AI Search.
    • 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 ancrée. Pour obtenir la liste des ID de modèles 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 Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur top-P pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • LANGUAGE_CODE : champ facultatif qui peut être utilisé pour définir la langue de la réponse générée et du texte du bloc renvoyé. Si la langue ne peut pas être déterminée à partir de la requête, ce champ est utilisé. La valeur par défaut est en. Pour obtenir la liste des codes de langue, consultez Langues.
    • LATITUDE : champ facultatif permettant de définir la latitude. Saisissez la valeur en degrés décimaux (par exemple, -25.34).
    • LONGITUDE : champ facultatif permettant de définir la longitude. Saisissez la valeur en degrés décimaux (par exemple, 131.04).

Exemple de génération de réponse unique ancrée dans du texte intégré et Vertex AI Search

Dans l'exemple suivant, la requête spécifie les sources d'ancrage suivantes : un fait textuel intégré et un data store Vertex AI Search. Cet exemple utilise la méthode generateGroundedContent. Cet exemple utilise également une instruction système pour terminer la réponse par un emoji smiley.

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"
  },
  "user_context": {
    "languageCode: "en",
    "latLng": {
       "latitude": 37.422131,
       "longitude": -122.084801
    }
  }
}'

Générer une réponse ancrée avec la recherche Google

Vous pouvez ancrer 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 dans la recherche Google. Cela est utile lorsque la requête ne nécessite pas de réponse basée sur la recherche Google et que les modèles compatibles peuvent fournir une réponse basée sur leurs connaissances sans ancrage. 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 ancrée, AI Applications attribue un score de prédiction à la requête. Le score de prédiction est une valeur à virgule flottante comprise entre 0 et 1. Sa valeur dépend de la possibilité de l'ancrer avec les informations les plus récentes de la recherche Google. Par conséquent, une requête qui nécessite une réponse basée sur les faits les plus récents sur le Web a un score de prédiction plus élevé, et une requête pour laquelle une réponse générée par le modèle est suffisante a un score de prédiction plus faible.

Voici des exemples de suggestions et leurs 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'être ancrée
"Propose 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'être ancrée
"Peux-tu me donner la recette d'un guacamole d'inspiration asiatique ?" 0.55 La recherche Google peut fournir une réponse fondée, mais la justification n'est pas strictement nécessaire. Les connaissances du modèle peuvent suffire.
"Qu'est-ce que les applications d'IA ? Comment est facturé l'ancrage dans les applications d'IA ?" 0.72 Nécessite la recherche Google pour générer une réponse pertinente
"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 demande de génération de réponses ancrées, vous pouvez spécifier une configuration de récupération dynamique avec un seuil. Le seuil est une valeur à virgule flottante comprise entre 0 et 1, et sa valeur par défaut est 0,7. Si la valeur du seuil est nulle, la réponse est toujours ancrée dans la recherche Google. Pour toutes les autres valeurs de seuil, les règles suivantes s'appliquent :

  • Si le score de prédiction est supérieur ou égal au seuil, la réponse est basée sur la recherche Google. Un seuil plus faible implique que davantage de requêtes ont des réponses générées à l'aide de l'ancrage avec la recherche Google.
  • Si le score de prédiction est inférieur au seuil, le modèle peut générer la réponse, mais elle n'est pas ancrée dans la recherche Google.

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

Ancre la réponse avec la recherche Google

L'exemple suivant montre comment générer une réponse ancrée à partir d'une invite en spécifiant la recherche Google comme source d'ancrage. Cet exemple utilise la méthode generateGroundedContent.

REST

  1. Envoyez la requête 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
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud .
    • PROMPT_TEXT : requête de l'utilisateur.
    • SYSTEM_INSTRUCTION : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire.
    • 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 comprise entre 0 et 1. Si vous ajoutez le champ dynamicRetrievalConfig, mais que vous ne définissez pas les champs predictor ou threshold, la valeur du seuil est définie par défaut sur 0,7. Si vous ne définissez pas le champ dynamicRetrievalConfig, la réponse est toujours ancrée.
    • 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 ancrée. Pour obtenir la liste des ID de modèles 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 Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur top-P pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • LANGUAGE_CODE : champ facultatif qui peut être utilisé pour définir la langue de la réponse générée et du texte du bloc renvoyé. Si la langue ne peut pas être déterminée à partir de la requête, ce champ est utilisé. La valeur par défaut est en. Pour obtenir la liste des codes de langue, consultez Langues.
    • LATITUDE : champ facultatif permettant de définir la latitude. Saisissez la valeur en degrés décimaux (par exemple, -25.34).
    • LONGITUDE : champ facultatif permettant de définir la longitude. Saisissez la valeur en degrés décimaux (par exemple, 131.04).

Dans l'exemple suivant, la requête spécifie la recherche Google 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 emoji smiley.

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 ai applications?"
}]
}],
"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 ancrée en plusieurs tours

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

Pour obtenir une réponse ancrée grâce à la génération de réponses multitours, procédez comme suit :

REST

Les exemples suivants montrent comment envoyer du texte de requête de suivi sur plusieurs tours. Ces exemples utilisent la méthode generateGroundedContent et ancrent les réponses avec la recherche Google. Vous pouvez suivre une procédure similaire 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
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    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 lors du premier tour.
    • SYSTEM_INSTRUCTION_TURN_1 : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire. Pour la génération de réponses multitours, 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 ancrée. Pour obtenir la liste des ID de modèles 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 Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur top-P pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • LANGUAGE_CODE : champ facultatif qui peut être utilisé pour définir la langue de la réponse générée et du texte du bloc renvoyé. Si la langue ne peut pas être déterminée à partir de la requête, ce champ est utilisé. La valeur par défaut est en. Pour obtenir la liste des codes de langue, consultez Langues.
    • LATITUDE : champ facultatif permettant de définir la latitude. Saisissez la valeur en degrés décimaux (par exemple, -25.34).
    • LONGITUDE : champ facultatif permettant de définir la longitude. Saisissez la valeur en degrés décimaux (par exemple, 131.04).
  2. Envoyez la deuxième requête en tant que requête de suivi. Ajoutez la première requête 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
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    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 lors du premier tour.
    • ANSWER_TEXT_TURN_1 : texte de la réponse du modèle au premier tour.
    • PROMPT_TEXT_TURN_2 : texte de la requête de l'utilisateur au deuxième tour.
    • SYSTEM_INSTRUCTION_TURN_2 : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire. Pour la génération de réponses multitours, 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 ancrée. Pour obtenir la liste des ID de modèles 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 Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur top-P pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • LANGUAGE_CODE : champ facultatif qui peut être utilisé pour définir la langue de la réponse générée et du texte du bloc renvoyé. Si la langue ne peut pas être déterminée à partir de la requête, ce champ est utilisé. La valeur par défaut est en. Pour obtenir la liste des codes de langue, consultez Langues.
    • LATITUDE : champ facultatif permettant de définir la latitude. Saisissez la valeur en degrés décimaux (par exemple, -25.34).
    • LONGITUDE : champ facultatif permettant de définir la longitude. Saisissez la valeur en degrés décimaux (par exemple, 131.04).
  3. Répétez cette procédure pour obtenir d'autres réponses complémentaires. À chaque tour, ajoutez toutes les requêtes précédentes de l'utilisateur, suivies des réponses correspondantes du modèle.

Exemple de génération de réponses multitours

Dans l'exemple suivant, la requête spécifie trois textes factuels intégrés comme source d'ancrage pour générer des réponses sur deux tours. Cet exemple utilise la méthode generateGroundedContent. Cet exemple utilise également une instruction système pour terminer la réponse du premier tour par un emoji smiley.

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 requête en tant que requête de suivi. Ajoutez la première requête 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"
    }
    }'
    

Diffuser des réponses ancrées

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

Pour obtenir une réponse ancrée et diffusée en streaming :

REST

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

  1. Envoyez la requête 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
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }
    ]'
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER : numéro de votre projet Google Cloud .
    • PROMPT_TEXT : requête de l'utilisateur.
    • SYSTEM_INSTRUCTION : champ facultatif permettant de fournir un préambule ou un contexte supplémentaire.
    • 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 ancrée. Pour obtenir la liste des ID de modèles 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 Paramètres du modèle Gemini.
    • TOP_P : champ facultatif permettant de définir la valeur top-P pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • TOP_K : champ facultatif permettant de définir la valeur top-K pour le modèle. Pour en savoir plus, consultez Paramètres du modèle Gemini.
    • LANGUAGE_CODE : champ facultatif qui peut être utilisé pour définir la langue de la réponse générée et du texte du bloc renvoyé. Si la langue ne peut pas être déterminée à partir de la requête, ce champ est utilisé. La valeur par défaut est en. Pour obtenir la liste des codes de langue, consultez Langues.
    • LATITUDE : champ facultatif permettant de définir la latitude. Saisissez la valeur en degrés décimaux (par exemple, -25.34).
    • LONGITUDE : champ facultatif permettant de définir la longitude. Saisissez la valeur en degrés décimaux (par exemple, 131.04).

Exemple de réponses ancrées en streaming

Dans l'exemple suivant, la requête spécifie la recherche Google comme source d'ancrage pour diffuser une réponse sans la configuration de récupération dynamique. La réponse diffusée 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 AI Applications?"
        }
      ]
    }
  ],
  "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

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

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

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

Étapes suivantes

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