امضاهای فکری

امضاهای فکری نمایش‌های رمزگذاری‌شده از فرایند فکری داخلی مدل هستند و برای حفظ بافت استدلال در تعاملات چندمرحله‌ای استفاده می‌شوند. هنگام استفاده از مدل‌های تفکر (مثل سری 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

(no FCs)

هیچ‌کدام

امضاها در بخش‌های فراخوانی تابع

وقتی Gemini یک functionCall تولید می‌کند، به thought_signature متکی است تا برونداد ابزار را به‌درستی در نوبت بعدی پردازش کند.

  • رفتار:
    • فراخوانی تابع تکی: بخش functionCall حاوی thought_signature خواهد بود.
    • فراخوانی‌های تابع موازی: اگر مدل فراخوانی‌های تابع موازی را در یک پاسخ تولید کند، thought_signature فقط به بخش اول functionCall متصل می‌شود. بخش‌های بعدی functionCall در همان پاسخ فاقد امضا خواهد بود.
  • الزام: هنگام ارسال سابقه مکالمه، باید این امضا را دقیقاً در همان بخشی که دریافت شده است برگردانید.
  • اعتبارسنجی: اعتبارسنجی دقیق برای همه فراخوانی‌های تابع در نوبت فعلی اعمال می‌شود . (فقط نوبت فعلی لازم است؛ نوبت‌های قبلی را اعتبارسنجی نمی‌کنیم)
    • این میانای برنامه‌سازی کاربردی در سابقه (جدیدترین تا قدیمی‌ترین) به عقب برمی‌گردد تا جدیدترین پیام کاربر را که حاوی محتوای استاندارد است (برای نمونه، text) پیدا کند (که شروع نوبت فعلی خواهد بود). این functionResponse be.
    • همه مدل functionCall نوبت‌هایی که پس‌از آن استفاده خاص از پیام رخ می‌دهد بخشی از نوبت درنظر گرفته می‌شود.
    • اولین بخش functionCall در هر مرحله از نوبت فعلی باید شامل thought_signature آن باشد.
    • اگر thought_signature را برای functionCall بخش اول در هر مرحله از نوبت فعلی حذف کنید، درخواست با خطای ۴۰۰ ناموفق خواهد بود.
  • اگر امضاهای مناسب برنگردد، در اینجا نحوه بروز خطا را مشاهده خواهید کرد
    • مدل‌های Gemini 3: عدم درج امضاها منجر به خطای ۴۰۰ می‌شود. عبارت به این شکل خواهد بود:
      • فراخوانی تابع <Function Call> در بلوک محتوای <index of contents array> فاقد thought_signature است. برای مثال، Function call FC1 در بلوک محتوای 1. فاقد 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

کد زیر توالی جدول بالا را نشان می‌دهد.

نوبت ۱، مرحله ۱ (درخواست کاربر)

{
  "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

(no FCs)

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

FC2 ("London")

FR1

1

2

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

(no FCs)

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

پرسشگان

  1. چگونه سابقه را از مدل دیگری به Gemini 4 یا Gemini 3 با بخش فراخوانی تابع در نوبت و مرحله فعلی منتقل کنم؟ آیا باید بخش‌های فراخوانی تابع را که توسط API تولید نشده‌اند و بنابراین امضای فکری مرتبط ندارند ارائه دهم؟

    درحالی‌که تزریق بلوک‌های فراخوانی تابع سفارشی به درخواست به‌شدت توصیه نمی‌شود، در مواردی که نمی‌توان از آن اجتناب کرد، مثلاً ارائه اطلاعات به مدل درباره فراخوانی‌های تابع و پاسخ‌هایی که به‌طور قطعی توسط مشتری اجرا شده‌اند، یا انتقال یک رد از مدل دیگری که شامل امضاهای فکری نیست، می‌توانید امضاهای ساختگی زیر را از "context_engineering_is_the_way_to_go" یا "skip_thought_signature_validator" در فیلد امضای فکری تنظیم کنید تا اعتبارسنجی را نادیده بگیرید.

  2. من فراخوانی‌ها و پاسخ‌های تابع موازی درهم‌بافته را برمی‌گردانم و API کد ۴۰۰ را برمی‌گرداند. چرا؟

    وقتی «میانای برنامه‌سازی کاربردی» فراخوانی‌های تابع موازی «FC1 + امضا، FC2» را برمی‌گرداند، پاسخ موردانتظار کاربر «FC1 + امضا، FC2،‏ FR1،‏ FR2» است. اگر آن‌ها را به‌صورت «FC1 + signature, FR1, FC2, FR2» درهم‌بافته کنید، API خطای ۴۰۰ برمی‌گرداند.

  3. هنگام جاری‌سازی و زمانی که مدل فراخوانی تابع را برنمی‌گرداند، نمی‌توانم امضای فکر را پیدا کنم

    درطول پاسخ مدل که حاوی 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، بخش فرایند اندیشیدن در راهنمای تولید تصویر را ببینید.