الذكاء الاصطناعي التوليدي والوكلاء متقدم · Advanced 15 دقيقة

استدعاء الأدوات

Tool Calling

كيف يطلب النموذج تنفيذ دالة: تعريف الأدوات بمخطط JSON، وحلقة التنفيذ، والتحقق، والأمان.

تقدّمك في المسار0%

الدورة الكاملة

  1. يرسل التطبيق السؤال مع تعريفات الأدوات.
  2. يعيد النموذج إما إجابة نصية أو طلب استدعاء (اسم + معاملات).
  3. يتحقق التطبيق من الطلب وينفذ الدالة.
  4. تُرسل النتيجة إلى النموذج.
  5. يكرر النموذج أو يصوغ الإجابة النهائية.

تعريف أداة

{
  "name": "get_track_info",
  "description": "يعيد معلومات مسار في الأكاديمية: عدد الدروس والمستويات والرابط.",
  "input_schema": {
    "type": "object",
    "properties": {
      "slug": {"type": "string", "description": "المعرّف النصي للمسار مثل machine-learning"}
    },
    "required": ["slug"],
    "additionalProperties": false
  }
}

اسم الحقل الذي يحمل المخطط (input_schema أو parameters) يختلف بين المزودين؛ الفكرة واحدة.

التنفيذ الآمن

from jsonschema import validate, ValidationError

TOOLS = {
    "get_track_info": {
        "fn": lambda slug: {"slug": slug, "lessons": 17},
        "schema": {"type": "object", "properties": {"slug": {"type": "string", "pattern": "^[a-z0-9-]{2,60}$"}},
                   "required": ["slug"], "additionalProperties": False},
        "dangerous": False,
    },
}

def execute(call, approve=lambda c: False):
    spec = TOOLS.get(call["name"])
    if spec is None:
        return {"error": "unknown tool"}
    try:
        validate(call["args"], spec["schema"])
    except ValidationError as e:
        return {"error": f"invalid args: {e.message}"}
    if spec["dangerous"] and not approve(call):
        return {"error": "user approval required"}
    try:
        return {"result": spec["fn"](**call["args"])}
    except Exception as e:                 # أعد الخطأ للنموذج بدلاً من إسقاط التطبيق
        return {"error": str(e)}

تصميم أدوات جيدة

  • أسماء ووصف واضحان يشرحان متى تُستخدم الأداة.
  • معاملات قليلة ومحددة بأنواع وقيود.
  • مخرجات مختصرة ومنظمة (لا تعد صفحات ضخمة).
  • رسائل خطأ مفيدة تساعد النموذج على التصحيح.

الأمان

  • أقل الصلاحيات: أداة قراءة لا تحتاج صلاحية كتابة.
  • لا تمرر مدخلات النموذج مباشرة إلى أوامر النظام أو استعلامات SQL.
  • عامل نتائج الأدوات (صفحات ويب، ملفات) كبيانات قد تحتوي تعليمات خبيثة.
  • سجّل كل استدعاء للمراجعة.

مصطلحات الدرس

استدعاء الأدوات Tool Calling
قدرة النموذج على إنتاج طلب منظم لاستدعاء دالة محددة بمعاملات، ينفذه التطبيق ويعيد نتيجته.
مبدأ أقل الصلاحيات Principle of Least Privilege
منح الأداة أو النظام أقل قدر من الصلاحيات اللازم لأداء مهمته فقط.
مخطط JSON JSON Schema
صيغة لوصف بنية بيانات JSON وأنواعها وقيودها، وتُستخدم لتعريف معاملات الأدوات والتحقق منها.

الملخص

استدعاء الأدوات (Tool/Function Calling) يتيح للنموذج اللغوي طلب تنفيذ دوال يعرّفها المطور. تُوصف كل أداة باسم ووصف ومخطط JSON لمعاملاتها، فيقرر النموذج متى يستدعيها ويولد معاملاتها، وينفذ التطبيق الدالة فعلياً ويعيد النتيجة إلى النموذج ليكمل. النموذج لا ينفذ شيئاً بنفسه؛ التطبيق هو المسؤول عن التحقق من المعاملات والصلاحيات وطلب الموافقة قبل الإجراءات الحساسة ومعالجة الأخطاء.

أسئلة مراجعة

  1. من ينفذ الدالة فعلياً في استدعاء الأدوات؟

    التطبيق الذي يستقبل طلب النموذج؛ النموذج يولد اسم الأداة ومعاملاتها فقط.

  2. لماذا يجب التحقق من معاملات الأداة قبل تنفيذها؟

    لأن النموذج قد يولد قيماً خاطئة أو ضارة، أو قد يتأثر بحقن الموجّهات.

المصادر والمراجع

  1. Schick et al. (2023) Toolformer: Language Models Can Teach Themselves to Use Tools — arXiv
  2. Patil et al. (2023) Gorilla: Large Language Model Connected with Massive APIs — arXiv
  3. JSON Schema specification
  4. OWASP Top 10 for LLM Applications

إكمال الدرس