توقيعات الأفكار

توقيعات الأفكار هي تمثيلات مشفّرة لعملية التفكير الداخلية التي يجريها النموذج، وتُستخدَم للحفاظ على سياق الاستدلال في التفاعلات المتعددة الخطوات. عند استخدام نماذج التفكير (مثل سلسلة Gemini 3 و2.5)، قد تعرض واجهة برمجة التطبيقات الحقل thoughtSignature ضمن أجزاء المحتوى في الردّ (مثلاً text أو functionCall جزءًا).

كقاعدة عامة، إذا تلقّيت توقيعًا فكريًا في ردّ نموذجي، عليك إعادة إرساله تمامًا كما تلقّيته عند إرسال سجلّ المحادثة في الدور التالي. عند استخدام نماذج Gemini 3، يجب إعادة توقيعات الفكرة أثناء استدعاء الدالة، وإلا سيظهر لك خطأ في التحقّق من الصحة (رمز الحالة 4xx). ويشمل ذلك استخدام إعداد minimal مستوى التفكير في Gemini 3 Flash.

آلية العمل

يوضّح الرسم البياني أدناه معنى "الدورة" و "الخطوة" في ما يتعلق باستدعاء الدوال البرمجية في Gemini API. "الدورة" هي تبادل واحد وكامل في محادثة بين مستخدم ونموذج. "الخطوة" هي إجراء أو عملية أكثر دقة ينفّذها النموذج، وغالبًا ما تكون جزءًا من عملية أكبر لإكمال دورة المحادثة.

مخطّط بياني يوضّح خطوات استدعاء الدالة

يركّز هذا المستند على التعامل مع استدعاء الدوال في نماذج Gemini 3. يُرجى الرجوع إلى قسم سلوك النموذج لمعرفة التناقضات مع الإصدار 2.5.

تعرض Gemini 3 توقيعات الأفكار لجميع ردود النموذج (الردود من واجهة برمجة التطبيقات) مع طلب دالة. تظهر توقيعات الأفكار في الحالات التالية:

  • عندما تكون هناك طلبات دوال متوازية، سيحتوي الجزء الأول من طلب الدالة الذي تعرضه استجابة النموذج على توقيع فكري.
  • عندما تكون هناك طلبات متسلسلة لاستدعاء الدوال (متعددة الخطوات)، سيكون لكل طلب استدعاء دالة توقيع، ويجب إعادة جميع التواقيع.
  • ستعرض ردود النموذج التي لا تتضمّن استدعاء دالة توقيعًا فكريًا داخل الجزء الأخير الذي يعرضه النموذج.

يوضّح الجدول التالي تمثيلاً مرئيًا لعمليات استدعاء الدوال المتعدّدة الخطوات، حيث يجمع بين تعريفات الأدوار والخطوات ومفهوم التوقيعات المقدَّم أعلاه:

انعطِف

Step

طلب المستخدم

ردّ النموذج

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) ( التي تمثّل بداية الدور الحالي). لن be هذا functionResponse.
    • يتم اعتبار جميع منعطفات النموذج functionCall التي تحدث بعد رسالة الاستخدام المحددة هذه جزءًا من المنعطف.
    • يجب أن يتضمّن الجزء الأول من functionCall في كل خطوة من الدور الحالي thought_signature.
    • إذا حذفت thought_signature للجزء الأول functionCall في أي خطوة من خطوات المحادثة الحالية، سيتعذّر تنفيذ الطلب وسيظهر الخطأ 400.
  • في حال عدم عرض التواقيع الصحيحة، إليك كيفية ظهور الخطأ
    • gemini-3-pro-preview وgemini-3-flash-preview: سيؤدي عدم تضمين التوقيعات إلى ظهور الخطأ 400. سيكون الصياغة على النحو التالي:
      • يفتقد استدعاء الدالة <Function Call> في كتلة المحتوى <index of contents array> إلى thought_signature. على سبيل المثال، استدعاء الدالة FC1 في حظر المحتوى 1. لا يتضمّن thought_signature.

مثال على استدعاء الدوال بالتسلسل

يعرض هذا القسم مثالاً على طلبات متعددة لاستدعاء الدوال، حيث يطرح المستخدم سؤالاً معقّدًا يتطلّب تنفيذ مهام متعددة.

لنتعرّف على مثال على عملية استدعاء دالة متعددة الأدوار حيث يطرح المستخدم سؤالاً معقّدًا يتطلّب تنفيذ مهام متعددة: "Check flight status for AA100 and book a taxi if delayed".

انعطِف

Step

طلب المستخدم

ردّ النموذج

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" معرفة الأماكن التي يجري فيها النموذج عملية التحقّق من صحة البيانات.

انعطِف

Step

طلب المستخدم

ردّ النموذج

FunctionResponse

1

1

request1="التحقّق من حالة الطقس في باريس ولندن"

FC1 ("باريس") + التوقيع

FC2 ("London")

FR1

1

2

الطلب 2 = الطلب 1 + FC1 ("باريس") + التوقيع + FC2 ("لندن")

text_output

