Guide du développeur Gemini 3
Gemini 3 est notre famille de modèles la plus intelligente à ce jour, basée sur un raisonnement de pointe. Elle est conçue pour donner vie à toutes les idées en maîtrisant les workflows agentifs, le codage autonome et les tâches multimodales complexes. Ce guide couvre les principales fonctionnalités de la famille de modèles Gemini 3 et explique comment en tirer le meilleur parti.
Découvrez notre collection d'applications Gemini 3 pour voir comment le modèle gère le raisonnement avancé, le codage autonome et les tâches multimodales complexes.
Commencez avec quelques lignes de code :
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.1-pro-preview",
input="Find the race condition in this multi-threaded C++ snippet: [code here]",
)
print(interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
async function run() {
const interaction = await client.interactions.create({
model: "gemini-3.1-pro-preview",
input: "Find the race condition in this multi-threaded C++ snippet: [code here]",
});
console.log(interaction.steps.at(-1).content[0].text);
}
run();
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.1-pro-preview",
"input": "Find the race condition in this multi-threaded C++ snippet: [code here]"
}'
Découvrez la série Gemini 3
Gemini 3.1 Pro est idéal pour les tâches complexes qui nécessitent une vaste connaissance du monde et un raisonnement avancé sur plusieurs modalités.
Gemini 3 Flash est notre dernier modèle de la série 3, avec une intelligence de niveau Pro à la vitesse et au prix de Flash.
Nano Banana Pro (également appelé Gemini 3 Pro Image) est notre modèle de génération d'images de la plus haute qualité, et Nano Banana 2 (également appelé Gemini 3.1 Flash Image) est l'équivalent à volume élevé, à haute efficacité et à prix plus abordable.
Gemini 3.1 Flash-Lite est notre modèle de référence conçu pour l'efficacité des coûts et les tâches à volume élevé.
Tous les modèles Gemini 3 sont actuellement en preview.
| ID du modèle | Fenêtre de contexte (entrée / sortie) | Date limite des connaissances | Tarifs (entrée / sortie)* |
|---|---|---|---|
| gemini-3.1-flash-lite-preview | 1M / 64k | Janvier 2025 | 0,25 $ (texte, image, vidéo), 0,50 $ (audio) / 1,50 $ |
| gemini-3.1-flash-image-preview | 128k / 32k | Janvier 2025 | 0,25 $ (entrée de texte) / 0,067 $ (sortie d'image)** |
| gemini-3.1-pro-preview | 1M / 64k | Janvier 2025 | 2 $ / 12 $ (< 200 k jetons) 4 $ / 18 $ (> 200 k jetons) |
| gemini-3-flash-preview | 1M / 64k | Janvier 2025 | 0,50 $ / 3 $ |
| gemini-3-pro-image-preview | 65k / 32k | Janvier 2025 | 2 $ (entrée de texte) / 0,134 $ (sortie d'image)** |
* Sauf indication contraire, les tarifs sont indiqués pour 1 million de jetons. ** Les tarifs des images varient en fonction de la résolution. Pour en savoir plus, consultez la page des tarifs.
Pour connaître les limites, les tarifs et obtenir des informations supplémentaires, consultez la page des modèles.
Nouvelles fonctionnalités de l'API dans Gemini 3
Gemini 3 introduit de nouveaux paramètres conçus pour offrir aux développeurs plus de contrôle sur la latence, les coûts et la fidélité multimodale.
Niveau de réflexion
Les modèles de la série Gemini 3 utilisent par défaut la réflexion dynamique pour raisonner à travers les requêtes. Vous pouvez utiliser le paramètre thinking_level, qui contrôle la profondeur maximale du processus de raisonnement interne du modèle avant qu'il ne produise une réponse. Gemini 3 traite ces niveaux comme des allocations relatives pour la réflexion plutôt que comme des garanties strictes de jetons.
Si thinking_level n'est pas spécifié, Gemini 3 utilise high par défaut. Pour des réponses plus rapides et à faible latence lorsque le raisonnement complexe n'est pas nécessaire, vous pouvez limiter le niveau de réflexion du modèle à low.
| Niveau de réflexion | Gemini 3.1 Pro | Gemini 3.1 Flash-Lite | Gemini 3 Flash | Description |
|---|---|---|---|---|
minimal |
Non compatible | Compatible (par défaut) | Compatible | Correspond au paramètre "no thinking" (pas de réflexion) pour la plupart des requêtes. Le modèle peut réfléchir très peu pour les tâches de codage complexes. Réduit la latence pour les applications de chat ou à haut débit. Notez que minimal ne garantit pas que la réflexion est désactivée. |
low |
Compatible | Compatible | Compatible | Réduit la latence et les coûts. Idéal pour les instructions simples, le chat ou les applications à haut débit. |
medium |
Compatible | Compatible | Compatible | Réflexion équilibrée pour la plupart des tâches. |
high |
Compatible (par défaut, dynamique) | Compatible (dynamique) | Compatible (par défaut, dynamique) | Maximise la profondeur du raisonnement. Le modèle peut mettre beaucoup plus de temps à atteindre un premier jeton de sortie (sans raisonnement), mais la sortie sera plus soigneusement raisonnée. |
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.1-pro-preview",
input="How does AI work?",
generation_config={"thinking_level": "low"},
)
print(interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3.1-pro-preview",
input: "How does AI work?",
generationConfig: {
thinking_level: "low",
},
});
console.log(interaction.steps.at(-1).content[0].text);
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.1-pro-preview",
"input": "How does AI work?",
"config": {
"thinking_level": "low"
}
}'
Température
Pour tous les modèles Gemini 3, nous vous recommandons vivement de conserver la valeur par défaut du paramètre de température, à savoir 1.0.
Alors que les modèles précédents bénéficiaient souvent d'un réglage de la température pour contrôler la créativité par rapport au déterminisme, les capacités de raisonnement de Gemini 3 sont optimisées pour le paramètre par défaut. La modification de la température (en la définissant sur une valeur inférieure à 1.0) peut entraîner un comportement inattendu, tel qu'une boucle ou une dégradation des performances, en particulier dans les tâches mathématiques ou de raisonnement complexes.
Signatures de pensée
Les modèles Gemini 3 utilisent des signatures de pensée pour maintenir le contexte de raisonnement entre les appels d'API. Ces signatures sont des représentations chiffrées du processus de réflexion interne du modèle.
- Mode avec état (recommandé) : lorsque vous utilisez l'API Interactions en mode avec état (en fournissant
previous_interaction_id), le serveur gère automatiquement l'historique des conversations et les signatures de pensée. - Mode sans état : si vous gérez manuellement l'historique des conversations, vous devez inclure des blocs de pensée avec leurs signatures dans les requêtes suivantes pour valider l'authenticité.
Pour en savoir plus, consultez la page Signatures de pensée.
Génération et modification d'images
Pour gemini-3-pro-image-preview et gemini-3.1-flash-image-preview, les signatures de pensée sont essentielles pour la modification conversationnelle. Lorsque vous demandez au modèle de modifier une image, il s'appuie sur la signature du tour précédent pour comprendre la composition et la logique de l'image d'origine.
- Modification : les signatures sont garanties dans la première partie après les pensées de la réponse (
textouinlineData) et dans chaque partieinlineDatasuivante. Vous devez renvoyer toutes ces signatures pour éviter les erreurs.
Exemples de code
Appel de fonction en plusieurs étapes (séquentiel)
L'utilisateur pose une question nécessitant deux étapes distinctes (vérifier le vol -> réserver un taxi) en un seul tour.
Étape 1 : Le modèle appelle l'outil de vol.
Le modèle renvoie une signature <Sig_A>
// Model Response (Turn 1, Step 1) { "id": "interaction-123", "steps": [ { "type": "function_call", "name": "check_flight", "arguments": {"flight": "AA100"}, "signature": "<Sig_A>" // SAVE THIS } ] }
Étape 2 : L'utilisateur envoie le résultat du vol
Nous devons renvoyer <Sig_A> pour conserver le fil de pensée du modèle.
// User Request (Turn 1, Step 2) { "model": "gemini-3-flash-preview", "previous_interaction_id": "interaction-123", "input": [ { "type": "function_result", "call_id": "fc_check_flight", "name": "check_flight", "result": [{ "type": "text", "text": "{\"status\": \"delayed\", \"departure_time\": \"12 PM\"}" }] } ] }
Étape 3 : Le modèle appelle l'outil de taxi
Le modèle se souvient du retard du vol à l'aide de <Sig_A> et décide maintenant de réserver un taxi. Il génère une nouvelle signature <Sig_B>.
// Model Response (Turn 1, Step 3) { "id": "interaction-123", "steps": [ { "type": "function_call", "name": "book_taxi", "arguments": {"time": "10 AM"}, "signature": "<Sig_B>" // SAVE THIS } ] }
Étape 4 : L'utilisateur envoie le résultat du taxi
Pour terminer le tour, vous devez renvoyer la chaîne complète : <Sig_A> ET <Sig_B>.
// User Request (Turn 1, Step 4) { "model": "gemini-3-flash-preview", "previous_interaction_id": "interaction-123", "input": [ { "type": "function_result", "call_id": "fc_book_taxi", "name": "book_taxi", "result": [{ "type": "text", "text": "{\"booking_status\": \"success\"}" }] } ] }
Appel de fonction parallèle
L'utilisateur demande : "Quel temps fait-il à Paris et à Londres ?" Le modèle renvoie deux appels de fonction dans une seule réponse.
// Model Response { "id": "interaction-456", "steps": [ { "type": "function_call", "name": "check_weather", "arguments": { "city": "Paris" }, "signature": "<Signature_A>" // INCLUDED on First FC }, { "type": "function_call", "name": "check_weather", "arguments": { "city": "London" } } ] } // User Request (Sending Parallel Results) { "model": "gemini-3-flash-preview", "previous_interaction_id": "interaction-456", "input": [ { "type": "function_result", "call_id": "fc_paris", "name": "check_weather", "result": [{ "type": "text", "text": "15C" }] }, { "type": "function_result", "call_id": "fc_london", "name": "check_weather", "result": [{ "type": "text", "text": "12C" }] } ] }
Migration à partir d'autres modèles
Si vous transférez une trace de conversation à partir d'un autre modèle (par exemple, Gemini 2.5) ou si vous injectez un appel de fonction personnalisé qui n'a pas été généré par Gemini 3, vous n'aurez pas de signature valide.
Pour contourner la validation stricte dans ces scénarios spécifiques, remplissez le champ avec
cette chaîne factice spécifique : "signature": "context_engineering_is_the_way
to_go"
Sorties structurées avec des outils
Les modèles Gemini 3 vous permettent de combiner des sorties structurées avec des outils intégrés, y compris l'ancrage avec la recherche Google, le contexte d'URL, l'exécution de code et l'appel de fonction.
Python
from google import genai
from pydantic import BaseModel, Field
from typing import List
class MatchResult(BaseModel):
winner: str = Field(description="The name of the winner.")
final_match_score: str = Field(description="The final match score.")
scorers: List[str] = Field(description="The name of the scorer.")
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.1-pro-preview",
input="Search for all details for the latest Euro.",
tools=[
{"type": "google_search"},
{"type": "url_context"}
],
response_format={
"type": "text",
"mime_type": "application/json",
"schema": MatchResult.model_json_schema()
},
)
result = MatchResult.model_validate_json(interaction.steps[-1].content[0].text)
print(result)
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as z from "zod";
const matchJsonSchema = {
type: "object",
properties: {
winner: { type: "string", description: "The name of the winner." },
final_match_score: { type: "string", description: "The final score." },
scorers: {
type: "array",
items: { type: "string" },
description: "The name of the scorer."
}
},
required: ["winner", "final_match_score", "scorers"]
};
const matchSchema = z.fromJSONSchema(matchJsonSchema);
const client = new GoogleGenAI({});
async function run() {
const interaction = await client.interactions.create({
model: "gemini-3.1-pro-preview",
input: "Search for all details for the latest Euro.",
tools: [
{ type: "google_search" },
{ type: "url_context" }
],
response_format: {
type: "text",
mime_type: "application/json",
schema: matchJsonSchema
},
});
const match = matchSchema.parse(JSON.parse(interaction.steps.at(-1).content[0].text));
console.log(match);
}
run();
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3.1-pro-preview",
"input": "Search for all details for the latest Euro.",
"tools": [
{"type": "google_search"},
{"type": "url_context"}
],
"response_format": {
"type": "text",
"mime_type": "application/json",
"schema": {
"type": "object",
"properties": {
"winner": {"type": "string", "description": "The name of the winner."},
"final_match_score": {"type": "string", "description": "The final score."},
"scorers": {
"type": "array",
"items": {"type": "string"},
"description": "The name of the scorer."
}
},
"required": ["winner", "final_match_score", "scorers"]
}
}
}'
Génération d'images
Gemini 3.1 Flash Image et Gemini 3 Pro Image vous permettent de générer et de modifier des images à partir de requêtes textuelles. Il utilise le raisonnement pour "réfléchir" à une requête et peut récupérer des données en temps réel (telles que des prévisions météorologiques ou des graphiques boursiers) avant d'utiliser l'ancrage de la recherche Google pour générer des images de haute fidélité.
Nouvelles fonctionnalités améliorées :
- Rendu 4K et texte : générez des textes et des diagrammes nets et lisibles avec des résolutions allant jusqu'à 2K et 4K.
- Génération ancrée : utilisez l'outil
google_searchpour vérifier les faits et générer des images basées sur des informations réelles. Ancrage avec la recherche d'images Google disponible pour Gemini 3.1 Flash Image. - Retouche conversationnelle : modification d'images en plusieurs étapes en demandant simplement des modifications (par exemple, "Mets un coucher de soleil en arrière-plan"). Ce workflow s'appuie sur les signatures de pensée pour préserver le contexte visuel entre les tours.
Pour obtenir des informations complètes sur les formats d'image, les workflows de modification et les options de configuration , consultez le guide de génération d'images.
Python
from google import genai
import base64
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-pro-image-preview",
input="Generate an infographic of the current weather in Tokyo.",
tools=[{"type": "google_search"}],
response_format={
"type": "image",
"aspect_ratio": "16:9",
"image_size": "4K"
}
)
from PIL import Image
import io
image_blocks = [content_block for content_block in interaction.steps[-1].content if content_block.type == "image"]
if image_blocks:
image_data = base64.b64decode(image_blocks[0].data)
image = Image.open(io.BytesIO(image_data))
image.save('weather_tokyo.png')
image.show()
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const client = new GoogleGenAI({});
async function run() {
const interaction = await client.interactions.create({
model: "gemini-3-pro-image-preview",
input: "Generate a visualization of the current weather in Tokyo.",
tools: [{ googleSearch: {} }],
responseFormat: {
type: "image",
aspectRatio: "16:9",
imageSize: "4K"
}
});
for (const contentBlock of interaction.steps.at(-1).content) {
if (contentBlock.type === "image") {
const buffer = Buffer.from(contentBlock.data, "base64");
fs.writeFileSync("weather_tokyo.png", buffer);
}
}
}
run();
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-pro-image-preview",
"input": "Generate a visualization of the current weather in Tokyo.",
"tools": [{"type": "google_search"}],
"response_format": {
"type": "image",
"aspect_ratio": "16:9",
"image_size": "4K"
}
}'
Exemple de réponse

