Gemini 3.5 Flash est un modèle puissant, rapide et économique de la famille Gemini 3. Conçu pour offrir des capacités agentiques quasi professionnelles sans compromettre les performances ni la valeur, le modèle est désormais en disponibilité générale (GA) pour les développeurs qui utilisent l'API Gemini et pour les entreprises qui utilisent Gemini Enterprise Agent Platform.
Ce document présente les nouveautés de Gemini 2.5 Flash, explique quand l'utiliser et comment migrer vers Gemini 2.5 Flash, et fournit un guide de démarrage rapide pour l'utiliser.
Comment s'intègre-t-il à la famille Gemini ?
Le tableau suivant compare certaines des spécifications de Flash 3.5, Flash 3.1 Pro et Flash 3.1 Flash-Lite :
| Gemini 3.5 Flash | Gemini 3.1 Pro | Gemini 3.1 Flash-Lite | |
|---|---|---|---|
| ID du modèle | gemini-3.5-flash |
gemini-3.1-pro-preview |
gemini-3.1-flash-lite |
| Étape de lancement | GA | Aperçu | DG |
| Types d'entrée | Texte, image, audio, vidéo | Texte, image, audio, vidéo | Texte, image, audio, vidéo |
| Type(s) de sortie | Texte | Texte | Texte |
| Fenêtre de contexte | 1 048 576 | 1 048 576 | 1 048 576 |
| Longueur maximale des jetons de sortie | 65 536 | 65 536 | 65 536 |
| Régions où le service est disponible | Monde, Multirégion, Amériques, Europe, Asie-Pacifique | Monde | Monde, Multirégional |
| Niveaux de réflexion acceptés |
MINIMAL, LOW, MEDIUM, HIGH(par défaut : MEDIUM)
|
LOW, MEDIUM, HIGH(par défaut : HIGH)
|
MINIMAL, LOW, MEDIUM, HIGH(par défaut : MINIMAL)
|
| Utilisation principale | Tâches équilibrées, appel d'outils et raisonnement intermédiaire | Raisonnement approfondi, tâches très complexes | Tâches à volume élevé, sensibles aux coûts et à la latence |
Consultez la page Modèle Flash 3.5 pour obtenir la liste complète des fonctionnalités, outils et options de consommation compatibles.
Répartition des cas d'utilisation
La stratégie recommandée pour les workflows agentifs utilise une approche par niveaux pour optimiser la qualité, la vitesse et le coût :
- Gemini Pro : à réserver aux tâches cognitives très complexes nécessitant un raisonnement approfondi, comme la planification initiale des racines, la résolution de problèmes complexes, le codage difficile et la prise de décisions critiques.
- Gemini Flash : utilisez-le comme principal "cheval de trait" pour les tâches d'exécution, l'appel d'outils et les étapes de raisonnement intermédiaires. Il offre le meilleur équilibre entre performances et efficacité.
- Gemini Flash-Lite : déployez-le pour les tâches de prétraitement et structurelles à fort volume et à faible latence où la vitesse et le coût sont primordiaux, comme le routage des intentions, l'extraction de données, le taggage et la classification.
Nouveautés de Gemini 3.5 Flash
Gemini 3.5 Flash apporte les modifications et améliorations suivantes à la gamme de modèles Gemini :
- Performances de pointe constantes : notre modèle Flash le plus intelligent, optimisé pour les tâches agentiques et de codage à grande échelle.
- Exécution agentique : déploiement de sous-agents, résolution de problèmes et boucles agentiques rapides à grande échelle.
- Codage amélioré : cycles de codage itératifs, exploration rapide et prototypage pour tester d'autres chemins et explorer dynamiquement des solutions.
- Horizon long : workflows multi-étapes et utilisation d'outils à grande échelle.
- Préservation de la pensée : le modèle conserve automatiquement le raisonnement intermédiaire dans les conversations multitours. Aucune modification de l'API n'est nécessaire.
- Nouveau niveau de réflexion par défaut : le niveau de réflexion par défaut est passé de
HIGHàMEDIUM. - Amélioration de la réflexion
LOW: le niveau de réflexion faible a été considérablement amélioré pour les tâches de codage et agentiques qui nécessitent moins d'étapes, offrant une qualité élevée à un coût et une latence réduits.
Pour en savoir plus, consultez la section Principaux changements.
Guide de démarrage rapide
Avant de commencer, vous devez vous authentifier auprès d'Agent Platform à l'aide des Identifiants par défaut de l'application (ADC) ou d'une clé API. Pour en savoir plus, consultez Premiers pas avec Gemini Enterprise Agent Platform.
Dans les blocs de code suivants, remplacez PROJECT_ID par l'ID de votre projet.
Installation
Assurez-vous d'utiliser la dernière version du SDK google-genai :
pip install --upgrade google-genai
Demande de base
Python
from google import genai
client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="How does AI work?",
)
print(response.text)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.5-flash:generateContent \
-d '{
"contents": {
"role": "USER",
"parts": { "text": "Why is the sky blue?" },
},
}'
Principales modifications
Cette section décrit plus en détail les modifications suivantes apportées à Gemini 3.5 Flash :
- Nouveau niveau de réflexion par défaut (
MEDIUM) - Préservation des pensées
- Obsolète : paramètres d'échantillonnage
- Obsolète :
thinking_budget
Nouveau niveau de réflexion par défaut
Le niveau de réflexion par défaut des modèles Gemini 3 est désormais MEDIUM, alors qu'il était de HIGH dans la version Preview de Gemini 3 Flash. Le niveau de réflexion MEDIUM donne d'excellents résultats pour un large éventail de tâches, tout en étant plus rapide et plus économique.
Voici les niveaux de réflexion acceptés :
MINIMAL: correspond au paramètre "Sans réflexion" pour la plupart des requêtes. Le modèle peut réfléchir de manière très minimale pour les tâches complexes comme le codage. Réduit la latence pour les applications de chat ou à haut débit.LOW: raisonnement léger pour la plupart des tâches, avec une vitesse élevée et un coût réduit.MEDIUM: (par défaut) paramètre "Équilibré" pour la plupart des tâches nécessitant un raisonnement.HIGH: maximise le raisonnement pour optimiser les performances des tâches. Le modèle peut mettre plus de temps que le paramètreMEDIUMpour générer le premier jeton, mais le résultat sera plus complet.
Par exemple, utilisez HIGH pour les énigmes logiques, les problèmes écrits de mathématiques ou les scénarios complexes où le modèle doit raisonner en plusieurs étapes :
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="A farmer has chickens and rabbits. There are 35 heads and 94 legs. How many chickens and how many rabbits does he have? Show your step-by-step logic.",
config=types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(
thinking_level=types.ThinkingLevel.HIGH
)
),
)
print(response.text)
Le paramètre thinking_level est facultatif. Si aucune valeur n'est spécifiée, 3.5 Flash utilisera son paramètre par défaut (MEDIUM).
Préservation des pensées
Le modèle conserve automatiquement le raisonnement intermédiaire dans les conversations multitours. Lorsqu'il est présent dans l'historique des conversations, le contexte de raisonnement est automatiquement reporté, ce qui améliore les performances pour les tâches complexes en plusieurs étapes, comme le débogage itératif et le refactoring de code. Aucune modification de l'API n'est nécessaire.
Les réflexions des tours précédents sont désormais conservées par défaut. Le service n'efface plus l'historique des réflexions du contexte de la conversation avant de le transmettre au modèle.
Lorsque vous envoyez l'historique des conversations, soyez cohérent avec les tours précédents : incluez le contexte complet (réflexions, appels de fonction, réponses) ou omettez-le entièrement. Un contexte partiel peut dégrader les performances du modèle.
Obsolète : paramètres d'échantillonnage
Les paramètres d'échantillonnage suivants ne sont plus recommandés pour les modèles Gemini 3 :
temperaturetop_ptop_k
Le modèle gère son propre échantillonnage pour obtenir des résultats optimaux. Supprimez ces paramètres de toutes les requêtes. Pour assurer le déterminisme, définissez une instruction système avec des règles explicites pour votre cas d'utilisation spécifique.
Obsolète : thinking_budget
Le paramètre numérique brut thinking_budget n'est plus compatible avec tous les modèles Gemini 3. Utilisez plutôt l'enum de chaîne thinking_level.
# ⚠️ Before (not recommended)
config = types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_budget=7500)
)
# ✅ After
config = types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_level="MEDIUM")
)
Bonnes pratiques
Cette section décrit les bonnes pratiques suivantes pour l'utilisation de 3.5 Flash :
- Utiliser une correspondance stricte des réponses pour les appels de fonction
- Inclure du contenu multimodal dans la réponse de la fonction
parts - Utiliser des instructions intégrées dans la réponse de la fonction
- Réduire les appels d'outils inutiles
Utiliser une correspondance stricte des réponses pour les appels de fonction
Les réponses non concordantes entraînent généralement des réponses vides avec finish_reason: STOP. Respectez toujours les conventions suivantes :
- Inclure
id: chaqueFunctionResponsedoit inclure leidduFunctionCallcorrespondant. - Correspondance de
name: lenamede la réponse doit correspondre aunamede l'appel. - Nombre de correspondances : renvoie exactement un
FunctionResponsepour chaqueFunctionCallreçu.
Le code suivant est un exemple d'appel de fonction correct :
# ✅ Include matching id and name in the function response
final_response = client.models.generate_content(
model="gemini-3.5-flash",
config=config,
contents=[
*previous_contents,
response.candidates[0].content,
types.Content(role="user", parts=[
types.Part.from_function_response(
name=tool_call.name,
response={"result": result},
id=tool_call.id,
)
]),
],
)
Inclure du contenu multimodal dans la réponse de la fonction parts
Fournir des images en dehors de la réponse de la fonction peut entraîner un comportement inattendu du modèle, tel qu'une fuite de pensée, et une qualité inférieure. Suivez la recommandation incluse dans Présentation de l'appel de fonction et incluez du contenu multimodal dans les parties de réponse de la fonction que vous envoyez au modèle. Le modèle peut traiter ce contenu multimodal lors de son prochain tour pour produire une réponse plus pertinente.
Exemple :
# ✅ Include multimodal content in the function response
final_response = client.models.generate_content(
model="gemini-3.5-flash",
config=config,
contents=[
*previous_contents,
response.candidates[0].content,
types.Content(role="user", parts=[
types.Part.from_function_response(
name=tool_call.name,
response={
"result": "instrument.jpg",
"image": base64_image_data,
},
id=tool_call.id,
)
]),
],
)
Utiliser des instructions intégrées dans la réponse de la fonction
Fournir des instructions sur la plate-forme en même temps que les réponses aux fonctions en tant que parts ultérieurs peut entraîner un comportement inattendu du modèle, tel qu'une fuite de pensée, et une qualité inférieure. Au lieu de cela, ajoutez-le à la fin du texte de réponse de la fonction, séparé par deux sauts de ligne.
Exemple :
# ✅ Append inline instructions to the end of the function response separated by two newlines
result_text = f"{json.dumps(result)}\n\n<your inline instructions>"
final_response = client.models.generate_content(
model="gemini-3.5-flash",
config=config,
contents=[
*previous_contents,
response.candidates[0].content,
types.Content(role="user", parts=[
types.Part.from_function_response(
name=tool_call.name,
response={"result": result_text},
id=tool_call.id,
)
]),
],
)
Réduire les appels d'outils inutiles
Si vous constatez une utilisation excessive des appels d'outils, deux techniques peuvent vous aider à les minimiser :
- Réduisez le niveau de réflexion : les niveaux de réflexion plus élevés encouragent le modèle à utiliser davantage d'outils pour explorer et vérifier. En abaissant le niveau, vous pouvez réduire les appels d'outils.
Ajoutez une instruction système : si la surutilisation persiste après avoir ajusté le niveau de réflexion, envisagez d'utiliser une requête qui limite l'utilisation des outils. Exemple :
You have a limited action budget of <n> tool calls. Use them efficiently.
Migrer de 3.5 Flash ou 3.1 Pro vers 3.6 Flash
Pour migrer vers 3.6 Flash depuis 3.5 Flash ou 3.1 Pro, procédez comme suit :
- Mettez à jour l'ID du modèle : remplacez la chaîne du modèle dans vos appels d'API par
gemini-3.6-flash. - Adaptez votre code aux nouvelles règles de l'API de la famille Gemini 3 :
Gemini 3.6 Flash applique strictement les règles de paramètres et les conventions d'API établies pour la famille Gemini 3 :
- Supprimer la température, le top-K et le top-P : supprimez ces paramètres personnalisés de votre charge utile. Bien qu'aucune erreur ne soit générée, le modèle les ignorera complètement. Utilisez plutôt le paramètre
thinking_levelou les sorties structuréesjson_schemapour contrôler le déterminisme de la sortie. - Supprimez les pénalités de fréquence et de présence : supprimez toutes les configurations personnalisées pour les pénalités de fréquence ou de présence afin d'éviter que vos appels d'API génèrent des erreurs d'exécution.
- Assurez-vous que votre intégration de chat ne tente pas de préremplir le modèle :
Examinez vos tableaux d'historique des messages pour vous assurer que la charge utile de votre API ne se termine pas par un tour d'utilisateur ou de modèle vide. Si le dernier objet de votre tableau d'historique est un rôle "
model" (API GenerateContent) ou un type "model_output" (API Interactions), restructurer la séquence pour éviter de déclencher une erreur de validation stricte. - Utilisez
thinking_level: supprimez les instances du paramètrethinking_budgetobsolète et utilisezthinking_levelà la place. - Appliquer des conventions strictes pour l'appel de fonctions : le
FunctionResponsedoit correspondre exactement auid, aunameet au nombre d'exécutions duFunctionCallprécédent. Si vous devez ajouter des instructions intégrées, placez-les directement dans le texte de réponse de la fonction, séparées par deux sauts de ligne (\n\n).
- Supprimer la température, le top-K et le top-P : supprimez ces paramètres personnalisés de votre charge utile. Bien qu'aucune erreur ne soit générée, le modèle les ignorera complètement. Utilisez plutôt le paramètre
- Tenez compte des changements de workflow :
- Si votre application repose sur des boucles de conversation multitours, testez vos workflows pour vous assurer que la nouvelle concision des étapes du modèle ne déclenche pas de sorties prématurées.
- Si vous créez des agents de script de base ou de frontend, surveillez les appels
execute_codeexploratoires inutiles en raison du nouveau biais du modèle en faveur de l'inspection programmatique initiale.
Solutions de contournement pour les exigences concernant le texte avant l'outil
Si votre requête exige que le modèle génère du texte structuré (XLM, YAML, JSON, etc.) (par exemple, <UPDATE>...</UPDATE>) immédiatement avant d'effectuer un appel d'outil, il est possible que l'appel d'outil échoue parfois et qu'une erreur Malformed_Function_Call s'affiche. Pour résoudre ce problème, vous pouvez utiliser l'une des solutions suivantes :
- (Recommandé) Demandez au modèle de placer ses notes avant l'outil dans un appel de fonction
update()dédié au lieu de texte brut. Consultez la section suivante pour obtenir des instructions d'implémentation détaillées. - Demandez au modèle d'écrire des notes sous forme d'en-têtes Markdown (par exemple,
# UPDATE,## PLAN) au lieu de texte structuré. - Ne demandez pas au modèle de générer du texte avant les appels d'outils.
Solution recommandée : inclure les notes de travail dans un appel de fonction dédié
Au lieu de l'instruction d'origine :
Before calling a tool, in every response you MUST first output a single
`<UPDATE>` part as specified, don't skip this part or any of required sub-tags
within `<UPDATE>`.
Utilisez cette instruction mise à jour :
Before calling any other tool, in every response you MUST first call `update`
with all required parameters (previous_step, plan, next_step, external).
Mettez à jour toutes les références à l'ancien format XML <UPDATE> dans la demande du client.
Ajoutez ensuite la déclaration de fonction correspondante pour la fonction de mise à jour :
{
"name": "update",
"description": "Update working notes (previous step analysis, plan, next step, external note).",
"parameters": {
"type": "OBJECT",
"properties": {
"previous_step": {
"type": "STRING",
"description": "Key findings and outcomes since the previous step."
},
"plan": {
"type": "STRING",
"description": "The current status of the plan."
},
"next_step": {
"type": "STRING",
"description": "Brief explanation of the immediate next action according to the plan."
},
"external": {
"type": "STRING",
"description": "A short, plain-language note shown to the User about what you are ABOUT TO DO next."
}
},
"required": [
"previous_step",
"plan",
"next_step",
"external"
]
}
}
Le modèle effectue deux appels au cours de la même étape : l'appel update() qui remplace le code XML structuré et l'appel de fonction qu'il souhaite effectuer.