בקשות להפעלת פונקציות באמצעות Gemini API
התכונה 'הפעלת פונקציות' מאפשרת לכם לקשר מודלים לכלים ולממשקי API חיצוניים. במקום ליצור תשובות טקסטואליות, המודל קובע מתי לקרוא לפונקציות ספציפיות ומספק את הפרמטרים הנדרשים לביצוע פעולות בעולם האמיתי. כך המודל יכול לשמש כגשר בין שפה טבעית לבין פעולות ונתונים בעולם האמיתי. יש 3 תרחישי שימוש עיקריים לבקשה להפעלת פונקציה:
- העשרת הידע: גישה למידע ממקורות חיצוניים כמו מסדי נתונים, ממשקי API ומאגרי ידע.
- הרחבת היכולות: שימוש בכלים חיצוניים לביצוע חישובים ולהרחבת המגבלות של המודל, למשל שימוש במחשבון או יצירת תרשימים.
- ביצוע פעולות: אינטראקציה עם מערכות חיצוניות באמצעות ממשקי API, כמו תזמון פגישות, יצירת חשבוניות, שליחת אימיילים או שליטה במכשירים ביתיים חכמים.
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"]
}
}]
}'
איך פועלת בקשה להפעלת פונקציה

הפעלת פונקציות כוללת אינטראקציה מובנית בין האפליקציה, המודל ופונקציות חיצוניות:
- הגדרת הצהרת פונקציה: מגדירים למודל את השם, הפרמטרים והמטרה של הפונקציה.
- קוראים למודל LLM עם הצהרות על פונקציות: שולחים את ההנחיה של המשתמש יחד עם ההצהרות על הפונקציות למודל.
- הפעלת קוד הפונקציה (באחריותכם): המודל לא מפעיל את הפונקציה בעצמו. לחלץ את השם ואת הארגומנטים ולהפעיל אותם באפליקציה.
- יצירת תשובה ידידותית למשתמש: שליחת התוצאה בחזרה למודל כדי לקבל תשובה סופית וידידותית למשתמש.
אפשר לחזור על התהליך הזה כמה פעמים. המודל תומך בקריאה לכמה פונקציות בתור אחד (קריאה מקבילית לפונקציות) וברצף (קריאה מורכבת לפונקציות).
שלב 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(string): הסבר ברור על מטרת הפונקציה. -
parameters(object): פרמטרי קלט שהפונקציה מצפה להם.-
type(string): סוג הנתונים הכולל, כמוobject. -
properties(object): פרמטרים בודדים עם סוג ותיאור. -
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(Preview): המודל מוודא שהסכימה של הפונקציה עומדת בדרישות.
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 יכולים לשלב כלים מובנים עם קריאה לפונקציות (function calling) בשיחות. העברת 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 (Model Context Protocol) מרחוק
Interactions API תומך בחיבור לשרתי MCP מרוחקים כדי להעניק למודל גישה לכלים ולשירותים חיצוניים. אתם מספקים את השרת name ואת url בהגדרות של כלי הניהול.
כשמשתמשים ב-Remote MCP, חשוב לשים לב למגבלות הבאות:
- סוגי שרתים: MCP מרוחק פועל רק עם שרתי HTTP שניתן להזרים מהם. אין תמיכה בשרתי SSE (אירועים שנשלחים מהשרת).
- תמיכה במודלים: בשלב הזה, 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 Preview | ✔️ | ✔️ | ✔️ |
| Gemini 3 Flash Preview | ✔️ | ✔️ | ✔️ |
| 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 |
שיטות מומלצות
- תיאורים של פונקציות ופרמטרים: הקפידו על בהירות וספציפיות.
- שמות: צריך להשתמש בשמות תיאוריים ללא רווחים או תווים מיוחדים.
- הקלדה חזקה: שימוש בסוגים ספציפיים (מספר שלם, מחרוזת, enum).
- בחירת כלים: מומלץ להגדיר את האפשרות 'פעיל' ל-10 עד 20 כלים לכל היותר.
- הנדסת הנחיות: מספקים הקשר והוראות.
רמת אקראיות: כדי לקבל תשובות דטרמיניסטיות, צריך להשתמש ברמת אקראיות נמוכה (למשל 0).
אימות: אימות של קריאות לפונקציות לפני ההפעלה.
טיפול בשגיאות: צריך להטמיע טיפול בשגיאות בצורה חזקה.
אבטחה: השתמשו באימות מתאים לממשקי API חיצוניים.
הערות ומגבלות
- יש תמיכה רק בקבוצת משנה של סכימת OpenAPI.
- במצב
any, יכול להיות שה-API ידחה סכימות גדולות מאוד או סכימות עם קינון עמוק. - יש מגבלות על סוגי הפרמטרים הנתמכים ב-Python.