استدعاء الدوال باستخدام Gemini API
تتيح لك ميزة "استدعاء الدوال" ربط النماذج بالأدوات وواجهات برمجة التطبيقات الخارجية. وبدلاً من إنشاء ردود نصية، يحدّد النموذج الوقت المناسب لاستدعاء وظائف معيّنة ويقدّم المَعلمات اللازمة لتنفيذ إجراءات واقعية. يتيح ذلك للنموذج أن يكون بمثابة جسر بين اللغة الطبيعية والإجراءات والبيانات في العالم الحقيقي. تتضمّن ميزة "استدعاء الدالة" 3 حالات استخدام أساسية:
- تعزيز المعرفة: الوصول إلى المعلومات من مصادر خارجية، مثل قواعد البيانات وواجهات برمجة التطبيقات وقواعد المعلومات
- توسيع الإمكانات: يمكنك استخدام أدوات خارجية لإجراء العمليات الحسابية وتوسيع حدود النموذج، مثل استخدام آلة حاسبة أو إنشاء رسومات بيانية.
- اتّخاذ إجراءات: التفاعل مع الأنظمة الخارجية باستخدام واجهات برمجة التطبيقات، مثل تحديد المواعيد أو إنشاء الفواتير أو إرسال الرسائل الإلكترونية أو التحكّم في الأجهزة المنزلية الذكية
Python
from google import genai
schedule_meeting_function = {
"type": "function",
"name": "schedule_meeting",
"description": "Schedules a meeting with specified attendees at a given time and date.",
"parameters": {
"type": "object",
"properties": {
"attendees": {"type": "array", "items": {"type": "string"}},
"date": {"type": "string", "description": "Date (e.g., '2024-07-29')"},
"time": {"type": "string", "description": "Time (e.g., '15:00')"},
"topic": {"type": "string", "description": "The meeting topic."},
},
"required": ["attendees", "date", "time", "topic"],
},
}
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Schedule a meeting with Bob and Alice for 03/14/2025 at 10:00 AM about Q3 planning.",
tools=[{"type": "function", **schedule_meeting_function}],
)
for step in interaction.steps:
if step.type == "function_call":
print(f"Function to call: {step.name}")
print(f"Arguments: {step.arguments}")
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const scheduleMeetingFunction = {
type: 'function',
name: 'schedule_meeting',
description: 'Schedules a meeting with specified attendees at a given time and date.',
parameters: {
type: 'object',
properties: {
attendees: { type: 'array', items: { type: 'string' } },
date: { type: 'string', description: 'Date (e.g., "2024-07-29")' },
time: { type: 'string', description: 'Time (e.g., "15:00")' },
topic: { type: 'string', description: 'The meeting topic.' },
},
required: ['attendees', 'date', 'time', 'topic'],
},
};
const interaction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: 'Schedule a meeting with Bob and Alice for 03/27/2025 at 10:00 AM about Q3 planning.',
tools: [scheduleMeetingFunction],
});
for (const step of interaction.steps) {
if (step.type === 'function_call') {
console.log(`Function to call: ${step.name}`);
console.log(`Arguments: ${JSON.stringify(step.arguments)}`);
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"input": "Schedule a meeting with Bob and Alice for 03/27/2025 at 10:00 AM about Q3 planning.",
"tools": [{
"type": "function",
"name": "schedule_meeting",
"description": "Schedules a meeting with specified attendees at a given time and date.",
"parameters": {
"type": "object",
"properties": {
"attendees": {"type": "array", "items": {"type": "string"}},
"date": {"type": "string"},
"time": {"type": "string"},
"topic": {"type": "string"}
},
"required": ["attendees", "date", "time", "topic"]
}
}]
}'
طريقة عمل ميزة "استدعاء الدوال"

تتضمّن ميزة "استدعاء الدوال" تفاعلاً منظَّمًا بين تطبيقك والنموذج والدوال الخارجية، وذلك على النحو التالي:
- تحديد تعريف الدالة: حدِّد اسم الدالة ومَعلماتها وغرضها للنموذج.
- استدعاء النموذج اللغوي الكبير باستخدام تعريفات الدوال: أرسِل طلب المستخدم مع تعريفات الدوال إلى النموذج.
- تنفيذ رمز الدالة (مسؤوليتك): لا ينفّذ النموذج الدالة بنفسه. استخرِج الاسم والمعلَمات ونفِّذها في تطبيقك.
- إنشاء ردّ سهل الاستخدام: أرسِل النتيجة مرة أخرى إلى النموذج للحصول على ردّ نهائي سهل الاستخدام.
يمكن تكرار هذه العملية عدة مرات. يتيح النموذج استدعاء عدة دوال في دورة واحدة (استدعاء الدوال بالتوازي) وفي تسلسل (استدعاء الدوال التركيبي).
الخطوة 1: تحديد تعريف دالة
Python
set_light_values_declaration = {
"type": "function",
"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",
},
"color_temp": {
"type": "string",
"enum": ["daylight", "cool", "warm"],
"description": "Color temperature",
},
},
"required": ["brightness", "color_temp"],
},
}
def set_light_values(brightness: int, color_temp: str) -> dict:
"""Set the brightness and color temperature of a room light."""
return {"brightness": brightness, "colorTemperature": color_temp}
JavaScript
const setLightValuesTool = {
type: 'function',
name: 'set_light_values',
description: 'Sets the brightness and color temperature of a light.',
parameters: {
type: 'object',
properties: {
brightness: { type: 'number', description: 'Light level from 0 to 100' },
color_temp: { type: 'string', enum: ['daylight', 'cool', 'warm'] },
},
required: ['brightness', 'color_temp'],
},
};
function setLightValues(brightness, color_temp) {
return { brightness: brightness, colorTemperature: color_temp };
}
الخطوة 2: استدعاء النموذج باستخدام تعريفات الدوال
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Turn the lights down to a romantic level",
tools=[set_light_values_declaration],
)
# Find the function call step
fc_step = next(s for s in interaction.steps if s.type == "function_call")
print(fc_step)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: 'Turn the lights down to a romantic level',
tools: [setLightValuesTool],
});
// Find the function call step
const fcStep = interaction.steps.find(s => s.type === 'function_call');
console.log(fcStep);
يعرض النموذج خطوة function_call تتضمّن type وname وarguments:
type='function_call'
name='set_light_values'
arguments={'color_temp': 'warm', 'brightness': 25}
الخطوة 3: تنفيذ الدالة
Python
fc_step = next(s for s in interaction.steps if s.type == "function_call")
if fc_step.name == "set_light_values":
result = set_light_values(**fc_step.arguments)
print(f"Function execution result: {result}")
JavaScript
const fcStep = interaction.steps.find(s => s.type === 'function_call');
let result;
if (fcStep.name === 'set_light_values') {
result = setLightValues(fcStep.arguments.brightness, fcStep.arguments.color_temp);
console.log(`Function execution result: ${JSON.stringify(result)}`);
}
الخطوة 4: إرسال النتيجة إلى النموذج
Python
final_interaction = client.interactions.create(
model="gemini-3-flash-preview",
input=[
{
"type": "function_result",
"name": fc_step.name,
"call_id": fc_step.id,
"result": [{"type": "text", "text": json.dumps(result)}],
}
],
tools=[set_light_values_declaration],
previous_interaction_id=interaction.id,
)
print(final_interaction.steps[-1].content[0].text)
JavaScript
const finalInteraction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: [{
type: 'function_result',
name: fcStep.name,
call_id: fcStep.id,
result: [{ type: 'text', text: JSON.stringify(result) }]
}],
tools: [setLightValuesTool],
previousInteractionId: interaction.id,
});
console.log(finalInteraction.steps.at(-1).content[0].text);
تعريفات الدوال
يتم تمرير تعريف الدالة كأداة ويتضمّن ما يلي:
-
type(سلسلة): يجب أن تكون"function"للدوال المخصّصة. -
name(سلسلة): اسم دالة فريد (استخدِم شُرطًا سفلية أو camelCase). -
description(سلسلة): شرح واضح للغرض من الدالة. parameters(كائن): مَعلمات الإدخال التي تتوقعها الدالة.type(سلسلة): نوع البيانات العام، مثلobject.-
properties(كائن): مَعلمات فردية تتضمّن النوع والوصف. required(مصفوفة): أسماء المعلمات الإلزامية.
استدعاء الدوال باستخدام نماذج التفكير
تستخدم نماذج سلسلة Gemini 3 و2.5 عملية "تفكير" داخلية تعمل على تحسين استدعاء الدوال. تتولّى حِزم تطوير البرامج (SDK) تلقائيًا معالجة توقيعات الأفكار نيابةً عنك.
استدعاء الدوال بشكل متوازٍ
استدعاء عدة دوال في الوقت نفسه عندما تكون مستقلة:
Python
power_disco_ball = {"type": "function", "name": "power_disco_ball", "description": "Powers the disco ball.",
"parameters": {"type": "object", "properties": {"power": {"type": "boolean"}}, "required": ["power"]}}
start_music = {"type": "function", "name": "start_music", "description": "Play music.",
"parameters": {"type": "object", "properties": {"energetic": {"type": "boolean"}, "loud": {"type": "boolean"}}, "required": ["energetic", "loud"]}}
dim_lights = {"type": "function", "name": "dim_lights", "description": "Dim the lights.",
"parameters": {"type": "object", "properties": {"brightness": {"type": "number"}}, "required": ["brightness"]}}
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="Turn this place into a party!",
tools=[power_disco_ball, start_music, dim_lights],
generation_config={"tool_choice": "any"},
)
for step in interaction.steps:
if step.type == "function_call":
args = ", ".join(f"{key}={val}" for key, val in step.arguments.items())
print(f"{step.name}({args})")
JavaScript
const powerDiscoBall = { type: 'function', name: 'power_disco_ball', description: 'Powers the disco ball.',
parameters: { type: 'object', properties: { power: { type: 'boolean' } }, required: ['power'] } };
const startMusic = { type: 'function', name: 'start_music', description: 'Play music.',
parameters: { type: 'object', properties: { energetic: { type: 'boolean' }, loud: { type: 'boolean' } }, required: ['energetic', 'loud'] } };
const dimLights = { type: 'function', name: 'dim_lights', description: 'Dim the lights.',
parameters: { type: 'object', properties: { brightness: { type: 'number' } }, required: ['brightness'] } };
const interaction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: 'Turn this place into a party!',
tools: [powerDiscoBall, startMusic, dimLights],
generationConfig: { toolChoice: 'any' },
});
for (const step of interaction.steps) {
if (step.type === 'function_call') {
console.log(`${step.name}(${JSON.stringify(step.arguments)})`);
}
}
استدعاء الدوال التركيبية
يمكن ربط طلبات استدعاء دوال متعددة معًا لتنفيذ طلبات معقّدة (مثل الحصول على الموقع الجغرافي أولاً، ثم الحصول على حالة الطقس في هذا الموقع الجغرافي).
Python
def get_weather_forecast(location: str) -> dict:
"""Gets the current weather temperature for a given location."""
return {"temperature": 25, "unit": "celsius"}
def set_thermostat_temperature(temperature: int) -> dict:
"""Sets the thermostat to a desired temperature."""
return {"status": "success"}
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="If it's warmer than 20°C in London, set the thermostat to 20°C, otherwise 18°C.",
tools=[get_weather_forecast, set_thermostat_temperature],
)
print(interaction.steps[-1].content[0].text)
أوضاع استدعاء الدالة
التحكّم في كيفية استخدام النموذج للأدوات باستخدام tool_choice في generation_config:
auto(الإعداد التلقائي): يقرّر النموذج ما إذا كان سيستدعي دالة أو سيردّ مباشرةً.-
any: يكون النموذج مقيّدًا بالتنبؤ دائمًا باستدعاء دالة. -
none: لا يمكن للنموذج إجراء استدعاءات الدوال. validated(معاينة): يضمن النموذج الالتزام بمخطط الدالة.
Python
generation_config = {
"tool_choice": {
"allowed_tools": {
"mode": "any",
"tools": ["get_current_temperature"]
}
}
}
JavaScript
const generationConfig = {
toolChoice: {
allowedTools: {
mode: 'any',
tools: ['get_current_temperature']
}
}
};
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: \$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"input": "What is the temperature in Boston?",
"tools": [{
"type": "function",
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}],
"generation_config": {
"tool_choice": {
"allowed_tools": {
"mode": "any",
"tools": ["get_current_temperature"]
}
}
}
}'
استخدام أدوات متعددة
يمكنك تفعيل أدوات متعددة، والجمع بين الأدوات المضمّنة واستدعاء الدوال في الطلب نفسه. يمكن لنماذج Gemini 3 الجمع بين الأدوات المضمّنة وميزة "استدعاء الدوال" الجاهزة للاستخدام في "التفاعلات". يؤدي تمرير previous_interaction_id
إلى تداول سياق الأداة المضمّنة تلقائيًا.
Python
from google import genai
import json
client = genai.Client()
get_weather = {
"type": "function",
"name": "get_weather",
"description": "Gets the weather for a requested city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state, e.g. Utqiaġvik, Alaska",
},
},
"required": ["city"],
},
}
tools = [
{"type": "google_search"}, # Built-in tool
get_weather # Custom tool
]
# Turn 1: Initial request with both tools enabled
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What is the northernmost city in the United States? What's the weather like there today?",
tools=tools
)
for step in interaction.steps:
if step.type == "function_call":
print(f"Function call: {step.name} (ID: {step.id})")
# Execute your custom function locally
result = {"response": "Very cold. 22 degrees Fahrenheit."}
# Turn 2: Provide the function result back to the model.
# Passing `previous_interaction_id` automatically circulates the
# built-in Google Search context from Turn 1
interaction_2 = client.interactions.create(
model="gemini-3-flash-preview",
previous_interaction_id=interaction.id,
tools=tools,
input=[{
"type": "function_result",
"name": step.name,
"call_id": step.id,
"result": [{"type": "text", "text": json.dumps(result)}]
}]
)
print(interaction_2.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const weatherTool = {
type: 'function',
name: 'get_weather',
description: 'Gets the weather for a given location.',
parameters: {
type: 'object',
properties: {
location: { type: 'string', description: 'The city and state, e.g. San Francisco, CA' }
},
required: ['location']
}
};
const tools = [
{type: 'google_search'}, // Built-in tool
weatherTool // Custom tool
];
// Turn 1: Initial request with both tools enabled
let interaction = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: "What is the northernmost city in the United States? What's the weather like there today?",
tools: tools
});
for (const step of interaction.steps) {
if (step.type === 'function_call') {
console.log(`Function call: ${step.name} (ID: ${step.id})`);
// Execute your custom function locally
const result = {response: "Very cold. 22 degrees Fahrenheit."};
// Turn 2: Provide the function result back to the model.
const interaction_2 = await client.interactions.create({
model: 'gemini-3-flash-preview',
previousInteractionId: interaction.id,
tools: tools,
input: [{
type: 'function_result',
name: step.name,
call_id: step.id,
result: [{ type: 'text', text: JSON.stringify(result) }]
}]
});
console.log(interaction_2.steps.at(-1).content[0].text);
}
}
استجابات الوظائف المتعددة الوسائط
بالنسبة إلى نماذج سلسلة Gemini 3، يمكنك تضمين محتوى متعدد الوسائط في أجزاء استجابة الدالة التي ترسلها إلى النموذج. يمكن للنموذج معالجة هذا المحتوى المتعدد الوسائط في دوره التالي لتقديم ردّ أكثر دقة.
لتضمين بيانات متعددة الوسائط في ردّ الدالة، أدرِجها ككتلة محتوى واحدة أو أكثر في الحقل result للخطوة function_result. يجب أن يحدّد كلّ قسم من أقسام المحتوى type (مثل "text" أو "image").
يوضّح المثال التالي كيفية إرسال استجابة دالة تحتوي على بيانات صور إلى النموذج في تفاعل:
Python
import base64
from google import genai
import requests
client = genai.Client()
# Find the function call step
tool_call = next(s for s in interaction.steps if s.type == "function_call")
# Execute your tool to get image bytes
image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content
base64_image_data = base64.b64encode(image_bytes).decode("utf-8")
final_interaction = client.interactions.create(
model="gemini-3-flash-preview",
previous_interaction_id=interaction.id,
input=[
{
"type": "function_result",
"name": tool_call.name,
"call_id": tool_call.id,
"result": [
{"type": "text", "text": "instrument.jpg"},
{
"type": "image",
"mime_type": "image/jpeg",
"data": base64_image_data,
},
],
}
],
)
print(final_interaction.steps[-1].content[0].text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
// Find the function call step
const toolCall = interaction.steps.find(s => s.type === 'function_call');
// Execute your tool to get image bytes and convert to base64
// (Implementation depends on your environment)
const base64ImageData = "BASE64_IMAGE_DATA";
const finalInteraction = await ai.interactions.create({
model: 'gemini-3-flash-preview',
previousInteractionId: interaction.id,
input: [{
type: 'function_result',
name: toolCall.name,
call_id: toolCall.id,
result: [
{ type: 'text', text: 'instrument.jpg' },
{
type: 'image',
mimeType: 'image/jpeg',
data: base64ImageData,
}
]
}]
});
console.log(finalInteraction.steps.at(-1).content[0].text);
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: \$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini-3-flash-preview",
"previous_interaction_id": "INTERACTION_ID",
"input": [
{
"type": "function_result",
"name": "get_image",
"call_id": "call_123",
"result": [
{"type": "text", "text": "instrument.jpg"},
{
"type": "image",
"mime_type": "image/jpeg",
"data": "BASE64_IMAGE_DATA"
}
]
}
]
}'
استدعاء الدالة مع الناتج المنظَّم
بالنسبة إلى نماذج سلسلة Gemini 3، يمكنك الجمع بين ميزة استدعاء الدالة والناتج المنظَّم للحصول على ردود منسَّقة باستمرار.
بروتوكول سياق النموذج (MCP) عن بُعد
تتيح واجهة برمجة التطبيقات Interactions API الربط بخوادم MCP البعيدة لمنح النموذج إمكانية الوصول إلى الأدوات والخدمات الخارجية. عليك تقديم الخادم name وurl في إعدادات الأدوات.
عند استخدام Remote MCP، يُرجى مراعاة القيود التالية:
- أنواع الخوادم: لا يتوافق خادم MCP البعيد إلا مع خوادم HTTP التي يمكن بثها. لا تتوافق هذه الأداة مع خوادم SSE (Server-Sent Events).
- التوافق مع النماذج: لا تتوافق ميزة "التحكّم عن بُعد في MCP" مع نماذج Gemini 3 في الوقت الحالي. سيتوفّر Gemini 3 قريبًا.
- التسمية: يجب ألا تتضمّن أسماء خوادم MCP الحرف
-. استخدِم أسماء خوادمsnake_caseبدلاً من ذلك.
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
type |
string |
نعم | يجب أن تكون "mcp_server". |
name |
string |
لا | اسم معروض لخادم MCP. |
url |
string |
لا | عنوان URL الكامل لنقطة نهاية خادم MCP |
headers |
object |
لا | أزواج المفتاح والقيمة التي يتم إرسالها كعناوين HTTP مع كل طلب إلى الخادم (على سبيل المثال، رموز المصادقة المميزة). |
allowed_tools |
array |
لا | تحديد الأدوات التي يمكن للوكيل استدعاؤها من الخادم |
مثال
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-2.5-flash",
input="Check the status of my last server deployment.",
tools=[
{
"type": "mcp_server",
"name": "Deployment Tracker",
"url": "https://mcp.example.com/mcp",
"headers": {"Authorization": "Bearer my-token"},
}
]
)
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-2.5-flash',
input: 'Check the status of my last server deployment.',
tools: [
{
type: 'mcp_server',
name: 'Deployment Tracker',
url: 'https://mcp.example.com/mcp',
headers: { Authorization: 'Bearer my-token' }
}
]
});
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"model": "gemini-2.5-flash",
"input": "Check the status of my last server deployment.",
"tools": [
{
"type": "mcp_server",
"name": "Deployment Tracker",
"url": "https://mcp.example.com/mcp",
"headers": {"Authorization": "Bearer my-token"}
}
]
}'
استدعاء أدوات البث
عند استخدام أدوات مع البث، ينشئ النموذج طلبات الدوال كسلسلة من أحداث step.delta في البث. يمكن بث وسيطات الأدوات كجزء من الوسيطات باستخدام arguments. يجب تجميع هذه التغييرات لإعادة إنشاء عمليات استدعاء الأدوات الكاملة قبل تنفيذها.
Python
import json
from google import genai
client = genai.Client()
weather_tool = {
"type": "function",
"name": "get_weather",
"description": "Gets the weather for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "The city and state"}
},
"required": ["location"]
}
}
stream = client.interactions.create(
model="gemini-3-flash-preview",
input="What is the weather in Paris?",
tools=[weather_tool],
stream=True
)
current_calls = {}
tool_calls = []
for event in stream:
if event.event_type == "step.start":
if event.step.type == "function_call":
current_calls[event.index] = {
"id": event.step.id,
"name": event.step.name,
"arguments": ""
}
elif event.event_type == "step.delta":
if event.delta.type == "arguments":
if event.index in current_calls:
current_calls[event.index]["arguments"] += event.delta.partial_arguments
elif event.delta.type == "text":
print(event.delta.text, end="", flush=True)
elif event.event_type == "interaction.completed":
for index, call in current_calls.items():
args = call["arguments"]
if args:
args = json.loads(args)
else:
args = {}
tool_calls.append({
"type": "function_call",
"id": call["id"],
"name": call["name"],
"arguments": args
})
print(f"\nFinal tool calls ready to execute:")
print(json.dumps(tool_calls, indent=2))
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const weatherTool = {
type: 'function',
name: 'get_weather',
description: 'Gets the weather for a given location.',
parameters: {
type: 'object',
properties: {
location: { type: 'string', description: 'The city and state' }
},
required: ['location']
}
};
const stream = await client.interactions.create({
model: 'gemini-3-flash-preview',
input: 'What is the weather in Paris?',
tools: [weatherTool],
stream: true,
});
const currentCalls = new Map();
let toolCalls = [];
for await (const event of stream) {
if (event.type === 'step.start') {
if (event.step.type === 'function_call') {
currentCalls.set(event.index, {
id: event.step.id,
name: event.step.name,
arguments: ''
});
}
} else if (event.type === 'step.delta') {
if (event.delta.type === 'arguments') {
if (currentCalls.has(event.index)) {
currentCalls.get(event.index).arguments += event.delta.partial_arguments;
}
} else if (event.delta.type === 'text') {
process.stdout.write(event.delta.text);
}
} else if (event.type === 'interaction.completed') {
toolCalls = Array.from(currentCalls.values()).map(call => ({
type: 'function_call',
id: call.id,
name: call.name,
arguments: call.arguments ? JSON.parse(call.arguments) : {}
}));
console.log('\nFinal tool calls ready to execute:');
console.log(JSON.stringify(toolCalls, null, 2));
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?alt=sse" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"model": "gemini-3-flash-preview",
"input": "What is the weather in Paris?",
"tools": [{
"type": "function",
"name": "get_weather",
"description": "Gets the weather for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "The city and state"}
},
"required": ["location"]
}
}],
"stream": true
}'
النماذج المتوافقة
| الطراز | استدعاء الدوال | طي متوازٍ | تكويني |
|---|---|---|---|
| معاينة Gemini 3.1 Pro | ✔️ | ✔️ | ✔️ |
| معاينة Gemini 3 Flash | ✔️ | ✔️ | ✔️ |
| Gemini 2.5 Pro | ✔️ | ✔️ | ✔️ |
| Gemini 2.5 Flash | ✔️ | ✔️ | ✔️ |
| Gemini 2.5 Flash-Lite | ✔️ | ✔️ | ✔️ |
| Gemini 2.0 Flash | ✔️ | ✔️ | ✔️ |
| Gemini 2.0 Flash-Lite | X | X | X |
أفضل الممارسات
- أوصاف الدوال والمَعلمات: يجب أن تكون واضحة ومحدّدة.
- التسمية: استخدِم أسماء وصفية بدون مسافات أو رموز خاصة.
- الكتابة القوية: استخدِم أنواعًا محدّدة (عدد صحيح، سلسلة، تعداد).
- اختيار الأدوات: يجب أن يظلّ عدد الأدوات النشطة بين 10 و20 أداة كحدّ أقصى.
- هندسة الطلبات: قدِّم السياق والتعليمات.
درجة العشوائية: استخدِم درجة عشوائية منخفضة (مثل 0) لإجراء طلبات حتمية.
التحقّق من الصحة: تحقَّق من صحة استدعاءات الدوال قبل تنفيذها.
معالجة الأخطاء: اتَّخِذ إجراءات فعالة لمعالجة الأخطاء.
الأمان: استخدِم المصادقة المناسبة لواجهات برمجة التطبيقات الخارجية.
الملاحظات والقيود
- لا يتوافق هذا الملف إلا مع مجموعة فرعية من مخطط OpenAPI.
- بالنسبة إلى الوضع
any، قد ترفض واجهة برمجة التطبيقات المخططات الكبيرة جدًا أو المتداخلة بشكل كبير. - أنواع المَعلمات المتوافقة في Python محدودة.