امضاهای فکری نمایشهای رمزگذاریشده از فرایند فکری داخلی مدل هستند و برای حفظ بافت استدلال در تعاملات چندمرحلهای استفاده میشوند.
هنگام استفاده از مدلهای تفکر (مثل سری Gemini 4، 3، و 2.5)، ممکن است «میانای برنامه کاربردی» فیلد thoughtSignature را در بخشهای محتوای پاسخ برگرداند (برای نمونه، بخشهای text یا functionCall).
بهعنوان یک قانون کلی، اگر در پاسخ مدل امضای فکری دریافت کردید،
باید آن را دقیقاً همانطور که دریافت کردهاید هنگام ارسال سابقه مکالمه
در نوبت بعدی برگردانید.
هنگام استفاده از مدلهای Gemini 4 و Gemini 3، باید امضاهای فکری را درطول فراخوانی تابع برگردانید، درغیراینصورت خطای اعتبارسنجی (کد وضعیت 4xx) دریافت خواهید کرد.
این شامل زمانی میشود که از تنظیم minimal
سطح اندیشیدن برای Gemini 3
Flash استفاده میکنید.
روش کار
گرافیک زیر معنی «نوبت» و «مرحله» را در ارتباط با فراخوانی تابع در Gemini API نشان میدهد. «نوبت» یک تبادل کامل و تکی در مکالمه بین کاربر و مدل است. «گام» کنش یا عملیات دقیقتری است که توسط مدل انجام میشود، اغلب بهعنوان بخشی از فرایند بزرگتر برای تکمیل یک نوبت.

