থট সিগনেচার হলো মডেলের অভ্যন্তরীণ চিন্তন প্রক্রিয়ার এনক্রিপ্টেড উপস্থাপনা এবং এটি একাধিক ধাপের মিথস্ক্রিয়া জুড়ে যুক্তির প্রেক্ষাপট সংরক্ষণ করতে ব্যবহৃত হয়। থিঙ্কিং মডেল (যেমন জেমিনি ৩ এবং ২.৫ সিরিজ) ব্যবহার করার সময়, এপিআই রেসপন্সের কন্টেন্ট অংশের (যেমন, text বা functionCall অংশ) মধ্যে একটি thoughtSignature ফিল্ড রিটার্ন করতে পারে।
সাধারণ নিয়ম অনুযায়ী, যদি আপনি কোনো মডেল রেসপন্সে একটি থট সিগনেচার পান, তাহলে পরবর্তী টার্নে কনভারসেশন হিস্ট্রি পাঠানোর সময় সেটি ঠিক যেভাবে পেয়েছেন সেভাবেই ফেরত পাঠাতে হবে। জেমিনি ৩ মডেল ব্যবহার করার সময়, ফাংশন কল করার সময় আপনাকে অবশ্যই থট সিগনেচার ফেরত পাঠাতে হবে, অন্যথায় আপনি একটি ভ্যালিডেশন এরর (4xx স্ট্যাটাস কোড) পাবেন । জেমিনি ৩ ফ্ল্যাশের জন্য minimal থিংকিং লেভেল সেটিং ব্যবহার করার ক্ষেত্রেও এটি প্রযোজ্য।
এটি কীভাবে কাজ করে
নিচের গ্রাফিকটিতে জেমিনি এপিআই-তে ফাংশন কলিং-এর ক্ষেত্রে 'টার্ন' এবং 'স্টেপ'-এর অর্থ তুলে ধরা হয়েছে। একটি 'টার্ন' হলো একজন ব্যবহারকারী এবং একটি মডেলের মধ্যে কথোপকথনের একটি একক, সম্পূর্ণ আদান-প্রদান। একটি 'স্টেপ' হলো মডেল দ্বারা সম্পাদিত একটি আরও সূক্ষ্ম কাজ বা প্রক্রিয়া, যা প্রায়শই একটি 'টার্ন' সম্পূর্ণ করার বৃহত্তর প্রক্রিয়ার অংশ হিসেবে করা হয়।

