Gemini 3 to nasza najinteligentniejsza rodzina modeli do tej pory, zbudowana na bazie najnowocześniejszego rozumowania. Został zaprojektowany tak, aby realizować każdy pomysł dzięki opanowaniu przepływów pracy agentów, autonomicznego kodowania i złożonych zadań multimodalnych. Ten przewodnik zawiera informacje o najważniejszych funkcjach rodziny modeli Gemini 3 i o tym, jak w pełni wykorzystać ich potencjał.
Zapoznaj się z naszą kolekcją aplikacji Gemini 3, aby zobaczyć, jak model radzi sobie z zaawansowanym rozumowaniem, autonomicznym kodowaniem i złożonymi zadaniami multimodalnymi.
Aby rozpocząć, wystarczy kilka wierszy kodu:
Python
from google import genai
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-pro-preview",
contents="Find the race condition in this multi-threaded C++ snippet: [code here]",
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
async function run() {
const response = await ai.models.generateContent({
model: "gemini-3-pro-preview",
contents: "Find the race condition in this multi-threaded C++ snippet: [code here]",
});
console.log(response.text);
}
run();
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [{"text": "Find the race condition in this multi-threaded C++ snippet: [code here]"}]
}]
}'
Poznaj serię Gemini 3
Gemini 3 Pro, pierwszy model z nowej serii, najlepiej sprawdza się w przypadku złożonych zadań, które wymagają szerokiej wiedzy o świecie i zaawansowanego rozumowania w różnych trybach.
Gemini 3 Flash to nasz najnowszy model z serii 3, który oferuje inteligencję na poziomie Pro w szybkości i cenie Flash.
Nano Banana Pro (znany też jako Gemini 3 Pro Image) to nasz najlepszy model do generowania obrazów.
Wszystkie modele Gemini 3 są obecnie dostępne w wersji testowej.
| Identyfikator modelu | Okno kontekstu (wejściowe / wyjściowe) | Granica wiedzy | Ceny (dane wejściowe / wyjściowe)* |
|---|---|---|---|
| gemini-3-pro-preview | 1 M / 64 tys. | Styczeń 2025 r. | 2 USD / 12 USD (poniżej 200 tys. tokenów) 4 USD / 18 USD (powyżej 200 tys. tokenów) |
| gemini-3-flash-preview | 1 M / 64 tys. | Styczeń 2025 r. | 0,50 USD / 3 USD |
| gemini-3-pro-image-preview | 65 tys. / 32 tys. | Styczeń 2025 r. | 2 USD (wpisywanie tekstu) / 0,134 USD (generowanie obrazu)** |
* Ceny dotyczą 1 miliona tokenów, chyba że zaznaczono inaczej. ** Ceny obrazów różnią się w zależności od rozdzielczości. Szczegółowe informacje znajdziesz na stronie z cennikiem.
Szczegółowe limity, ceny i dodatkowe informacje znajdziesz na stronie z modelami.
Nowe funkcje interfejsu API w Gemini 3
Gemini 3 wprowadza nowe parametry, które zapewniają deweloperom większą kontrolę nad latencją, kosztami i wiernością multimodalną.
Poziom myślenia
Modele z serii Gemini 3 domyślnie korzystają z dynamicznego myślenia, aby analizować prompty. Możesz użyć parametru thinking_level, który kontroluje maksymalną głębokość wewnętrznego procesu rozumowania modelu przed wygenerowaniem odpowiedzi. Gemini 3 traktuje te poziomy jako względne limity na myślenie, a nie ścisłe gwarancje tokenów.
Jeśli nie określisz wartości thinking_level, Gemini 3 domyślnie użyje wartości high. Aby uzyskać szybsze odpowiedzi o mniejszych opóźnieniach, gdy nie jest wymagane złożone rozumowanie, możesz ograniczyć poziom myślenia modelu do poziomu low.
Poziomy myślenia Gemini 3 Pro i Flash:
Zarówno Gemini 3 Pro, jak i Flash obsługują te poziomy myślenia:
low: minimalizuje opóźnienie i koszty. Najlepszy do prostych instrukcji, czatu i aplikacji o wysokiej przepustowościhigh(Domyślny, dynamiczny): maksymalizuje głębię rozumowania. Model może potrzebować znacznie więcej czasu na wygenerowanie pierwszego tokena, ale wynik będzie bardziej przemyślany.
Poziomy myślenia Gemini 3 Flash
Oprócz powyższych poziomów Gemini 3 Flash obsługuje też te poziomy myślenia, które nie są obecnie obsługiwane przez Gemini 3 Pro:
minimal: w przypadku większości zapytań odpowiada ustawieniu „bez myślenia”. W przypadku złożonych zadań związanych z kodowaniem model może myśleć w bardzo ograniczonym zakresie. Minimalizuje opóźnienia w przypadku aplikacji do czatu lub aplikacji o wysokiej przepustowości.medium: Zrównoważone myślenie w przypadku większości zadań.
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-pro-preview",
contents="How does AI work?",
config=types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_level="low")
),
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
const response = await ai.models.generateContent({
model: "gemini-3-pro-preview",
contents: "How does AI work?",
config: {
thinkingConfig: {
thinkingLevel: "low",
}
},
});
console.log(response.text);
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [{"text": "How does AI work?"}]
}],
"generationConfig": {
"thinkingConfig": {
"thinkingLevel": "low"
}
}
}'
Rozdzielczość multimediów
Gemini 3 wprowadza szczegółową kontrolę nad przetwarzaniem obrazu multimodalnego za pomocą parametru media_resolution. Wyższe rozdzielczości zwiększają zdolność modelu do odczytywania drobnego tekstu lub rozpoznawania małych szczegółów, ale zwiększają zużycie tokenów i opóźnienie. Parametr media_resolution określa maksymalną liczbę tokenów przypisanych do każdego obrazu wejściowego lub klatki filmu.
Możesz teraz ustawić rozdzielczość na media_resolution_low, media_resolution_medium, media_resolution_high lub media_resolution_ultra_high dla poszczególnych elementów multimedialnych lub globalnie (za pomocą generation_config; ustawienie globalne nie jest dostępne w przypadku bardzo wysokiej rozdzielczości). Jeśli nie zostanie określony, model użyje optymalnych wartości domyślnych na podstawie typu multimediów.
Zalecane ustawienia
| Typ mediów | Zalecane ustawienie | Maksymalna liczba tokenów | Wytyczne dotyczące użytkowania |
|---|---|---|---|
| Obrazy | media_resolution_high |
1120 | Zalecane w przypadku większości zadań związanych z analizą obrazów, aby zapewnić maksymalną jakość. |
| Pliki PDF | media_resolution_medium |
560 | Optymalne do analizy dokumentów; jakość zwykle osiąga maksymalny poziom przy wartości medium. Zwiększenie do high rzadko poprawia wyniki OCR w przypadku standardowych dokumentów. |
| Wideo (ogólne) | media_resolution_low (lub media_resolution_medium) |
70 (na klatkę) | Uwaga: w przypadku filmów ustawienia low i medium są traktowane identycznie (70 tokenów), aby zoptymalizować wykorzystanie kontekstu. Wystarcza to w przypadku większości zadań związanych z rozpoznawaniem i opisywaniem działań. |
| Film (z dużą ilością tekstu) | media_resolution_high |
280 (na klatkę) | Wymagane tylko wtedy, gdy przypadek użycia obejmuje odczytywanie gęstego tekstu (OCR) lub drobnych szczegółów w klatkach wideo. |
Python
from google import genai
from google.genai import types
import base64
# The media_resolution parameter is currently only available in the v1alpha API version.
client = genai.Client(http_options={'api_version': 'v1alpha'})
response = client.models.generate_content(
model="gemini-3-pro-preview",
contents=[
types.Content(
parts=[
types.Part(text="What is in this image?"),
types.Part(
inline_data=types.Blob(
mime_type="image/jpeg",
data=base64.b64decode("..."),
),
media_resolution={"level": "media_resolution_high"}
)
]
)
]
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
// The media_resolution parameter is currently only available in the v1alpha API version.
const ai = new GoogleGenAI({ apiVersion: "v1alpha" });
async function run() {
const response = await ai.models.generateContent({
model: "gemini-3-pro-preview",
contents: [
{
parts: [
{ text: "What is in this image?" },
{
inlineData: {
mimeType: "image/jpeg",
data: "...",
},
mediaResolution: {
level: "media_resolution_high"
}
}
]
}
]
});
console.log(response.text);
}
run();
REST
curl "https://generativelanguage.googleapis.com/v1alpha/models/gemini-3-pro-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [
{ "text": "What is in this image?" },
{
"inlineData": {
"mimeType": "image/jpeg",
"data": "..."
},
"mediaResolution": {
"level": "media_resolution_high"
}
}
]
}]
}'
Temperatura
W przypadku Gemini 3 zdecydowanie zalecamy pozostawienie parametru temperatury na domyślnej wartości 1.0.
W przypadku poprzednich modeli często warto było dostosować temperaturę, aby kontrolować kreatywność i determinizm, ale w przypadku Gemini 3 możliwości rozumowania są zoptymalizowane pod kątem ustawienia domyślnego. Zmiana temperatury (ustawienie jej poniżej 1,0) może prowadzić do nieoczekiwanych zachowań, takich jak zapętlanie lub pogorszenie wydajności, zwłaszcza w przypadku złożonych zadań matematycznych lub związanych z rozumowaniem.
Podpisy myślowe
Gemini 3 używa sygnatur myśli, aby zachować kontekst rozumowania w różnych wywołaniach interfejsu API. Są to zaszyfrowane reprezentacje wewnętrznego procesu myślowego modelu. Aby model zachował swoje możliwości wnioskowania, musisz zwrócić te sygnatury do modelu w swojej prośbie dokładnie w takiej postaci, w jakiej zostały otrzymane:
Wywoływanie funkcji (ścisłe): interfejs API wymusza ścisłą weryfikację „bieżącej kolejki”. Brakujące podpisy spowodują błąd 400.
Tekst/czat: weryfikacja nie jest ściśle egzekwowana, ale pominięcie sygnatur obniży jakość rozumowania i odpowiedzi modelu.
Generowanie/edytowanie obrazów (ścisłe): interfejs API wymusza ścisłą weryfikację wszystkich części modelu, w tym
thoughtSignature. Brakujące podpisy spowodują błąd 400.
Wywoływanie funkcji (ścisła weryfikacja)
Gdy Gemini generuje functionCall, korzysta z thoughtSignature, aby w kolejnej turze prawidłowo przetworzyć dane wyjściowe narzędzia. „Obecna tura” obejmuje wszystkie kroki Model (functionCall) i Użytkownik (functionResponse), które wystąpiły od ostatniej standardowej wiadomości Użytkownik text.
- Single Function Call (Pojedyncze wywołanie funkcji): część
functionCallzawiera sygnaturę. Musisz go zwrócić. - Równoległe wywołania funkcji: tylko pierwsza część listy (
functionCall) będzie zawierać sygnaturę. Części należy zwrócić w dokładnie takiej kolejności, w jakiej zostały dostarczone. - Wielokrokowe (sekwencyjne): jeśli model wywołuje narzędzie, otrzymuje wynik i wywołuje inne narzędzie (w ramach tej samej tury), oba wywołania funkcji mają sygnatury. Musisz zwrócić wszystkie zgromadzone podpisy w historii.
Tekst i streaming
W przypadku standardowego czatu lub generowania tekstu obecność podpisu nie jest gwarantowana.
- Bez przesyłania strumieniowego: ostatnia część odpowiedzi może zawierać znak
thoughtSignature, ale nie zawsze jest on obecny. Jeśli zostanie zwrócony, odeślij go, aby utrzymać jak najlepszą skuteczność. - Streaming: jeśli sygnatura zostanie wygenerowana, może pojawić się w ostatnim bloku, który zawiera pustą część tekstową. Upewnij się, że parser strumienia sprawdza podpisy nawet wtedy, gdy pole tekstowe jest puste.
Generowanie i edytowanie obrazów
W przypadku gemini-3-pro-image-preview sygnatury myśli są niezbędne do edycji konwersacyjnej. Gdy poprosisz model o zmodyfikowanie obrazu, będzie on korzystać z thoughtSignature z poprzedniej tury, aby zrozumieć kompozycję i logikę oryginalnego obrazu.
- Edytowanie: podpisy są gwarantowane w pierwszej części po przemyśleniach odpowiedzi (
textlubinlineData) i w każdej kolejnej częściinlineData. Aby uniknąć błędów, musisz zwrócić wszystkie te sygnatury.
Przykłady kodu
Wieloetapowe wywoływanie funkcji (sekwencyjne)
Użytkownik zadaje pytanie wymagające wykonania 2 osobnych czynności (sprawdzenie lotu –> rezerwacja taksówki) w jednej turze.
Krok 1. Model wywołuje narzędzie do wyszukiwania lotów.
Model zwraca podpis <Sig_A>
// Model Response (Turn 1, Step 1) { "role": "model", "parts": [ { "functionCall": { "name": "check_flight", "args": {...} }, "thoughtSignature": "<Sig_A>" // SAVE THIS } ] }
Krok 2. Użytkownik wysyła wynik wyszukiwania lotu
Musimy odesłać <Sig_A>, aby utrzymać tok myślenia modelu.
// User Request (Turn 1, Step 2) [ { "role": "user", "parts": [{ "text": "Check flight AA100..." }] }, { "role": "model", "parts": [ { "functionCall": { "name": "check_flight", "args": {...} }, "thoughtSignature": "<Sig_A>" // REQUIRED } ] }, { "role": "user", "parts": [{ "functionResponse": { "name": "check_flight", "response": {...} } }] } ]
Krok 3. Model wywołuje narzędzie do zamawiania taksówek
Model zapamiętuje opóźnienie lotu za pomocą <Sig_A> i decyduje się zamówić taksówkę. Wygeneruje to nowy podpis <Sig_B>.
// Model Response (Turn 1, Step 3) { "role": "model", "parts": [ { "functionCall": { "name": "book_taxi", "args": {...} }, "thoughtSignature": "<Sig_B>" // SAVE THIS } ] }
Krok 4. Użytkownik wysyła wynik taksówki
Aby zakończyć turę, musisz odesłać cały łańcuch: <Sig_A> I <Sig_B>.
// User Request (Turn 1, Step 4) [ // ... previous history ... { "role": "model", "parts": [ { "functionCall": { "name": "check_flight", ... }, "thoughtSignature": "<Sig_A>" } ] }, { "role": "user", "parts": [{ "functionResponse": {...} }] }, { "role": "model", "parts": [ { "functionCall": { "name": "book_taxi", ... }, "thoughtSignature": "<Sig_B>" } ] }, { "role": "user", "parts": [{ "functionResponse": {...} }] } ]
Równoległe wywoływanie funkcji
Użytkownik pyta: „Sprawdź pogodę w Paryżu i Londynie”. Model zwraca 2 wywołania funkcji w jednej odpowiedzi.
// User Request (Sending Parallel Results) [ { "role": "user", "parts": [ { "text": "Check the weather in Paris and London." } ] }, { "role": "model", "parts": [ // 1. First Function Call has the signature { "functionCall": { "name": "check_weather", "args": { "city": "Paris" } }, "thoughtSignature": "<Signature_A>" }, // 2. Subsequent parallel calls DO NOT have signatures { "functionCall": { "name": "check_weather", "args": { "city": "London" } } } ] }, { "role": "user", "parts": [ // 3. Function Responses are grouped together in the next block { "functionResponse": { "name": "check_weather", "response": { "temp": "15C" } } }, { "functionResponse": { "name": "check_weather", "response": { "temp": "12C" } } } ] } ]
Tekst/uzasadnienie w kontekście (bez weryfikacji)
Użytkownik zadaje pytanie, które wymaga rozumowania w kontekście bez użycia narzędzi zewnętrznych. Chociaż nie jest to ściśle weryfikowane, dołączenie podpisu pomaga modelowi utrzymać ciąg rozumowania w przypadku pytań uzupełniających.
// User Request (Follow-up question) [ { "role": "user", "parts": [{ "text": "What are the risks of this investment?" }] }, { "role": "model", "parts": [ { "text": "I need to calculate the risk step-by-step. First, I'll look at volatility...", "thoughtSignature": "<Signature_C>" // Recommended to include } ] }, { "role": "user", "parts": [{ "text": "Summarize that in one sentence." }] } ]
Generowanie i edytowanie obrazów
W przypadku generowania obrazów podpisy są ściśle weryfikowane. Wyświetlają się w pierwszej części (tekst lub obraz) i wszystkich kolejnych częściach obrazu. Wszystkie muszą zostać zwrócone w następnej turze.
// Model Response (Turn 1) { "role": "model", "parts": [ // 1. First part ALWAYS has a signature (even if text) { "text": "I will generate a cyberpunk city...", "thoughtSignature": "<Signature_D>" }, // 2. ALL InlineData (Image) parts ALWAYS have signatures { "inlineData": { ... }, "thoughtSignature": "<Signature_E>" }, ] } // User Request (Turn 2 - Requesting an Edit) { "contents": [ // History must include ALL signatures received { "role": "user", "parts": [{ "text": "Generate a cyberpunk city" }] }, { "role": "model", "parts": [ { "text": "...", "thoughtSignature": "<Signature_D>" }, { "inlineData": "...", "thoughtSignature": "<Signature_E>" }, ] }, // New User Prompt { "role": "user", "parts": [{ "text": "Make it daytime." }] } ] }
Migracja z innych modeli
Jeśli przenosisz ślad rozmowy z innego modelu (np. Gemini 2.5) lub wstrzykniesz niestandardowe wywołanie funkcji, które nie zostało wygenerowane przez Gemini 3, nie będziesz mieć prawidłowego podpisu.
Aby pominąć ścisłą weryfikację w tych konkretnych scenariuszach, wypełnij pole tym konkretnym ciągiem znaków: "thoughtSignature": "context_engineering_is_the_way_to_go"
Uporządkowane dane wyjściowe z narzędziami
Modele Gemini 3 umożliwiają łączenie danych strukturalnych z wbudowanymi narzędziami, takimi jak grounding przy użyciu wyszukiwarki Google, kontekst adresu URL, wykonywanie kodu i wywoływanie funkcji.
Python
from google import genai
from google.genai import types
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()
response = client.models.generate_content(
model="gemini-3-pro-preview",
contents="Search for all details for the latest Euro.",
config={
"tools": [
{"google_search": {}},
{"url_context": {}}
],
"response_mime_type": "application/json",
"response_json_schema": MatchResult.model_json_schema(),
},
)
result = MatchResult.model_validate_json(response.text)
print(result)
JavaScript
import { GoogleGenAI } from "@google/genai";
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
const ai = new GoogleGenAI({});
const matchSchema = z.object({
winner: z.string().describe("The name of the winner."),
final_match_score: z.string().describe("The final score."),
scorers: z.array(z.string()).describe("The name of the scorer.")
});
async function run() {
const response = await ai.models.generateContent({
model: "gemini-3-pro-preview",
contents: "Search for all details for the latest Euro.",
config: {
tools: [
{ googleSearch: {} },
{ urlContext: {} }
],
responseMimeType: "application/json",
responseJsonSchema: zodToJsonSchema(matchSchema),
},
});
const match = matchSchema.parse(JSON.parse(response.text));
console.log(match);
}
run();
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [{"text": "Search for all details for the latest Euro."}]
}],
"tools": [
{"googleSearch": {}},
{"urlContext": {}}
],
"generationConfig": {
"responseMimeType": "application/json",
"responseJsonSchema": {
"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"]
}
}
}'
Generowanie obrazów
Gemini 3 Pro Image umożliwia generowanie i edytowanie obrazów na podstawie promptów tekstowych. Wykorzystuje rozumowanie, aby „przemyśleć” prompt, i może pobierać dane w czasie rzeczywistym, takie jak prognozy pogody czy wykresy giełdowe, a następnie korzystać z wyszukiwarki Google, aby generować obrazy o wysokiej jakości.
Nowe i ulepszone funkcje:
- Renderowanie tekstu i rozdzielczość 4K: generuj wyraźny i czytelny tekst oraz diagramy w rozdzielczości do 2K i 4K.
- Generowanie oparte na danych: używaj narzędzia
google_search, aby weryfikować fakty i generować obrazy na podstawie informacji ze świata rzeczywistego. - Edytowanie opisowe: wieloetapowa edycja obrazów przez zwykłe proszenie o zmiany (np. „Ustaw zachód słońca jako tło”). Ten przepływ pracy wykorzystuje sygnatury myśli, aby zachować kontekst wizualny między turami.
Szczegółowe informacje o proporcjach obrazu, przepływach pracy związanych z edycją i opcjach konfiguracji znajdziesz w przewodniku po generowaniu obrazów.
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents="Generate an infographic of the current weather in Tokyo.",
config=types.GenerateContentConfig(
tools=[{"google_search": {}}],
image_config=types.ImageConfig(
aspect_ratio="16:9",
image_size="4K"
)
)
)
image_parts = [part for part in response.parts if part.inline_data]
if image_parts:
image = image_parts[0].as_image()
image.save('weather_tokyo.png')
image.show()
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({});
async function run() {
const response = await ai.models.generateContent({
model: "gemini-3-pro-image-preview",
contents: "Generate a visualization of the current weather in Tokyo.",
config: {
tools: [{ googleSearch: {} }],
imageConfig: {
aspectRatio: "16:9",
imageSize: "4K"
}
}
});
for (const part of response.candidates[0].content.parts) {
if (part.inlineData) {
const imageData = part.inlineData.data;
const buffer = Buffer.from(imageData, "base64");
fs.writeFileSync("weather_tokyo.png", buffer);
}
}
}
run();
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts": [{"text": "Generate a visualization of the current weather in Tokyo."}]
}],
"tools": [{"googleSearch": {}}],
"generationConfig": {
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "4K"
}
}
}'
Przykładowa odpowiedź

