ফাংশন কলিং আপনাকে মডেলগুলিকে বাহ্যিক সরঞ্জাম এবং API এর সাথে সংযুক্ত করতে দেয়৷ পাঠ্য প্রতিক্রিয়া তৈরি করার পরিবর্তে, মডেলটি বুঝতে পারে কখন নির্দিষ্ট ফাংশনগুলিকে কল করতে হবে এবং বাস্তব-বিশ্বের ক্রিয়াগুলি চালানোর জন্য প্রয়োজনীয় পরামিতিগুলি সরবরাহ করে৷ এটি মডেলটিকে প্রাকৃতিক ভাষা এবং বাস্তব-বিশ্বের ক্রিয়াকলাপ এবং ডেটার মধ্যে সেতু হিসাবে কাজ করার অনুমতি দেয়। ফাংশন কলিং এর 3টি প্রাথমিক ব্যবহারের ক্ষেত্রে রয়েছে:
- জ্ঞান বৃদ্ধি করুন: ডাটাবেস, এপিআই এবং জ্ঞানের ভিত্তির মতো বাহ্যিক উত্স থেকে তথ্য অ্যাক্সেস করুন।
- ক্ষমতা প্রসারিত করুন: গণনা সম্পাদন করতে এবং মডেলের সীমাবদ্ধতা প্রসারিত করতে বাহ্যিক সরঞ্জাম ব্যবহার করুন, যেমন একটি ক্যালকুলেটর ব্যবহার করা বা চার্ট তৈরি করা।
- পদক্ষেপ নিন: APIs ব্যবহার করে বহিরাগত সিস্টেমের সাথে ইন্টারঅ্যাক্ট করুন, যেমন অ্যাপয়েন্টমেন্ট নির্ধারণ করা, চালান তৈরি করা, ইমেল পাঠানো বা স্মার্ট হোম ডিভাইসগুলি নিয়ন্ত্রণ করা
কিভাবে ফাংশন কলিং কাজ করে
ফাংশন কলিং আপনার অ্যাপ্লিকেশন, মডেল এবং বাহ্যিক ফাংশনগুলির মধ্যে একটি কাঠামোগত মিথস্ক্রিয়া জড়িত। এখানে প্রক্রিয়াটির একটি ভাঙ্গন রয়েছে:
- ফাংশন ঘোষণা সংজ্ঞায়িত করুন: আপনার অ্যাপ্লিকেশন কোডে ফাংশন ঘোষণা সংজ্ঞায়িত করুন। ফাংশন ঘোষণাগুলি মডেলের ফাংশনের নাম, পরামিতি এবং উদ্দেশ্য বর্ণনা করে।
- ফাংশন ঘোষণা সহ LLM কল করুন: মডেলটিতে ফাংশন ঘোষণা(গুলি) সহ ব্যবহারকারীর প্রম্পট পাঠান। এটি অনুরোধটি বিশ্লেষণ করে এবং একটি ফাংশন কল সহায়ক হবে কিনা তা নির্ধারণ করে। যদি তাই হয়, এটি একটি কাঠামোগত JSON অবজেক্টের সাথে সাড়া দেয়।
- এক্সিকিউট ফাংশন কোড (আপনার দায়িত্ব): মডেলটি নিজেই ফাংশনটি চালায় না । প্রতিক্রিয়া প্রক্রিয়াকরণ এবং ফাংশন কলের জন্য চেক করার দায়িত্ব আপনার অ্যাপ্লিকেশনের
- হ্যাঁ : ফাংশনের নাম এবং আর্গস বের করুন এবং আপনার অ্যাপ্লিকেশনে সংশ্লিষ্ট ফাংশনটি চালান।
- না: মডেলটি প্রম্পটে সরাসরি পাঠ্য প্রতিক্রিয়া প্রদান করেছে (এই প্রবাহটি উদাহরণে কম জোর দেওয়া হয়েছে তবে এটি একটি সম্ভাব্য ফলাফল)।
- ব্যবহারকারী বান্ধব প্রতিক্রিয়া তৈরি করুন: যদি একটি ফাংশন কার্যকর করা হয়, ফলাফলটি ক্যাপচার করুন এবং কথোপকথনের পরবর্তী মোড়তে এটি মডেলে ফেরত পাঠান। এটি একটি চূড়ান্ত, ব্যবহারকারী-বান্ধব প্রতিক্রিয়া তৈরি করতে ফলাফল ব্যবহার করবে যা ফাংশন কল থেকে তথ্য অন্তর্ভুক্ত করে।
জটিল মিথস্ক্রিয়া এবং কর্মপ্রবাহের জন্য এই প্রক্রিয়াটি একাধিক বাঁক দিয়ে পুনরাবৃত্তি করা যেতে পারে। মডেলটি একক পালা ( সমান্তরাল ফাংশন কলিং ) এবং ক্রমানুসারে ( কম্পোজিশনাল ফাংশন কলিং ) একাধিক ফাংশন কলিং সমর্থন করে।
ধাপ 1: ফাংশন ঘোষণা সংজ্ঞায়িত করুন
আপনার অ্যাপ্লিকেশন কোডের মধ্যে একটি ফাংশন এবং এর ঘোষণা সংজ্ঞায়িত করুন যা ব্যবহারকারীদের হালকা মান সেট করতে এবং একটি API অনুরোধ করতে দেয়। এই ফাংশন বহিরাগত পরিষেবা বা API কল করতে পারে.
from google.genai import types
# Define a function that the model can call to control smart lights
set_light_values_declaration = {
"name": "set_light_values",
"description": "Sets the brightness and color temperature of a light.",
"parameters": {
"type": "object",
"properties": {
"brightness": {
"type": "integer",
"description": "Light level from 0 to 100. Zero is off and 100 is full brightness",
},
"color_temp": {
"type": "string",
"enum": ["daylight", "cool", "warm"],
"description": "Color temperature of the light fixture, which can be `daylight`, `cool` or `warm`.",
},
},
"required": ["brightness", "color_temp"],
},
}
# This is the actual function that would be called based on the model's suggestion
def set_light_values(brightness: int, color_temp: str) -> dict[str, int | str]:
"""Set the brightness and color temperature of a room light. (mock API).
Args:
brightness: Light level from 0 to 100. Zero is off and 100 is full brightness
color_temp: Color temperature of the light fixture, which can be `daylight`, `cool` or `warm`.
Returns:
A dictionary containing the set brightness and color temperature.
"""
return {"brightness": brightness, "colorTemperature": color_temp}
import { Type } from '@google/genai';
// Define a function that the model can call to control smart lights
const setLightValuesFunctionDeclaration = {
name: 'set_light_values',
description: 'Sets the brightness and color temperature of a light.',
parameters: {
type: Type.OBJECT,
properties: {
brightness: {
type: Type.NUMBER,
description: 'Light level from 0 to 100. Zero is off and 100 is full brightness',
},
color_temp: {
type: Type.STRING,
enum: ['daylight', 'cool', 'warm'],
description: 'Color temperature of the light fixture, which can be `daylight`, `cool` or `warm`.',
},
},
required: ['brightness', 'color_temp'],
},
};
/**
* Set the brightness and color temperature of a room light. (mock API)
* @param {number} brightness - Light level from 0 to 100. Zero is off and 100 is full brightness
* @param {string} color_temp - Color temperature of the light fixture, which can be `daylight`, `cool` or `warm`.
* @return {Object} A dictionary containing the set brightness and color temperature.
*/
function setLightValues(brightness, color_temp) {
return {
brightness: brightness,
colorTemperature: color_temp
};
}
ধাপ 2: ফাংশন ঘোষণা সহ মডেল কল করুন
একবার আপনি আপনার ফাংশন ঘোষণা সংজ্ঞায়িত করলে, আপনি মডেলটিকে ফাংশনটি ব্যবহার করার জন্য অনুরোধ করতে পারেন। এটি প্রম্পট এবং ফাংশন ঘোষণা বিশ্লেষণ করে এবং সরাসরি প্রতিক্রিয়া বা একটি ফাংশন কল করার সিদ্ধান্ত নেয়। যদি একটি ফাংশন বলা হয় রেসপন্স অবজেক্টে একটি ফাংশন কল সাজেশন থাকবে।
from google import genai
# Generation Config with Function Declaration
tools = types.Tool(function_declarations=[set_light_values_declaration])
config = types.GenerateContentConfig(tools=[tools])
# Configure the client
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
# Define user prompt
contents = [
types.Content(
role="user", parts=[types.Part(text="Turn the lights down to a romantic level")]
)
]
# Send request with function declarations
response = client.models.generate_content(
model="gemini-2.0-flash", config=config, contents=contents
)
print(response.candidates[0].content.parts[0].function_call)
import { GoogleGenAI } from '@google/genai';
// Generation Config with Function Declaration
const config = {
tools: [{
functionDeclarations: [setLightValuesFunctionDeclaration]
}]
};
// Configure the client
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// Define user prompt
const contents = [
{
role: 'user',
parts: [{ text: 'Turn the lights down to a romantic level' }]
}
];
// Send request with function declarations
const response = await ai.models.generateContent({
model: 'gemini-2.0-flash',
contents: contents,
config: config
});
console.log(response.functionCalls[0]);
মডেলটি তারপরে একটি OpenAPI সামঞ্জস্যপূর্ণ স্কিমাতে একটি functionCall
অবজেক্ট ফেরত দেয় যাতে ব্যবহারকারীর প্রশ্নের উত্তর দেওয়ার জন্য ঘোষিত ফাংশনগুলির একটি বা একাধিক কল করতে হয়।
id=None args={'color_temp': 'warm', 'brightness': 25} name='set_light_values'
{
name: 'set_light_values',
args: { brightness: 25, color_temp: 'warm' }
}
ধাপ 3: set_light_values ফাংশন কোড চালান
মডেলের প্রতিক্রিয়া থেকে ফাংশন কলের বিবরণ বের করুন, আর্গুমেন্ট পার্স করুন এবং আমাদের কোডে set_light_values
ফাংশনটি চালান।
# Extract tool call details
tool_call = response.candidates[0].content.parts[0].function_call
if tool_call.name == "set_light_values":
result = set_light_values(**tool_call.args)
print(f"Function execution result: {result}")
// Extract tool call details
const tool_call = response.functionCalls[0]
let result;
if (tool_call.name === 'set_light_values') {
result = setLightValues(tool_call.args.brightness, tool_call.args.color_temp);
console.log(`Function execution result: ${JSON.stringify(result)}`);
}
ধাপ 4: ফাংশন ফলাফল সহ ব্যবহারকারী বান্ধব প্রতিক্রিয়া তৈরি করুন এবং মডেলটিকে আবার কল করুন
অবশেষে, ফাংশন এক্সিকিউশনের ফলাফলটি মডেলে ফেরত পাঠান যাতে এটি ব্যবহারকারীর কাছে তার চূড়ান্ত প্রতিক্রিয়াতে এই তথ্যটি অন্তর্ভুক্ত করতে পারে।
# Create a function response part
function_response_part = types.Part.from_function_response(
name=tool_call.name,
response={"result": result},
)
# Append function call and result of the function execution to contents
contents.append(types.Content(role="model", parts=[types.Part(function_call=tool_call)])) # Append the model's function call message
contents.append(types.Content(role="user", parts=[function_response_part])) # Append the function response
final_response = client.models.generate_content(
model="gemini-2.0-flash",
config=config,
contents=contents,
)
print(final_response.text)
// Create a function response part
const function_response_part = {
name: tool_call.name,
response: { result }
}
// Append function call and result of the function execution to contents
contents.push({ role: 'model', parts: [{ functionCall: tool_call }] });
contents.push({ role: 'user', parts: [{ functionResponse: function_response_part }] });
// Get the final response from the model
const final_response = await ai.models.generateContent({
model: 'gemini-2.0-flash',
contents: contents,
config: config
});
console.log(final_response.text);
এটি ফাংশন কলিং প্রবাহ সম্পূর্ণ করে। মডেলটি সফলভাবে ব্যবহারকারীর অনুরোধ ক্রিয়া সম্পাদন করতে set_light_values
ফাংশন ব্যবহার করেছে।
ফাংশন ঘোষণা
যখন আপনি একটি প্রম্পটে ফাংশন কলিং প্রয়োগ করেন, আপনি একটি tools
অবজেক্ট তৈরি করেন, যাতে এক বা একাধিক function declarations
থাকে। আপনি JSON ব্যবহার করে ফাংশন সংজ্ঞায়িত করেন, বিশেষত OpenAPI স্কিমা বিন্যাসের একটি নির্বাচিত উপসেটের সাথে। একটি একক ফাংশন ঘোষণা নিম্নলিখিত পরামিতি অন্তর্ভুক্ত করতে পারে:
-
name
(স্ট্রিং): ফাংশনের জন্য একটি অনন্য নাম (get_weather_forecast
,send_email
)। স্পেস বা বিশেষ অক্ষর ছাড়া বর্ণনামূলক নাম ব্যবহার করুন (আন্ডারস্কোর বা ক্যামেলকেস ব্যবহার করুন)। -
description
(স্ট্রিং): ফাংশনের উদ্দেশ্য এবং ক্ষমতাগুলির একটি পরিষ্কার এবং বিশদ ব্যাখ্যা। ফাংশনটি কখন ব্যবহার করতে হবে তা বোঝার জন্য মডেলটির জন্য এটি অত্যন্ত গুরুত্বপূর্ণ। সুনির্দিষ্ট হোন এবং সহায়ক হলে উদাহরণ দিন ("অবস্থানের উপর ভিত্তি করে থিয়েটার খুঁজে বের করে এবং ঐচ্ছিকভাবে সিনেমার শিরোনাম যা বর্তমানে থিয়েটারে চলছে।")। -
parameters
(অবজেক্ট): ফাংশন আশা করে ইনপুট পরামিতি সংজ্ঞায়িত করে।-
type
(স্ট্রিং): সামগ্রিক ডেটা টাইপ নির্দিষ্ট করে, যেমনobject
। -
properties
(অবজেক্ট): পৃথক পরামিতি তালিকাভুক্ত করে, প্রতিটির সাথে:-
type
(স্ট্রিং): প্যারামিটারের ডেটা টাইপ, যেমনstring
,integer
,boolean, array
। -
description
(স্ট্রিং): প্যারামিটারের উদ্দেশ্য এবং বিন্যাসের একটি বিবরণ। উদাহরণ এবং সীমাবদ্ধতা প্রদান করুন ("শহর এবং রাজ্য, যেমন, 'সান ফ্রান্সিসকো, CA' বা একটি পিন কোড যেমন, '95616'।")। -
enum
(অ্যারে, ঐচ্ছিক): যদি প্যারামিটারের মানগুলি একটি নির্দিষ্ট সেট থেকে হয়, তবে শুধুমাত্র বর্ণনায় বর্ণনা করার পরিবর্তে অনুমোদিত মানগুলি তালিকাভুক্ত করতে "enum" ব্যবহার করুন। এটি নির্ভুলতা উন্নত করে ("enum": ["দিবালোক", "ঠান্ডা", "উষ্ণ"])।
-
-
required
(অ্যারে): ফাংশন পরিচালনা করার জন্য বাধ্যতামূলক প্যারামিটার নামের তালিকাভুক্ত স্ট্রিংগুলির একটি অ্যারে।
-
সমান্তরাল ফাংশন কলিং
একক টার্ন ফাংশন কলিং ছাড়াও, আপনি একসাথে একাধিক ফাংশন কল করতে পারেন। সমান্তরাল ফাংশন কলিং আপনাকে একসাথে একাধিক ফাংশন চালাতে দেয় এবং ফাংশনগুলি একে অপরের উপর নির্ভরশীল না হলে ব্যবহার করা হয়। এটি একাধিক স্বাধীন উত্স থেকে ডেটা সংগ্রহ করার মতো পরিস্থিতিতে দরকারী, যেমন বিভিন্ন ডাটাবেস থেকে গ্রাহকের বিবরণ পুনরুদ্ধার করা বা বিভিন্ন গুদাম জুড়ে ইনভেন্টরি স্তর পরীক্ষা করা বা আপনার অ্যাপার্টমেন্টকে একটি ডিস্কোতে রূপান্তর করার মতো একাধিক ক্রিয়া সম্পাদন করা।
power_disco_ball = {
"name": "power_disco_ball",
"description": "Powers the spinning disco ball.",
"parameters": {
"type": "object",
"properties": {
"power": {
"type": "boolean",
"description": "Whether to turn the disco ball on or off.",
}
},
"required": ["power"],
},
}
start_music = {
"name": "start_music",
"description": "Play some music matching the specified parameters.",
"parameters": {
"type": "object",
"properties": {
"energetic": {
"type": "boolean",
"description": "Whether the music is energetic or not.",
},
"loud": {
"type": "boolean",
"description": "Whether the music is loud or not.",
},
},
"required": ["energetic", "loud"],
},
}
dim_lights = {
"name": "dim_lights",
"description": "Dim the lights.",
"parameters": {
"type": "object",
"properties": {
"brightness": {
"type": "number",
"description": "The brightness of the lights, 0.0 is off, 1.0 is full.",
}
},
"required": ["brightness"],
},
}
import { Type } from '@google/genai';
const powerDiscoBall = {
name: 'power_disco_ball',
description: 'Powers the spinning disco ball.',
parameters: {
type: Type.OBJECT,
properties: {
power: {
type: Type.BOOLEAN,
description: 'Whether to turn the disco ball on or off.'
}
},
required: ['power']
}
};
const startMusic = {
name: 'start_music',
description: 'Play some music matching the specified parameters.',
parameters: {
type: Type.OBJECT,
properties: {
energetic: {
type: Type.BOOLEAN,
description: 'Whether the music is energetic or not.'
},
loud: {
type: Type.BOOLEAN,
description: 'Whether the music is loud or not.'
}
},
required: ['energetic', 'loud']
}
};
const dimLights = {
name: 'dim_lights',
description: 'Dim the lights.',
parameters: {
type: Type.OBJECT,
properties: {
brightness: {
type: Type.NUMBER,
description: 'The brightness of the lights, 0.0 is off, 1.0 is full.'
}
},
required: ['brightness']
}
};
একটি নির্দেশনা সহ মডেলটিকে কল করুন যা সমস্ত নির্দিষ্ট সরঞ্জাম ব্যবহার করতে পারে। এই উদাহরণটি একটি tool_config
ব্যবহার করে। আরও জানতে আপনি ফাংশন কলিং কনফিগার করার বিষয়ে পড়তে পারেন।
from google import genai
from google.genai import types
# Set up function declarations
house_tools = [
types.Tool(function_declarations=[power_disco_ball, start_music, dim_lights])
]
config = {
"tools": house_tools,
"automatic_function_calling": {"disable": True},
# Force the model to call 'any' function, instead of chatting.
"tool_config": {"function_calling_config": {"mode": "any"}},
}
# Configure the client
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
chat = client.chats.create(model="gemini-2.0-flash", config=config)
response = chat.send_message("Turn this place into a party!")
# Print out each of the function calls requested from this single call
print("Example 1: Forced function calling")
for fn in response.function_calls:
args = ", ".join(f"{key}={val}" for key, val in fn.args.items())
print(f"{fn.name}({args})")
import { GoogleGenAI } from '@google/genai';
// Set up function declarations
const houseFns = [powerDiscoBall, startMusic, dimLights];
const config = {
tools: [{
functionDeclarations: houseFns
}],
// Force the model to call 'any' function, instead of chatting.
toolConfig: {
functionCallingConfig: {
mode: 'any'
}
}
};
// Configure the client
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// Create a chat session
const chat = ai.chats.create({
model: 'gemini-2.0-flash',
config: config
});
const response = await chat.sendMessage({message: 'Turn this place into a party!'});
// Print out each of the function calls requested from this single call
console.log("Example 1: Forced function calling");
for (const fn of response.functionCalls) {
const args = Object.entries(fn.args)
.map(([key, val]) => `${key}=${val}`)
.join(', ');
console.log(`${fn.name}(${args})`);
}
প্রতিটি মুদ্রিত ফলাফল একটি একক ফাংশন কল প্রতিফলিত করে যা মডেল অনুরোধ করেছে। ফলাফলগুলি ফেরত পাঠাতে, তাদের অনুরোধ করা হয়েছিল একই ক্রমে প্রতিক্রিয়াগুলি অন্তর্ভুক্ত করুন৷
পাইথন SDK স্বয়ংক্রিয় ফাংশন কলিং নামে একটি বৈশিষ্ট্য সমর্থন করে যা পাইথন ফাংশনকে ঘোষণায় রূপান্তর করে, আপনার জন্য ফাংশন কল সম্পাদন এবং প্রতিক্রিয়া চক্র পরিচালনা করে। নিম্নলিখিত আমাদের ডিস্কো ব্যবহারের ক্ষেত্রে একটি উদাহরণ.
from google import genai
from google.genai import types
# Actual implementation functions
def power_disco_ball_impl(power: bool) -> dict:
"""Powers the spinning disco ball.
Args:
power: Whether to turn the disco ball on or off.
Returns:
A status dictionary indicating the current state.
"""
return {"status": f"Disco ball powered {'on' if power else 'off'}"}
def start_music_impl(energetic: bool, loud: bool) -> dict:
"""Play some music matching the specified parameters.
Args:
energetic: Whether the music is energetic or not.
loud: Whether the music is loud or not.
Returns:
A dictionary containing the music settings.
"""
music_type = "energetic" if energetic else "chill"
volume = "loud" if loud else "quiet"
return {"music_type": music_type, "volume": volume}
def dim_lights_impl(brightness: float) -> dict:
"""Dim the lights.
Args:
brightness: The brightness of the lights, 0.0 is off, 1.0 is full.
Returns:
A dictionary containing the new brightness setting.
"""
return {"brightness": brightness}
config = {
"tools": [power_disco_ball_impl, start_music_impl, dim_lights_impl],
}
chat = client.chats.create(model="gemini-2.0-flash", config=config)
response = chat.send_message("Do everything you need to this place into party!")
print("\nExample 2: Automatic function calling")
print(response.text)
# I've turned on the disco ball, started playing loud and energetic music, and dimmed the lights to 50% brightness. Let's get this party started!
কম্পোজিশনাল ফাংশন কলিং
জেমিনি 2.0 কম্পোজিশনাল ফাংশন কলিং সমর্থন করে, যার অর্থ মডেলটি একাধিক ফাংশন কল একসাথে চেইন করতে পারে। উদাহরণস্বরূপ, "আমার বর্তমান অবস্থানে তাপমাত্রা পান" এর উত্তর দিতে, Gemini API একটি get_current_location()
ফাংশন এবং একটি get_weather()
ফাংশন উভয়ই চালু করতে পারে যা অবস্থানটিকে একটি প্যারামিটার হিসাবে নেয়৷
# Light control schemas
turn_on_the_lights_schema = {'name': 'turn_on_the_lights'}
turn_off_the_lights_schema = {'name': 'turn_off_the_lights'}
prompt = """
Hey, can you write run some python code to turn on the lights, wait 10s and then turn off the lights?
"""
tools = [
{'code_execution': {}},
{'function_declarations': [turn_on_the_lights_schema, turn_off_the_lights_schema]}
]
await run(prompt, tools=tools, modality="AUDIO")
// Light control schemas
const turnOnTheLightsSchema = { name: 'turn_on_the_lights' };
const turnOffTheLightsSchema = { name: 'turn_off_the_lights' };
const prompt = `
Hey, can you write run some python code to turn on the lights, wait 10s and then turn off the lights?
`;
const tools = [
{ codeExecution: {} },
{ functionDeclarations: [turnOnTheLightsSchema, turnOffTheLightsSchema] }
];
await run(prompt, tools=tools, modality="AUDIO")
ফাংশন কলিং মোড
Gemini API আপনাকে নিয়ন্ত্রণ করতে দেয় কিভাবে মডেলটি প্রদত্ত টুল (ফাংশন ঘোষণা) ব্যবহার করে। বিশেষত, আপনি function_calling_config
মধ্যে মোড সেট করতে পারেন।
-
AUTO (Default)
: মডেলটি একটি প্রাকৃতিক ভাষা প্রতিক্রিয়া তৈরি করবে বা প্রম্পট এবং প্রসঙ্গের উপর ভিত্তি করে একটি ফাংশন কলের পরামর্শ দেবে কিনা তা সিদ্ধান্ত নেয়৷ এটি সবচেয়ে নমনীয় মোড এবং বেশিরভাগ পরিস্থিতিতে সুপারিশ করা হয়। -
ANY
: মডেলটি সর্বদা একটি ফাংশন কলের পূর্বাভাস দিতে এবং ফাংশন স্কিমা আনুগত্যের গ্যারান্টি দিতে বাধ্য।allowed_function_names
নির্দিষ্ট করা না থাকলে, মডেলটি প্রদত্ত ফাংশন ঘোষণার যেকোনো একটি থেকে বেছে নিতে পারে। যদিallowed_function_names
একটি তালিকা হিসাবে প্রদান করা হয়, মডেলটি শুধুমাত্র সেই তালিকার ফাংশন থেকে বেছে নিতে পারে। প্রতিটি প্রম্পটের প্রতিক্রিয়ায় (যদি প্রযোজ্য হয়) একটি ফাংশন কলের প্রয়োজন হলে এই মোডটি ব্যবহার করুন। NONE
: মডেলটি ফাংশন কল করা থেকে নিষিদ্ধ ৷ এটি কোনো ফাংশন ঘোষণা ছাড়াই একটি অনুরোধ পাঠানোর সমতুল্য। আপনার টুল সংজ্ঞা অপসারণ না করে অস্থায়ীভাবে ফাংশন কলিং অক্ষম করতে এটি ব্যবহার করুন।
from google.genai import types
# Configure function calling mode
tool_config = types.ToolConfig(
function_calling_config=types.FunctionCallingConfig(
mode="ANY", allowed_function_names=["get_current_temperature"]
)
)
# Create the generation config
config = types.GenerateContentConfig(
temperature=0,
tools=[tools], # not defined here.
tool_config=tool_config,
)
import { FunctionCallingConfigMode } from '@google/genai';
// Configure function calling mode
const toolConfig = {
functionCallingConfig: {
mode: FunctionCallingConfigMode.ANY,
allowedFunctionNames: ['get_current_temperature']
}
};
// Create the generation config
const config = {
temperature: 0,
tools: tools, // not defined here.
toolConfig: toolConfig,
};
স্বয়ংক্রিয় ফাংশন কলিং (শুধুমাত্র পাইথন)
পাইথন SDK ব্যবহার করার সময়, আপনি পাইথন ফাংশন সরাসরি টুল হিসাবে প্রদান করতে পারেন। SDK স্বয়ংক্রিয়ভাবে পাইথন ফাংশনকে ঘোষণায় রূপান্তর করে, আপনার জন্য ফাংশন কল এক্সিকিউশন এবং প্রতিক্রিয়া চক্র পরিচালনা করে। পাইথন SDK তারপর স্বয়ংক্রিয়ভাবে:
- মডেল থেকে ফাংশন কল প্রতিক্রিয়া সনাক্ত করে।
- আপনার কোডে সংশ্লিষ্ট পাইথন ফাংশনটি কল করুন।
- ফাংশন প্রতিক্রিয়া মডেলে ফেরত পাঠায়।
- মডেলের চূড়ান্ত পাঠ্য প্রতিক্রিয়া প্রদান করে।
এটি ব্যবহার করতে, টাইপ ইঙ্গিত এবং একটি ডকস্ট্রিং দিয়ে আপনার ফাংশনটি সংজ্ঞায়িত করুন এবং তারপরে একটি টুল হিসাবে ফাংশনটি নিজেই পাস করুন (একটি JSON ঘোষণা নয়):
from google import genai
from google.genai import types
# Define the function with type hints and docstring
def get_current_temperature(location: str) -> dict:
"""Gets the current temperature for a given location.
Args:
location: The city and state, e.g. San Francisco, CA
Returns:
A dictionary containing the temperature and unit.
"""
# ... (implementation) ...
return {"temperature": 25, "unit": "Celsius"}
# Configure the client and model
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY")) # Replace with your actual API key setup
config = types.GenerateContentConfig(
tools=[get_current_temperature]
) # Pass the function itself
# Make the request
response = client.models.generate_content(
model="gemini-2.0-flash",
contents="What's the temperature in London?",
config=config,
)
print(response.text) # The SDK handles the function call and returns the final text
আপনি এর সাথে স্বয়ংক্রিয় ফাংশন কলিং অক্ষম করতে পারেন:
# To disable automatic function calling:
config = types.GenerateContentConfig(
tools=[get_current_temperature],
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True)
)
স্বয়ংক্রিয় ফাংশন স্কিমা ঘোষণা
পাইথন ফাংশন থেকে স্বয়ংক্রিয় স্কিমা নিষ্কাশন সব ক্ষেত্রে কাজ করে না। উদাহরণস্বরূপ: এটি এমন ক্ষেত্রে পরিচালনা করে না যেখানে আপনি একটি নেস্টেড অভিধান-অবজেক্টের ক্ষেত্রগুলি বর্ণনা করেন। API নিম্নলিখিত প্রকারের যে কোনো বর্ণনা করতে সক্ষম:
AllowedType = (int | float | bool | str | list['AllowedType'] | dict[str, AllowedType])
অনুমানকৃত স্কিমাটি দেখতে কেমন তা দেখতে, আপনি from_callable
ব্যবহার করে এটি রূপান্তর করতে পারেন:
def multiply(a: float, b: float):
"""Returns a * b."""
return a * b
fn_decl = types.FunctionDeclaration.from_callable(callable=multiply, client=client)
# to_json_dict() provides a clean JSON representation.
print(fn_decl.to_json_dict())
মাল্টি-টুল ব্যবহার: ফাংশন কলিংয়ের সাথে নেটিভ টুল একত্রিত করুন
Gemini 2.0 এর সাথে, আপনি একই সময়ে ফাংশন কলিংয়ের সাথে নেটিভ টুলের সমন্বয়ে একাধিক টুল সক্রিয় করতে পারেন। এখানে একটি উদাহরণ রয়েছে যা লাইভ API ব্যবহার করে একটি অনুরোধে দুটি টুল, Google অনুসন্ধানের সাথে গ্রাউন্ডিং এবং কোড এক্সিকিউশন সক্ষম করে।
# Multiple tasks example - combining lights, code execution, and search
prompt = """
Hey, I need you to do three things for me.
1. Turn on the lights.
2. Then compute the largest prime palindrome under 100000.
3. Then use Google Search to look up information about the largest earthquake in California the week of Dec 5 2024.
Thanks!
"""
tools = [
{'google_search': {}},
{'code_execution': {}},
{'function_declarations': [turn_on_the_lights_schema, turn_off_the_lights_schema]} # not defined here.
]
# Execute the prompt with specified tools in audio modality
await run(prompt, tools=tools, modality="AUDIO")
// Multiple tasks example - combining lights, code execution, and search
const prompt = `
Hey, I need you to do three things for me.
1. Turn on the lights.
2. Then compute the largest prime palindrome under 100000.
3. Then use Google Search to look up information about the largest earthquake in California the week of Dec 5 2024.
Thanks!
`;
const tools = [
{ googleSearch: {} },
{ codeExecution: {} },
{ functionDeclarations: [turnOnTheLightsSchema, turnOffTheLightsSchema] } // not defined here.
];
// Execute the prompt with specified tools in audio modality
await run(prompt, {tools: tools, modality: "AUDIO"});
পাইথন ডেভেলপাররা লাইভ এপিআই টুল ইউজ নোটবুকে এটি ব্যবহার করে দেখতে পারেন।
সমর্থিত মডেল
পরীক্ষামূলক মডেল অন্তর্ভুক্ত করা হয় না. আপনি মডেল ওভারভিউ পৃষ্ঠায় তাদের ক্ষমতা খুঁজে পেতে পারেন।
মডেল | ফাংশন কলিং | সমান্তরাল ফাংশন কলিং | কম্পোজিশনাল ফাংশন কলিং (শুধুমাত্র লাইভ API) |
---|---|---|---|
Gemini 2.0 Flash | ✔️ | ✔️ | ✔️ |
Gemini 2.0 Flash-Lite | এক্স | এক্স | এক্স |
মিথুন 1.5 ফ্ল্যাশ | ✔️ | ✔️ | ✔️ |
মিথুন 1.5 প্রো | ✔️ | ✔️ | ✔️ |
সর্বোত্তম অনুশীলন
- ফাংশন এবং পরামিতি বর্ণনা: আপনার বর্ণনা অত্যন্ত স্পষ্ট এবং নির্দিষ্ট হন। মডেলটি সঠিক ফাংশন চয়ন করতে এবং উপযুক্ত যুক্তি প্রদান করতে এগুলির উপর নির্ভর করে।
- নামকরণ: বর্ণনামূলক ফাংশনের নাম ব্যবহার করুন (স্পেস, পিরিয়ড বা ড্যাশ ছাড়া)।
- শক্তিশালী টাইপিং: ত্রুটি কমাতে পরামিতিগুলির জন্য নির্দিষ্ট ধরনের (পূর্ণসংখ্যা, স্ট্রিং, এনাম) ব্যবহার করুন। যদি একটি প্যারামিটারের বৈধ মানের একটি সীমিত সেট থাকে, তাহলে একটি enum ব্যবহার করুন।
- প্রম্পট ইঞ্জিনিয়ারিং:
- প্রসঙ্গ প্রদান করুন: মডেলটিকে তার ভূমিকা বলুন (যেমন, "আপনি একজন সহায়ক আবহাওয়া সহকারী।")।
- নির্দেশ দিন: কীভাবে এবং কখন ফাংশন ব্যবহার করতে হবে তা নির্দিষ্ট করুন (যেমন, "তারিখ অনুমান করবেন না; পূর্বাভাসের জন্য সর্বদা ভবিষ্যতের তারিখ ব্যবহার করুন।")।
- স্পষ্টীকরণকে উত্সাহিত করুন: প্রয়োজনে মডেলটিকে স্পষ্ট প্রশ্ন জিজ্ঞাসা করতে নির্দেশ দিন।
- তাপমাত্রা: আরও নির্ধারক এবং নির্ভরযোগ্য ফাংশন কলের জন্য একটি কম তাপমাত্রা (যেমন, 0) ব্যবহার করুন।
- বৈধকরণ: যদি একটি ফাংশন কলের উল্লেখযোগ্য পরিণতি হয় (যেমন, একটি অর্ডার দেওয়া), এটি কার্যকর করার আগে ব্যবহারকারীর সাথে কলটি যাচাই করুন।
- ত্রুটি হ্যান্ডলিং : অপ্রত্যাশিত ইনপুট বা API ব্যর্থতাগুলি সুন্দরভাবে পরিচালনা করতে আপনার ফাংশনে শক্তিশালী ত্রুটি হ্যান্ডলিং প্রয়োগ করুন। তথ্যমূলক ত্রুটি বার্তাগুলি ফেরত দিন যা মডেল ব্যবহারকারীর কাছে সহায়ক প্রতিক্রিয়া তৈরি করতে ব্যবহার করতে পারে।
- নিরাপত্তা: বাহ্যিক API কল করার সময় নিরাপত্তার বিষয়ে সচেতন থাকুন। উপযুক্ত প্রমাণীকরণ এবং অনুমোদন প্রক্রিয়া ব্যবহার করুন। ফাংশন কলে সংবেদনশীল ডেটা প্রকাশ করা এড়িয়ে চলুন।
- টোকেন সীমা: ফাংশন বিবরণ এবং পরামিতিগুলি আপনার ইনপুট টোকেন সীমার জন্য গণনা করে। আপনি যদি টোকেন সীমাতে আঘাত করে থাকেন, ফাংশনের সংখ্যা বা বর্ণনার দৈর্ঘ্য সীমিত করার কথা বিবেচনা করুন, জটিল কাজগুলিকে ছোট, আরও ফোকাসড ফাংশন সেটে ভাগ করুন।
নোট এবং সীমাবদ্ধতা
- OpenAPI স্কিমার শুধুমাত্র একটি উপসেট সমর্থিত।
- পাইথনে সমর্থিত প্যারামিটারের ধরন সীমিত।
- স্বয়ংক্রিয় ফাংশন কলিং শুধুমাত্র একটি পাইথন SDK বৈশিষ্ট্য।