نستخدم ملفات تعريف الارتباط. تُبقيك ملفات تعريف الارتباط وتخزين المتصفح مسجّلًا للدخول وتتذكر تفضيلاتك. وبإذنك نقيس أيضًا كيفية استخدام الموقع. يمكنك في أي وقت. راجع سياسة ملفات تعريف الارتباط.

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

نقاط النهاية

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

دع النماذج تستدعي دوالك بصيغة tools في OpenAI، مع حلقة التنفيذ ومعاملات tool_choice وأمثلة الطلب والاستجابة ونصائح البث.

جرّبه في ساحة التجربة

يتيح استدعاء الأدوات (function calling) للنموذج أن يطلب من كودك تشغيل دالة ثم يستخدم النتيجة في إجابته. يستخدم api14 صيغة tools في OpenAI مع كل نموذج يدعم الأدوات: OpenAI وAnthropic وGoogle وMistral وQwen وDeepSeek وغيرها. للعثور على النماذج التي تدعم الأدوات، صفِّ بالمعاملات المدعومة في قائمة النماذج (تتضمن supported_parameters القيمة tools).

معاملات الطلب

المعاملالنوعالوصف
toolsarray[{ "type": "function", "function": { "name", "description", "parameters" } }]، حيث parameters مخطط JSON Schema.
tool_choicestring | object"auto" (الافتراضي) أو "none" أو "required" أو { "type": "function", "function": { "name": "get_weather" } }.
parallel_tool_callsbooleanالسماح بعدة استدعاءات أدوات في دورة واحدة (الافتراضي true حيث يكون مدعومًا).
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "What is the weather in Istanbul?"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get the current weather",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string"
            }
          },
          "required": [
            "city"
          ]
        }
      }
    }
  ]
});
console.log(result.choices[0].message.tool_calls);

الحلقة

  1. أرسل messages وtools.
  2. إذا كان في الاستجابة finish_reason: "tool_calls"، نفّذ كل عنصر في message.tool_calls.
  3. أضف رسالة المساعد، ثم رسالة { "role": "tool", "tool_call_id", "content" } واحدة لكل استدعاء، وأرسل الطلب من جديد.
  4. كرّر حتى يجيب النموذج بمحتوى نصي عادي.

استجابة تحتوي على استدعاء أداة:

{
  "id": "gen-1760000000-tool1",
  "model": "anthropic/claude-sonnet-4.5",
  "choices": [
    {
      "index": 0,
      "finish_reason": "tool_calls",
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_01",
            "type": "function",
            "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" }
          }
        ]
      }
    }
  ],
  "usage": { "prompt_tokens": 182, "completion_tokens": 21, "total_tokens": 203, "cost": 0.000861 }
}

يتضمن الطلب التالي نتيجة الأداة:

{
  "model": "anthropic/claude-sonnet-4.5",
  "tools": [ ... same tools ... ],
  "messages": [
    { "role": "user", "content": "What's the weather in Istanbul?" },
    { "role": "assistant", "content": null, "tool_calls": [ { "id": "call_01", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"Istanbul\"}" } } ] },
    { "role": "tool", "tool_call_id": "call_01", "content": "{\"temp_c\": 21, \"sky\": \"clear\"}" }
  ]
}

استمر في إرسال tools مع كل طلب في الحلقة. يرفض كثير من المزوّدين رسالة tool إذا خلا الطلب من تعريفات tools.

نصائح

  • arguments سلسلة JSON نصية. حلّلها وتحقق منها، لأن النماذج قد تنتج JSON غير صالح.
  • عند البث تصل استدعاءات الأدوات في أجزاء delta.tool_calls مفهرسة بـ index. اضمم سلاسل arguments قبل تحليلها.
  • لتوجيه الطلب فقط إلى المزوّدين الذين يدعمون الأدوات، اضبط provider: { "require_parameters": true }. راجع توجيه المزوّد.
  • كل تكرار في الحلقة طلب منفصل يُحاسَب عليه.

الأخطاء

قد يُعيد النموذج الذي لا يدعم الأدوات 400 أو 404 من المزوّد ("No endpoints found that support tool use"). بقية الأخطاء هي نفسها في Chat completions. راجع الأخطاء.