सोच के हस्ताक्षर

थॉट सिग्नेचर, मॉडल की इंटरनल थॉट प्रोसेस के एन्क्रिप्ट (सुरक्षित) किए गए वर्शन होते हैं. इनका इस्तेमाल, एक से ज़्यादा बार बातचीत करने के दौरान तर्क के कॉन्टेक्स्ट को बनाए रखने के लिए किया जाता है. सोचने वाले मॉडल (जैसे, Gemini 3 और 2.5 सीरीज़) का इस्तेमाल करते समय, एपीआई जवाब के कॉन्टेंट के हिस्सों में thoughtSignature फ़ील्ड दिखा सकता है. उदाहरण के लिए, text या functionCall हिस्से).

सामान्य नियम के तौर पर, अगर आपको मॉडल के जवाब में थॉट सिग्नेचर मिलता है, तो आपको उसे अगले टर्न में बातचीत का इतिहास भेजते समय, ठीक उसी तरह वापस भेजना चाहिए जिस तरह से वह मिला था. Gemini 3 Pro का इस्तेमाल करते समय, फ़ंक्शन कॉल करने के दौरान आपको थॉट सिग्नेचर वापस भेजने होंगे. ऐसा न करने पर, आपको पुष्टि करने से जुड़ी गड़बड़ी का मैसेज मिलेगा (4xx स्टेटस कोड).

यह कैसे काम करता है

नीचे दिए गए ग्राफ़िक में, Gemini API में फ़ंक्शन कॉलिंग से जुड़े "टर्न" और "चरण" का मतलब बताया गया है. "टर्न" का मतलब, उपयोगकर्ता और मॉडल के बीच हुई बातचीत में एक बार में किया गया पूरा एक्सचेंज होता है. "स्टेप" एक बारीक कार्रवाई या ऑपरेशन होता है, जिसे मॉडल पूरा करता है. अक्सर, यह किसी टर्न को पूरा करने के लिए, बड़ी प्रोसेस का हिस्सा होता है.

फ़ंक्शन कॉल करने के टर्न और चरणों का डायग्राम

इस दस्तावेज़ में, Gemini 3 Pro के लिए फ़ंक्शन कॉलिंग को मैनेज करने के बारे में बताया गया है. 2.5 के साथ अंतर के लिए, मॉडल के व्यवहार सेक्शन देखें.

Gemini 3 Pro, फ़ंक्शन कॉल के साथ मॉडल के सभी जवाबों (एपीआई से मिले जवाब) के लिए थॉट सिग्नेचर दिखाता है. सोच से जुड़े सिग्नेचर इन मामलों में दिखते हैं:

  • जब पैरलल फ़ंक्शन कॉल होते हैं, तो मॉडल के जवाब से मिले पहले फ़ंक्शन कॉल वाले हिस्से में थॉट सिग्नेचर होगा.
  • जब फ़ंक्शन को क्रम से कॉल किया जाता है (एक से ज़्यादा चरण), तो हर फ़ंक्शन कॉल का एक सिग्नेचर होता है. आपको सभी सिग्नेचर वापस भेजने होंगे.
  • फ़ंक्शन कॉल के बिना मॉडल के जवाबों में, मॉडल से मिले जवाब के आखिरी हिस्से में थॉट सिग्नेचर दिखेगा.

यहां दी गई टेबल में, एक से ज़्यादा चरणों वाले फ़ंक्शन कॉल का विज़ुअलाइज़ेशन दिया गया है. इसमें, ऊपर बताई गई बातों को शामिल किया गया है. जैसे, बातचीत के मोड़ और चरणों की परिभाषाओं को सिग्नेचर के कॉन्सेप्ट के साथ जोड़ना:

चालू करें

चरण

उपयोगकर्ता का अनुरोध

मॉडल का जवाब

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 भी शामिल होना चाहिए.
    • अगर मौजूदा बातचीत के किसी भी चरण में, पहले functionCall हिस्से के लिए thought_signature को शामिल नहीं किया जाता है, तो अनुरोध पूरा नहीं होगा और आपको 400 गड़बड़ी का मैसेज मिलेगा.
  • अगर सही सिग्नेचर नहीं मिलते हैं, तो यहां बताया गया है कि आपको गड़बड़ी का मैसेज कैसे दिखेगा
    • gemini-3-pro-preview: हस्ताक्षर शामिल न करने पर, 400 गड़बड़ी दिखेगी. सूचना इस फ़ॉर्मैट में होगी :
      • <index of contents array> कॉन्टेंट ब्लॉक में मौजूद <Function Call> फ़ंक्शन कॉल में thought_signature मौजूद नहीं है. उदाहरण के लिए, 1. कॉन्टेंट ब्लॉक में फ़ंक्शन कॉल FC1 में thought_signature मौजूद नहीं है.

