Thought-Signaturen sind verschlüsselte Darstellungen des internen Denkprozesses des Modells. Thought-Signaturen behalten den Gemini-Reasoning-Status während mehrstufiger Unterhaltungen bei, was bei der Verwendung von Funktionsaufrufen nützlich sein kann. Antworten können ein thought_signature-Feld in jedem Inhaltsteil enthalten (z.B. text, functionCall).
Gemini 3-Modelle erzwingen eine strengere Validierung von Thought-Signaturen als frühere Gemini-Versionen, da sie die Modellleistung für Funktionsaufrufe verbessern. Damit das Modell den vollständigen Kontext über mehrere Runden einer Unterhaltung hinweg beibehält, müssen Sie die Thought-Signaturen aus vorherigen Antworten in Ihren nachfolgenden Anfragen zurückgeben, auch wenn Sie MINIMAL-Thinking-Levels verwenden. Wenn bei der Verwendung von Gemini 3-Modellen eine erforderliche Thought-Signatur nicht zurückgegeben wird, gibt das Modell den Fehler 400 zurück.
Gemini 3 Pro Image erzwingt diese Validierung zwar nicht, aber damit das Modell den vollständigen Kontext über mehrere Runden einer Unterhaltung hinweg beibehält, müssen Sie die Gedankensignaturen aus vorherigen Antworten in Ihren nachfolgenden Anfragen zurückgeben. Gemini 3 Pro Image gibt keinen 400-Fehler zurück, wenn keine Gedankensignatur zurückgegeben wird. Codebeispiele für die Multi-Turn-Bildbearbeitung mit Gemini 3 Pro Image finden Sie unter Beispiel für die Multi-Turn-Bildbearbeitung mit Thought Signatures.
Wenn Sie das offizielle Google Gen AI SDK (Python, Node.js, Go oder Java) verwenden und die Standardfunktionen für den Chatverlauf nutzen oder die vollständige Modellantwort an den Verlauf anhängen, werden Gedankensignaturen automatisch verarbeitet.
Warum sind sie wichtig?
Wenn ein Thinking-Modell ein externes Tool aufruft, wird der interne Reasoning-Prozess pausiert. Die Gedankensignatur fungiert als „Speicherstatus“, sodass das Modell seine Gedankenkette nahtlos fortsetzen kann, sobald Sie das Ergebnis der Funktion bereitstellen. Ohne Gedankensignaturen „vergisst“ das Modell seine spezifischen Argumentationsschritte während der Phase der Toolausführung. Die Rückgabe der Signatur bietet folgende Vorteile:
- Kontextkontinuität: Das Modell behält die Argumentationsschritte bei, die den Aufruf des Tools gerechtfertigt haben, und kann sie überprüfen.
- Komplexe Schlussfolgerungen: Ermöglicht mehrstufige Aufgaben, bei denen die Ausgabe eines Tools die Schlussfolgerung für das nächste Tool beeinflusst.
Fortführung der Logikschritte
Bei Gemini 3.5 Flash und neueren Modellen werden Gedanken aus früheren Runden standardmäßig beibehalten. Der Dienst speichert den Denkverlauf im Kontext der Unterhaltung, bevor er an das Modell weitergegeben wird.
Wenn Sie den Unterhaltungsverlauf senden, sollten Sie mit den vorherigen Runden konsistent sein: Entweder Sie fügen den vollständigen Kontext (Gedanken, Funktionsaufrufe und Antworten) ein oder Sie lassen ihn ganz weg. Wenn Sie nur einen Teil des Kontexts angeben, kann dies die Modellleistung beeinträchtigen.
Gedankensignaturen aus anderen Modellen
Flash-Lite-Modelle können keine Gedanken lesen, die von Nicht-Flash-Lite-Modellen generiert wurden. Wenn eine Anfrage an ein Flash-Lite-Modell Gedankensignaturen enthält, die von einem Nicht-Flash-Lite-Modell generiert wurden, schlägt die Anfrage nicht fehl. Stattdessen werden diese Gedanken aus dem Kontext des Modells entfernt. Das passiert beispielsweise, wenn Sie eine Anfrage an ein Flash-Lite-Modell mit einem Verlauf aus einem Gemini Flash- oder Pro-Modell senden.
Abbiegungen und Schritte
Im Zusammenhang mit Funktionsaufrufen ist es wichtig, den Unterschied zwischen Runden und Schritten zu verstehen:
- Ein Turn stellt einen vollständigen Gesprächsaustausch dar, der mit dem Prompt eines Nutzers beginnt und endet, wenn das Modell eine endgültige Antwort auf diesen Prompt liefert, die kein Funktionsaufruf ist.
- Ein Schritt erfolgt innerhalb einer einzelnen Runde, wenn das Modell eine Funktion aufruft und eine Funktionsantwort benötigt, um den Denkprozess fortzusetzen. Wie im Diagramm dargestellt, kann ein einzelner Turn mehrere Schritte umfassen, wenn das Modell mehrere Funktionen nacheinander aufrufen muss, um die Anfrage des Nutzers zu erfüllen.
Thought Signatures verwenden
Die einfachste Möglichkeit, mit Gedankensignaturen umzugehen, besteht darin, alle Parts aus allen vorherigen Nachrichten im Unterhaltungsverlauf beim Senden einer neuen Anfrage genau so einzufügen, wie sie vom Modell zurückgegeben wurden.
Wenn Sie keines der Google Gen AI SDKs verwenden oder den Unterhaltungsverlauf ändern oder kürzen müssen, müssen Sie dafür sorgen, dass die Gedankensignaturen erhalten bleiben und an das Modell zurückgesendet werden.
Bei Verwendung des Google Gen AI SDK (empfohlen)
Wenn Sie die Chatverlaufsfunktionen der SDKs verwenden oder das content-Objekt des Modells aus der vorherigen Antwort an die contents der nächsten Anfrage anhängen, werden Signaturen automatisch verarbeitet.
Das folgende Python-Beispiel zeigt die automatische Verarbeitung:
from google import genai
from google.genai.types import Content, FunctionDeclaration, GenerateContentConfig, Part, ThinkingConfig, Tool
client = genai.Client()
# 1. Define your tool
get_weather_declaration = FunctionDeclaration(
name="get_weather",
description="Gets the current weather temperature for a given location.",
parameters={
"type": "object",
"properties": {"location": {"type": "string"}},
"required": ["location"],
},
)
get_weather_tool = Tool(function_declarations=[get_weather_declaration])
# 2. Send a message that triggers the tool
prompt = "What's the weather like in London?"
response = client.models.generate_content(
model="gemini-3.5-flash",
contents=prompt,
config=GenerateContentConfig(
tools=[get_weather_tool],
thinking_config=ThinkingConfig(include_thoughts=True)
),
)
# 3. Handle the function call
function_call = response.function_calls[0]
location = function_call.args["location"]
print(f"Model wants to call: {function_call.name}")
# Execute your tool (for example, call an API)
# (This is a mock response for the example)
print(f"Calling external tool for: {location}")
function_response_data = {
"location": location,
"temperature": "30C",
}
# 4. Send the tool's result back
# Append this turn's messages to history for a final response.
# The `content` object automatically attaches the required thought_signature behind the scenes.
history = [
Content(role="user", parts=[Part(text=prompt)]),
response.candidates[0].content, # Signature preserved here
Content(
role="tool",
parts=[
Part.from_function_response(
name=function_call.name,
response=function_response_data,
)
],
)
]
response_2 = client.models.generate_content(
model="gemini-3.5-flash",
contents=history,
config=GenerateContentConfig(
tools=[get_weather_tool],
thinking_config=ThinkingConfig(include_thoughts=True)
),
)
# 5. Get the final, natural-language answer
print(f"\nFinal model response: {response_2.text}")
Bei Verwendung von REST oder manueller Verarbeitung
Wenn Sie direkt mit der API interagieren, müssen Sie die Signaturverarbeitung gemäß den folgenden Regeln für Gemini 3 Pro implementieren:
- Funktionsaufrufe:
- Wenn die Modellantwort einen oder mehrere
functionCall-Teile enthält, ist einthought_signaturefür die korrekte Verarbeitung erforderlich. - Bei parallelen Funktionsaufrufen in einer einzelnen Antwort enthält nur der erste
functionCall-Teil diethought_signature. - Bei sequenziellen Funktionsaufrufen über mehrere Schritte in einer Runde enthält jeder
functionCall-Teil einenthought_signature. - Regel: Wenn Sie die nächste Anfrage erstellen, müssen Sie die
partmit derfunctionCallund der zugehörigenthought_signaturegenau so angeben, wie sie vom Modell zurückgegeben wurde. Bei sequenziellen (mehrstufigen) Funktionsaufrufen wird die Validierung für alle Schritte im aktuellen Durchlauf durchgeführt. Wenn ein erforderlicherthought_signaturefür den erstenfunctionCall-Teil in einem Schritt des aktuellen Durchlaufs weggelassen wird, führt dies zu einem400-Fehler. Eine Runde beginnt mit der neuesten Nutzernachricht, die keinfunctionResponseist. - Wenn das Modell parallele Funktionsaufrufe zurückgibt (z. B.
FC1+signature,FC2), muss Ihre Antwort alle Funktionsaufrufe gefolgt von allen Funktionsantworten (FC1+signature,FC2,FR1,FR2) enthalten. Verschachtelte Antworten (FC1+signature,FR1,FC2,FR2) führen zu einem400-Fehler. GibtfunctionResponse-Teile in derselben Reihenfolge wie die entsprechendenfunctionCall-Teile zurück. Die API ordnet parallele Funktionsantworten Funktionsaufrufen nachid(falls inv1beta1angegeben) oder nachnameund sequenzieller Reihenfolge imparts-Array zu. - In seltenen Fällen müssen Sie
functionCall-Teile bereitstellen, die nicht von der API generiert wurden und daher keine zugehörige Gedankensignatur haben (z. B. beim Übertragen des Verlaufs von einem Modell, das keine Gedankensignaturen enthält). Sie könnenthought_signatureaufskip_thought_signature_validatorsetzen, aber das sollte nur als letzte Möglichkeit verwendet werden, da es sich negativ auf die Modellleistung auswirkt.
- Wenn die Modellantwort einen oder mehrere
- Nicht-Funktionsaufrufe:
- Wenn die Modellantwort keinen
functionCallenthält, kann sie einenthought_signatureim letztenpartder Antwort enthalten (z. B. im letztentext-Teil). - Regel: Es wird empfohlen, diese Signatur in die nächste Anfrage aufzunehmen, um die beste Leistung zu erzielen. Wenn Sie sie weglassen, wird jedoch kein Fehler verursacht. Beim Streaming wird diese Signatur möglicherweise in einem Teil mit leerem Textinhalt zurückgegeben. Achten Sie daher darauf, alle Teile zu parsen, bis
finish_reasonvom Modell zurückgegeben wird.
- Wenn die Modellantwort keinen
Beachten Sie die folgenden Regeln, damit der Kontext des Modells erhalten bleibt:
- Senden Sie die
thought_signatureimmer in der ursprünglichenPartan das Modell zurück. - Führen Sie keine
Partmit einer Signatur mit einer ohne Signatur zusammen. Dadurch wird der Positionskontext des Gedankens unterbrochen. - Kombinieren Sie nicht zwei
Parts, die beide Signaturen enthalten, da die Signaturstrings nicht zusammengeführt werden können.
Beispiel für sequenziellen Funktionsaufruf
Das folgende Beispiel zeigt einen mehrstufigen Funktionsaufruf, bei dem der Nutzer fragt: „Flugstatus für AA100 prüfen und bei Verspätung ein Taxi buchen“. Dies erfordert mehrere Aufgaben.
REST
Im folgenden Beispiel wird gezeigt, wie Sie Gedankensignaturen über mehrere Schritte in einem sequenziellen Funktionsaufruf-Workflow mit der REST API verarbeiten.
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 – Senden von Toolausgaben)
Da diese Nutzerrunde nur ein functionResponse (keinen neuen Text) enthält, befinden wir uns immer noch in Runde 1. Sie müssen <SIGNATURE_A> beibehalten.
{ "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>" } ] }, { "role": "user", "parts": [ { "functionResponse": { "name": "check_flight", "response": { "status": "delayed", "departure_time": "12 PM" } } } ] }
Turn 1, Schritt 2 (Modellantwort)
Das Modell entscheidet sich 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 (Nutzerantwort – Senden der Toolausgabe)
Wenn Sie die Bestätigung der Taxibuchung senden möchten, müssen Sie Signaturen für alle Funktionsaufrufe in dieser Schleife (<SIGNATURE_A> und <SIGNATURE_B>) angeben.
{ "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>" } ] }, { "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>" } ] }, { "role": "user", "parts": [ { "functionResponse": { "name": "book_taxi", "response": { "booking_status": "success" } } } ] } }
Chatvervollständigungen
Im folgenden Beispiel wird gezeigt, wie Gedankensignaturen über mehrere Schritte in einem sequenziellen Funktionsaufruf-Workflow mit der Chat Completions API verarbeitet werden.
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 – Senden von Toolausgaben)
Da diese Nutzerrunde nur ein functionResponse (keinen neuen Text) enthält, befinden wir uns immer noch in Runde 1. Sie 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>" } }, "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\"}" } ]
Turn 1, Schritt 2 (Modellantwort)
Das Modell entscheidet sich 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 (Nutzerantwort – Senden der Toolausgabe)
Wenn Sie die Bestätigung der Taxibuchung senden möchten, müssen Sie Signaturen für alle Funktionsaufrufe in dieser Schleife (<SIGNATURE_A> und <SIGNATURE_B>) angeben.
"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>" } }, "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>" } }, "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
Das folgende Beispiel zeigt einen parallelen Funktionsaufruf, bei dem der Nutzer fragt: „Wie ist das Wetter in Paris und London?“
REST
Das folgende Beispiel zeigt, wie Gedankensignaturen in einem Workflow mit parallelen Funktionsaufrufen mithilfe der REST API verarbeitet werden.
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>" }, { "functionCall": { "name": "get_current_temperature", "args": { "location": "London" } } } ] } }
Runde 1, Schritt 2 (Nutzerantwort – Senden von Toolausgaben)
Sie müssen <SIGNATURE_A> im ersten Teil genau so beibehalten, wie Sie es erhalten haben.
[ { "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>" }, { "functionCall": { "name": "get_current_temperature", "args": { "city": "London" } } } ] }, { "role": "user", "parts": [ { "functionResponse": { "name": "get_current_temperature", "response": { "temp": "15C" } } }, { "functionResponse": { "name": "get_current_temperature", "response": { "temp": "12C" } } } ] } ]
Chatvervollständigungen
Im folgenden Beispiel wird gezeigt, wie Gedankensignaturen in einem Workflow mit parallelen Funktionsaufrufen mithilfe der Chat Completions API verarbeitet werden.
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>" } }, "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" } ] }
Runde 1, Schritt 2 (Nutzerantwort – Senden von Toolausgaben)
Sie müssen <SIGNATURE_A> im ersten Teil genau so beibehalten, wie Sie es erhalten haben.
"messages": [ { "role": "user", "content": "Check the weather in Paris and London." }, { "role": "assistant", "tool_calls": [ { "extra_content": { "google": { "thought_signature": "<SIGNATURE_A>" } }, "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" } ] }, { "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\"}" } ]
Signaturen in Parts, die nicht von functionCall stammen
Gemini kann auch im letzten Part einer Antwort ein thought_signature zurückgeben, selbst wenn kein Funktionsaufruf vorhanden ist.
- Verhalten: Der endgültige Inhalt
Part(text,inlineDatausw.), der vom Modell zurückgegeben wird, kann einenthought_signatureenthalten. - Anforderung: Es wird empfohlen, diese Signatur zurückzugeben, damit das Modell eine hohe Qualität bei der Argumentation beibehält, insbesondere bei komplexen Anweisungen oder simulierten agentischen Workflows.
- Validierung: Die API erzwingt nicht strikt die Validierung von Signaturen in Nicht-
functionCall-Teilen. Wenn Sie sie weglassen, erhalten Sie keinen blockierenden Fehler, aber die Leistung kann beeinträchtigt werden.
Beispiel für eine Modellantwort mit Signatur im Textteil:
Die folgenden Beispiele zeigen eine Modellantwort, bei der ein thought_signature in einem Nicht-functionCall-Part enthalten ist, und wie Sie damit in einer nachfolgenden Anfrage umgehen.
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) } ] }
Turn 2, Step 1 (user)
[ { "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." }] } ]
Beispiel für die Multi-Turn-Bildbearbeitung mit Thought Signatures
In den folgenden Beispielen wird gezeigt, wie Sie bei der Multi-Turn-Bilderstellung und ‑bearbeitung mit Gemini 3 Pro Image Gedankensignaturen abrufen und übergeben.
Runde 1: Antwort abrufen und Daten speichern, die Gedankensignaturen enthalten
chat = client.chats.create( model="gemini-3-pro-image-preview", config=types.GenerateContentConfig( response_modalities=['TEXT', 'IMAGE'] ) ) message = "Create an image of a clear perfume bottle sitting on a vanity." response = chat.send_message(message) data = b'' for part in response.candidates[0].content.parts: if part.text: display(Markdown(part.text)) if part.inline_data: data = part.inline_data.data display(Image(data=data, width=500))
Runde 2: Daten mit Gedankensignaturen übergeben
response = chat.send_message( message=[ types.Part.from_bytes( data=data, mime_type="image/png", ), "Make the perfume bottle purple and add a vase of hydrangeas next to the bottle.", ], ) for part in response.candidates[0].content.parts: if part.text: display(Markdown(part.text)) if part.inline_data: display(Image(data=part.inline_data.data, width=500))
Nächste Schritte
Thinking
Informationen zu den Denkfähigkeiten von Gemini und zum Konfigurieren von Denkaufwand
Leitfaden für Thinking-Prompts
Hier finden Sie Prompt-Engineering-Techniken und Best Practices, die auf Gemini-Thinking-Modelle zugeschnitten sind.
Einführung in Funktionsaufrufe
Hier erfahren Sie, wie Sie Gemini-Modelle so konfigurieren, dass sie bei der Antwortgenerierung mithilfe von Funktionsaufrufen externe Tools verwenden.