الجمع بين الأدوات المضمّنة واستدعاء الدوال
يتيح Gemini الجمع بين الأدوات المضمّنة، مثل google_search، واستدعاء الدوال (المعروفة أيضًا باسم الأدوات المخصّصة) في تفاعل واحد من خلال الاحتفاظ بسجلّ سياق استدعاءات الأدوات وعرضه. تتيح مجموعات الأدوات المضمّنة والمخصّصة إمكانية إنشاء سير عمل معقّد ومستقل، حيث يمكن للنموذج، على سبيل المثال، الاستناد إلى بيانات الويب في الوقت الفعلي قبل استدعاء منطق عملك المحدّد.
في ما يلي مثال يتيح استخدام توليفات الأدوات المضمّنة والمخصّصة مع google_search ودالة مخصّصة getWeather:
Python
from google import genai
client = genai.Client()
getWeather = {
"type": "function",
"name": "getWeather",
"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"],
},
}
# The Interactions API manages context automatically across tool calls.
# The model will first use Google Search, then call getWeather.
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=[
{"google_search": {}},
getWeather,
],
)
# Process steps: the interaction contains search results and a function call
for step in interaction.steps:
if step.type == "function_call":
print(f"Function call: {step.name} with args: {step.arguments}")
# In a real application, you would execute the function here
# and provide the result back to the model.
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const getWeather = {
type: "function",
name: "getWeather",
description: "Get the weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA"
}
},
required: ["location"]
}
};
// The Interactions API manages context automatically across tool calls.
// The model will first use Google Search, then call getWeather.
const 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: [
{ googleSearch: {} },
getWeather,
],
});
// Process steps: the interaction contains search results and a function call
for (const step of interaction.steps) {
if (step.type === "function_call") {
console.log(`Function call: ${step.name} with args: ${JSON.stringify(step.arguments)}`);
// In a real application, you would execute the function here
// and provide the result back to the model.
}
}
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-3-flash-preview",
"input": "What is the northernmost city in the United States? What'\''s the weather like there today?",
"tools": [
{ "type": "google_search" },
{
"type": "function",
"name": "getWeather",
"description": "Get the weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
]
}'
آلية العمل
تستخدم نماذج Gemini 3 تداول سياق الأدوات لتفعيل مجموعات الأدوات المضمّنة والمخصّصة. تتيح ميزة "تداول سياق الأداة" الحفاظ على سياق الأدوات المضمّنة وعرضه ومشاركته مع الأدوات المخصّصة في التفاعل نفسه.
تفعيل دمج الأدوات
- أدرِج
function_declarationsمع الأدوات المضمّنة التي تريد استخدامها لتفعيل السلوك المجمّع.
الخطوات التي تعرضها واجهة برمجة التطبيقات
في ردّ التفاعل، تعرض واجهة برمجة التطبيقات خطوات منفصلة لطلبات البيانات من الأدوات المضمّنة وطلبات البيانات من الدوال (الأدوات المخصّصة):
- خطوات الأداة المضمّنة: تدير واجهة برمجة التطبيقات هذه الخطوات تلقائيًا، مع الحفاظ على السياق في كل خطوة.
- خطوات استدعاء الدوال: تعرض واجهة برمجة التطبيقات
function_callخطوة لدوالك المخصّصة. يمكنك تنفيذ الدالة وتقديم النتيجة مرة أخرى.
الحقول المهمة في الخطوات التي تم إرجاعها
تُعدّ بعض الحقول في الخطوات التي يتم إرجاعها ضرورية للحفاظ على سياق الأداة وإتاحة استخدام مجموعات من الأدوات:
id: تظهر في الخطوتَينfunction_callوfunction_response. معرّف فريد يربط طلبًا بردّه.signature: تظهر في خطواتthought، بالإضافة إلى جميع خطوات طلب الأداة (مثلfunction_call) ونتيجتها (مثلfunction_response) لنماذج Gemini 3 والإصدارات الأحدث. يتيح هذا السياق المشفّر تداول سياق الأداة في جميع التفاعلات.
إدارة هذه الحقول:
- الوضع ذو الحالة (مُقترَح): عند استخدام
previous_interaction_id، يعالج الخادم تلقائيًا الحقلَينidوsignature. - وضع عدم الاحتفاظ بالحالة: عند إدارة سجلّ المحادثات يدويًا، يجب التأكّد من إعادة تمرير الحقلَين
idوsignatureإلى النموذج في الطلبات اللاحقة للتحقّق من صحة البيانات والحفاظ على السياق. تتعامل حِزم SDK الرسمية مع ذلك تلقائيًا إذا أرسلت عنصر الردّ الكامل إلى السجلّ.
البيانات الخاصة بالأداة
تعرض بعض الأدوات المضمّنة وسيطات بيانات مرئية للمستخدم خاصة بنوع الأداة.
| الأداة | وسيطات استدعاء الأداة المرئية للمستخدم (إن وُجدت) | ردّ الأداة المرئي للمستخدم (إن وُجد) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsعناوين URL التي سيتم تصفّحها |
status: حالة التصفّحretrieved_url: عناوين URL التي تم تصفّحها |
| file_search | بدون | بدون |
الرموز المميزة والأسعار
يُرجى العِلم أنّ أجزاء طلبات استدعاء الأدوات المضمّنة يتم احتسابها ضمن
prompt_token_count. بما أنّ خطوات الأدوات الوسيطة هذه أصبحت مرئية
ويتم إرجاعها إليك، فهي تشكّل جزءًا من سجلّ المحادثات. ينطبق ذلك على الطلبات فقط، وليس على الردود.
تُستثنى أداة "بحث Google" من هذه القاعدة. يستخدم محرّك بحث Google نموذج التسعير الخاص به على مستوى طلب البحث، لذا لن يتم تحصيل رسوم مضاعفة مقابل الرموز المميزة (راجِع صفحة الأسعار).
يمكنك الاطّلاع على صفحة الرموز المميزة للحصول على مزيد من المعلومات.
القيود
- يتم ضبط الوضع التلقائي على
validated(الوضعautoغير متاح) عند تفعيل ميزة "تداول سياق الأداة". - تعتمد الأدوات المضمّنة، مثل
google_search، على معلومات الموقع الجغرافي والوقت الحالي، لذا إذا كانsystem_instructionأوfunction_declaration.descriptionيتضمّن معلومات متضاربة حول الموقع الجغرافي والوقت، قد لا تعمل ميزة دمج الأدوات بشكل جيد.
الأدوات المتوافقة
يتم تطبيق تداول سياق الأداة العادي على الأدوات من جهة الخادم (المضمّنة). "تنفيذ التعليمات البرمجية" هي أيضًا أداة من جهة الخادم، ولكنّها تتضمّن حلاً مدمجًا خاصًا بها لتداول السياق. إنّ استخدام الكمبيوتر واستدعاء الدوال هما أداتان من جهة العميل، وتتضمّنان أيضًا حلولاً مدمجة لتداول السياق.
| الأداة | جهة التنفيذ | إتاحة تداول السياق |
|---|---|---|
| بحث Google | من جهة الخادم | متاح |
| خرائط Google | من جهة الخادم | متاح |
| سياق عنوان URL | من جهة الخادم | متاح |
| البحث عن الملفات | من جهة الخادم | متاح |
| تنفيذ الرموز البرمجية | من جهة الخادم | متوافق (مضمّن، يستخدم الخطوتَين code_execution وcode_execution_result) |
| استخدام الكمبيوتر | من جهة العميل | متوافق (مضمّن، يستخدم الخطوتَين function_call وfunction_response) |
| الدوال المخصّصة | من جهة العميل | متوافق (مضمّن، يستخدم الخطوتَين function_call وfunction_response) |
الخطوات التالية
- مزيد من المعلومات حول ميزة "استدعاء الدوال" في Gemini API
- استكشاف الأدوات المتوافقة: