Fruga

باني مخططات الأدوات لاستدعاء الدوال

صِف الأداة مرة واحدة، اسمها والغرض منها وما تأخذه من وسائط، ثم خذ التعريف بالشكل الذي تتوقّعه Anthropic أو OpenAI أو Gemini أو MCP. الفحوصات المعروضة هي التي تحدّد هل سيستخدم النموذج الأداة استخداماً صحيحاً، وهذا سؤال مختلف عن صحّة JSON نفسه.

  • الصيغ5 صيغ من تعريف واحد
  • الفحوصاتالتسمية والأوصاف وقيم enum
  • يعملبالكامل داخل متصفحك

الأداة

ما يقرؤه النموذج قبل أن يقرّر استدعاءها.

الوسائط

المراجعة

لا شيء يمنع الاستخدام، وهذه عادات تُبقي استدعاءات الأدوات دقيقة.

هذا التعريف واضح ومقروء.

التعريف

يوضع في مصفوفة tools ضمن طلب Messages API.

[
  {
    "name": "search_orders",
    "description": "Search the customer's orders by status, date or product. Use it whenever the customer asks about an order they have already placed. Do not use it to create, cancel or modify an order.",
    "input_schema": {
      "type": "object",
      "properties": {
        "query": {
          "type": "string",
          "description": "Free text to match against the product name or the order reference."
        },
        "status": {
          "type": "string",
          "description": "Restrict the search to orders in this state.",
          "enum": [
            "pending",
            "shipped",
            "delivered",
            "cancelled"
          ]
        },
        "limit": {
          "type": "integer",
          "description": "How many orders to return, newest first. Defaults to ten on the server."
        },
        "customer_id": {
          "type": "string",
          "description": "The customer whose orders to search."
        }
      },
      "required": [
        "customer_id"
      ]
    }
  }
]
tool.anthropic.json

الوصف هو البرومبت

النموذج لا يرى شيفرتك، بل يرى اسم الأداة ووصفها ويقرّر بناءً عليهما. عبارة «ابحث في الطلبات» تخمين، أما «ابحث في طلبات العميل الحالية، ولا تستخدمها لإنشاء طلب أو إلغائه» فتعليمات واضحة، والنصف المنفي منها هو ما يمنع الاستدعاء الخاطئ.

قيم enum أفضل من النص الحر

وسيط الحالة المعرَّف كنص يدعو النموذج إلى اختراع قيمة. أما الوسيط نفسه بأربع قيم مسموح بها فلا يمكن ملؤه خطأً، ولا يحتاج منك تحقّقاً إضافياً غير المخطط.

لماذا يختلف الغلاف

مخطط JSON Schema واحد في كل مكان، والذي يتغيّر هو الغلاف فقط: input_schema لـ Anthropic، وparameters لـ OpenAI وGemini، وinputSchema لـ MCP. كتابته أربع مرات يدوياً هي ما يجعل الأداة تعمل مع مزوّد وتفشل بصمت مع التالي.

الأسئلة الشائعة

ما الفرق بين تعريف الأداة عند Anthropic وOpenAI وGemini؟
مخطط JSON للوسائط متطابق، والغلاف هو المختلف: input_schema عند Anthropic، وparameters عند OpenAI، وfunctionDeclarations عند Gemini، وinputSchema في MCP.
لماذا يستدعي النموذج الأداة الخطأ؟
غالباً بسبب الوصف. النموذج يختار الأداة من اسمها ووصفها، فالوصف المبهم يجعل الاختيار أقرب إلى الحظ. اذكر ما تفعله الأداة، ومتى تُستخدم، ومتى لا تُستخدم.
هل أستخدم enum في وسائط الأداة؟
نعم كلما كانت القيم محدودة. القائمة المغلقة تمنع القيم المخترعة وتغنيك عن تحقق إضافي في شيفرتك.
هل يمكن تصدير التعريف لخادم MCP؟
نعم، الأداة تُخرج صيغة MCP كما تُعيدها tools/list، إلى جانب صيغ Anthropic وOpenAI وGemini ومخطط JSON الخام.