(بدون 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.
  • الاقتراح: يُنصح بإرجاع هذه التواقيع لضمان الحفاظ على جودة عالية في عملية الاستنتاج التي يجريها النموذج، خاصةً في ما يتعلّق بالمهام المعقّدة التي تتطلّب اتّباع التعليمات أو محاكاة سير العمل المستند إلى الوكلاء.
  • التحقّق من الصحة: لا تفرض واجهة برمجة التطبيقات التحقّق من الصحة بشكل صارم. ولن يظهر لك خطأ حظر إذا لم تدرجها، ولكن قد ينخفض الأداء.

النص/الاستدلال في السياق (بدون التحقّق من الصحة)

الجولة 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

توضّح الأمثلة التالية كيفية التعامل مع توقيعات الأفكار لواجهة برمجة تطبيقات لإكمال المحادثة باستخدام التوافق مع OpenAI.

مثال على استدعاء الدوال بالتسلسل

هذا مثال على استخدام أدوات متعددة في آن واحد، حيث يطرح المستخدم سؤالاً معقّدًا يتطلّب تنفيذ مهام متعددة.

لنتعرّف على مثال على استخدام وظائف متعددة الأدوار حيث يسأل المستخدم Check flight status for AA100 and book a taxi if delayed ويمكنك الاطّلاع على ما يحدث عندما يطرح المستخدم سؤالاً معقّدًا يتطلّب تنفيذ مهام متعددة.

انعطِف

Step

طلب المستخدم

ردّ النموذج

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 (طلب المستخدم)

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

الجولة 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 (بدون نص جديد)، سنبقى في الدور 1 ويجب الاحتفاظ بـ <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" ويمكنك الاطّلاع على المكان الذي يجري فيه النموذج عملية التحقّق.

انعطِف

Step

طلب المستخدم

ردّ النموذج

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 3 مع جزء من استدعاء دالة في الخطوة الحالية؟ هل يجب تقديم أجزاء من استدعاء الدالة لم تنشئها واجهة برمجة التطبيقات وبالتالي ليس لديها توقيع فكري مرتبط بها؟

    مع أنّنا لا ننصح بشدة بإدخال كتل مخصّصة لاستدعاء الدوال في الطلب، يمكنك ضبط التوقيعات الوهمية التالية "context_engineering_is_the_way_to_go" أو "skip_thought_signature_validator" في حقل توقيع الفكرة لتخطّي عملية التحقّق في الحالات التي لا يمكن تجنُّب ذلك فيها، مثلاً عند تقديم معلومات للنموذج حول استدعاءات الدوال والردود التي نفّذها العميل بشكل حتمي، أو عند نقل عملية تتبُّع من نموذج مختلف لا يتضمّن توقيعات الأفكار.

  2. أرسلُ طلبات استدعاء دالات متوازية متداخلة وردودًا، ويعرض واجهة برمجة التطبيقات رمز الحالة 400. ما السبب؟

    عندما تعرض واجهة برمجة التطبيقات استدعاءات دالات متوازية "FC1 + التوقيع، FC2"، تكون استجابة المستخدم المتوقّعة هي "FC1 + التوقيع، FC2، FR1، FR2". إذا كانت البيانات متداخلة على النحو التالي: "FC1 + التوقيع، FR1، FC2، FR2"، ستعرض واجهة برمجة التطبيقات الخطأ 400.

  3. عند البث وعدم عرض النموذج لطلب دالة، لا يمكنني العثور على توقيع الفكرة

    خلال استجابة نموذج لا تتضمّن مكالمة وظيفة مع طلب بث، قد يعرض النموذج توقيع الفكرة في جزء يتضمّن جزءًا فارغًا من محتوى النص. يُنصح بتحليل الطلب بأكمله إلى أن يعرض النموذج finish_reason.

توقيعات الأفكار لنماذج مختلفة

تتصرّف نماذج Gemini 3 Pro وFlash وGemini 3 Pro Image وGemini 2.5 بشكل مختلف مع التوقيعات الفكرية. للاطّلاع على معلومات حول Gemini 3 Pro Image، يُرجى الانتقال إلى قسم عملية التفكير في دليل إنشاء الصور.

تختلف طريقة عمل نماذج Gemini 3 ونماذج Gemini 2.5 مع توقيعات الأفكار في استدعاءات الدوال:

  • إذا كانت هناك استدعاءات دالة في الرد،
    • سيحتوي Gemini 3 دائمًا على التوقيع في الجزء الأول من استدعاء الدالة. ويجب إرجاع هذا الجزء.
    • سيتضمّن Gemini 2.5 التوقيع في الجزء الأول (بغض النظر عن النوع). اختياري إرجاع هذا الجزء.
  • إذا لم تتضمّن الاستجابة أي طلبات وظائف،
    • سيحتوي Gemini 3 على التوقيع في الجزء الأخير إذا أنشأ النموذج فكرة.
    • لن يتضمّن Gemini 2.5 توقيعًا في أي جزء.

لمعرفة المزيد عن سلوك التوقيع الفكري في نماذج Gemini 2.5، يُرجى الرجوع إلى صفحة التفكير.