Function Calling (Tool Use)
يتيح استدعاء الدوال، أو استخدام الأدوات، لنموذج لغوي طلب دالة خارجية عبر وسيطات JSON، ثم ينفذ التطبيق الدالة ويعيد نتيجتها.
استدعاء الدوال، الذي يُسمى أيضًا استدعاء الأدوات أو استخدام الأدوات، هو قدرة نموذج لغوي كبير (LLM) على الإجابة بطلب تشغيل دالة خارجية بدلًا من إخراج نص عادي. يصف التطبيق كل أداة متاحة باسم وغرض ومخطط JSON لمعاملاتها. وعندما يتطلب الطلب بيانات مباشرة أو تنفيذ إجراء، يرد النموذج باسم الأداة ومعاملات JSON، وينفذ التطبيق الدالة، ثم يصوغ النموذج إجابته استنادًا إلى النتيجة. ولا ينفذ النموذج أي شيء بنفسه. وأظهر Toolformer من Meta في فبراير 2023 أن نموذجًا يمكنه تعليم نفسه إدراج استدعاءات API في نصه، وأضافت OpenAI استدعاء الدوال إلى API الخاص بها في 13 يونيو 2023، مع نماذج مضبوطة بدقة لاكتشاف الحاجة إلى دالة وتنسيق المعاملات بما يطابق توقيعها. وتدعم هذه الإمكانية الآن جميع الجهات الرئيسية المقدمة للنماذج، بينما تتعلمها النماذج المفتوحة عبر ضبط التعليمات وقوالب الدردشة.
آلية عمل استدعاء الدوال#
استدعاء الأداة هو دورة تبادلية بين النموذج والتطبيق، تتكرر حتى يحصل النموذج على ما يحتاج إليه:
ينفذ الكود أدناه جانبي دورة تبادلية واحدة بتنسيق دليل استدعاء الدوال من OpenAI، مع كتابة رد النموذج صراحةً كي يعمل دون مفتاح API.
import json
from jsonschema import validate
# تعريف الأداة المُرسَل مع الطلب: اسم، وغرض، ومخطط JSON للوسيطات
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# يكون خرج النموذج استدعاء دالة تصل وسيطاته كسلسلة JSON
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # يُصدر استثناءً قبل تشغيل أي شيء إذا خالفت الوسيطات المخطط
# ينفّذ التطبيق دالته الخاصة ويعيد النتيجة ضمن call_id نفسه
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})يطبع {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'}، وهو العنصر الذي يضيفه التطبيق إلى المحادثة قبل استدعاء النموذج مجددًا. يؤدي ضبط "strict": true على أداة إلى جعل واجهة API تطبّق فك الترميز المقيّد، بحيث تطابق الوسيطات التي ينشئها النموذج المخطط دائمًا.
اختيار الأدوات وتسلسلها#
يمكن للنماذج إصدار عدة استدعاءات مستقلة في دور واحد، مثل التحقق من طلبين في الوقت نفسه، كما يمكن للتطبيق فرض استخدام أداة بعينها، أو اشتراط استخدام أداة ما، أو منع الأدوات خلال دور معين. ويشكّل تسلسل الاستدعاءات عبر الأدوار، حيث تحدد كل نتيجة الاستدعاء التالي، الحلقة التي تحوّل النموذج إلى وكيل ذكاء اصطناعي يعمل داخل إطار عمل الوكلاء. يقيّم لوحة متصدرّي استدعاء الدوال في بيركلي هذه المهارات: اختيار الدالة المناسبة، وملء وسيطاتها، وإجراء استدعاءات متوازية ومتعددة الأدوار، والامتناع عن الاستدعاء عندما لا تلائم أي أداة المهمة. وبما أن نتائج الأدوات تعود إلى النموذج بوصفها مدخلات، فقد تتضمن صفحة ويب أو مستند جلبته أداة حقنًا للتعليمات، لذا تمنح التطبيقات الأدوات أقل قدر من الصلاحيات اللازمة، وتطلب موافقة شخص قبل إجراء عمليات الشراء أو الحذف أو إرسال الرسائل.
تُعد نماذج الرؤية أدوات طبيعية لأن مخرجاتها منظمة مسبقًا. في Ultralytics YOLO، يعيد Results.summary() كل عنصر يعثر عليه نموذج YOLO26 في هيئة قاموس يتضمن اسم الفئة ورقمها ودرجة الثقة وإحداثيات الصندوق، وهي قائمة يحولها json.dumps مباشرة إلى نتيجة أداة، وبذلك يستطيع نموذج محادثة أو نموذج رؤية ولغة (VLM) عدّ العناصر وتحديد مواقعها في صورة باستدعاء وضع التنبؤ.
استدعاء الدوال والمصطلحات ذات الصلة#
- وكلاء استخدام الحاسوب: يتعاملون مع البرامج عبر لقطات الشاشة والنقرات وضغطات المفاتيح، ما يشمل التطبيقات التي لا تحتوي على API. ويصل استدعاء الدالة إلى النتيجة نفسها بطلب منظم واحد حيثما توفرت API.
- المخرجات المنظّمة: تقيّد الرد النهائي للنموذج بمخطط، مثل استخراج حقول من فاتورة. ويستخدم استدعاء الدوال المخططات نفسها لطلب إجراء، ويتوقع تلقي نتيجة.
- التوليد المعزّز بالاسترجاع (RAG): يضيف المستندات المسترجعة إلى الموجّه. ويمكن لأداة البحث تنفيذ RAG، كما يتيح التوليد المعزّز بالاسترجاع الوكيلي للنموذج تحديد وقت البحث وما الذي يبحث عنه.
- بروتوكول سياق النموذج (MCP): بروتوكول مفتوح قدمته Anthropic في نوفمبر 2024، تكتشف التطبيقات من خلاله الأدوات التي توفرها البرامج الخارجية. ويظل النموذج يستدعي أداة MCP عبر استدعاء الدوال.










