Gemini permet de combiner des outils intégrés, tels
que google_search, et l'appel de fonction
(également appelé outils personnalisés) dans une seule interaction en préservant et en exposant
l'historique du contexte des appels d'outils. Les combinaisons d'outils intégrés et personnalisés permettent de créer des workflows complexes et autonomes où, par exemple, le modèle peut s'appuyer sur des données Web en temps réel avant d'appeler votre logique métier spécifique.
Voici un exemple qui active les combinaisons d'outils intégrés et personnalisés avec google_search et une fonction personnalisée getWeather :
Python
# This will only work for SDK newer than 2.0.0
from google import genai
client = genai.Client()
getWeather = {
"type": "function",
"name": "getWeather",
"description": "Gets the weather for a requested city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state, e.g. Utqiaġvik, Alaska",
},
},
"required": ["city"],
},
}
# The Interactions API manages context automatically across tool calls.
# The model will first use Google Search, then call getWeather.
interaction = client.interactions.create(
model="gemini-3.5-flash",
input="What is the northernmost city in the United States? What's the weather like there today?",
tools=[
{"type": "google_search"},
getWeather,
],
)
# Process steps: the interaction contains search results and a function call
for step in interaction.steps:
if step.type == "function_call":
print(f"Function call: {step.name} with args: {step.arguments}")
# In a real application, you would execute the function here
# and provide the result back to the model.
JavaScript
// This will only work for SDK newer than 2.0.0
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const getWeather = {
type: "function",
name: "getWeather",
description: "Get the weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA"
}
},
required: ["location"]
}
};
// The Interactions API manages context automatically across tool calls.
// The model will first use Google Search, then call getWeather.
const interaction = await client.interactions.create({
model: "gemini-3.5-flash",
input: "What is the northernmost city in the United States? What's the weather like there today?",
tools: [
{ type: "google_search" },
getWeather,
],
});
// Process steps: the interaction contains search results and a function call
for (const step of interaction.steps) {
if (step.type === "function_call") {
console.log(`Function call: ${step.name} with args: ${JSON.stringify(step.arguments)}`);
// In a real application, you would execute the function here
// and provide the result back to the model.
}
}
REST
# Specifies the API revision to avoid breaking changes when they become default
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"model": "gemini-3.5-flash",
"input": "What is the northernmost city in the United States? What'\''s the weather like there today?",
"tools": [
{ "type": "google_search" },
{
"type": "function",
"name": "getWeather",
"description": "Get the weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
]
}'
Fonctionnement
Les modèles Gemini 3 utilisent la circulation du contexte d'outil pour activer les combinaisons d'outils intégrés et personnalisés. La circulation du contexte d'outil permet de préserver et d'exposer le contexte des outils intégrés, et de le partager avec des outils personnalisés dans la même interaction.
Activer la combinaison d'outils
- Incluez les
function_declarations, ainsi que les outils intégrés que vous souhaitez utiliser, pour déclencher le comportement de combinaison.
Étapes renvoyées par l'API
Dans une réponse d'interaction, l'API renvoie des étapes distinctes pour les appels d'outils intégrés et les appels de fonction (outil personnalisé) :
- Étapes d'outil intégré : l'API les gère automatiquement, en préservant le contexte entre les tours.
- Étapes d'appel de fonction : l'API renvoie des étapes
function_callpour vos fonctions personnalisées. Vous exécutez la fonction et fournissez le résultat.
Champs essentiels dans les étapes renvoyées
Certains champs des étapes renvoyées sont essentiels pour maintenir le contexte de l'outil et activer les combinaisons d'outils :
id: se trouve dans les étapesfunction_calletfunction_response. Identifiant unique qui mappe un appel à sa réponse.signature: se trouve dans les étapesthought, ainsi que dans toutes les étapes d'appel d'outil (par exemple,function_call) et de résultat (par exemple,function_response) pour les modèles Gemini 3 et versions ultérieures. Ce contexte chiffré permet la circulation du contexte d'outil entre les interactions.
Gérer ces champs :
- Mode avec état (recommandé) : lorsque vous utilisez
previous_interaction_id, le serveur gère automatiquement les champsidetsignature. - Mode sans état : lorsque vous gérez manuellement l'historique des conversations, vous devez vous assurer de renvoyer les champs
idetsignatureau modèle dans les requêtes suivantes pour valider l'authenticité et maintenir le contexte. Les SDK officiels gèrent cela automatiquement si vous renvoyez l'objet de réponse complet à l'historique.
Données spécifiques à l'outil
Certains outils intégrés renvoient des arguments de données visibles par l'utilisateur, spécifiques au type d'outil.
| Outil | Arguments d'appel d'outil visibles par l'utilisateur (le cas échéant) | Réponse de l'outil visible par l'utilisateur (le cas échéant) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsURL à parcourir |
status : état de la navigationretrieved_url : URL parcourues |
| file_search | Aucun | Aucun |
Jetons et tarifs
Notez que les parties d'appel d'outil intégré dans les requêtes sont comptabilisées dans prompt_token_count. Étant donné que ces étapes d'outil intermédiaires sont désormais visibles et vous sont renvoyées, elles font partie de l'historique des conversations. Cela ne s'applique qu'aux
cas de requêtes, et non aux réponses.
L'outil Recherche Google est une exception à cette règle. La recherche Google applique déjà son propre modèle de tarification au niveau de la requête. Les jetons ne sont donc pas facturés deux fois (consultez la page des tarifs).
Pour en savoir plus, consultez la page Jetons.
Limites
- Par défaut, le mode
validatedest activé (le modeauton'est pas compatible) lorsque la circulation du contexte d'outil est activée. - Les outils intégrés tels que
google_searchs'appuient sur des informations de localisation et d'heure actuelles. Par conséquent, si votresystem_instructionoufunction_declaration.descriptioncontient des informations de localisation et d'heure conflictuelles, la fonctionnalité de combinaison d'outils risque de ne pas fonctionner correctement.
Outils compatibles
La circulation standard du contexte d'outil s'applique aux outils côté serveur (intégrés). L'exécution de code est également un outil côté serveur, mais elle dispose de sa propre solution intégrée pour la circulation du contexte. L'utilisation de l'ordinateur et l'appel de fonction sont des outils côté client, et disposent également de solutions intégrées pour la circulation du contexte.
| Outil | Côté exécution | Compatibilité avec la circulation du contexte |
|---|---|---|
| La recherche Google | Côté serveur | Compatible |
| Google Maps | Côté serveur | Compatible |
| Contexte de l'URL | Côté serveur | Compatible |
| Recherche de fichiers | Côté serveur | Compatible |
| Exécution de code | Côté serveur | Compatible (intégré, utilise les étapes code_execution et code_execution_result) |
| Utilisation de l'ordinateur | Côté client | Compatible (intégré, utilise les étapes function_call et function_response) |
| Fonctions personnalisées | Côté client | Compatible (intégré, utilise les étapes function_call et function_response) |
Étape suivante
- En savoir plus sur l'appel de fonction dans l'API Gemini.
- Découvrez les outils compatibles :