חתימות מחשבה הן ייצוגים מוצפנים של תהליך החשיבה הפנימי של המודל, והן משמשות לשמירה על הקשר של הנימוקים במהלך אינטראקציות מרובות שלבים.
כשמשתמשים במודלים של חשיבה (כמו סדרות Gemini 4, 3 ו-2.5), יכול להיות שה-API יחזיר שדה thoughtSignature בתוך חלקי התוכן של התגובה (למשל, חלקים text או functionCall).
ככלל, אם אתם מקבלים חתימת חשיבה בתשובה מהמודל, אתם צריכים להעביר אותה בחזרה בדיוק כמו שקיבלתם אותה כשאתם שולחים את היסטוריית השיחות בפנייה הבאה.
כשמשתמשים במודלים של Gemini 4 ו-Gemini 3, צריך להעביר חתימות מחשבה במהלך קריאה להפעלת פונקציות, אחרת תתקבל שגיאת אימות (קוד סטטוס 4xx).
זה כולל את השימוש בהגדרה minimal
רמת החשיבה ב-Gemini 3
Flash.
איך זה עובד
התרשים הבא ממחיש את המשמעות של "תור" ו "שלב" בהקשר של בקשות להפעלת פונקציות ב-Gemini API. "תור" הוא חילופי דברים מלאים בשיחה בין משתמש לבין מודל. "שלב" הוא פעולה או מבצע ברמה מפורטת יותר שהמודל מבצע, בדרך כלל כחלק מתהליך גדול יותר להשלמת סבב שיחה.

