المستوى: مبتدئ
لو سألت الـ AI "كم سعر سهم Apple دلوقتي" فبيخترعلك رقم، المشكلة مش غباء. المشكلة إن النموذج معندوش طريقة يوصل لبيانات حقيقية. Function Calling هو اللي بيحل ده. النموذج بيتعلم متى يستدعي أداة من عندك، وأنت بتنفذها وترجع النتيجة.
Function Calling: ليه أصلاً موجود؟
نموذج اللغة عنده حدود واضحة. مش عارف الوقت دلوقتي، مش شايف الداتابيز بتاعتك، مش بيقدر يبعت إيميل. لكن لو وفّرتله "أدوات" — كل أداة لها اسم ووصف ومدخلات — يقدر يقرر "في السؤال ده محتاج أنفّذ check_stock_price"، يولّد JSON بالمدخلات، وأنت تنفذ وتديله النتيجة. ده الفرق بين نموذج بيخمن، ونموذج بيشتغل بداتا حقيقية.
مثال بسيط من حياتنا قبل ما ندخل في التعريف
تخيّل صديقك مسافر بره مصر بيكلمك على الواتساب وعاوز يعرف سعر الدولار النهارده. هو ميقدرش يفتح موقع البنك المركزي بنفسه من بلده. بيقولّك: "ابعتلي السعر دلوقتي". أنت بتفتح الموقع، تشوف الرقم، وترجعّله بالقيمة الفعلية. Function Calling بنفس الفكرة بالظبط: النموذج هو "الصديق" اللي بيطلب، أنت "المتصفح والموقع" اللي بيجيب الرقم الحقيقي. النموذج بيقول "محتاج النتيجة دي"، ما بيجيبهاش بنفسه.
التعريف العلمي بدقة
Function Calling هي قدرة النموذج على إخراج استدعاء منظم بصيغة JSON يحدّد فيه اسم دالة ومعطياتها، طبقًا لـ schema تعرّفه أنت في الطلب. النموذج لا ينفّذ الدالة بنفسه. يخرج فقط نية الاستدعاء (intent)، ثم يأخذ نتيجتك ويبني الرد النهائي للمستخدم. الدورة الكاملة: user message → tool_call JSON → tool execution by you → tool_result → final response. الـ schema بيستخدم JSON Schema القياسي، ده مش اختراع Anthropic أو OpenAI.
كود Python شغّال على Anthropic SDK
import anthropic
client = anthropic.Anthropic()
tools = [
{
"name": "get_weather",
"description": "ارجع الطقس الحالي لمدينة محددة بالدرجة المئوية",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "اسم المدينة بالإنجليزية"}
},
"required": ["city"]
}
}
]
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
tools=tools,
messages=[{"role": "user", "content": "إيه الطقس في القاهرة دلوقتي؟"}]
)
# الرد بيرجع فيه content block من نوع tool_use:
# { "type": "tool_use", "name": "get_weather", "input": {"city": "Cairo"} }
# نفّذ HTTP حقيقي على API الطقس، ثم ابعت النتيجة في رسالة tool_result