استدعاء الدوال (Function Calling)
يتيح استدعاء الدوال للنموذج أن يختار ويستدعي تلقائياً دوال الأدوات التي عرّفتها مسبقاً وفقاً لاحتياجات المستخدم، مما يحقّق قدرات مثل استعلام البيانات واستدعاء API وتنفيذ المهام.
المفاهيم الأساسية#
المسار الكامل لاستدعاء الدوال:
- تعريف الأدوات — وصف الدوال والمعاملات المتاحة في الطلب
- قرار النموذج — يقرّر النموذج ما إذا كان يحتاج إلى استدعاء أداة
- إرجاع الاستدعاء — يعيد النموذج اسم الدالة والمعاملات
- تنفيذ الدالة — تنفّذ أنت الدالة وتحصل على النتيجة
- متابعة المحادثة — إرسال النتيجة إلى النموذج لتوليد الرد النهائي
بروتوكول OpenAI#
Python
الكود
from openai import OpenAI
import json
client = OpenAI(
base_url="https://as.apinoma.com/v1",
api_key="<مفتاح APINOMA_API_KEY الخاص بك>"
)
# 1. تعريف الأدوات
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "الحصول على معلومات الطقس الفورية لمدينة محدّدة",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "اسم المدينة، مثل: بكين، شنغهاي"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "وحدة درجة الحرارة"
}
},
"required": ["city"]
}
}
}]
# 2. إرسال الطلب
messages = [{"role": "user", "content": "كيف حال الطقس في بكين اليوم؟"}]
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto"
)
message = response.choices[0].message
# 3. معالجة استدعاء الأداة
if message.tool_calls:
for tool_call in message.tool_calls:
args = json.loads(tool_call.function.arguments)
# 4. تنفيذ دالتك
result = get_weather(args["city"]) # تنفيذك الخاص
# 5. إرسال النتيجة إلى النموذج
messages.append(message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
})
# الحصول على الرد النهائي
final = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages,
tools=tools
)
print(final.choices[0].message.content)TypeScript
بروتوكول Anthropic#
يستخدم Anthropic معامل `tools`، مع اختلاف بسيط في التنسيق:
الكود
import anthropic
client = anthropic.Anthropic(
base_url="https://as.apinoma.com/anthropic",
api_key="<مفتاح APINOMA_API_KEY الخاص بك>"
)
response = client.messages.create(
model="anthropic/claude-sonnet-4.6",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "الحصول على معلومات الطقس الفورية لمدينة محدّدة",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "اسم المدينة"}
},
"required": ["city"]
}
}],
messages=[{"role": "user", "content": "كيف حال الطقس في بكين اليوم؟"}]
)
# معالجة كتلة محتوى tool_use
for block in response.content:
if block.type == "tool_use":
print(f"استدعاء الأداة: {block.name}, المعاملات: {block.input}")استدعاء الدوال المتوازي#
يمكن للنموذج أن يعيد عدّة استدعاءات أدوات في استجابة واحدة، وينبغي لك تنفيذها بالتوازي:
الكود
# قد يطلب النموذج عدّة استدعاءات أدوات في آنٍ واحد
if message.tool_calls:
# تنفيذ جميع استدعاءات الأدوات بالتوازي
import asyncio
async def execute_tools(tool_calls):
tasks = []
for tc in tool_calls:
args = json.loads(tc.function.arguments)
tasks.append(execute_function(tc.function.name, args))
return await asyncio.gather(*tasks)معامل tool_choice#
القيمة
الوصف
`"auto"`
يقرّر النموذج تلقائياً ما إذا كان سيستدعي أداة (افتراضي)
`"none"`
منع استدعاء الأدوات
`"required"`
إجبار استدعاء أداة
`{"type": "function", "function": {"name": "xxx"}}`
إجبار استدعاء أداة محدّدة
النماذج المدعومة#
النماذج التالية تدعم Function Calling:
- OpenAI: `gpt-4o`، `gpt-4o-mini`، `o1`، `o3-mini`
- Anthropic: `claude-opus-4`، `claude-sonnet-4`، `claude-3-5-haiku`
- Google: `gemini-pro-compatible-pro-preview`، `gemini-pro-compatible-flash-lite-preview`، `gemini-3-pro-preview`
- نماذج أخرى: `deepseek-chat`، `qwen-max`، `glm-4`
آخر تحديث: 23 يونيو 2026