هل تساءلت يومًا كيف يستطيع ChatGPT حجز موعد أو استدعاء API أو البحث في قاعدة بيانات؟ السر يكمن في Function Calling — التقنية التي تحوّل النموذج اللغوي من مجرد مولّد نص إلى وكيل ذكي قادر على التصرف. في هذا الدليل الشامل ستفهم كيف تعمل هذه التقنية من الداخل، وكيف تطبّقها في مشاريعك الحقيقية خطوة بخطوة.
جدول المحتويات
- 1. ما هو Function Calling وما أهميته؟
- 2. كيف يعمل Function Calling من الداخل؟
- 3. الفرق بين Function Calling وTool Use
- 4. خطوات التنفيذ العملي خطوة بخطوة
- 5. أمثلة عملية: OpenAI وAnthropic وGemini
- 6. Parallel Function Calling: قوة متعددة في آنٍ واحد
- 7. أبرز حالات الاستخدام في 2026
- 8. مقارنة دعم Function Calling عبر النماذج الكبرى
- 9. التحديات والمخاطر الأمنية
- 10. أفضل الممارسات من الخبرة الميدانية
- 11. Function Calling ووكلاء الذكاء الاصطناعي: الصلة الوثيقة
- 12. الأسئلة الشائعة
- 13. الخلاصة والتوصيات
1. ما هو Function Calling وما أهميته؟
هل تساءلت يومًا لماذا يستطيع ChatGPT اليوم حجز موعد أو الاستعلام عن الطقس، بينما كان قبل عامين مجرد آلة ردٍّ نصية؟ الجواب في كلمتين: Function Calling.
في جوهره، Function Calling هو القدرة التي تمنح نموذج الذكاء الاصطناعي اللغوي (LLM) صلاحية استدعاء وظائف برمجية خارجية عند الحاجة، بدلًا من الاكتفاء بتوليد نص. النموذج لا “ينفّذ” الكود فعليًا، بل يقرر متى وأي وظيفة يحتاج استدعاءها، ثم يُنتج معاملاتها بصيغة JSON منظّمة، ويترك لتطبيقك مهمة التنفيذ الفعلي.
هذا التحول يبدو بسيطًا، لكن أثره ضخم: فبدلًا من نموذج “يتكلّم عن الإجراءات”، أصبح لديك نموذج يُنجز الإجراءات. يمكنه قراءة قاعدة بياناتك، إرسال بريد إلكتروني، استدعاء API خارجي، أو تنفيذ حسابات معقدة—كل ذلك ضمن محادثة طبيعية.
وفقًا لتقرير llm-stats.com (فبراير 2026)، أصبح Function Calling ميزةً معيارية في جميع نماذج الحدود الأمامية، من GPT-5.2 إلى Claude Sonnet 4.6 إلى Gemini 3 Flash. ولا غرابة في ذلك: في عصر وكلاء الذكاء الاصطناعي، Function Calling هو القلب النابض لكل agent فعّال.
كما شرحنا في شرح شامل لـ RAG: من التقسيم والتضمين إلى التقييم، نماذج LLM تحتاج إلى قنوات لاستيعاب المعلومات الخارجية؛ Function Calling هو القناة التي تمكّنها من التأثير في العالم الخارجي لا مجرد استيعابه.
2. كيف يعمل Function Calling من الداخل؟
الآلية الداخلية أوضح مما تبدو. إليك الخطوات بالتفصيل:
أولًا: تعريف الوظائف (Function Schema)
أنت تزوّد النموذج بقائمة وظائف متاحة، كل منها يحتوي على: اسم الوظيفة، وصف يشرح متى تُستخدم، ومعاملات بصيغة JSON Schema.
ثانيًا: النموذج يحلّل الطلب
عندما يتلقى المستخدم سؤالًا، يحلّل النموذج النية ويقرر: هل يحتاج استدعاء وظيفة أم يجيب مباشرة؟
ثالثًا: توليد استدعاء منظّم
إذا قرر النموذج استدعاء وظيفة، لا يُنتج نصًا عاديًا، بل يُنتج:
{
"name": "get_current_weather",
"arguments": {
"city": "الرياض",
"unit": "celsius"
}
}
رابعًا: التطبيق ينفّذ الوظيفة
تطبيقك يلتقط هذا الاستدعاء، ينفّذ الوظيفة الفعلية (استدعاء API الطقس مثلًا)، ويُعيد النتيجة إلى النموذج.
خامسًا: النموذج يصيغ الرد النهائي
النموذج يدمج نتيجة الوظيفة في رده النهائي للمستخدم بلغة طبيعية.
هذه الدورة قد تتكرر عدة مرات في طلب واحد معقد—ما يُعرف بـ Multi-turn Function Calling.
والأهم: النموذج لا يملك صلاحية تنفيذ الكود مباشرة. هذا قيد مقصود يمنحك السيطرة الكاملة على ما يُسمح به وما لا يُسمح.
3. الفرق بين Function Calling وTool Use
كثيرًا ما يخلط المطورون بين المصطلحين. الحقيقة أنهما يصفان نفس المفهوم لكن بمسميات مختلفة:
| المصطلح | الشركة | الوصف |
|---|---|---|
| Function Calling | OpenAI (GPT-5.2) | المصطلح الأصلي، يركز على “استدعاء دالة” محددة |
| Tool Use | Anthropic (Claude 4.6) | نفس الفكرة لكن أشمل: يشمل أدوات مدمجة كالبحث وتنفيذ الكود |
| Function Calling | Google (Gemini 3) | يدعم Parallel Calls ويتكامل مع Vertex AI |
| Tool Calling | Ollama / LangChain | تطبيق مجاني متوافق مع معيار OpenAI |
عمليًا في 2026، جميع هذه الشركات تتبنى معيار JSON Schema المتوافق مع OpenAI، مما يجعل الانتقال بين النماذج أسهل من أي وقت مضى.
4. خطوات التنفيذ العملي خطوة بخطوة
دعني أريك كيف أبني نظام Function Calling من الصفر. سنستخدم Python مثالًا عمليًا:
الخطوة 1: تعريف وظيفتك
تعريف وظيفة الطقس كمثال عملي
weather_function = {
"name": "get_current_weather",
"description": "احصل على الطقس الحالي لمدينة معينة. استخدم هذه الوظيفة عندما ي...
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "اسم المدينة، مثل: الرياض، دبي، القاهرة"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "وحدة قياس الحرارة"
}
},
"required": ["city"]
}
}
الخطوة 2: إرسال الطلب مع قائمة الوظائف
import openai
client = openai.OpenAI(api_key="YOUR_API_KEY")
response = client.chat.completions.create(
model="gpt-5.2",
messages=[
{"role": "user", "content": "ما درجة الحرارة في الرياض الآن؟"}
],
tools=[{"type": "function", "function": weather_function}],
tool_choice="auto" # النموذج يقرر متى يستخدم الوظيفة
)
الخطوة 3: معالجة استدعاء الوظيفة
message = response.choices[0].message
هل النموذج طلب استدعاء وظيفة؟
if message.tool_calls:
tool_call = message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
# نفّذ الوظيفة الفعلية
if function_name == "get_current_weather":
result = call_weather_api(arguments["city"],
arguments.get("unit", "celsius"))
الخطوة 4: إعادة النتيجة للنموذج
أضف نتيجة الوظيفة للمحادثة
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
})
احصل على الرد النهائي
final_response = client.chat.completions.create(
model="gpt-5.2",
messages=messages
)
هذا النمط الأساسي—Define → Call → Execute → Return—هو قلب كل تطبيق يعتمد على Function Calling.
5. أمثلة عملية: OpenAI وAnthropic وGemini
مع OpenAI (GPT-5.2):
OpenAI تستخدم حقل tools مع tool_choice. تجربتي مع GPT-5.2 أثبتت أنه ممتاز في اختيار الوظيفة المناسبة حتى مع أوصاف مختصرة.
Tip from experience: استخدم tool_choice: {"type": "function", "function": {"name": "..."}} لإجبار النموذج على استدعاء وظيفة محددة عندما تكون متأكدًا أنها مطلوبة.
مع Anthropic (Claude Sonnet 4.6):
Claude يسمي هذا Tool Use. وفقًا لـ cosmicjs.com (فبراير 2026)، Claude يتفوق في اتباع التعليمات المعقدة ودقة استدعاء الأدوات:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=[{
"name": "get_current_weather",
"description": "احصل على الطقس الحالي لمدينة",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}],
messages=[{"role": "user", "content": "ما الطقس في دبي؟"}]
)
Common pitfall to avoid: مع Claude، تحقق من response.stop_reason == "tool_use" قبل افتراض أن النموذج طلب استدعاءً.
مع Google Gemini 3:
كما ورد في oneuptime.com (17 فبراير 2026)، Gemini 3 يدعم Function Calling عبر Vertex AI بصيغة FunctionDeclaration:
from vertexai.generative_models import FunctionDeclaration, Tool
get_weather = FunctionDeclaration(
name="get_current_weather",
description="الحصول على الطقس الحالي",
parameters={
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
)
weather_tool = Tool(function_declarations=[get_weather])
6. Parallel Function Calling: قوة متعددة في آنٍ واحد
هل تعلم أن النماذج الحديثة تستطيع استدعاء عدة وظائف في وقت واحد؟
مثال: المستخدم يسأل “ما الطقس في الرياض وما سعر صرف الدولار اليوم؟”
يستطيع النموذج استدعاء get_weather وget_exchange_rate بالتوازي، دون انتظار نتيجة الأولى قبل استدعاء الثانية.
هذا يُقلّص وقت الاستجابة بشكل كبير في التطبيقات المعقدة. لكن تحذير: تأكد أن وظائفك تعمل بشكل آمن عند التنفيذ المتوازي، خاصة عند الكتابة في قاعدة بيانات.
التعامل مع Parallel Tool Calls
for tool_call in message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
result = execute_function(function_name, arguments)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result)
})
وفقًا لـ credentials.substack.com (فبراير 2026): “في 2026، JSON mode وFunction Calling أصبحا أمرًا مفروغًا منه في جميع مزودي LLM الرئيسيين.”
7. أبرز حالات الاستخدام في 2026
من تجربتي الميدانية، هذه هي التطبيقات الأكثر إنتاجية لـ Function Calling:
1. مساعدون ذكيون للبيانات
بدلًا من تعليم LLM هيكل قاعدة بياناتك، زوّده بوظيفة query_database(sql: string). سيكتب SQL ويُنفّذها بأمان.
2. أتمتة سير العمل (Workflow Automation)
ربط التقويم، البريد الإلكتروني، وأنظمة CRM في محادثة واحدة. وكيل واحد يقرأ بريدك ويُحدّث تقويمك ويُرسل ردودًا تلقائية.
3. الوصول إلى بيانات حقيقية (Real-time Data)
بدلًا من الاعتماد على معرفة النموذج المُدرَّبة (القديمة!)، استدعِ API لأسعار الأسهم، الطقس، الأخبار. هذا بالضبط ما يُميز chatbot 2026 عن 2024.
4. تكامل أنظمة المؤسسات (Enterprise Integration)
SAP، Salesforce، Jira—كل هذه الأنظمة لها APIs. Function Calling يُحوّل LLM إلى واجهة طبيعية لهذه الأنظمة.
5. التحقق والحسابات
عندما يحتاج النموذج لحساب دقيق، بدلًا من الاعتماد على “حسابه الذاتي” (المعرض للخطأ)، يُستدعى calculator tool. كما أشار dev.to (فبراير 2026): “Claude وGPT ممتازان في Function Calling للتكامل مع أنظمة خارجية”.
وللاستزادة في كيفية استخدام هذه القدرات في أنظمة متكاملة، راجع بناء وكلاء الذكاء الاصطناعي 2026: دليل شامل للأطر والأدوات العملية.
8. مقارنة دعم Function Calling عبر النماذج الكبرى
| النموذج | Parallel Calls | JSON Schema | أدوات مدمجة | دقة الاستدعاء |
|---|---|---|---|---|
| GPT-5.2 (OpenAI) | ✅ نعم | ✅ كامل | بحث، كود | ⭐⭐⭐⭐⭐ |
| Claude Sonnet 4.6 | ✅ نعم | ✅ كامل | بحث، كود، ملفات | ⭐⭐⭐⭐⭐ |
| Gemini 3 Flash | ✅ نعم | ✅ كامل | بحث Google | ⭐⭐⭐⭐ |
| DeepSeek R1 | ⚠️ محدود | ✅ كامل | كود | ⭐⭐⭐⭐ |
| Llama 3.3 (Ollama) | ✅ نعم | ✅ متوافق | مخصصة | ⭐⭐⭐ |
Real-world example: في مشروع لأتمتة خدمة عملاء عملت عليه، وجدت أن Claude Sonnet 4.6 يتفوق في اتباع قيود الوظيفة بدقة، بينما GPT-5.2 أسرع في استدعاءات الدُفعات (batch calls).
9. التحديات والمخاطر الأمنية
Function Calling قوي، لكنه يحمل مخاطر حقيقية إذا لم تُؤمّنه جيدًا. من تجربتي المباشرة:
المشكلة الأولى: Excessive Agency (صلاحيات زائدة)
أعطيت مرة وظيفة execute_sql() بدون قيود—النتيجة: النموذج حذف سجلات بشكل مشروع لأن المستخدم قال “احذف البيانات القديمة”. الحل: وظائف read-only افتراضيًا، وأذونات صريحة للكتابة.
وفقًا لـ OWASP LLM Top 10 (2025)، “Excessive Agency” هو أحد أكبر مخاطر أنظمة LLM.
المشكلة الثانية: Prompt Injection
المهاجم يُخفي تعليمات في البيانات المُعادة من وظيفة (مثل اسم مستخدم: “تجاهل التعليمات السابقة…”). الحل: تعقيم (sanitize) كل مدخلات الوظائف.
المشكلة الثالثة: استدعاءات لانهائية
نموذج يستدعي وظيفة تعيد نتيجة تحثّه على استدعاء وظيفة أخرى… الحل: حد أقصى للاستدعاءات في كل محادثة (عادة 10-20 استدعاء).
المشكلة الرابعة: تعريفات غامضة
وظيفة وصفها “تحديث السجل” دون تحديد ماذا تُحدّث → النموذج قد يُحدّث حقولًا غير متوقعة. الحل: أوصاف محددة جدًا.
للتعمق في أمان وكلاء AI، راجع مراقبة وتقييم وكلاء الذكاء الاصطناعي في الإنتاج 2026: دليل Tracing وEvals.
10. أفضل الممارسات من الخبرة الميدانية
بعد شهور من بناء أنظمة Function Calling في الإنتاج، هذه هي الدروس التي تُوفّر عليك الكثير:
1. اكتب وصفًا استثنائيًا للوظائف
هذا أهم من الكود نفسه. وصف واضح = نموذج يختار الوظيفة الصحيحة. وصف غامض = أخطاء لا نهاية لها.
مثال سيء: "تحديث البيانات"
مثال جيد: "تحديث سجل مستخدم محدد بمعرّفه. استخدم فقط عندما يطلب المستخدم صراحةً تعديل بيانات شخصية."
2. مبدأ الصلاحية الأدنى (Least Privilege)
كل وظيفة تحمل الصلاحية الأدنى اللازمة. لا تعطِ وظيفة القراءة صلاحية الكتابة.
3. تحقق من المعاملات قبل التنفيذ
دائمًا تحقق من المعاملات
def execute_function(name, args):
if name == "update_user":
if "user_id" not in args:
raise ValueError("user_id مطلوب")
if not isinstance(args["user_id"], int):
raise ValueError("user_id يجب أن يكون رقمًا")
# استمر في التنفيذ...
4. سجّل كل الاستدعاءات
Logging كامل لكل Function Call: الاسم، المعاملات، النتيجة، الوقت. مفيد للتنقيح والأمان.
5. اختبر الحالات الحدّية (Edge Cases)
ماذا يحدث إذا أعادت الوظيفة خطأ؟ ماذا إذا كانت النتيجة فارغة؟ النموذج يجب أن يتعامل مع هذه الحالات بأناقة.
6. استخدم JSON Schema المُفصَّل
استثمر في enum وminimum/maximum وغيرها لتقييد المعاملات:
{
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "عدد السجلات (1-100)"
}
}
11. Function Calling ووكلاء الذكاء الاصطناعي: الصلة الوثيقة
Function Calling هو الأساس الذي تُبنى عليه AI Agents. كما شرحنا في Agentic AI في 2026: الدليل الشامل لفهم وبناء أنظمة الذكاء الاصطناعي المستقلة، الوكيل الذكي بحاجة إلى:
- الإدراك (Perception): قراءة المحيط → وظائف القراءة
- التخطيط (Planning): اتخاذ القرارات → النموذج نفسه
- التنفيذ (Action): تغيير المحيط → وظائف الكتابة/التعديل
بدون Function Calling، الوكيل مُحاصَر في النص. معه، يصبح فاعلًا حقيقيًا.
أطر العمل مثل LangChain وCrewAI وAutoGen تبني كلها على هذه الآلية. وعندما تتحدث عن بناء نظام وكلاء ذكي محلياً باستخدام LangGraph و DeepSeek R1: دليل عملي، في جوهره تُضيف وظائف (tools) لكل node في الرسم البياني.
من الناحية التقنية: كل “Tool” في LangChain ما هو إلا Function Definition مُغلَّفة بطبقة من التجريد.
في LangChain، الأداة تُعرَّف هكذا
from langchain.tools import tool
@tool
def search_database(query: str) -> str:
"""ابحث في قاعدة البيانات عن المعلومات المطلوبة."""
# التنفيذ هنا
return db.search(query)
12. الأسئلة الشائعة
هل Function Calling يعمل مع النماذج المحلية (Ollama)؟
نعم. نماذج مثل Llama 3.3 وMistral تدعم Tool Calling عبر Ollama بصيغة متوافقة مع OpenAI. راجع Ollama و OpenCode: دليل شامل للمبتدئين لاستخدام الذكاء الاصطناعي مجاناً 2026 للتفاصيل.
ما الفرق بين Function Calling وRAG؟
RAG يُدخل معلومات خارجية قبل توليد الرد (استرجاع سلبي). Function Calling يُنفّذ أفعالًا أثناء الحوار (استدعاء نشط). غالبًا تستخدمهما معًا: RAG للسياق، Function Calling للأفعال.
كم عدد الوظائف التي يمكن تعريفها؟
تقنيًا، يمكنك تعريف عشرات الوظائف. لكن من التجربة: فوق 20 وظيفة، يبدأ النموذج في الارتباك. الأفضل هو تجميع الوظائف المتشابهة أو استخدام routing ذكي.
هل يمكن للنموذج رفض استدعاء وظيفة؟
نعم. إذا قدّر النموذج أن السؤال لا يحتاج وظيفة، يُجيب مباشرة. tool_choice: "auto" يمنح النموذج هذه المرونة.
كيف أتعامل مع الأخطاء في الوظيفة؟
أعد رسالة خطأ واضحة للنموذج كجزء من tool result. النموذج الجيد سيُعلم المستخدم بالمشكلة ويقترح بديلًا.
هل Function Calling مجاني أم يُحسب ضمن التوكنات؟
كل من تعريف الوظيفة والنتائج المُعادة تُحسب ضمن التوكنات. تعريفات طويلة = تكاليف أعلى. اكتب وصفًا دقيقًا لكنه مختصر.
هل يمكن استخدام Function Calling مع الصور؟
نعم، في النماذج متعددة الوسائط. يمكن للنموذج تحليل صورة ثم استدعاء وظيفة بناءً على ما رآه.
13. الخلاصة والتوصيات
Function Calling تحوّل نماذج LLM من “آلات ردٍّ” إلى “مساعدين فاعلين”. في 2026، هذه القدرة أصبحت معيارية—لكن الفارق بين تطبيق عادي ومتميز يكمن في كيفية تصميم الوظائف وليس مجرد استخدامها.
توصياتي الأساسية:
- ابدأ بوظائف read-only واحتجازها، ثم أضف صلاحيات الكتابة تدريجيًا
- استثمر وقتك في أوصاف الوظائف—هي المحدد الأول للدقة
- افترض دائمًا أن النموذج سيستدعي وظيفتك بطرق لم تتخيّلها، وخطّط لذلك
- اختبر، سجّل، راقب—Function Calling في الإنتاج يحتاج مراقبة مستمرة
المستقبل القريب سيرى Function Calling في كل تطبيق AI جدي. من بنى فهمًا عميقًا لها اليوم، سيكون في موقع متقدم غدًا.
المصادر
- OpenAI – Function Calling Guide (2026)
- Anthropic – Tool Use Documentation (2026)
- Google AI – Function Calling with Gemini (2026)
- Hugging Face – Function Calling in LLMs (2025)
- Toolformer: Language Models Can Teach Themselves to Use Tools – arXiv (2023)
- Gorilla: Large Language Model Connected with Massive APIs – Berkeley (2024)
- LangChain – OpenAI Functions Integration (2025)
عن الكاتب
علي – خبير تحسين محركات البحث (SEO) ومطور مهتم بالذكاء الاصطناعي. يدير موقع Lira Now المتخصص في أخبار وشروحات AI، ويساعد المواقع العربية على تحسين ترتيبها في نتائج البحث. شغوف باستكشاف أدوات الذكاء الاصطناعي الجديدة وتطبيقها عملياً.
مقالات ذات صلة
-
Agentic AI في 2026: الدليل الشامل لفهم وبناء أنظمة الذكاء الاصطناعي المستقلة
المحتويات 1. ما هو Agentic AI؟ (التعريف الدقيق) 2. Agentic AI مقابل Generative AI: ما الفرق الجوهري؟ 3. Agentic AI مقابل Autonomous AI: توضيح ال…
-
Mixture of Experts (MoE): شرح عملي لكيف تعمل نماذج الخبراء
في هذا الدليل ستفهم Mixture of Experts (MoE) أو «مزيج الخبراء» كأحد أهم أفكار التوسّع الذكي في نماذج اللغة الكبيرة: كيف تسمح لك ببناء نموذج يملك…
-
قواعد البيانات المتجهية: الدليل الشامل لفهم Vector Databases في 2026
المحتويات ما هي قواعد البيانات المتجهية ولماذا أصبحت ضرورية؟ كيف تعمل قواعد البيانات المتجهية؟ الفرق بين Vector Database و Vector Index الجيل ال…
-
Fine-tuning vs RAG vs Prompt Engineering: الدليل الشامل 2026
في عالم الذكاء الاصطناعي المتسارع، يواجه المطورون وقادة المنتجات سؤالاً متكرراً: كيف أجعل النموذج يعرف بياناتي الخاصة؟ هل أقوم بتدريبه من جديد (…
-
شرح شامل لـ RAG: من التقسيم والتضمين إلى التقييم
توليد النص المعزز بالاسترجاع (RAG) هو أسلوب يربط نماذج اللغة ببيانات حديثة أو خاصة عبر مرحلة استرجاع قبل التوليد، فيمنح الإجابات دقة أعلى ويقلل…

اترك تعليقاً