لو نموذج اللغة بيقولك "النهاردة الجو حلو" وانت متأكد إنه مش بيشوف بيانات الطقس فعلاً، يبقى انت محتاج Function Calling. ده الـ feature اللي بتحوّل الـ AI من شخص بيتكلم لشخص بينفّذ.
Function Calling: ليه ده أهم تطور في الـ AI APIs
قبل 2023، الـ LLM كان sandbox مغلق. بياخد نص ويرجّع نص. لو سألته "كام الساعة دلوقتي في القاهرة؟" هيجاوبك بكلام يبدو واثق، لكنه في الحقيقة بيخمّن. مفيش طريقة يعرف بيها الوقت الفعلي.
الـ Function Calling (أو Tool Use عند Anthropic) بيكسر الجدار ده. انت بتعرّف للنموذج "أنا عندي أداة اسمها get_current_time بتاخد city وبترجّع الوقت". النموذج بقى يقدر يقرر بنفسه إنه يستدعيها لمّا يلاقي السؤال محتاجها.
المشكلة باختصار
أي تطبيق AI حقيقي محتاج بيانات live: حالة طلب في e-commerce، رصيد في bank، طقس، أسعار، أي حاجة بتتغيّر. النموذج لوحده مالوش وصول للبيانات دي. الحل القديم كان: انت تكتب prompt parser يدوي يحاول يفهم نية المستخدم، ينده على الـ API الصح، ويرجّع الرد للنموذج. ده كان هش جداً وكان بيفشل في 30-40% من الحالات.
اشرحلي زي ما إنت بتشرح لطفل
تخيّل عندك صديق ذكي جداً بس قاعد جوّه أوضة مفيهاش نوافذ. لو سألته "النهاردة الجو ايه؟"، هو بيخمّن من خبرته السابقة، أو يقولك "مش عارف". مفيش طريقة تانية.
دلوقتي تخيّل إنك حطيت قدامه جرس صغير مكتوب عليه "اضغط لتعرف الجو". لو ضغط، بتجيله ورقة فيها الجو. الجرس ده هو الـ tool، والـ Function Calling هو القاعدة اللي بتقول للصديق "انت مسموحلك تستخدم الجرس ده لمّا حد يسألك عن الطقس". الصديق هو اللي بيقرر يضغط ولا لأ، مش انت.
التعريف العلمي الدقيق
Function Calling هو آلية بتسمح للـ LLM بإصدار structured output بصيغة JSON يلتزم بـ schema انت بتعرّفه مسبقاً، لتمثيل نية استدعاء دالة معيّنة بمعاملات محددة. النموذج لا ينفّذ الدالة بنفسه؛ هو بس بيرجّع للـ runtime بتاعك إنه عايز يستدعيها بالقيم الفلانية. التنفيذ الفعلي مسؤوليتك انت، وبعدين بترجّع نتيجة التنفيذ للنموذج عشان يكمّل المحادثة.
الدورة الكاملة: user message → model decides to call tool → your code executes tool → tool result → model generates final response. ده بيتعمل في request واحد ممتد أو في multi-turn حسب الـ SDK.
سيناريو واقعي: bot خدمة عملاء لمتجر إلكتروني
تخيّل عندك متجر بيستقبل 5000 سؤال يومياً من نوع "فين طلبي؟" و "ايه سياسة الإرجاع؟". النوع التاني سهل (محتوى ثابت). النوع الأول محتاج بيانات live من DB الطلبات.
بدون Function Calling: لازم تكتب regex يفهم رقم الطلب من السؤال، وبعدين تستعلم، وترجّع النتيجة في prompt للنموذج يصيغها. التعقيد بيتراكم لمّا المستخدم يقول "طلبي اللي اشتريته إمبارح" بدل ما يقول رقم.
مع Function Calling: انت بتعرّف get_order_status(order_id) و list_recent_orders(user_id, days). النموذج بيقرر بنفسه أي واحدة يستدعي بناءً على صياغة السؤال. النتيجة في الـ benchmarks الرسمية: دقّة اختيار الأداة الصح بين 96% و 99% على Claude Sonnet 4.6 و GPT-4o.