Exécution de code avec des images
Gemini 3 Flash peut traiter la vision comme une investigation active, et pas seulement comme un coup d'œil statique. En combinant le raisonnement avec l'exécution de code, le modèle formule un plan, puis écrit et exécute du code Python pour effectuer un zoom avant, recadrer, annoter ou manipuler des images étape par étape afin d'ancrer visuellement ses réponses.
Cas d'utilisation :
- Zoom et inspection : le modèle détecte implicitement lorsque les détails sont trop petits (par exemple, la lecture d'une jauge ou d'un numéro de série éloigné) et écrit du code pour recadrer et réexaminer la zone à une résolution plus élevée.
- Mathématiques et traçage visuels : le modèle peut exécuter des calculs en plusieurs étapes à l'aide de code (par exemple, additionner des éléments de ligne sur un reçu ou générer un graphique Matplotlib à partir de données extraites).
- Annotation d'images : le modèle peut dessiner des flèches, des cadres de délimitation ou d'autres annotations directement sur les images pour répondre à des questions spatiales telles que "Où cet élément doit-il aller ?".
Pour activer la réflexion visuelle, configurez l'exécution de code en tant qu'outil. Le modèle utilisera automatiquement le code pour manipuler les images si nécessaire.
Python
from google import genai
from google.genai import types
import requests
from PIL import Image
import io
import base64
image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content
image = types.Part.from_bytes(data=image_bytes, mime_type="image/jpeg")
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
image,
"Zoom into the expression pedals and tell me how many pedals are there?"
],
tools=[{"code_execution": {}}],
)
from IPython.display import display
from PIL import Image
import io
for step in interaction.steps:
if step.type == "model_output":
for content_block in step.content:
if content_block.type == "text":
print(content_block.text)
elif content_block.type == "image":
display(Image.open(io.BytesIO(base64.b64decode(content_block.data))))
elif step.type == "code_execution_call":
print(step.code)
elif step.type == "code_execution_result":
print(step.output)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
async function main() {
const imageUrl = "https://goo.gle/instrument-img";
const response = await fetch(imageUrl);
const imageArrayBuffer = await response.arrayBuffer();
const base64ImageData = Buffer.from(imageArrayBuffer).toString("base64");
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: [
{
inlineData: {
mime_type: "image/jpeg",
data: base64ImageData,
},
},
{
text: "Zoom into the expression pedals and tell me how many pedals are there?",
},
],
tools: [{ codeExecution: {} }],
});
for (const step of interaction.steps) {
if (step.type === "model_output") {
for (const contentBlock of step.content) {
if (contentBlock.type === "text") {
console.log("Text:", contentBlock.text);
}
}
} else if (step.type === "code_execution_call") {
console.log("Code:", step.code);
} else if (step.type === "code_execution_result") {
console.log("Output:", step.output);
}
}
}
main();
REST
IMG_URL="https://goo.gle/instrument-img"
MODEL="gemini-3-flash-preview"
MIME_TYPE=$(curl -sIL "$IMG_URL" | grep -i '^content-type:' | awk -F ': ' '{print $2}' | sed 's/\r$//' | head -n 1)
if [[ -z "$MIME_TYPE" || ! "$MIME_TYPE" == image/* ]]; then
MIME_TYPE="image/jpeg"
fi
if [[ "$(uname)" == "Darwin" ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -b 0)
elif [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64)
else
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -w0)
fi
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "'$MODEL'",
"input": [{
"parts":[
{
"inline_data": {
"mime_type":"'"$MIME_TYPE"'",
"data": "'"$IMAGE_B64"'"
}
},
{"text": "Zoom into the expression pedals and tell me how many pedals are there?"}
]
}],
"tools": [{"code_execution": {}}]
}'
Pour en savoir plus sur l'exécution de code avec des images, consultez Exécution de code.
Réponses de fonction multimodales
L'appel de fonction multimodal permet aux utilisateurs d'obtenir des réponses de fonction contenant des objets multimodaux, ce qui améliore l'utilisation des capacités d'appel de fonction du modèle. L'appel de fonction standard n'accepte que les réponses de fonction basées sur du texte :
Python
from google import genai
import requests
import base64
client = genai.Client()
# 1. Define the tool
get_image_tool = {
"type": "function",
"name": "get_image",
"description": "Retrieves the image file reference for a specific order item.",
"parameters": {
"type": "object",
"properties": {
"item_name": {
"type": "string",
"description": "The name or description of the item ordered (e.g., 'instrument')."
}
},
"required": ["item_name"],
},
}
# 2. Send the request with tools
interaction_1 = client.interactions.create(
model="gemini-3-flash-preview",
input="Show me the instrument I ordered last month.",
tools=[get_image_tool],
)
# 3. Find the function call step
fc_step = next(s for s in interaction_1.steps if s.type == "function_call")
print(f"Tool Call: {fc_step.name}({fc_step.arguments})")
# Execute tool (fetch image)
image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content
image_b64 = base64.b64encode(image_bytes).decode("utf-8")
# 4. Send multimodal function result back
interaction_2 = client.interactions.create(
model="gemini-3-flash-preview",
previous_interaction_id=interaction_1.id,
input=[{
"type": "function_result",
"name": fc_step.name,
"call_id": fc_step.id,
"result": [
{"type": "text", "text": "instrument.jpg"},
{
"type": "image",
"mime_type": "image/jpeg",
"data": image_b64,
}
]
}],
tools=[get_image_tool]
)
print(f"\nFinal model response: {interaction_2.steps[-1].content[0].text}")
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
// 1. Define the tool
const getImageTool = {
type: 'function',
name: 'get_image',
description: 'Retrieves the image file reference for a specific order item.',
parameters: {
type: 'object',
properties: {
item_name: {
type: 'string',
description: "The name or description of the item ordered (e.g., 'instrument').",
},
},
required: ['item_name'],
},
};
// 2. Send the request with tools
const interaction1 = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: 'Use the get_image tool to show me the instrument I ordered last month.',
tools: [getImageTool],
});
// 3. Find the function call step
const fcStep = interaction1.steps.find(s => s.type === 'function_call');
console.log(`Tool Call: ${fcStep.name}(${JSON.stringify(fcStep.arguments)})`);
// Execute tool (fetch image)
const imageUrl = 'https://goo.gle/instrument-img';
const response = await fetch(imageUrl);
const imageArrayBuffer = await response.arrayBuffer();
const base64ImageData = Buffer.from(imageArrayBuffer).toString('base64');
// 4. Send multimodal function result back
const interaction2 = await client.interactions.create({
model: 'gemini-3-flash-preview',
previous_interaction_id: interaction1.id,
input: [{
type: 'function_result',
name: fcStep.name,
call_id: fcStep.id,
result: [
{ type: 'text', text: 'instrument.jpg' },
{
type: 'image',
mime_type: 'image/jpeg',
data: base64ImageData,
}
]
}],
tools: [getImageTool]
});
console.log(`\nFinal model response: ${interaction2.steps.at(-1).content[0].text}`);
REST
IMG_URL="https://goo.gle/instrument-img"
MIME_TYPE=$(curl -sIL "$IMG_URL" | grep -i '^content-type:' | awk -F ': ' '{print $2}' | sed 's/\r$//' | head -n 1)
if [[ -z "$MIME_TYPE" || ! "$MIME_TYPE" == image/* ]]; then
MIME_TYPE="image/jpeg"
fi
# Check for macOS
if [[ "$(uname)" == "Darwin" ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -b 0)
elif [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64)
else
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -w0)
fi
# 1. First interaction (triggers function call)
# curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
# -H "x-goog-api-key: $GEMINI_API_KEY" \
# -H 'Content-Type: application/json' \
# -d '{ "model": "gemini-3-flash-preview", "input": "Show me the instrument I ordered last month.", "tools": [...] }'
# 2. Send multimodal function result back (Replace INTERACTION_ID and CALL_ID)
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"previous_interaction_id": "INTERACTION_ID",
"input": [{
"type": "function_result",
"name": "get_image",
"call_id": "CALL_ID",
"result": [
{ "type": "text", "text": "instrument.jpg" },
{
"type": "image",
"mime_type": "'"$MIME_TYPE"'",
"data": "'"$IMAGE_B64"'"
}
]
}]
}'
Combiner des outils intégrés et l'appel de fonction
Gemini 3 permet d'utiliser des outils intégrés (tels que la recherche Google, le contexte d'URL et plus) et des outils d'appel de fonction personnalisés dans le même appel d'API, ce qui permet des workflows plus complexes.
Python
from google import genai
from google.genai import types
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"],
},
}
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What is the northernmost city in the United States? What's the weather like there today?",
tools=[
{"type": "google_search"},
getWeather
],
)
# Find the function call step
fc_step = next((s for s in interaction.steps if s.type == "function_call"), None)
if fc_step:
# Simulate a function result
result = {"response": "Very cold. 22 degrees Fahrenheit."}
final_interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{"type": "function_result", "name": fc_step.name, "call_id": fc_step.id, "result": result}
],
tools=[
{"type": "google_search"},
getWeather
],
previous_interaction_id=interaction.id,
)
print(final_interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI, Type } from '@google/genai';
const client = new GoogleGenAI({});
const getWeatherDeclaration = {
type: 'function',
name: 'getWeather',
description: 'Gets the weather for a requested city.',
parameters: {
type: Type.OBJECT,
properties: {
city: {
type: Type.STRING,
description: 'The city and state, e.g. Utqiaġvik, Alaska',
},
},
required: ['city'],
},
};
const interaction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: "What is the northernmost city in the United States? What's the weather like there today?",
tools: [
{ type: "google_search" },
getWeatherDeclaration
],
});
// Find the function call step
const fcStep = interaction.steps.find(s => s.type === 'function_call');
if (fcStep) {
const result = { response: "Very cold. 22 degrees Fahrenheit." };
const finalInteraction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: [
{ type: 'function_result', name: fcStep.name, call_id: fcStep.id, result: result }
],
tools: [
{ type: "google_search" },
getWeatherDeclaration
],
previous_interaction_id: interaction.id,
});
console.log(finalInteraction.steps.at(-1).content[0].text);
}
Migration à partir de Gemini 2.5
Gemini 3 est notre famille de modèles la plus performante à ce jour et offre une amélioration progressive par rapport à Gemini 2.5. Lors de la migration, tenez compte des points suivants :
- Raisonnement : si vous utilisiez auparavant une ingénierie de prompts complexe (comme la
chaîne de pensée) pour forcer Gemini 2.5 à raisonner, essayez Gemini 3 avec
thinking_level: "high"et des prompts simplifiés. - Paramètres de température : si votre code existant définit explicitement la température (en particulier sur des valeurs faibles pour les sorties déterministes), nous vous recommandons de supprimer ce paramètre et d'utiliser la valeur par défaut de Gemini 3 (1.0) pour éviter d'éventuels problèmes de boucle ou une dégradation des performances sur les tâches complexes.
- Compréhension des PDF et des documents : si vous vous appuyiez sur un comportement spécifique pour l'analyse de documents denses, testez le nouveau paramètre
media_resolution_highpour garantir une précision continue. - Consommation de jetons : la migration vers les paramètres par défaut de Gemini 3 peut augmenter l'utilisation de jetons pour les PDF, mais la diminuer pour les vidéos. Si les requêtes dépassent désormais la fenêtre de contexte en raison de résolutions par défaut plus élevées, nous vous recommandons de réduire explicitement la résolution des contenus multimédias.
- Segmentation d'images : les fonctionnalités de segmentation d'images (renvoi de masques au niveau des pixels pour les objets) ne sont pas compatibles avec Gemini 3 Pro ni Gemini 3 Flash. Pour les charges de travail nécessitant une segmentation d'images intégrée, nous vous recommandons de continuer à utiliser Gemini 2.5 Flash avec la réflexion désactivée ou Gemini Robotics-ER 1.6.
- Utilisation de l'ordinateur : Gemini 3 Pro et Gemini 3 Flash sont compatibles avec l'utilisation de l'ordinateur. Contrairement à la série 2.5, vous n'avez pas besoin d'utiliser un modèle distinct pour accéder à l'outil d'utilisation de l'ordinateur.
- Compatibilité avec les outils : la combinaison d'outils intégrés et d'appels de fonction est désormais compatible avec les modèles Gemini 3. L'ancrage de Maps est également désormais compatible avec les modèles Gemini 3 .
Compatibilité avec OpenAI
Pour les utilisateurs qui utilisent la couche de compatibilité OpenAI,
les paramètres standards (reasoning_effort d'OpenAI) sont automatiquement mappés sur les équivalents
Gemini (thinking_level).
Bonnes pratiques concernant les prompts
Gemini 3 est un modèle de raisonnement, ce qui modifie la façon dont vous devez le solliciter.
- Instructions précises : soyez concis dans vos requêtes d'entrée. Gemini 3 répond mieux aux instructions directes et claires. Il peut suranalyser les techniques de prompt engineering verbeuses ou trop complexes utilisées pour les anciens modèles.
- Niveau de détail de la sortie : par défaut, Gemini 3 est moins verbeux et préfère fournir des réponses directes et efficaces. Si votre cas d'utilisation nécessite une personnalité plus conversationnelle ou "bavarde", vous devez explicitement orienter le modèle dans la requête (par exemple, "Explique cela comme un assistant amical et bavard").
- Gestion du contexte : lorsque vous travaillez avec de grands ensembles de données (par exemple, des livres entiers, des bases de code ou de longues vidéos), placez vos instructions ou questions spécifiques à la fin de la requête, après le contexte des données. Ancrez le raisonnement du modèle aux données fournies en commençant votre question par une expression telle que "Sur la base des informations précédentes...".
Pour en savoir plus sur les stratégies de conception de prompts, consultez le guide de prompt engineering.
Questions fréquentes
Quelle est la date limite des connaissances pour Gemini 3 ? Les modèles Gemini 3 ont une date limite des connaissances de janvier 2025. Pour obtenir des informations plus récentes, utilisez l' outil d'ancrage de la recherche.
Quelles sont les limites de la fenêtre de contexte ? Les modèles Gemini 3 sont compatibles avec une fenêtre de contexte d'entrée de 1 million de jetons et jusqu'à 64 000 jetons de sortie.
Existe-t-il un niveau sans frais pour Gemini 3 ? Gemini 3 Flash
gemini-3-flash-previewdispose d'un niveau sans frais dans l'API Gemini. Vous pouvez essayer Gemini 3.1 Pro et 3 Flash sans frais dans Google AI Studio, mais aucun niveau sans frais n'est disponible pourgemini-3.1-pro-previewdans l'API Gemini.Mon ancien code
thinking_budgetfonctionnera-t-il toujours ? Oui,thinking_budgetest toujours compatible pour la rétrocompatibilité, mais nous vous recommandons de migrer versthinking_levelpour des performances plus prévisibles. N'utilisez pas les deux dans la même requête.Gemini 3 est-il compatible avec l'API Batch ? Oui, Gemini 3 est compatible avec l' API Batch.
La mise en cache du contexte est-elle compatible ? Oui, la mise en cache du contexte est compatible avec Gemini 3.
Quels outils sont compatibles avec Gemini 3 ? Gemini 3 est compatible avec la recherche Google, l'ancrage avec Google Maps, la recherche de fichiers, l'exécution de code et le contexte d'URL. Il est également compatible avec l'appel de fonction standard pour vos propres outils personnalisés, et en combinaison avec des outils intégrés.
Qu'est-ce que
gemini-3.1-pro-preview-customtools? Si vous utilisezgemini-3.1-pro-previewet que le modèle ignore vos outils personnalisés au profit des commandes bash, essayez plutôt le modèlegemini-3.1-pro-preview-customtools. Plus d'informations ici.