این سند بر مدیریت فراخوانی تابع برای مدلهای Gemini 4 و Gemini 3 تمرکز دارد. برای مشاهده تفاوتهای مدل ۲.۵، به بخش رفتار مدل مراجعه کنید.
Gemini 4 و Gemini 3 امضاهای فکری را برای همه پاسخهای مدل (پاسخهای دریافتی از میانای برنامهسازی کاربردی) با فراخوانی تابع برمیگردانند. امضاهای فکری در موارد زیر نمایش داده میشوند:
- وقتی تابع موازی فراخوانی میشود، اولین بخش فراخوانی تابع که توسط پاسخ مدل برگردانده میشود دارای امضای فکری خواهد بود.
- وقتی فراخوانیهای متوالی تابع (چندمرحلهای) وجود دارد، هر فراخوانی تابع امضایی خواهد داشت و باید همه امضاها را برگردانید.
- پاسخهای مدل بدون فراخوانی تابع، امضای فکری را در آخرین بخش برگشتی از مدل برمیگرداند.
جدول زیر نمایشی دیداری از فراخوانیهای تابع چندمرحلهای ارائه میدهد، تعریفهای نوبت و مرحله را با مفهوم امضاهای معرفیشده در بالا ترکیب میکند:
نوبت |
مرحله |
درخواست کاربر |
پاسخ مدل |
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در همان پاسخ فاقد امضا خواهد بود.
- فراخوانی تابع تکی: بخش
- الزام: هنگام ارسال سابقه مکالمه، باید این امضا را دقیقاً در همان بخشی که دریافت شده است برگردانید.
- اعتبارسنجی: اعتبارسنجی دقیق برای همه فراخوانیهای تابع در نوبت فعلی اعمال میشود . (فقط نوبت فعلی لازم است؛ نوبتهای قبلی را اعتبارسنجی نمیکنیم)
- این میانای برنامهسازی کاربردی در سابقه (جدیدترین تا قدیمیترین) به عقب برمیگردد تا جدیدترین پیام کاربر را که حاوی محتوای استاندارد است (برای نمونه،
text) پیدا کند (که شروع نوبت فعلی خواهد بود). اینfunctionResponsebe. - همه مدل
functionCallنوبتهایی که پساز آن استفاده خاص از پیام رخ میدهد بخشی از نوبت درنظر گرفته میشود. - اولین بخش
functionCallدر هر مرحله از نوبت فعلی باید شاملthought_signatureآن باشد. - اگر
thought_signatureرا برایfunctionCallبخش اول در هر مرحله از نوبت فعلی حذف کنید، درخواست با خطای ۴۰۰ ناموفق خواهد بود.
- این میانای برنامهسازی کاربردی در سابقه (جدیدترین تا قدیمیترین) به عقب برمیگردد تا جدیدترین پیام کاربر را که حاوی محتوای استاندارد است (برای نمونه،
- اگر امضاهای مناسب برنگردد، در اینجا نحوه بروز خطا را مشاهده خواهید کرد
- مدلهای Gemini 3: عدم درج امضاها منجر به خطای ۴۰۰ میشود. عبارت به این شکل خواهد بود:
- فراخوانی تابع
<Function Call>در بلوک محتوای<index of contents array>فاقدthought_signatureاست. برای مثال، Function callFC1در بلوک محتوای1.فاقدthought_signatureاست.
- فراخوانی تابع
- مدلهای Gemini 3: عدم درج امضاها منجر به خطای ۴۰۰ میشود. عبارت به این شکل خواهد بود:
مثال فراخوانی متوالی توابع
این بخش نمونهای از چندین فراخوانی تابع را نشان میدهد که در آن کاربر سؤالی پیچیده میپرسد که به چندین تکلیف نیاز دارد.
بیایید یک نمونه فراخوانی تابع چندنوبتی را بررسی کنیم که در آن کاربر
سؤال پیچیدهای میپرسد که به چند تکلیف نیاز دارد: "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 |
کد زیر توالی جدول بالا را نشان میدهد.
نوبت ۱، مرحله ۱ (درخواست کاربر)
{
"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"
]
}
}
]
}
]
}
نوبت ۱، مرحله ۱ (پاسخ مدل)
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "check_flight",
"args": {
"flight": "AA100"
}
},
"thoughtSignature": "<Signature A>"
}
]
}
}
نوبت ۱، مرحله ۲ (پاسخ کاربر - ارسال بروندادهای ابزار) چون این نوبت کاربر فقط حاوی functionResponse است (بدون نوشتار تازه)، هنوز در نوبت ۱ هستیم. باید <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"
}
}
}
]
}
نوبت ۱، مرحله ۲ (مدل) مدل اکنون براساس برونداد ابزار قبلی تصمیم میگیرد تاکسی رزرو کند.
{
"content": {
"role": "model",
"parts": [
{
"functionCall": {
"name": "book_taxi",
"args": {
"time": "10 AM"
}
},
"thoughtSignature": "<Signature B>"
}
]
}
}
نوبت ۱، مرحله ۳ (کاربر - ارسال خروجی ابزار) برای ارسال تأییدیه رزرو تاکسی، باید امضاهای همه فراخوانیهای تابع را در این حلقه (<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 («پاریس») + امضا FC2 («لندن») |
FR1 |
1 |
2 |
request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") |
text_output (بدون FC) |
هیچکدام |
کد زیر توالی را در جدول بالا نشان میدهد.
نوبت ۱، مرحله ۱ (درخواست کاربر)
{
"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"
]
}
}
]
}
]
}
نوبت ۱، مرحله ۱ (پاسخ مدل)
{
"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
}
}
]
}
}
Turn 1, Step 2 (User response - Sending tool outputs) We must preserve
<Signature_A> on the first part exactly as received.
[
{
"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باشد. - توصیه: برگرداندن این امضاها توصیه میشود تا اطمینان حاصل شود که مدل استدلال با کیفیت بالا را حفظ میکند، بهویژه برای دستورالعملهای پیچیده یا گردشهای کار شبیهسازیشده.
- اعتبارسنجی: میانای برنامهسازی کاربردی اعتبارسنجی را بهطور دقیق اجرا نمیکند. اگر آنها را حذف کنید، خطای مسدودسازی دریافت نخواهید کرد، اما ممکن است عملکرد کاهش یابد.
استدلال متنی/درونبافتی (بدون اعتبارسنجی)
نوبت ۱، مرحله ۱ (پاسخ مدل)
{
"role": "model",
"parts": [
{
"text": "I need to calculate the risk. Let me think step-by-step...",
"thought_signature": "<Signature_C>" // OPTIONAL (Recommended)
}
]
}
نوبت ۲، مرحله ۱ (کاربر)
[
{ "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
مثالهای زیر نحوه مدیریت امضاهای فکری برای یک API تکمیل گپ را بااستفاده از سازگاری با OpenAI نشان میدهد.
نمونه فراخوانی متوالی توابع
این نمونهای از فراخوانی چند تابع است که در آن کاربر سؤالی پیچیده میپرسد که به چندین کار نیاز دارد.
بیایید یک مثال از فراخوانی تابع چندنوبتی را بررسی کنیم که در آن کاربر میپرسد
Check flight status for AA100 and book a taxi if delayed و میتوانید ببینید وقتی کاربر سؤال پیچیدهای میپرسد که به چند کار نیاز دارد چه اتفاقی میافتد.
نوبت |
مرحله |
درخواست کاربر |
پاسخ مدل |
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 |
کد زیر توالی دادهشده را نشان میدهد.
نوبت ۱، مرحله ۱ (درخواست کاربر)
{
"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"
]
}
}
}
]
}
نوبت ۱، مرحله ۱ (پاسخ مدل)
{
"role": "model",
"tool_calls": [
{
"extra_content": {
"google": {
"thought_signature": "<Signature A>"
}
},
"function": {
"arguments": "{\"flight\":\"AA100\"}",
"name": "check_flight"
},
"id": "function-call-1",
"type": "function"
}
]
}
نوبت ۱، مرحله ۲ (پاسخ کاربر - ارسال بروندادهای ابزار)
ازآنجاییکه این نوبت کاربر فقط حاوی 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\"}"
}
]
نوبت ۱، مرحله ۲ (مدل)
اکنون مدل تصمیم میگیرد براساس برونداد ابزار قبلی، تاکسی رزرو کند.
{
"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"
}
]
}
نوبت ۱، مرحله ۳ (کاربر - ارسال خروجی ابزار)
برای ارسال تأییدیه رزرو تاکسی، باید امضاهای مربوط به همه فراخوانیهای تابع را در این حلقه (<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 |
کد پیمایش توالی دادهشده در اینجا است.
نوبت ۱، مرحله ۱ (درخواست کاربر)
{
"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"
]
}
}
]
}
]
}
نوبت ۱، مرحله ۱ (پاسخ مدل)
{
"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
}
]
}
نوبت ۱، مرحله ۲ (پاسخ کاربر - ارسال بروندادهای ابزار)
باید <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 کد ۴۰۰ را برمیگرداند. چرا؟
وقتی «میانای برنامهسازی کاربردی» فراخوانیهای تابع موازی «FC1 + امضا، FC2» را برمیگرداند، پاسخ موردانتظار کاربر «FC1 + امضا، FC2، FR1، FR2» است. اگر آنها را بهصورت «FC1 + signature, FR1, FC2, FR2» درهمبافته کنید، API خطای ۴۰۰ برمیگرداند.
هنگام جاریسازی و زمانی که مدل فراخوانی تابع را برنمیگرداند، نمیتوانم امضای فکر را پیدا کنم
درطول پاسخ مدل که حاوی FC با درخواست جاریسازی نباشد، مدل ممکن است امضای فکر را در بخشی با محتوای نوشتاری خالی برگرداند. توصیه میشود کل درخواست را تجزیه کنید تا زمانی که
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، بخش فرایند اندیشیدن در راهنمای تولید تصویر را ببینید.