חתימות של מחשבות

חתימות מחשבה הן ייצוגים מוצפנים של תהליך החשיבה הפנימי של המודל, והן משמשות לשמירה על הקשר של הנימוקים במהלך אינטראקציות מרובות שלבים. כשמשתמשים במודלים של חשיבה (כמו סדרות 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

(no FCs)

ללא

חתימות בחלקים של בקשות להפעלת פונקציות

כש-Gemini יוצר functionCall, הוא מסתמך על thought_signature כדי לעבד את הפלט של הכלי בצורה נכונה בפעם הבאה.

  • התנהגות:
    • קריאה אחת להפעלת פונקציה: החלק functionCall יכיל thought_signature.
    • קריאות להפעלת פונקציות במקביל: אם המודל יוצר קריאות להפעלת פונקציות במקביל בתשובה, ה-thought_signature מצורף רק לחלק הראשון של functionCall. חלקים עוקבים של functionCall באותה תשובה לא יכילו חתימה.
  • דרישה: כששולחים בחזרה את היסטוריית השיחה, חובה להחזיר את החתימה הזו בדיוק בחלק שבו היא התקבלה.
  • אימות: מתבצע אימות קפדני של כל הבקשות להפעלת פונקציות בתור הנוכחי . (נדרש רק התור הנוכחי, אנחנו לא מאמתים את התור הקודם)
    • ה-API חוזר אחורה בהיסטוריה (מהחדש ביותר לישן ביותר) כדי למצוא את ההודעה האחרונה של המשתמש שמכילה תוכן רגיל (למשל, text) ( שתהיה תחילת התור הנוכחי). הוא לא be functionResponse.
    • כל התורות של מודל All functionCall שמתרחשות אחרי הודעת השימוש הספציפית הזו נחשבות לחלק מהתור.
    • החלק הראשון functionCall בכל שלב של התור הנוכחי חייב לכלול את thought_signature שלו.
    • אם לא תציינו thought_signature בחלק הראשון של functionCall בכל שלב של התור הנוכחי, הבקשה תיכשל ותוצג שגיאת 400.
  • אם לא מוחזרות חתימות תקינות, כך תופיע השגיאה
    • מודלים של Gemini 3: אם לא תכללו חתימות, תופיע שגיאת 400. הניסוח יהיה בפורמט הבא:
      • בבקשה להפעלת פונקציה <Function Call> בבלוק התוכן <index of contents array> חסר thought_signature. לדוגמה, Function call FC1 in the 1. content block is missing a thought_signature.

דוגמה לשרשרת קריאות להפעלת פונקציות

בקטע הזה מוצגת דוגמה לכמה בקשות להפעלת פונקציה, שבה המשתמש שואל שאלה מורכבת שדורשת כמה משימות.

בואו נראה דוגמה לשימוש בקריאה להפעלת פונקציות עם כמה תפניות שיחה, שבה המשתמש שואל שאלה מורכבת שדורשת כמה משימות: "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

(no FCs)

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

(no FCs)

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

FC2 ("London")

FR1

1

2

request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") text_output

(no FCs)

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\"}"
    }
  ]

שאלות נפוצות

  1. איך מעבירים את ההיסטוריה ממודל אחר ל-Gemini 4 או ל-Gemini 3 עם חלק של בקשה להפעלת פונקציה בסבב ובשלב הנוכחיים? אני צריך לספק חלקים של בקשה להפעלת פונקציה שלא נוצרו על ידי ה-API, ולכן אין להם חתימת מחשבה משויכת?

    אנחנו ממליצים מאוד לא להוסיף לבקשה בלוקים של בקשות להפעלת פונקציות בהתאמה אישית. עם זאת, במקרים שבהם אי אפשר להימנע מכך, למשל כשמספקים למודל מידע על בקשות להפעלת פונקציות ותגובות שהלקוח הפעיל באופן דטרמיניסטי, או כשמעבירים מעקב ממודל אחר שלא כולל חתימות מחשבה, אפשר להגדיר את החתימות הדמה הבאות של "context_engineering_is_the_way_to_go" או "skip_thought_signature_validator" בשדה של חתימת המחשבה כדי לדלג על האימות.

  2. אני שולח קריאות להפעלת פונקציות במקביל ותשובות שזורים, וה-API מחזיר 400. למה?

    כשה-API מחזיר קריאה להפעלת פונקציות במקביל FC1 + signature, FC2, התגובה הצפויה מהמשתמש היא FC1+ signature, FC2, FR1, FR2. אם הם משולבים בצורה כזו: "FC1 + חתימה, FR1,‏ FC2,‏ FR2", ה-API יחזיר שגיאת 400.

  3. בזמן סטרימינג, כשהמודל לא מחזיר בקשה להפעלת פונקציה, אני לא מוצא את חתימת החשיבה

    במהלך תשובה של מודל שלא מכילה קריאה לפונקציה עם בקשת סטרימינג, המודל עשוי להחזיר את חתימת החשיבה בחלק עם תוכן טקסט ריק. מומלץ לנתח את כל הבקשה עד שהמודל מחזיר את 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, עיינו בקטע "תהליך החשיבה" במדריך יצירת תמונות.