Gedankensignaturen sind verschlüsselte Darstellungen des internen Denkprozesses des Modells und werden verwendet, um den Kontext der Argumentation bei Interaktionen mit mehreren Schritten beizubehalten.
Wenn Sie Denkmodelle wie die Gemini 3- und 2.5-Serie verwenden, kann die API
ein thoughtSignature-Feld in den Inhaltsteilen
der Antwort zurückgeben (z.B. text oder functionCall-Teile).
Wenn Sie eine Gedankensignatur in einer Modellantwort erhalten, sollten Sie sie in der nächsten Runde genau so zurückgeben, wie Sie sie erhalten haben, wenn Sie den Unterhaltungsverlauf senden.
Wenn Sie Gemini 3-Modelle verwenden, müssen Sie Gedankensignaturen bei Funktionsaufrufen zurückgeben, andernfalls erhalten Sie einen Validierungsfehler (Statuscode 4xx).
Dies gilt auch, wenn Sie die Einstellung minimal
Denkebene für Gemini 3
Flash verwenden.
Funktionsweise
Die folgende Grafik veranschaulicht die Bedeutung von "Runde" und "Schritt" im Zusammenhang mit Funktionsaufrufen in der Gemini API. Eine „Runde“ ist ein einzelner, vollständiger Austausch in einer Unterhaltung zwischen einem Nutzer und einem Modell. Ein „Schritt“ ist eine detailliertere Aktion oder ein Vorgang, der vom Modell ausgeführt wird, oft als Teil eines größeren Prozesses, um eine Runde abzuschließen.

