مسارات النماذج وقدراتها

«هل يدعم هذا النموذج استدعاء الأدوات؟» يبدو سؤالًا عن النموذج. لكنه ليس كذلك. إنه سؤال عن النموذج وعن نقطة النهاية التي تستدعيه عبرها — والنموذج نفسه قد تكون إجابته نعم على إحداها ولا على الأخرى. تشرح هذه الصفحة السبب، وكيف يحسم Entity Enricher المسألة بقياسها بدلًا من الوثوق بفهرس.

نموذج يدعم ميزةً ويرفضها

أرسِل إلى عائلة gpt-6 من OpenAI طلبًا يتضمّن أدوات دالّية على نقطة النهاية التقليدية /v1/chat/completions فيُرفض الطلب رفضًا صريحًا:

400 Bad Request
Function tools with reasoning_effort are not supported.
Use /v1/responses or set reasoning_effort to 'none'.

أرسِل النموذج نفسه والأدوات نفسها والمُوجِّه نفسه إلى /v1/responses فيستجيب بشكل طبيعي — على قناتَي المخرجات المهيكلة كلتيهما، مع جهد استدلال أو بدونه. لم يتغيّر شيء في النموذج. العنوان وحده هو ما تغيّر.

النتيجة

القدرة ليست خاصية للنموذج وحده، بل هي خاصية لثنائية (نموذج، نقطة نهاية). لذا فإن كل فهرس يخزّن قيمة صواب/خطأ واحدة لكل نموذج إنما يجيب عن سؤال لا يستطيع رؤيته أصلًا.

ما المقصود بالمسار

المسار هو ببساطة نقطة النهاية التي يُرسَل إليها الطلب. المزوّد نفسه، والنموذج نفسه، ومفتاح API نفسه — لكن بصيغة نقل مختلفة، وبنية طلب مختلفة، ومجموعة قواعد مختلفة لما يمكن الجمع بينه. تقدّم OpenAI مسارين منها، وقد نسخت معظم الصناعة المسار الأقدم.

المسارصيغة التبادلمن يتحدث بها
Chat Completions
/v1/chat/completions
2023
بلا حالة: ترسل قائمة الرسائل بالكامل، فتستعيد الرسالة التالية. ولا يُحفظ شيء على الخادم بين النداءات.OpenAI، والمعيار الفعلي في القطاع الذي نسخه الجميع تقريبًا — xAI, DeepSeek, Alibaba, Groq, Together, Ollama ومعظم البوابات المتوافقة مع OpenAI.
Responses API
/v1/responses
2025
يُرجع قائمة من العناصر المُصنَّفة — عنصر استدلال، أو رسالة، أو نداء أداة دالّية، أو نداء أداة مُستضافة — ويحفظ الحالة على الخادم، ويمكنه نقل الاستدلال من دور إلى الدور التالي.OpenAI فقط. فأي نقطة نهاية مشابهة تتحدث بصيغة Chat Completions لا تُقدِّم هذه النقطة تلقائيًا.

لهذا صار تعبير “OpenAI API” ملتبسًا اليوم: فهناك اثنان، يتداخلان، ولا يفرضان القواعد نفسها.

لماذا توجد واجهتا API من الأساس

أخلّت نماذج الاستدلال بنموذج الرسائل. فالاستدلال الداخلي للنموذج ليس رسالة: فهو ليس شيئًا قاله لك، ولا شيئًا قلته له. ولا يملك Chat Completions سوى قائمة من الرسائل، فلا مكان لديه للاستدلال — وما لا يستطيع تمثيله يُسقطه بين الأدوار.

صُمِّم Responses API حول هذه الفجوة تحديدًا. فالاستدلال عنصر أصيل في القائمة المُعادة؛ ويمكن أن يعود مُشفَّرًا ويُعاد تمريره في الدور التالي، فيتابع النموذج من تفكيره ذاته بدلًا من إعادة بنائه.

وهو ما يفسّر الرفض أعلاه

استدعاء أداة دالّية هو رحلة ذهاب وإياب: يطلب النموذج أداةً، فتجيب شيفرتك، ثم يواصل النموذج. وفي Chat Completions لا مكان للاحتفاظ بالاستدلال عبر هذه الرحلة، فتُستأنف المتابعة بصمت من دونه — وسيضطر النموذج إلى إعادة التفكير الذي دفعت ثمنه بالفعل، والأرجح أن يعيده على نحو مختلف.

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

القدرات تشير إلى اتجاهات مختلفة

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

الأدوات والبحث على الويب تتطلب Responses API

المخرجات المهيكلة عبر قناة الأدوات هي بالضبط التركيبة التي يرفضها Chat Completions على نموذج استدلال، وأداة البحث على الويب المُستضافة عند المزوّد لا تُقبل إلا هناك.

الصوت الثنائي يعمل على Chat Completions فقط

إرفاق بايتات صوتية خام أمر لا يستطيع مسار Responses API حمله، لذا لا يمكن الوصول إلى نموذج يدعم الصوت إلا عبر نقطة النهاية الأقدم.

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

كيف يقيس Entity Enricher مسارًا