এই ডকুমেন্টটি জেমিনি ৩ মডেলের ফাংশন কলিং পরিচালনার উপর আলোকপাত করে। ২.৫-এর সাথে অসামঞ্জস্যের জন্য মডেল আচরণ বিভাগটি দেখুন।
জেমিনি ৩ একটি ফাংশন কলের মাধ্যমে সমস্ত মডেল প্রতিক্রিয়ার (এপিআই থেকে প্রাপ্ত প্রতিক্রিয়া) জন্য চিন্তার স্বাক্ষর ফেরত দেয়। নিম্নলিখিত ক্ষেত্রে চিন্তার স্বাক্ষর দেখা যায়:
- যখন সমান্তরাল ফাংশন কল থাকে, তখন মডেল রেসপন্স দ্বারা ফেরত আসা প্রথম ফাংশন কল অংশটিতে একটি থট সিগনেচার থাকবে।
- যখন একাধিক ধাপে ফাংশন কল করা হয়, তখন প্রতিটি ফাংশন কলের একটি সিগনেচার থাকবে এবং আপনাকে অবশ্যই সমস্ত সিগনেচার ফেরত পাঠাতে হবে।
- ফাংশন কল ছাড়া মডেলের প্রতিক্রিয়াগুলো, মডেল দ্বারা ফেরত দেওয়া শেষ অংশের ভিতরে একটি চিন্তার স্বাক্ষর ফেরত দেবে।
নিম্নলিখিত সারণিটি, উপরে উল্লিখিত সিগনেচার ধারণার সাথে টার্ন ও স্টেপ-এর সংজ্ঞাগুলোকে একত্রিত করে, বহু-ধাপ ফাংশন কলের একটি চিত্ররূপ প্রদান করে:
পালা | ধাপ | ব্যবহারকারীর অনুরোধ | মডেলের প্রতিক্রিয়া | ফাংশন প্রতিক্রিয়া |
১ | ১ | request1 = user_prompt | FC1 + signature | FR1 |
১ | ২ | request2 = request1 + (FC1 + signature) + FR1 | FC2 + signature | FR2 |
১ | ৩ | request3 = request2 + (FC2 + signature) + FR2 | text_output(কোনও FC নেই) | কোনোটিই না |
ফাংশন কলিং অংশে স্বাক্ষর
যখন জেমিনি একটি functionCall তৈরি করে, তখন পরবর্তী টার্নে টুলটির আউটপুট সঠিকভাবে প্রক্রিয়া করার জন্য এটি thought_signature এর উপর নির্ভর করে।
- আচরণ :
- একক ফাংশন কল :
functionCallঅংশে একটিthought_signatureথাকবে। - সমান্তরাল ফাংশন কল : যদি মডেলটি কোনো রেসপন্সে সমান্তরাল ফাংশন কল তৈরি করে, তাহলে
thought_signatureশুধুমাত্র প্রথমfunctionCallঅংশের সাথে সংযুক্ত থাকে। একই রেসপন্সের পরবর্তীfunctionCallঅংশগুলোতে কোনো সিগনেচার থাকবে না ।
- একক ফাংশন কল :
- শর্ত : কথোপকথনের ইতিহাস ফেরত পাঠানোর সময়, আপনাকে অবশ্যই এই স্বাক্ষরটি ঠিক সেই অংশেই ফেরত দিতে হবে যেখানে এটি পাওয়া গিয়েছিল।
- যাচাইকরণ : বর্তমান টার্নের মধ্যে করা সমস্ত ফাংশন কলের জন্য কঠোর যাচাইকরণ প্রয়োগ করা হয়। (শুধুমাত্র বর্তমান টার্নই যথেষ্ট; আমরা পূর্ববর্তী টার্নগুলো যাচাই করি না)
- এপিআইটি ইতিহাসে (নতুন থেকে পুরানো) পিছনে গিয়ে সবচেয়ে সাম্প্রতিক ব্যবহারকারীর বার্তাটি খুঁজে বের করে, যেটিতে সাধারণ বিষয়বস্তু (যেমন,
text) রয়েছে (যা বর্তমান পালার শুরু হবে)। এটি একটিfunctionResponseহবে না। - ঐ নির্দিষ্ট ব্যবহার বার্তার পরে সংঘটিত সমস্ত মডেল
functionCallটার্ন সেই টার্নের অংশ হিসেবে বিবেচিত হয়। - বর্তমান টার্নের প্রতিটি ধাপের প্রথম
functionCallঅংশে অবশ্যই এরthought_signatureঅন্তর্ভুক্ত থাকতে হবে। - বর্তমান টার্নের যেকোনো ধাপে প্রথম
functionCallঅংশে যদি আপনি একটিthought_signatureবাদ দেন, তাহলে অনুরোধটি 400 এরর সহ ব্যর্থ হবে।
- এপিআইটি ইতিহাসে (নতুন থেকে পুরানো) পিছনে গিয়ে সবচেয়ে সাম্প্রতিক ব্যবহারকারীর বার্তাটি খুঁজে বের করে, যেটিতে সাধারণ বিষয়বস্তু (যেমন,
- যদি সঠিক সিগনেচার ফেরত না আসে, তাহলে এইভাবে এরর দেখা দেবে।
- জেমিনি ৩ মডেল: স্বাক্ষর অন্তর্ভুক্ত করতে ব্যর্থ হলে একটি 400 ত্রুটি দেখা দেবে। ভাষাটি নিম্নরূপ হবে:
-
<index of contents array>কন্টেন্ট ব্লকের অন্তর্গত<Function Call>ফাংশন কলে একটিthought_signatureনেই। উদাহরণস্বরূপ,1.কন্টেন্ট ব্লকের অন্তর্গতFC1ফাংশন কলে একটিthought_signatureনেই।
-
- জেমিনি ৩ মডেল: স্বাক্ষর অন্তর্ভুক্ত করতে ব্যর্থ হলে একটি 400 ত্রুটি দেখা দেবে। ভাষাটি নিম্নরূপ হবে:
ক্রমিক ফাংশন কল করার উদাহরণ
এই অংশে একাধিক ফাংশন কলের একটি উদাহরণ দেখানো হয়েছে, যেখানে ব্যবহারকারী এমন একটি জটিল প্রশ্ন জিজ্ঞাসা করেন যার জন্য একাধিক কাজ করার প্রয়োজন হয়।
চলুন একাধিক ধাপে ফাংশন কল করার একটি উদাহরণ দেখা যাক, যেখানে ব্যবহারকারী একটি জটিল প্রশ্ন জিজ্ঞাসা করেছেন যার জন্য একাধিক কাজ করতে হবে: "Check flight status for AA100 and book a taxi if delayed" ।
পালা | ধাপ | ব্যবহারকারীর অনুরোধ | মডেলের প্রতিক্রিয়া | ফাংশন প্রতিক্রিয়া |
১ | ১ | request1="Check flight status for AA100 and book a taxi 2 hours before if delayed." | FC1 ("check_flight") + signature | FR1 |
১ | ২ | request2 = request1 + FC1 ("check_flight") + signature + FR1 | FC2("book_taxi") + signature | FR2 |
১ | ৩ | request3 = request2 + FC2 ("book_taxi") + signature + FR2 | text_output(কোনও FC নেই) | 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" জিজ্ঞাসা করে, যাতে মডেলটি কোথায় ভ্যালিডেশন করে তা বোঝা যায়।
পালা | ধাপ | ব্যবহারকারীর অনুরোধ | মডেলের প্রতিক্রিয়া | ফাংশন প্রতিক্রিয়া |
|---|---|---|---|---|
১ | ১ | request1="প্যারিস ও লন্ডনের আবহাওয়া দেখুন" | এফসি১ ("প্যারিস") + স্বাক্ষর এফসি২ ("লন্ডন") | FR1 |
১ | ২ | অনুরোধ ২ = অনুরোধ১ + এফসি১ ("প্যারিস") + স্বাক্ষর + এফসি২ ("লন্ডন") | টেক্সট_আউটপুট (কোনও 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
}
}
]
}
}
টার্ন ১, ধাপ ২ (ব্যবহারকারীর প্রতিক্রিয়া - টুলের আউটপুট পাঠানো) আমাদের অবশ্যই প্রথম অংশে <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 অংশগুলিতে স্বাক্ষর
জেমিনি প্রতিক্রিয়ার শেষ অংশে, ফাংশন-কল নয় এমন অংশেও 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 বলেন। এর মাধ্যমে আপনি দেখতে পাবেন, যখন ব্যবহারকারী একাধিক কাজ সম্পন্ন করার মতো একটি জটিল প্রশ্ন করেন তখন কী ঘটে।
পালা | ধাপ | ব্যবহারকারীর অনুরোধ | মডেলের প্রতিক্রিয়া | ফাংশন প্রতিক্রিয়া |
১ | ১ | request1="Check the weather in Paris and London" | FC1 ("Paris") + signatureএফসি২ ("লন্ডন") | FR1 |
১ | ২ | request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") | text_output(কোনও FC নেই) | None |
নিম্নলিখিত কোডটি প্রদত্ত অনুক্রমটি ধাপে ধাপে সম্পন্ন করে।
পালা ১, ধাপ ১ (ব্যবহারকারীর অনুরোধ)
{
"model": "google/gemini-3.1-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"
}
]
}
পালা ১, ধাপ ৩ (ব্যবহারকারী - টুলের আউটপুট প্রেরণ)
ট্যাক্সি বুকিং নিশ্চিতকরণ পাঠাতে, এই লুপের সমস্ত ফাংশন কলে অবশ্যই স্বাক্ষর অন্তর্ভুক্ত করতে হবে ( <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" এবং আপনি দেখতে পাবেন মডেলটি কোথায় ভ্যালিডেশন করে।
পালা | ধাপ | ব্যবহারকারীর অনুরোধ | মডেলের প্রতিক্রিয়া | ফাংশন প্রতিক্রিয়া |
১ | ১ | request1="Check the weather in Paris and London" | FC1 ("Paris") + signatureএফসি২ ("লন্ডন") | FR1 |
১ | ২ | request 2 = request1 + FC1 ("Paris") + signature + FC2 ("London") | text_output(কোনও FC নেই) | 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\"}"
}
]
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
আমি কীভাবে অন্য একটি মডেল থেকে জেমিনি ৩-এ হিস্ট্রি স্থানান্তর করব, যেখানে বর্তমান টার্ন এবং স্টেপে একটি ফাংশন কল পার্ট থাকবে? আমাকে এমন ফাংশন কল পার্ট সরবরাহ করতে হবে যা এপিআই (API) দ্বারা তৈরি হয়নি এবং তাই সেগুলোর সাথে কোনো থট সিগনেচারও যুক্ত নেই।
যদিও রিকোয়েস্টে কাস্টম ফাংশন কল ব্লক যুক্ত করাকে কঠোরভাবে নিরুৎসাহিত করা হয়, তবে যেসব ক্ষেত্রে এটি এড়ানো যায় না, যেমন—ক্লায়েন্ট দ্বারা ডিটারমিনিস্টিকভাবে সম্পাদিত ফাংশন কল এবং রেসপন্স সম্পর্কে মডেলকে তথ্য প্রদান করা, অথবা এমন কোনো ভিন্ন মডেল থেকে ট্রেস স্থানান্তর করা যেখানে থট সিগনেচার অন্তর্ভুক্ত নেই—সেক্ষেত্রে ভ্যালিডেশন এড়িয়ে যাওয়ার জন্য আপনি থট সিগনেচার ফিল্ডে
"context_engineering_is_the_way_to_go"অথবা"skip_thought_signature_validator"এই ডামি সিগনেচারগুলো সেট করতে পারেন।আমি ইন্টারলিভড প্যারালাল ফাংশন কল এবং রেসপন্স ফেরত পাঠাচ্ছি, কিন্তু এপিআইটি একটি 400 রিটার্ন করছে। কেন?
যখন এপিআই "FC1 + signature, FC2" এই ধরনের সমান্তরাল ফাংশন কল রিটার্ন করে, তখন ব্যবহারকারীর কাছ থেকে "FC1+ signature, FC2, FR1, FR2" এই প্রতিক্রিয়া আশা করা হয়। যদি আপনি এগুলিকে "FC1 + signature, FR1, FC2, FR2" এই ক্রমে সাজিয়ে দেন, তাহলে এপিআই একটি 400 এরর রিটার্ন করবে।
স্ট্রিমিং করার সময় এবং মডেলটি কোনো ফাংশন কল রিটার্ন না করলে, আমি থট সিগনেচারটি খুঁজে পাচ্ছি না।
স্ট্রিমিং রিকোয়েস্টের ক্ষেত্রে, যদি মডেলের রেসপন্সে কোনো FC (ফিনিশিং কমান্ড) না থাকে, তবে মডেলটি একটি খালি টেক্সট কন্টেন্ট পার্টের মধ্যে তার থট সিগনেচারটি ফেরত দিতে পারে। মডেল থেকে
finish_reasonফেরত না আসা পর্যন্ত সম্পূর্ণ রিকোয়েস্টটি পার্স করার পরামর্শ দেওয়া হয়।
বিভিন্ন মডেলের জন্য চিন্তার স্বাক্ষর
ফাংশন কলে থট সিগনেচারের ক্ষেত্রে জেমিনি ৩ মডেল এবং জেমিনি ২.৫ মডেল ভিন্নভাবে আচরণ করে:
- যদি কোনো প্রতিক্রিয়ায় ফাংশন কল থাকে,
- জেমিনি ৩-এর প্রথম ফাংশন কল অংশে সর্বদা স্বাক্ষরটি থাকবে। ঐ অংশটি ফেরত দেওয়া বাধ্যতামূলক ।
- জেমিনি ২.৫-এর স্বাক্ষরটি প্রথম অংশে থাকবে (প্রকার নির্বিশেষে)। ঐ অংশটি ফেরত দেওয়া ঐচ্ছিক ।
- যদি কোনো প্রতিক্রিয়ায় ফাংশন কল না থাকে,
- মডেলটি যদি কোনো চিন্তা তৈরি করে, তবে জেমিনি ৩-এর স্বাক্ষরটি শেষ অংশে থাকবে।
- মিথুন ২.৫ এর কোনো অংশেই স্বাক্ষর থাকবে না।
আরও তুলনামূলক বিবরণের জন্য ‘চিন্তা’ পৃষ্ঠাটি দেখুন। জেমিনি ৩ ইমেজ মডেলগুলির জন্য, ইমেজ জেনারেশন গাইডের ‘চিন্তা প্রক্রিয়া’ অংশটি দেখুন।