Wykonanie kodu z obrazami
Gemini 3 Flash może traktować widzenie jako aktywne badanie, a nie tylko statyczne spojrzenie. Łącząc rozumowanie z wykonywaniem kodu, model opracowuje plan, a następnie pisze i wykonuje kod w Pythonie, aby krok po kroku powiększać, przycinać, opisywać lub w inny sposób manipulować obrazami, aby wizualnie uzasadnić swoje odpowiedzi.
Możesz na przykład:
- Powiększanie i sprawdzanie: model automatycznie wykrywa, kiedy szczegóły są zbyt małe (np. odczytywanie odległego wskaźnika lub numeru seryjnego), i generuje kod, aby przyciąć i ponownie zbadać obszar w wyższej rozdzielczości.
- Wizualne obliczenia matematyczne i wykresy: model może wykonywać wieloetapowe obliczenia za pomocą kodu (np. sumować pozycje na paragonie lub generować wykres Matplotlib na podstawie wyodrębnionych danych).
- Adnotacje do obrazów: model może rysować strzałki, ramki ograniczające lub inne adnotacje bezpośrednio na obrazach, aby odpowiadać na pytania dotyczące przestrzeni, np. „Gdzie powinien znajdować się ten produkt?”.
Aby włączyć myślenie wizualne, skonfiguruj wywoływanie kodu jako narzędzie. W razie potrzeby model automatycznie użyje kodu do manipulowania obrazami.
Python
from google import genai
from google.genai import types
import requests
from PIL import Image
import io
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()
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[
image,
"Zoom into the expression pedals and tell me how many pedals are there?"
],
config=types.GenerateContentConfig(
tools=[types.Tool(code_execution=types.ToolCodeExecution)]
),
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
if part.executable_code is not None:
print(part.executable_code.code)
if part.code_execution_result is not None:
print(part.code_execution_result.output)
if part.as_image() is not None:
display(Image.open(io.BytesIO(part.as_image().image_bytes)))
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = 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 result = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: [
{
inlineData: {
mimeType: "image/jpeg",
data: base64ImageData,
},
},
{
text: "Zoom into the expression pedals and tell me how many pedals are there?",
},
],
config: {
tools: [{ codeExecution: {} }],
},
});
for (const part of result.candidates[0].content.parts) {
if (part.text) {
console.log("Text:", part.text);
}
if (part.executableCode) {
console.log("Code:", part.executableCode.code);
}
if (part.codeExecutionResult) {
console.log("Output:", part.codeExecutionResult.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 "https://generativelanguage.googleapis.com/v1beta/models/$MODEL:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"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": {}}]
}'
Więcej informacji o wykonywaniu kodu z obrazami znajdziesz w sekcji Wykonywanie kodu.
Odpowiedzi funkcji multimodalnych
Wywoływanie funkcji multimodalnych umożliwia użytkownikom uzyskiwanie odpowiedzi funkcji zawierających obiekty multimodalne, co pozwala na lepsze wykorzystanie możliwości wywoływania funkcji modelu. Standardowe wywoływanie funkcji obsługuje tylko odpowiedzi funkcji oparte na tekście:
Python
from google import genai
from google.genai import types
import requests
client = genai.Client()
# This is a manual, two turn multimodal function calling workflow:
# 1. Define the function tool
get_image_declaration = types.FunctionDeclaration(
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"],
},
)
tool_config = types.Tool(function_declarations=[get_image_declaration])
# 2. Send a message that triggers the tool
prompt = "Show me the instrument I ordered last month."
response_1 = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[prompt],
config=types.GenerateContentConfig(
tools=[tool_config],
)
)
# 3. Handle the function call
function_call = response_1.function_calls[0]
requested_item = function_call.args["item_name"]
print(f"Model wants to call: {function_call.name}")
# Execute your tool (e.g., call an API)
# (This is a mock response for the example)
print(f"Calling external tool for: {requested_item}")
function_response_data = {
"image_ref": {"$ref": "instrument.jpg"},
}
image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content
function_response_multimodal_data = types.FunctionResponsePart(
inline_data=types.FunctionResponseBlob(
mime_type="image/jpeg",
display_name="instrument.jpg",
data=image_bytes,
)
)
# 4. Send the tool's result back
# Append this turn's messages to history for a final response.
history = [
types.Content(role="user", parts=[types.Part(text=prompt)]),
response_1.candidates[0].content,
types.Content(
role="tool",
parts=[
types.Part.from_function_response(
name=function_call.name,
response=function_response_data,
parts=[function_response_multimodal_data]
)
],
)
]
response_2 = client.models.generate_content(
model="gemini-3-flash-preview",
contents=history,
config=types.GenerateContentConfig(
tools=[tool_config],
thinking_config=types.ThinkingConfig(include_thoughts=True)
),
)
print(f"\nFinal model response: {response_2.text}")
JavaScript
import { GoogleGenAI, Type } from '@google/genai';
const client = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// This is a manual, two turn multimodal function calling workflow:
// 1. Define the function tool
const getImageDeclaration = {
name: 'get_image',
description: 'Retrieves the image file reference for a specific order item.',
parameters: {
type: Type.OBJECT,
properties: {
item_name: {
type: Type.STRING,
description: "The name or description of the item ordered (e.g., 'instrument').",
},
},
required: ['item_name'],
},
};
const toolConfig = {
functionDeclarations: [getImageDeclaration],
};
// 2. Send a message that triggers the tool
const prompt = 'Show me the instrument I ordered last month.';
const response1 = await client.models.generateContent({
model: 'gemini-3-flash-preview',
contents: prompt,
config: {
tools: [toolConfig],
},
});
// 3. Handle the function call
const functionCall = response1.functionCalls[0];
const requestedItem = functionCall.args.item_name;
console.log(`Model wants to call: ${functionCall.name}`);
// Execute your tool (e.g., call an API)
// (This is a mock response for the example)
console.log(`Calling external tool for: ${requestedItem}`);
const functionResponseData = {
image_ref: { $ref: 'instrument.jpg' },
};
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 functionResponseMultimodalData = {
inlineData: {
mimeType: 'image/jpeg',
displayName: 'instrument.jpg',
data: base64ImageData,
},
};
// 4. Send the tool's result back
// Append this turn's messages to history for a final response.
const history = [
{ role: 'user', parts: [{ text: prompt }] },
response1.candidates[0].content,
{
role: 'tool',
parts: [
{
functionResponse: {
name: functionCall.name,
response: functionResponseData,
parts: [functionResponseMultimodalData],
},
},
],
},
];
const response2 = await client.models.generateContent({
model: 'gemini-3-flash-preview',
contents: history,
config: {
tools: [toolConfig],
thinkingConfig: { includeThoughts: true },
},
});
console.log(`\nFinal model response: ${response2.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
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [
...,
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "get_image",
"response": {
"image_ref": {
"$ref": "instrument.jpg"
}
},
"parts": [
{
"inlineData": {
"displayName": "instrument.jpg",
"mimeType":"'"$MIME_TYPE"'",
"data": "'"$IMAGE_B64"'"
}
}
]
}
}
]
}
]
}'
Przenoszenie danych z Gemini 2.5
Gemini 3 to nasza najbardziej zaawansowana rodzina modeli do tej pory, która stanowi krok naprzód w porównaniu z Gemini 2.5. Podczas migracji weź pod uwagę te kwestie:
- Model myślący: jeśli wcześniej używasz złożonych promptów (np. metody łańcucha myśli), aby zmusić Gemini 2.5 do wyciągania wniosków, wypróbuj Gemini 3 z
thinking_level: "high"i uproszczonymi promptami. - Ustawienia temperatury: jeśli dotychczasowy kod wyraźnie ustawia temperaturę (zwłaszcza na niskie wartości w przypadku deterministycznych wyników), zalecamy usunięcie tego parametru i użycie domyślnej wartości 1,0 dla Gemini 3, aby uniknąć potencjalnych problemów z zapętlaniem lub pogorszenia wydajności w przypadku złożonych zadań.
- Rozumienie dokumentów i plików PDF: domyślna rozdzielczość OCR w przypadku plików PDF została zmieniona. Jeśli w przypadku analizowania dokumentów o dużej gęstości informacji polegasz na określonym działaniu, przetestuj nowe ustawienie
media_resolution_high, aby mieć pewność, że nadal będzie ono działać prawidłowo. - Zużycie tokenów: przejście na domyślne ustawienia Gemini 3 może zwiększyć zużycie tokenów w przypadku plików PDF, ale zmniejszyć zużycie tokenów w przypadku filmów. Jeśli żądania przekraczają teraz okno kontekstu ze względu na wyższe domyślne rozdzielczości, zalecamy wyraźne zmniejszenie rozdzielczości multimediów.
- Segmentacja obrazu: funkcje segmentacji obrazu (zwracanie masek obiektów na poziomie pikseli) nie są obsługiwane w przypadku Gemini 3 Pro ani Gemini 3 Flash. W przypadku zadań wymagających natywnej segmentacji obrazów zalecamy dalsze korzystanie z Gemini 2.5 Flash z wyłączoną funkcją myślenia lub z Gemini Robotics-ER 1.5.
- Korzystanie z komputera: Gemini 3 Pro i Gemini 3 Flash obsługują korzystanie z komputera. W przeciwieństwie do serii 2.5 nie musisz używać osobnego modelu, aby uzyskać dostęp do narzędzia do korzystania z komputera.
- Obsługa narzędzi: grounding map nie jest jeszcze obsługiwany w przypadku modeli Gemini 3, więc nie zostanie przeniesiony. Poza tym łączenie wbudowanych narzędzi z wywoływaniem funkcji nie jest jeszcze obsługiwane.
Zgodność z OpenAI
W przypadku użytkowników korzystających z warstwy zgodności OpenAI standardowe parametry są automatycznie mapowane na odpowiedniki w Gemini:
reasoning_effort(OAI) odpowiadathinking_level(Gemini). Pamiętaj, żereasoning_effortśrednia odpowiadathinking_levelwysokiej w przypadku Gemini 3 Flash.
Sprawdzone metody dotyczące promptów
Gemini 3 to model rozumowania, który zmienia sposób, w jaki należy formułować prompty.
- Precyzyjne instrukcje: podawaj zwięzłe prompty. Gemini 3 najlepiej reaguje na bezpośrednie i jasne instrukcje. Może nadmiernie analizować rozbudowane lub zbyt złożone techniki inżynierii promptów używane w przypadku starszych modeli.
- Poziom szczegółowości odpowiedzi: domyślnie Gemini 3 jest mniej rozwlekły i woli udzielać bezpośrednich, zwięzłych odpowiedzi. Jeśli Twój przypadek użycia wymaga bardziej konwersacyjnej lub „gadatliwej” osobowości, musisz wyraźnie nakierować model w prompcie (np. „Wyjaśnij to jako przyjazny, rozmowny asystent”).
- Zarządzanie kontekstem: podczas pracy z dużymi zbiorami danych (np. całymi książkami, bazami kodu lub długimi filmami) umieszczaj konkretne instrukcje lub pytania na końcu promptu, po kontekście danych. Zakotwicz rozumowanie modelu w dostarczonych danych, zaczynając pytanie od frazy „Na podstawie powyższych informacji…”.
Więcej informacji o strategiach projektowania promptów znajdziesz w przewodniku po inżynierii promptów.
Najczęstsze pytania
Jaka jest data odcięcia wiedzy w przypadku Gemini 3? Modele Gemini 3 mają datę odcięcia wiedzy w styczniu 2025 r. Aby uzyskać bardziej aktualne informacje, skorzystaj z narzędzia Search Grounding.
Jakie są limity okna kontekstu? Modele Gemini 3 obsługują okno kontekstu wejściowego o pojemności 1 miliona tokenów i do 64 tys. tokenów wyjściowych.
Czy jest dostępny bezpłatny poziom Gemini 3? Gemini 3 Flash
gemini-3-flash-previewma bezpłatny poziom w interfejsie Gemini API. Możesz bezpłatnie wypróbować Gemini 3 Pro i Flash w Google AI Studio, ale obecnie nie ma bezpłatnego poziomugemini-3-pro-previeww Gemini API.Czy mój stary kod
thinking_budgetnadal będzie działać? Tak, znacznikthinking_budgetjest nadal obsługiwany ze względu na zgodność z wcześniejszymi rozwiązaniami, ale zalecamy przejście na znacznikthinking_level, aby uzyskać bardziej przewidywalną skuteczność. Nie używaj obu tych parametrów w tym samym żądaniu.Czy Gemini 3 obsługuje interfejs Batch API? Tak, Gemini 3 obsługuje interfejs Batch API.
Czy buforowanie kontekstowe jest obsługiwane? Tak, pamięć podręczna kontekstu jest obsługiwana w przypadku Gemini 3.
Które narzędzia są obsługiwane w Gemini 3? Gemini 3 obsługuje wyszukiwarkę Google, wyszukiwanie plików, wykonywanie kodu i kontekst adresu URL. Obsługuje też standardowe wywoływanie funkcji w przypadku własnych narzędzi niestandardowych (ale nie w przypadku narzędzi wbudowanych). Pamiętaj, że funkcje Uziemienie w Mapach Google i Korzystanie z komputera nie są obecnie obsługiwane.
Dalsze kroki
- Pierwsze kroki z Gemini 3 Cookbook
- Zapoznaj się z przewodnikiem po poziomach myślenia i dowiedz się, jak przejść z budżetu na myślenie na poziomy myślenia.