फ़ंक्शन को क्रम से कॉल करने का उदाहरण

इस सेक्शन में, फ़ंक्शन कॉल के कई उदाहरण दिए गए हैं. इनमें उपयोगकर्ता एक ऐसा मुश्किल सवाल पूछता है जिसके लिए कई टास्क पूरे करने पड़ते हैं.

फ़ंक्शन कॉलिंग के एक ऐसे उदाहरण पर नज़र डालते हैं जिसमें उपयोगकर्ता को कई बार जवाब देना होता है. इसमें उपयोगकर्ता एक ऐसा जटिल सवाल पूछता है जिसके लिए कई टास्क पूरे करने होते हैं: "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

यहां दिया गया कोड, ऊपर दी गई टेबल में दिए गए क्रम को दिखाता है.

पहला टर्न, पहला चरण (उपयोगकर्ता का अनुरोध)

{
  "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" से यह पूछता है कि मॉडल कहां पुष्टि करता है.

चालू करें

चरण

उपयोगकर्ता का अनुरोध

मॉडल का जवाब

FunctionResponse

1

1

request1="पेरिस और लंदन के मौसम की जानकारी दो"

FC1 ("Paris") + हस्ताक्षर

FC2 ("London")

FR1

1

2

अनुरोध 2 = अनुरोध 1 + FC1 ("Paris") + हस्ताक्षर + FC2 ("London")

text_output

(कोई फ़ॉन्ट कलेक्शन नहीं है)

कोई नहीं

यहां दिया गया कोड, ऊपर दी गई टेबल में दिए गए क्रम को दिखाता है.

पहला टर्न, पहला चरण (उपयोगकर्ता का अनुरोध)

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

पहला जवाब, दूसरा चरण (उपयोगकर्ता का जवाब - टूल के आउटपुट भेजना) हमें पहले हिस्से में <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 शामिल हो सकता है.
  • सुझाव: इन सिग्नेचर को वापस लाने का सुझाव दिया जाता है, ताकि यह पक्का किया जा सके कि मॉडल अच्छी क्वालिटी के साथ जवाब दे. खास तौर पर, निर्देशों का पालन करने या एजेंट के तौर पर काम करने से जुड़े वर्कफ़्लो को सिम्युलेट करने के लिए.
  • पुष्टि करना: एपीआई, पुष्टि करने की प्रोसेस को सख्ती से लागू नहीं करता है. अगर आपने इन कुकी को शामिल नहीं किया है, तो आपको ब्लॉक करने से जुड़ी गड़बड़ी का मैसेज नहीं मिलेगा. हालांकि, ऐसा करने से परफ़ॉर्मेंस खराब हो सकती है.

टेक्स्ट/संदर्भ के हिसाब से तर्क (पुष्टि नहीं की गई)

पहला जवाब, पहला चरण (मॉडल का जवाब)

{
  "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 के साथ काम करने के लिए सिग्नेचर

यहां दिए गए उदाहरण में, OpenAI के साथ काम करने की सुविधा का इस्तेमाल करके, चैट पूरी करने वाले एपीआई के लिए थॉट सिग्नेचर को मैनेज करने का तरीका बताया गया है.

फ़ंक्शन को क्रम से कॉल करने का उदाहरण

यह एक से ज़्यादा फ़ंक्शन कॉल करने का उदाहरण है. इसमें उपयोगकर्ता एक ऐसा मुश्किल सवाल पूछता है जिसके लिए कई टास्क पूरे करने पड़ते हैं.

आइए, फ़ंक्शन कॉलिंग के एक ऐसे उदाहरण पर नज़र डालें जिसमें कई बार बातचीत की गई है. इसमें उपयोगकर्ता ने Check flight status for AA100 and book a taxi if delayed पूछा है. साथ ही, यह भी देखा जा सकता है कि जब उपयोगकर्ता कोई ऐसा मुश्किल सवाल पूछता है जिसके लिए कई टास्क पूरे करने पड़ते हैं, तो क्या होता है.

चालू करें

चरण

उपयोगकर्ता का अनुरोध

मॉडल का जवाब

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

नीचे दिया गया कोड, दिए गए क्रम के हिसाब से काम करता है.

पहला जवाब, पहला चरण (उपयोगकर्ता का अनुरोध)

{
  "model": "google/gemini-3-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"
          ]
        }
      }
    }
  ]
}