لا يُرسل فحص القدرات طلبًا مُصطنعًا مكتوبًا يدويًا، بل يشغّل مسار الوكيل الحقيقي — وهو الشيفرة نفسها التي تمر بها عملية الإثراء — مع تفعيل القدرة الخاضعة للاختبار إلزاميًا، ويترك استجابة المزوّد هي الفاصل. وبذلك يكون المقيس هو ما يستطيع التطبيق فعله فعليًا، لا ما قد يقبله الـ API نظريًا.

يُنفَّذ السلّم كاملًا — قنوات المخرجات المهيكلة، والرؤية، وPDF، والصوت، والبحث على الويب، والاستدلال والتحكم في مستوى جهده لكل طلب — مرة واحدة لكل مسار يمكن للموجِّه اختياره. ولدى كل مزوّد تقريبًا يعني ذلك مسارًا واحدًا، ويكلّف الفحص تمامًا ما كان يكلّفه دائمًا؛ ولا يُقاس مرتين سوى المزوّدين على شاكلة OpenAI، الذين يمكن فعلًا الوصول إليهم بطريقتين.

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

نعم

قُبل الطلب وأنتج النموذج نوع الإجابة المتوقَّع.

يُسجَّل كقيمة «صحيح» مقيسة لذلك المسار — ويتقدّم في الترتيب على كل ادعاء مُستخلَص.

لا

رفض المزوّد القدرة صراحةً، أو رفض العميل بناء الطلب من الأساس.

النتيجة الوحيدة المسموح لها بكتابة قيمة false. والرفض مجاني أيضًا: لا يُفوتر أبدًا.

غير معروف

أي شيء آخر: حدّ معدّل، أو مستوى وصول غير متاح، أو انتهاء مهلة، أو خطأ 5xx من المزوّد، أو خطأ غير معروف.

لا يُسجَّل شيء، ويمكن للفحص التالي أن يحسم الأمر.

لماذا يكون الوضع الافتراضي “غير معروف” وليس “لا” أبدًا

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

القبول ليس كالفهم

رمز HTTP 200 يثبت أن الطلب قُبِل، لا أن النموذج قرأ المرفق فعلًا — فقد يقبل المزوّد صورةً بكل سهولة ويسلّمها إلى نموذج لا ينظر إليها أبدًا. لذلك فإن كل فحص يحمل حمولةً إنما يحمل حمولةً يمكن التحقق من إجابتها:

القدرةالحِمل المُرسَلالسؤال المطروح
الرؤيةصورة بلون أحمر خالص«ما اللون الغالب عليها؟»
إدخال PDFملف PDF يحتوي على كلمة واحدة فقط«أي كلمة توجد في المستند؟»
إدخال صوتيملف صوتي يحتوي على عدد قابل للعدّ من النغمات«كم عدد نغمات الصفير المنفصلة؟»

نتيجتان منفصلتان، عن قصد

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

الادّعاءات في مقابل القياسات

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

ادّعاء مُستخلَص من الويب

«هذا النموذج يدعم استدعاء الأدوات.» صحيح في مكان ما. صامت عن المكان. مفيد كنقطة انطلاق لنموذج لم يفحصه أحد بعد.

قياس

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

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

قراءتها داخل المنتج

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

المسار المُقدَّم (الافتراضي)

كل صف يُعبِّر عن نقطة النهاية التي يُقدَّم عليها ذلك النموذج فعليًا. وهذا هو العرض المطابق لما تحصل عليه عند تشغيل عملية إثراء، وهو الذي ينبغي الاطلاع عليه إلا إذا كنت تتحقق من نقطة نهاية محددة.

مسار مُسمّى

ثبّت الجدول بالكامل على نقطة نهاية واحدة، فتُعبِّر الأيقونات عن تلك النقطة وحدها — وهكذا ترى قدرةً تظهر أو تختفي عند التبديل بينها، وهكذا تقارن نموذجين على أساس متكافئ.

النموذج الذي له مسار واحد قابل للوصول لا يعرض أي محدِّد على الإطلاق: لا شيء للاختيار، وأيقوناته تجيب أصلًا عن نقطة النهاية الوحيدة المتاحة له. ويظهر المحدِّد تحديدًا حين يكون الالتباس حقيقيًا.

ماذا يعني هذا لك

لا شيء في معظم الأحيان — وهذا هو المقصود. فأنت لا تختار مسارًا أبدًا؛ إنما تختار نموذجًا وتصف عملية التشغيل، ويختار موجِّه المسارات نقطة النهاية القادرة على حمل ما تحتاجه العملية: الأدوات والبحث على الويب تُرسَل حيث تُقبَل، والمرفق الصوتي يُرسَل حيث يُحمَل الصوت.

الحالة الوحيدة التي ستلاحظها هي تعارض حقيقي — كأن تطلب البحث على الويب وترفق ملفًا صوتيًا مع النموذج نفسه من OpenAI، إذ لا توجد نقطة نهاية واحدة تخدم الاثنين معًا. يُرفض هذا التشغيل صراحةً مع ذكر القدرتين وما يستطيع كل مسار حمله، بدلًا من التنفيذ وإسقاط إحداهما بصمت. أسقِط أحد المتطلبين، أو اختر نموذجًا يخدم الاثنين، وسيمضي التنفيذ.

وحين تفاجئك أيقونة قدرة، يكون محدِّد المسار هو التفسير: فأنت تنظر في الغالب إلى نموذج تتوقف إجابته على المكان الذي طُرح فيه السؤال.