L'ancrage avec la recherche Google permet d'associer un modèle Gemini à du contenu Web public en temps réel. Cela permet au modèle de fournir des réponses plus précises et à jour, et de citer des sources vérifiables au-delà de sa limite de connaissances.
L'ancrage avec la recherche Google présente les avantages suivants :
- Améliorer la justesse factuelle : réduisez les hallucinations du modèle en basant les réponses sur des informations réelles.
- Accéder à des informations en temps réel : obtenez des réponses à des questions sur des événements et des thèmes récents.
- Fournir des citations : renforcez la confiance des utilisateurs ou permettez-leur de parcourir des sites pertinents en affichant les sources des affirmations du modèle.
- Effectuer des tâches plus complexes : récupérer des artefacts et des images, des vidéos ou d'autres contenus multimédias pertinents pour faciliter les tâches de raisonnement.
- Améliorer les réponses spécifiques à une région ou à une langue : trouvez des informations spécifiques à une région ou aidez à traduire du contenu avec précision.
Notez que la prise en charge de l'ancrage pour la recherche Google est disponible pour iOS+, Android et le Web. Il sera disponible pour Flutter et Unity dans leurs prochaines versions.
Modèles compatibles
gemini-2.5-pro
gemini-2.5-flash
gemini-2.5-flash-lite-preview-06-17
gemini-2.0-flash-001
(et son alias mis à jour automatiquementgemini-2.0-flash
)gemini-2.0-flash-live-preview-04-09
Langues disponibles
Consultez les langues acceptées pour les modèles Gemini.
Ancrer le modèle avec la recherche Google
Cliquez sur votre fournisseur Gemini API pour afficher le contenu et le code spécifiques à ce fournisseur sur cette page. |
Lorsque vous créez l'instance GenerativeModel
, fournissez GoogleSearch
en tant que tool
que le modèle peut utiliser pour générer sa réponse.
Swift
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(
modelName: "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools: [Tool.googleSearch()]
)
let response = try await model.generateContent("Who won the euro 2024?")
print(response.text ?? "No text in response.")
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Kotlin
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools = listOf(Tool.GoogleSearch())
)
val response = model.generateContent("Who won the euro 2024?")
print(response.text)
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Java
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("GEMINI_MODEL_NAME",
null,
null,
// Provide Google Search as a tool that the model can use to generate its response
List.of(Tool.GoogleSearch()));
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ListenableFuture response = model.generateContent("Who won the euro 2024?");
Futures.addCallback(response, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(
ai,
{
model: "GEMINI_MODEL_NAME",
// Provide Google Search as a tool that the model can use to generate its response
tools: [{ googleSearch: {} }]
}
);
const result = await model.generateContent("Who won the euro 2024?");
console.log(result.response.text());
// Make sure to comply with the "Grounding with Google Search" usage requirements,
// which includes how you use and display the grounded result
Dart
La compatibilité avec Flutter sera disponible dans la prochaine version.
Unity
La compatibilité avec Unity sera disponible dans la prochaine version.
Découvrez comment choisir un modèle adapté à votre cas d'utilisation et à votre application.
Pour obtenir des résultats optimaux, utilisez une température de 1.0
(qui est la valeur par défaut pour tous les modèles 2.5). Découvrez comment définir la température dans la configuration du modèle.
Fonctionnement de l'ancrage avec la recherche Google
Lorsque vous utilisez l'outil GoogleSearch
, le modèle gère automatiquement l'ensemble du workflow de recherche, de traitement et de citation des informations.
Voici le workflow du modèle :
- Recevoir une invite : votre application envoie une invite au modèle Gemini avec l'outil
GoogleSearch
activé. - Analyser la requête : le modèle analyse la requête et détermine si la recherche Google peut améliorer sa réponse.
- Envoyer des requêtes à la recherche Google : si nécessaire, le modèle génère automatiquement une ou plusieurs requêtes de recherche et les exécute.
- Traiter les résultats de recherche : le modèle traite les résultats de recherche Google et formule une réponse à la requête d'origine.
- Renvoyer un "résultat ancré" : le modèle renvoie une réponse finale et conviviale ancrée dans les résultats de recherche Google. Cette réponse inclut la réponse textuelle du modèle et
groundingMetadata
avec les requêtes de recherche, les résultats Web et les citations.
Notez que le fait de fournir la recherche Google comme outil au modèle ne l'oblige pas à l'utiliser systématiquement pour générer sa réponse. Dans ce cas, la réponse ne contient pas d'objet groundingMetadata
et n'est donc pas un "résultat ancré".
Comprendre le résultat ancré
Si le modèle ancre sa réponse dans les résultats de recherche Google, celle-ci inclut un objet groundingMetadata
contenant des données structurées essentielles pour valider les affirmations et créer une expérience de citation enrichie dans votre application.
L'objet groundingMetadata
d'un "résultat ancré" contient les informations suivantes :
webSearchQueries
: tableau des requêtes de recherche envoyées à la recherche Google. Ces informations sont utiles pour le débogage et pour comprendre le processus de raisonnement du modèle.searchEntryPoint
: contient le code HTML et CSS permettant d'afficher les "suggestions de recherche Google" requises. Vous devez respecter les exigences d'utilisation de l'ancrage dans la recherche Google pour le fournisseur d'API de votre choix : Gemini Developer API ou Vertex AI Gemini API (voir la section Conditions d'utilisation du service dans les conditions d'utilisation spécifiques au service). Découvrez comment utiliser et afficher un résultat ancré plus loin sur cette page.groundingChunks
: tableau d'objets contenant les sources Web (uri
ettitle
).groundingSupports
: tableau de blocs permettant de relier la réponse du modèletext
aux sources dansgroundingChunks
. Chaque bloc associe unsegment
de texte (défini parstartIndex
etendIndex
) à un ou plusieursgroundingChunkIndices
. Ce champ vous aide à créer des citations en ligne. Découvrez comment utiliser et afficher un résultat ancré plus loin sur cette page.
Voici un exemple de réponse incluant un objet groundingMetadata
:
{
"candidates": [
{
"content": {
"parts": [
{
"text": "Spain won Euro 2024, defeating England 2-1 in the final. This victory marks Spain's record fourth European Championship title."
}
],
"role": "model"
},
"groundingMetadata": {
"webSearchQueries": [
"UEFA Euro 2024 winner",
"who won euro 2024"
],
"searchEntryPoint": {
"renderedContent": "<!-- HTML and CSS for the search widget -->"
},
"groundingChunks": [
{"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "aljazeera.com"}},
{"web": {"uri": "https://vertexaisearch.cloud.google.com.....", "title": "uefa.com"}}
],
"groundingSupports": [
{
"segment": {"startIndex": 0, "endIndex": 85, "text": "Spain won Euro 2024, defeatin..."},
"groundingChunkIndices": [0]
},
{
"segment": {"startIndex": 86, "endIndex": 210, "text": "This victory marks Spain's..."},
"groundingChunkIndices": [0, 1]
}
]
}
}
]
}
Utiliser et afficher un résultat ancré
Si le modèle utilise l'outil de recherche Google pour générer une réponse, il fournira un objet groundingMetadata
dans la réponse.
Il est obligatoire d'afficher les suggestions de recherche Google et recommandé d'afficher les citations.
En plus de respecter les exigences d'utilisation de l'outil Recherche Google, l'affichage de ces informations vous aide, vous et vos utilisateurs finaux, à valider les réponses et vous permet d'en apprendre davantage.
(Obligatoire) Afficher les suggestions de recherche Google
Si une réponse contient des "suggestions de recherche Google", vous devez respecter les exigences d'utilisation de l'ancrage avec la recherche Google, y compris la façon dont vous affichez les suggestions de recherche Google.
L'objet groundingMetadata
contient des suggestions de recherche Google, plus précisément le champ searchEntryPoint
, qui comporte un champ renderedContent
fournissant un style HTML et CSS conforme. Vous devez l'implémenter pour afficher les suggestions de recherche dans votre application.
Consultez les informations détaillées sur les exigences concernant l'affichage et le comportement des suggestions de recherche Google dans la documentation Google Cloud. Notez que même si ces conseils détaillés figurent dans la documentation Vertex AI Gemini API, ils s'appliquent également au fournisseur Gemini Developer API.
Consultez les exemples de code plus loin dans cette section.
(Recommandé) Afficher les citations
L'objet groundingMetadata
contient des données de citation structurées, en particulier les champs groundingSupports
et groundingChunks
. Utilisez ces informations pour associer les déclarations du modèle directement à leurs sources dans votre UI (de manière intégrée et agrégée).
Consultez les exemples de code plus loin dans cette section.
Exemples de code
Ces exemples de code fournissent des modèles généralisés pour utiliser et afficher le résultat ancré. Toutefois, il est de votre responsabilité de vous assurer que votre implémentation spécifique respecte les exigences de conformité.
Swift
// ...
// Get the model's response
let text = response.text
// Get the grounding metadata
if let candidate = response.candidates.first,
let groundingMetadata = candidate.groundingMetadata {
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
if let renderedContent = groundingMetadata.searchEntryPoint?.renderedContent {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
let groundingChunks = groundingMetadata.groundingChunks
for chunk in groundingMetadata.groundingChunks {
if let web = chunk.web {
let title = web.title // for example, "uefa.com"
let uri = web.uri // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
}
Kotlin
// ...
// Get the model's response
val text = response.text
// Get the grounding metadata
val groundingMetadata = response.candidates.firstOrNull()?.groundingMetadata
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
val renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent
if (renderedContent != null) {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
val groundingChunks = groundingMetadata?.groundingChunks
groundingChunks?.let { chunks ->
for (chunk in chunks) {
val title = chunk.web?.title // for example, "uefa.com"
val uri = chunk.web?.uri // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
Java
// ...
Futures.addCallback(response, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
// Get the model's response
String text = result.getText();
// Get the grounding metadata
GroundingMetadata groundingMetadata =
result.getCandidates()[0].getGroundingMetadata();
if (groundingMetadata != null) {
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
String renderedContent =
groundingMetadata.getSearchEntryPoint().getRenderedContent();
if (renderedContent != null) {
// TODO(developer): Display Google Search suggestions using a WebView
}
// RECOMMENDED - display citations
List chunks = groundingMetadata.getGroundingChunks();
if (chunks != null) {
for(GroundingChunk chunk : chunks) {
WebGroundingChunk web = chunk.getWeb();
if (web != null) {
String title = web.getTitle(); // for example, "uefa.com"
String uri = web.getUri(); // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
}
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
// ...
// Get the model's text response
const text = result.response.text();
// Get the grounding metadata
const groundingMetadata = result.response.candidates?.[0]?.groundingMetadata;
// REQUIRED - display Google Search suggestions
// (renderedContent contains HTML and CSS for the search widget)
const renderedContent = groundingMetadata?.searchEntryPoint?.renderedContent;
if (renderedContent) {
// TODO(developer): render this HTML and CSS in the UI
}
// RECOMMENDED - display citations
const groundingChunks = groundingMetadata?.groundingChunks;
if (groundingChunks) {
for (const chunk of groundingChunks) {
const title = chunk.web?.title; // for example, "uefa.com"
const uri = chunk.web?.uri; // for example, "https://vertexaisearch.cloud.google.com..."
// TODO(developer): show citation in the UI
}
}
Dart
La compatibilité avec Flutter sera disponible dans la prochaine version.
Unity
La compatibilité avec Unity sera disponible dans la prochaine version.
Résultats ancrés et surveillance de l'IA dans la console Firebase
Si vous avez activé la surveillance de l'IA dans la console Firebase, les réponses sont stockées dans Cloud Logging. Par défaut, ces données sont conservées pendant 30 jours.
Il vous incombe de vous assurer que cette période de conservation, ou toute période personnalisée que vous définissez, correspond parfaitement à votre cas d'utilisation spécifique et à toute exigence de conformité supplémentaire pour le fournisseur Gemini API de votre choix : Gemini Developer API ou Vertex AI Gemini API (voir la section Conditions d'utilisation du service dans les Conditions spécifiques aux services). Vous devrez peut-être ajuster la période de conservation dans Cloud Logging pour répondre à ces exigences.
Tarifs et limites
Veillez à consulter la tarification, la disponibilité des modèles et les limites de l'ancrage avec la recherche Google dans la documentation du fournisseur Gemini API de votre choix : Gemini Developer API | Vertex AI Gemini API.