In diesem Dokument geht es um die Verarbeitung von Funktionsaufrufen für Gemini 3-Modelle. Informationen zu Abweichungen bei 2.5 finden Sie im Abschnitt zum Modellverhalten.
Gemini 3 gibt Gedankensignaturen für alle Modellantworten (Antworten von der API) mit einem Funktionsaufruf zurück. Gedankensignaturen werden in den folgenden Fällen angezeigt:
- Bei parallelen Funktions aufrufen enthält der erste Teil des Funktionsaufrufs, der von der Modellantwort zurückgegeben wird, eine Gedankensignatur.
- Bei sequenziellen Funktionsaufrufen (mehrere Schritte) hat jeder Funktionsaufruf eine Signatur und Sie müssen alle Signaturen zurückgeben.
- Modellantworten ohne Funktionsaufruf geben eine Gedankensignatur im letzten Teil zurück, der vom Modell zurückgegeben wird.
Die folgende Tabelle veranschaulicht Funktionsaufrufe mit mehreren Schritten. Dabei werden die Definitionen von Runden und Schritten mit dem oben eingeführten Konzept der Signaturen kombiniert:
Runde |
Schritt |
Nutzeranfrage |
Modellantwort |
FunctionResponse |
1 |
1 |
request1 = user_prompt |
FC1 + signature |
FR1 |
1 |
2 |
request2 = request1 + (FC1 + signature) + FR1 |
FC2 + signature |
FR2 |
1 |
3 |
request3 = request2 + (FC2 + signature) + FR2 |
text_output
|
Keine |
Signaturen in Teilen von Funktionsaufrufen
Wenn Gemini einen functionCall generiert, verwendet es die thought_signature, um die Ausgabe des Tools in der nächsten Runde korrekt zu verarbeiten.
- Verhalten:
- Einzelner Funktionsaufruf: Der Teil
functionCallenthält einethought_signature. - Parallele Funktionsaufrufe: Wenn das Modell parallele Funktionsaufrufe
in einer Antwort generiert, wird die
thought_signaturenur an den erstenfunctionCall-Teil angehängt. NachfolgendefunctionCall-Teile in derselben Antwort enthalten keine Signatur.
- Einzelner Funktionsaufruf: Der Teil
- Anforderung: Sie müssen diese Signatur in genau dem Teil zurückgeben, in dem sie empfangen wurde, wenn Sie den Unterhaltungsverlauf zurücksenden.
- Validierung: Für alle Funktionsaufrufe in
der aktuellen Runde wird eine strenge Validierung erzwungen . (Nur die aktuelle Runde ist erforderlich. Wir validieren nicht für vorherige Runden.)
- Die API durchsucht den Verlauf (von der neuesten zur ältesten Nachricht), um die letzte Nutzer -Nachricht zu finden, die Standardinhalte (z. B.
text) enthält. Dies ist der Beginn der aktuellen Runde. Dies ist befunctionResponse. - Alle
functionCall-Runden des Modells, die nach dieser bestimmten Nutzernachricht auftreten, werden als Teil der Runde betrachtet. - Der erste
functionCall-Teil in jedem Schritt der aktuellen Runde muss die zugehörigethought_signatureenthalten. - Wenn Sie eine
thought_signaturefür den erstenfunctionCall-Teil in einem Schritt der aktuellen Runde weglassen, schlägt die Anfrage mit einem 400-Fehler fehl.
- Die API durchsucht den Verlauf (von der neuesten zur ältesten Nachricht), um die letzte Nutzer -Nachricht zu finden, die Standardinhalte (z. B.
- Wenn keine korrekten Signaturen zurückgegeben werden, wird ein Fehler ausgegeben
- Gemini 3-Modelle: Wenn keine Signaturen enthalten sind, wird ein 400-Fehler zurückgegeben. Die Formulierung hat folgendes Format:
- Für den Funktionsaufruf
<Function Call>im<index of contents array>Inhaltsblock fehlt einthought_signature. Beispiel: Funktions aufrufFC1im1.Inhaltsblock fehlt einthought_signature.
- Für den Funktionsaufruf
- Gemini 3-Modelle: Wenn keine Signaturen enthalten sind, wird ein 400-Fehler zurückgegeben. Die Formulierung hat folgendes Format:
Beispiel für sequenzielle Funktionsaufrufe
In diesem Abschnitt wird ein Beispiel für mehrere Funktionsaufrufe gezeigt, bei denen der Nutzer eine komplexe Frage stellt, für die mehrere Aufgaben erforderlich sind.
Sehen wir uns ein Beispiel für Funktionsaufrufe in mehreren Runden an, bei dem der Nutzer
eine komplexe Frage stellt, für die mehrere Aufgaben erforderlich sind: "Check flight status for AA100 and
book a taxi if delayed".
Runde |
Schritt |
Nutzeranfrage |
Modellantwort |
FunctionResponse |
1 |
1 |
request1="Check flight status for AA100 and book a taxi 2 hours before if delayed." |
FC1 ("check_flight") + signature |
FR1 |
1 |
2 |
request2 = request1 + FC1 ("check_flight") + signature + FR1 |
FC2("book_taxi") + signature |
FR2 |
1 |
3 |
request3 = request2 + FC2 ("book_taxi") + signature + FR2 |
text_output
|
None |
Der folgende Code veranschaulicht die Sequenz in der obigen Tabelle.
Runde 1, Schritt 1 (Nutzeranfrage)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "check_flight",
"description": "Gets the current status of a flight",
"parameters": {
"type": "object",
"properties": {
"flight": {
"type": "string",
"description": "The flight number to check"
}
},
"required": [
"flight"
]
}
},
{
"name": "book_taxi",
"description": "Book a taxi",
"parameters": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "time to book the taxi"
}
},
"required": [
"time"
]
}
}
]
}
]
}
Runde 1, Schritt 1 (Modellantwort)
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>"
}
]
}
}
Runde 1, Schritt 2 (Nutzerantwort – Toolausgaben senden) Da diese Nutzerrunde nur eine functionResponse (kein neuer Text) enthält, befinden wir uns noch in Runde 1. Wir
müssen beibehalten <Signature_A>.
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "check_flight",
"response": {
"status": "delayed",
"departure_time": "12 PM"
}
}
}
]
}
Runde 1, Schritt 2 (Modell) Das Modell beschließt nun, basierend auf der vorherigen Toolausgabe ein Taxi zu buchen.
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>"
}
]
}
}
Runde 1, Schritt 3 (Nutzer – Toolausgabe senden) Um die Bestätigung der Taxibuchung
zu senden, müssen wir Signaturen für ALLE Funktionsaufrufe in dieser Schleife einfügen
(<Signature A> + <Signature B>).
{
"role": "user",
"parts": [
{
"text": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "check_flight",
"response": {
"status": "delayed",
"departure_time": "12 PM"
}
}
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>" //Required and Validated
}
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "book_taxi",
"response": {
"booking_status": "success"
}
}
}
]
}
}
Beispiel für parallele Funktionsaufrufe
Sehen wir uns ein Beispiel für parallele Funktionsaufrufe an, bei dem der Nutzer
"Check weather in Paris and London" eingibt, um zu sehen, wo das Modell eine Validierung durchführt.
Runde |
Schritt |
Nutzeranfrage |
Modellantwort |
FunctionResponse |
|---|---|---|---|---|
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature FC2 ("London") |
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output (no FCs) |
Keine |
Der folgende Code veranschaulicht die Sequenz in der obigen Tabelle.
Runde 1, Schritt 1 (Nutzeranfrage)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco"
}
},
"required": [
"location"
]
}
}
]
}
]
}
Runde 1, Schritt 1 (Modellantwort)
{
"content": {
"parts": [
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"location": "Paris"
}
},
"thoughtSignature": "<Signature_A>"// INCLUDED on First FC
},
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"location": "London"
}// NO signature on subsequent parallel FCs
}
}
]
}
}
Runde 1, Schritt 2 (Nutzerantwort – Toolausgaben senden) Wir müssen
<Signature_A> im ersten Teil genau so beibehalten, wie sie empfangen wurde.
[
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
},
{
"role": "model",
"parts": [
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"city": "Paris"
}
},
"thought_signature": "<Signature_A>" // MUST BE INCLUDED
},
{
"functionCall": {
"name": "get_current_temperature",
"args": {
"city": "London"
}
}
} // NO SIGNATURE FIELD
]
},
{
"role": "user",
"parts": [
{
"functionResponse": {
"name": "get_current_temperature",
"response": {
"temp": "15C"
}
}
},
{
"functionResponse": {
"name": "get_current_temperature",
"response": {
"temp": "12C"
}
}
}
]
}
]
Signaturen in Teilen, die keine functionCall sind
Gemini kann auch thought_signatures im letzten Teil der Antwort in Teilen zurückgeben, die keine Funktionsaufrufe sind.
- Verhalten: Der letzte Inhaltsteil (
text, inlineData…), der vom Modell zurückgegeben wird, kann einethought_signatureenthalten. - Empfehlung: Es wird empfohlen, diese Signaturen zurückzugeben, damit das Modell eine hohe Qualität der Argumentation beibehält, insbesondere bei komplexen Anweisungen oder simulierten agentischen Arbeitsabläufen.
- Validierung: Die API erzwingt keine strenge Validierung. Sie erhalten keinen blockierenden Fehler, wenn Sie sie weglassen. Die Leistung kann jedoch beeinträchtigt werden.
Text/Kontextbezogene Argumentation (keine Validierung)
Runde 1, Schritt 1 (Modellantwort)
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
"thought_signature": "<Signature_C>" // OPTIONAL (Recommended)
}
]
}
Runde 2, Schritt 1 (Nutzer)
[
{ "role": "user", "parts": [{ "text": "What is the risk?" }] },
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
// If you omit <Signature_C> here, no error will occur.
}
]
},
{ "role": "user", "parts": [{ "text": "Summarize it." }] }
]
Signaturen für die OpenAI-Kompatibilität
Die folgenden Beispiele zeigen, wie Sie Gedankensignaturen für eine Chat Completion-API mit OpenAI-Kompatibilität verarbeiten.
Beispiel für sequenzielle Funktionsaufrufe
Dies ist ein Beispiel für mehrere Funktionsaufrufe, bei denen der Nutzer eine komplexe Frage stellt, für die mehrere Aufgaben erforderlich sind.
Sehen wir uns ein Beispiel für Funktionsaufrufe in mehreren Runden an, bei dem der Nutzer Check flight status for AA100 and book a taxi if delayed eingibt. Sie können sehen, was passiert, wenn der Nutzer eine komplexe Frage stellt, für die mehrere Aufgaben erforderlich sind.
Runde |
Schritt |
Nutzeranfrage |
Modellantwort |
FunctionResponse |
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature
|
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output
|
None |
Der folgende Code veranschaulicht die angegebene Sequenz.
Runde 1, Schritt 1 (Nutzeranfrage)
{
"model": "google/gemini-3.1-pro-preview",
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
}
],
"tools": [
{
"type": "function",
"function": {
"name": "check_flight",
"description": "Gets the current status of a flight",
"parameters": {
"type": "object",
"properties": {
"flight": {
"type": "string",
"description": "The flight number to check."
}
},
"required": [
"flight"
]
}
}
},
{
"type": "function",
"function": {
"name": "book_taxi",
"description": "Book a taxi",
"parameters": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "time to book the taxi"
}
},
"required": [
"time"
]
}
}
}
]
}
Runde 1, Schritt 1 (Modellantwort)
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>"
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
}
Runde 1, Schritt 2 (Nutzerantwort – Toolausgaben senden)
Da diese Nutzerrunde nur eine functionResponse (kein neuer Text) enthält, befinden wir uns
noch in Runde 1 und müssen <Signature_A> beibehalten.
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required and Validated
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
},
{
"role": "tool",
"name": "check_flight",
"tool_call_id": "function-call-1",
"content": "{\"status\":\"delayed\",\"departure_time\":\"12 PM\"}"
}
]
Runde 1, Schritt 2 (Modell)
Das Modell beschließt nun, basierend auf der vorherigen Toolausgabe ein Taxi zu buchen.
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature B>"
}
},
"function": {
"arguments": "{\"time\":\"10 AM\"}",
"name": "book_taxi"
},
"id": "function-call-2",
"type": "function"
}
]
}
Runde 1, Schritt 3 (Nutzer – Toolausgabe senden)
Um die Bestätigung der Taxibuchung zu senden, müssen wir Signaturen für ALLE
Funktionsaufrufe in dieser Schleife einfügen (<Signature A> + <Signature B>).
"messages": [
{
"role": "user",
"content": "Check flight status for AA100 and book a taxi 2 hours before if delayed."
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required and Validated
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1d6a1a61-6f4f-4029-80ce-61586bd86da5",
"type": "function"
}
]
},
{
"role": "tool",
"name": "check_flight",
"tool_call_id": "function-call-1d6a1a61-6f4f-4029-80ce-61586bd86da5",
"content": "{\"status\":\"delayed\",\"departure_time\":\"12 PM\"}"
},
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature B>" //Required and Validated
}
},
"function": {
"arguments": "{\"time\":\"10 AM\"}",
"name": "book_taxi"
},
"id": "function-call-65b325ba-9b40-4003-9535-8c7137b35634",
"type": "function"
}
]
},
{
"role": "tool",
"name": "book_taxi",
"tool_call_id": "function-call-65b325ba-9b40-4003-9535-8c7137b35634",
"content": "{\"booking_status\":\"success\"}"
}
]
Beispiel für parallele Funktionsaufrufe
Sehen wir uns ein Beispiel für parallele Funktionsaufrufe an, bei dem der Nutzer
"Check weather in Paris and London" eingibt. Sie können sehen, wo das Modell eine
Validierung durchführt.
Runde |
Schritt |
Nutzeranfrage |
Modellantwort |
FunctionResponse |
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature
|
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output
|
None |
Der folgende Code veranschaulicht die angegebene Sequenz.
Runde 1, Schritt 1 (Nutzeranfrage)
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Check the weather in Paris and London."
}
]
}
],
"tools": [
{
"functionDeclarations": [
{
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco"
}
},
"required": [
"location"
]
}
}
]
}
]
}
Runde 1, Schritt 1 (Modellantwort)
{
"role": "assistant",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Signature returned
}
},
"function": {
"arguments": "{\"location\":\"Paris\"}",
"name": "get_current_temperature"
},
"id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"type": "function"
},
{
"function": {
"arguments": "{\"location\":\"London\"}",
"name": "get_current_temperature"
},
"id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"type": "function" // No signature on Parallel FC
}
]
}
Runde 1, Schritt 2 (Nutzerantwort – Toolausgaben senden)
Sie müssen <Signature_A> im ersten Teil genau so beibehalten, wie sie empfangen wurde.
"messages": [
{
"role": "user",
"content": "Check the weather in Paris and London."
},
{
"role": "assistant",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>" //Required
}
},
"function": {
"arguments": "{\"location\":\"Paris\"}",
"name": "get_current_temperature"
},
"id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"type": "function"
},
{
"function": { //No Signature
"arguments": "{\"location\":\"London\"}",
"name": "get_current_temperature"
},
"id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"type": "function"
}
]
},
{
"role":"tool",
"name": "get_current_temperature",
"tool_call_id": "function-call-f3b9ecb3-d55f-4076-98c8-b13e9d1c0e01",
"content": "{\"temp\":\"15C\"}"
},
{
"role":"tool",
"name": "get_current_temperature",
"tool_call_id": "function-call-335673ad-913e-42d1-bbf5-387c8ab80f44",
"content": "{\"temp\":\"12C\"}"
}
]
Häufig gestellte Fragen
Wie übertrage ich den Verlauf von einem anderen Modell zu Gemini 3 mit einem Teil des Funktionsaufrufs in der aktuellen Runde und im aktuellen Schritt? Ich muss Teile des Funktionsaufrufs angeben, die nicht von der API generiert wurden und daher keine zugehörige Gedankensignatur haben?
Es wird dringend davon abgeraten, benutzerdefinierte Funktionsaufrufblöcke in die Anfrage einzufügen. In Fällen, in denen dies jedoch nicht vermieden werden kann, z. B. wenn Sie dem Modell Informationen zu Funktionsaufrufen und -antworten geben, die deterministisch vom Client ausgeführt wurden, oder wenn Sie eine Ablaufverfolgung von einem anderen Modell übertragen, das keine Gedankensignaturen enthält, können Sie die folgenden Platzhaltersignaturen
"context_engineering_is_the_way_to_go"oder"skip_thought_signature_validator"im Feld für die Gedankensignatur festlegen, um die Validierung zu überspringen.Ich sende verschachtelte parallele Funktionsaufrufe und -antworten zurück und die API gibt einen 400-Fehler zurück. Woran liegt das?
Wenn die API parallele Funktionsaufrufe „FC1 + signature, FC2“ zurückgibt, wird die Nutzerantwort „FC1 + signature, FC2, FR1, FR2“ erwartet. Wenn Sie sie als „FC1 + signature, FR1, FC2, FR2“ verschachtelt haben, gibt die API einen 400-Fehler zurück.
Beim Streaming und wenn das Modell keinen Funktionsaufruf zurückgibt, kann ich die Gedankensignatur nicht finden
Bei einer Modellantwort, die keinen Funktionsaufruf mit einer Streaminganfrage enthält, kann das Modell die Gedankensignatur in einem Teil mit einem leeren Textinhaltsteil zurückgeben. Es empfiehlt sich, die gesamte Anfrage zu parsen, bis das Modell
finish_reasonzurückgibt.
Gedankensignaturen für verschiedene Modelle
Gemini 3-Modelle und Gemini 2.5-Modelle verhalten sich bei Gedankensignaturen in Funktionsaufrufen unterschiedlich:
- Wenn eine Antwort Funktionsaufrufe enthält,
- hat Gemini 3 immer die Signatur im ersten Teil des Funktionsaufrufs. Es ist erforderlich , diesen Teil zurückzugeben.
- Gemini 2.5 hat die Signatur im ersten Teil (unabhängig vom Typ). Es ist optional , diesen Teil zurückzugeben.
- Wenn eine Antwort keine Funktionsaufrufe enthält,
- hat Gemini 3 die Signatur im letzten Teil, wenn das Modell einen Gedanken generiert.
- Gemini 2.5 hat in keinem Teil eine Signatur.
Weitere Vergleichsdetails finden Sie auf der Seite zum Thinking-Modus. Informationen zu Gemini 3-Bildmodellen finden Sie im Abschnitt zum Denkprozess im Leitfaden zur Bildgenerierung.