המאמר הזה מתמקד בטיפול בבקשות להפעלת פונקציות במודלים Gemini 4 ו-Gemini 3. בקטע התנהגות המודל מפורטים ההבדלים בין המודלים.
Gemini 4 ו-Gemini 3 מחזירים חתימות חשיבה לכל התשובות של המודל (תשובות מה-API) עם בקשה להפעלת פונקציה. חתימות של מחשבות מופיעות במקרים הבאים:
- כשיש קריאות להפעלת פונקציות במקביל, החלק הראשון של הקריאה להפעלת פונקציה שמוחזר בתגובה של המודל יכלול חתימת מחשבה.
- כשיש שרשרת קריאות להפעלת פונקציות (בכמה שלבים), לכל קריאה להפעלת פונקציה תהיה חתימה, וצריך להחזיר את כל החתימות.
- בתשובות של המודל שלא כוללות בקשה להפעלת פונקציה, חתימת החשיבה תוחזר בחלק האחרון של התשובה.
בטבלה הבאה מוצגת המחשה של קריאה להפעלת פונקציות מרובות שלבים, שמשלבת את ההגדרות של תורות ושלבים עם המושג של חתימות שהוצג למעלה:
Turn |
שלב |
בקשת משתמש |
תשובה מהמודל |
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
|
ללא |
חתימות בחלקים של בקשות להפעלת פונקציות
כש-Gemini יוצר functionCall, הוא מסתמך על thought_signature כדי לעבד את הפלט של הכלי בצורה נכונה בפעם הבאה.
- התנהגות:
- קריאה אחת להפעלת פונקציה: החלק
functionCallיכילthought_signature. - קריאות להפעלת פונקציות במקביל: אם המודל יוצר קריאות להפעלת פונקציות במקביל בתשובה, ה-
thought_signatureמצורף רק לחלק הראשון שלfunctionCall. חלקים עוקבים שלfunctionCallבאותה תשובה לא יכילו חתימה.
- קריאה אחת להפעלת פונקציה: החלק
- דרישה: כששולחים בחזרה את היסטוריית השיחה, חובה להחזיר את החתימה הזו בדיוק בחלק שבו היא התקבלה.
- אימות: מתבצע אימות קפדני של כל הבקשות להפעלת פונקציות בתור הנוכחי . (נדרש רק התור הנוכחי, אנחנו לא מאמתים את התור הקודם)
- ה-API חוזר אחורה בהיסטוריה (מהחדש ביותר לישן ביותר) כדי למצוא את ההודעה האחרונה של המשתמש שמכילה תוכן רגיל (למשל,
text) ( שתהיה תחילת התור הנוכחי). הוא לא befunctionResponse. - כל התורות של מודל All
functionCallשמתרחשות אחרי הודעת השימוש הספציפית הזו נחשבות לחלק מהתור. - החלק הראשון
functionCallבכל שלב של התור הנוכחי חייב לכלול אתthought_signatureשלו. - אם לא תציינו
thought_signatureבחלק הראשון שלfunctionCallבכל שלב של התור הנוכחי, הבקשה תיכשל ותוצג שגיאת 400.
- ה-API חוזר אחורה בהיסטוריה (מהחדש ביותר לישן ביותר) כדי למצוא את ההודעה האחרונה של המשתמש שמכילה תוכן רגיל (למשל,
- אם לא מוחזרות חתימות תקינות, כך תופיע השגיאה
- מודלים של Gemini 3: אם לא תכללו חתימות, תופיע שגיאת 400. הניסוח יהיה בפורמט הבא:
- בבקשה להפעלת פונקציה
<Function Call>בבלוק התוכן<index of contents array>חסרthought_signature. לדוגמה, Function callFC1in the1.content block is missing athought_signature.
- בבקשה להפעלת פונקציה
- מודלים של Gemini 3: אם לא תכללו חתימות, תופיע שגיאת 400. הניסוח יהיה בפורמט הבא:
דוגמה לשרשרת קריאות להפעלת פונקציות
בקטע הזה מוצגת דוגמה לכמה בקשות להפעלת פונקציה, שבה המשתמש שואל שאלה מורכבת שדורשת כמה משימות.
בואו נראה דוגמה לשימוש בקריאה להפעלת פונקציות עם כמה תפניות שיחה, שבה המשתמש שואל שאלה מורכבת שדורשת כמה משימות: "Check flight status for AA100 and
book a taxi if delayed".
Turn |
שלב |
בקשת משתמש |
תשובה מהמודל |
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 |
הקוד הבא ממחיש את הרצף בטבלה שלמעלה.
תור 1, שלב 1 (בקשת המשתמש)
{
"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"
]
}
}
]
}
]
}
תור 1, שלב 1 (תשובה לדוגמה)
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>"
}
]
}
}
תור 1, שלב 2 (תגובת המשתמש – שליחת פלט של כלי) מכיוון שהתור הזה של המשתמש מכיל רק functionResponse (ללא טקסט חדש), אנחנו עדיין בתור 1. אנחנו חייבים לשמר את <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"
}
}
}
]
}
פנייה 1, שלב 2 (מודל) המודל מחליט להזמין מונית על סמך הפלט הקודם של הכלי.
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>"
}
]
}
}
פנייה 1, שלב 3 (משתמש – שליחת פלט של כלי) כדי לשלוח את אישור הזמנת המונית, אנחנו צריכים לכלול חתימות לכל בקשות להפעלת פונקציות בלולאה הזו (<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"
}
}
}
]
}
}
דוגמה לקריאה להפעלת פונקציות במקביל
בואו נראה דוגמה לקריאה להפעלת פונקציות במקביל שבה המשתמשים מבקשים מ-"Check weather in Paris and London" לראות איפה המודל מבצע אימות.
Turn |
שלב |
בקשת משתמש |
תשובה מהמודל |
FunctionResponse |
|---|---|---|---|---|
1 |
1 |
request1="Check the weather in Paris and London" |
FC1 ("Paris") + signature FC2 ("לונדון") |
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output (no FCs) |
ללא |
הקוד הבא ממחיש את הרצף בטבלה שלמעלה.
תור 1, שלב 1 (בקשת המשתמש)
{
"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"
]
}
}
]
}
]
}
תור 1, שלב 1 (תשובה לדוגמה)
{
"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
}
}
]
}
}
תור 1, שלב 2 (תגובת המשתמש – שליחת תוצאות של כלי) אנחנו צריכים לשמור על
<Signature_A> בחלק הראשון בדיוק כמו שהוא התקבל.
[
{
"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"
}
}
}
]
}
]
חתימות בחלקים שאינם functionCall
יכול להיות ש-Gemini יחזיר גם thought_signatures בחלק האחרון של התשובה בחלקים שלא קשורים לקריאה לפונקציה.
- התנהגות: החלק האחרון של התוכן (
text, inlineData…) שהמודל מחזיר יכול להכילthought_signature. - המלצה: מומלץ להחזיר את החתימות האלה כדי לוודא שהמודל שומר על חשיבה איכותית, במיוחד במשימות מורכבות של מילוי הוראות או סימולציה של Agentic Workflows.
- אימות: ממשק ה-API לא אוכף אימות באופן מחמיר. לא תופיע הודעת שגיאה אם תשמיטו אותם, אבל יכול להיות שהביצועים יהיו פחות טובים.
הסקת מסקנות מטקסט או מהקשר (ללא אימות)
תור 1, שלב 1 (תשובת המודל)
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
"thought_signature": "<Signature_C>" // OPTIONAL (Recommended)
}
]
}
תור 2, שלב 1 (משתמש)
[
{ "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." }] }
]
חתימות לתאימות ל-OpenAI
בדוגמאות הבאות מוסבר איך לטפל בחתימות של תהליכי חשיבה ב-Chat Completion API באמצעות תאימות ל-OpenAI.
דוגמה לשרשרת קריאות להפעלת פונקציות
זו דוגמה לקריאה להפעלת פונקציות מרובות, שבה המשתמש שואל שאלה מורכבת שדורשת כמה משימות.
בדוגמה הבאה נראה שימוש ב<ph name="PH_FUNCTION_CALLING">קריאה להפעלת פונקציות</ph> עם כמה תפניות שיחה. המשתמש שואל Check flight status for AA100 and book a taxi if delayed ואפשר לראות מה קורה כשהמשתמש שואל שאלה מורכבת שדורשת כמה משימות.
Turn |
שלב |
בקשת משתמש |
תשובה מהמודל |
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 |
הקוד הבא מציג את הרצף הנתון.
תור 1, שלב 1 (בקשת המשתמש)
{
"model": "google/gemini-4-argon",
"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"
]
}
}
}
]
}
פנייה 1, שלב 1 (תשובת המודל)
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>"
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
}
אינטראקציה 1, שלב 2 (תגובת המשתמש – שליחת פלט מהכלים)
מכיוון שהפנייה הזו של המשתמש מכילה רק functionResponse (בלי טקסט חדש), אנחנו עדיין בפנייה הראשונה וצריכים לשמור את <Signature_A>.
"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\"}"
}
]
אינטראקציה 1, שלב 2 (מודל)
עכשיו המודל מחליט להזמין מונית על סמך הפלט הקודם של הכלי.
{
"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"
}
]
}
תור 1, שלב 3 (משתמש – שליחת פלט של כלי)
כדי לשלוח את אישור הזמנת המונית, אנחנו צריכים לכלול חתימות לכל בקשות להפעלת פונקציה בלולאה הזו (<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\"}"
}
]
דוגמה לקריאה להפעלת פונקציות במקביל
בואו נראה דוגמה לקריאה להפעלת פונקציות במקביל, שבה המשתמש שואל "Check weather in Paris and London" ואפשר לראות איפה המודל מבצע אימות.
Turn |
שלב |
בקשת משתמש |
תשובה מהמודל |
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 |
הנה הקוד להרצת הרצף הנתון.
תור 1, שלב 1 (בקשת משתמש)
{
"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"
]
}
}
]
}
]
}
פנייה 1, שלב 1 (תשובת המודל)
{
"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
}
]
}
אינטראקציה 1, שלב 2 (תגובת המשתמש – שליחת פלט מהכלים)
צריך לשמור על <Signature_A> בחלק הראשון בדיוק כמו שקיבלת אותו.
"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\"}"
}
]
שאלות נפוצות
איך מעבירים את ההיסטוריה ממודל אחר ל-Gemini 4 או ל-Gemini 3 עם חלק של בקשה להפעלת פונקציה בסבב ובשלב הנוכחיים? אני צריך לספק חלקים של בקשה להפעלת פונקציה שלא נוצרו על ידי ה-API, ולכן אין להם חתימת מחשבה משויכת?
אנחנו ממליצים מאוד לא להוסיף לבקשה בלוקים של בקשות להפעלת פונקציות בהתאמה אישית. עם זאת, במקרים שבהם אי אפשר להימנע מכך, למשל כשמספקים למודל מידע על בקשות להפעלת פונקציות ותגובות שהלקוח הפעיל באופן דטרמיניסטי, או כשמעבירים מעקב ממודל אחר שלא כולל חתימות מחשבה, אפשר להגדיר את החתימות הדמה הבאות של
"context_engineering_is_the_way_to_go"או"skip_thought_signature_validator"בשדה של חתימת המחשבה כדי לדלג על האימות.אני שולח קריאות להפעלת פונקציות במקביל ותשובות שזורים, וה-API מחזיר 400. למה?
כשה-API מחזיר קריאה להפעלת פונקציות במקביל FC1 + signature, FC2, התגובה הצפויה מהמשתמש היא FC1+ signature, FC2, FR1, FR2. אם הם משולבים בצורה כזו: "FC1 + חתימה, FR1, FC2, FR2", ה-API יחזיר שגיאת 400.
בזמן סטרימינג, כשהמודל לא מחזיר בקשה להפעלת פונקציה, אני לא מוצא את חתימת החשיבה
במהלך תשובה של מודל שלא מכילה קריאה לפונקציה עם בקשת סטרימינג, המודל עשוי להחזיר את חתימת החשיבה בחלק עם תוכן טקסט ריק. מומלץ לנתח את כל הבקשה עד שהמודל מחזיר את
finish_reason.
חתימות חשיבה במודלים שונים
המודלים Gemini 4, Gemini 3 ו-Gemini 2.5 מתנהגים אחרת עם חתימות חשיבה בקריאות להפעלת פונקציות:
- אם יש קריאות לפונקציות בתשובה,
- ב-Gemini 4 וב-Gemini 3, החתימה תמיד תהיה בחלק הראשון של הבקשה להפעלת הפונקציה. חובה להחזיר את החלק הזה.
- ב-Gemini 2.5, החתימה תהיה בחלק הראשון (בלי קשר לסוג). לא חובה להחזיר את החלק הזה.
- אם אין קריאות לפונקציות בתשובה,
- אם המודל יוצר מחשבה, החתימה של Gemini 4 ו-Gemini 3 תופיע בחלק האחרון.
- ל-Gemini 2.5 לא תהיה חתימה באף חלק.
פרטים נוספים על ההשוואה זמינים בדף חשיבה. במודלים של Gemini 3 Image, עיינו בקטע "תהליך החשיבה" במדריך יצירת תמונות.