पहला जवाब, पहला चरण (मॉडल का जवाब)

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

टर्न 1, तीसरा चरण (उपयोगकर्ता - टूल का आउटपुट भेजना)

टैक्सी बुकिंग की पुष्टि करने के लिए, हमें इस लूप (<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" पूछता है और आपको पता चलता है कि मॉडल कहां पुष्टि करता है.

चालू करें

चरण

उपयोगकर्ता का अनुरोध

मॉडल का जवाब

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 3 Pro में कैसे ट्रांसफ़र करूं? इसके लिए, मौजूदा टर्न और चरण में फ़ंक्शन कॉल वाला हिस्सा होना चाहिए. मुझे फ़ंक्शन कॉल के ऐसे हिस्से देने हैं जो एपीआई ने जनरेट नहीं किए हैं. इसलिए, उनसे जुड़ा कोई थॉट सिग्नेचर नहीं है. क्या ऐसा करना ज़रूरी है?

    अनुरोध में कस्टम फ़ंक्शन कॉल ब्लॉक शामिल करने का सुझाव नहीं दिया जाता. हालांकि, कुछ मामलों में ऐसा करना ज़रूरी हो सकता है. जैसे, क्लाइंट की ओर से फ़ंक्शन कॉल और जवाबों के बारे में मॉडल को जानकारी देना या किसी ऐसे मॉडल से ट्रेस ट्रांसफ़र करना जिसमें थॉट सिग्नेचर शामिल नहीं हैं. ऐसे मामलों में, थॉट सिग्नेचर फ़ील्ड में "context_engineering_is_the_way_to_go" या "skip_thought_signature_validator" के ये डमी सिग्नेचर सेट किए जा सकते हैं, ताकि पुष्टि करने की प्रोसेस को स्किप किया जा सके.

  2. I am sending back interleaved parallel function calls and responses and the API is returning a 400. क्यों?

    जब एपीआई, पैरलल फ़ंक्शन कॉल "FC1 + हस्ताक्षर, FC2" दिखाता है, तो उपयोगकर्ता से "FC1+ हस्ताक्षर, FC2, FR1, FR2" जवाब मिलने की उम्मीद होती है. अगर आपने उन्हें "FC1 + हस्ताक्षर, FR1, FC2, FR2" के तौर पर इंटरलीव किया है, तो एपीआई 400 गड़बड़ी दिखाएगा.

  3. स्ट्रीमिंग के दौरान, मॉडल से फ़ंक्शन कॉल नहीं मिल रहा है. साथ ही, मुझे थॉट सिग्नेचर नहीं मिल रहा है

    स्ट्रीमिंग के अनुरोध के साथ, मॉडल के जवाब में फ़ंक्शन कॉल (एफ़सी) शामिल न होने पर, मॉडल, टेक्स्ट कॉन्टेंट वाले खाली हिस्से में थॉट सिग्नेचर दिखा सकता है. हमारा सुझाव है कि जब तक मॉडल finish_reason नहीं दिखाता, तब तक पूरे अनुरोध को पार्स करें.

मॉडल सीरीज़ के हिसाब से, जवाब देने के तरीके की पहचान करना

फ़ंक्शन कॉल में, Gemini 3 Pro और Gemini 2.5 मॉडल, थॉट सिग्नेचर के साथ अलग-अलग तरीके से काम करते हैं:

  • अगर किसी जवाब में फ़ंक्शन कॉल मौजूद हैं, तो
    • Gemini 3 Pro, फ़ंक्शन कॉल के पहले हिस्से पर हमेशा हस्ताक्षर करेगा. उस हिस्से को वापस लाना ज़रूरी है.
    • Gemini 2.5 के पहले हिस्से में हस्ताक्षर मौजूद होगा. इससे कोई फ़र्क़ नहीं पड़ता कि हस्ताक्षर किस तरह का है. उस हिस्से को वापस करना ज़रूरी नहीं है.
  • अगर किसी जवाब में फ़ंक्शन कॉल नहीं हैं, तो
    • अगर मॉडल कोई जवाब जनरेट करता है, तो Gemini 3 Pro के जवाब के आखिर में हस्ताक्षर होगा.
    • Gemini 2.5 के किसी भी हिस्से में हस्ताक्षर नहीं होगा.

Gemini 2.5 मॉडल के थॉट सिग्नेचर के बारे में जानने के लिए, सोचना पेज पर जाएं.