في مقالٍ مرافق اختبرنا ما إذا كانت البوابة تحاسبك على أعداد توكن صادقة. وهذا المقال يختبر الوعد الآخر: ما إذا كان النموذج خلف الاسم هو فعلًا ذلك النموذج. يستطيع البائع المُعيد أن يُرجِع شيئًا يسمّي نفسه claude-sonnet-4-6 بينما هو في الحقيقة نموذج أصغر، أو نسخة مُحسَّنة (fine-tune)، أو طلبٌ ملفوفٌ في قالبٍ ثابت، أو النموذج الحقيقي مع تقليص نافذة سياقه وخصائصه الأصلية بصمت. النص ذاته في model، لكنّ الشيء على الخط مختلفٌ تمامًا.
لست بحاجة إلى تصديق كلام أحد. أربعة اختبارات قصيرة تفصل النموذج الأصلي من الطرف الأول عن إعادة التغليف. ولا يعتمد أيٌّ منها على سؤال النموذج "ماذا تكون" — فالنماذج رواةٌ غير موثوقين لهويّتها. افحص القدرات بدلًا من ذلك.
الطرق الأربع لتزييف نموذج
- الاستبدال. يُقدَّم نموذجٌ أرخص أو أصغر خلف اسم النموذج الرائد. هو الأرخص تشغيلًا، والأصعب اكتشافًا في الطلبات السهلة.
- وسيط القالب. يُحشَر طلبك في هيكلٍ ثابت قبل أن يصل إلى النموذج — وهذا يغيّر السلوك كما يضخّم فاتورة التوكن بنصٍّ لم تكتبه قط.
- النافذة المقصوصة. يدّعي سياقًا بسعة 200K لكنه يبتره إلى جزءٍ يسير منه، مُسقِطًا وسط المدخلات الطويلة بصمت.
- الخصائص المنزوعة. يُسقَط استخدام الأدوات أو الرؤية (vision) أو التخزين المؤقت للطلبات أو يُزيَّف، فيتدهور كل ما تجاوز الدردشة العادية.
الاختبار الأول — نافذة السياق
أخفِ معلومةً في عمق مستندٍ طويل ثم اطلب استرجاعها. النموذج الأصلي بسعة 200K يسترجعها؛ أمّا النسخة المُخفَّضة المبتورة فتُطلق خطأً عند الإدخال أو تفقد الوسط:
# test_context_window.py
# النموذج المُخفَّض المُختبئ خلف الاسم لا يستطيع فعليًا الاحتفاظ بالسياق الذي
# يدّعيه. أخفِ معلومة في عمق مستند طويل ثم اطلب استرجاعها.
from openai import OpenAI
client = OpenAI(api_key="sk-brievio-...", base_url="https://api.brievio.com/v1")
needle = "The launch code is HORIZON-7741."
filler = ("This sentence is filler. " * 9000) # ~50K توكن من الحشو
haystack = filler + "\n\n" + needle + "\n\n" + filler
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "system", "content": "Answer only from the document."},
{"role": "user", "content": haystack + "\n\nWhat is the launch code?"},
],
max_tokens=20,
)
print(resp.choices[0].message.content) # الأصلي: "HORIZON-7741"
# الوسيط المبتور/المُخفَّض إمّا يُطلق خطأً عند الإدخال الطويل، أو يُسقِط الوسط
# بصمت ويجيب "I don't know" — ادفع الحشو إلى ما بعد النافذة المُعلَنة للنموذج
# (مثلًا 150K+ توكن لنموذج بسعة 200K) وراقِب ما الذي ينهار.الاختبار الثاني — استدعاء الأدوات الأصلي
اطلب استدعاء أداة وافحص tool_calls. النموذج الأصلي يُرجِع استدعاءً مُهيكلًا؛ أمّا إعادة التغليف التي تتظاهر فقط بدعم الأدوات فتُرجِع null وتُلقي كتلة JSON داخل النص:
# test_tools.py — استدعاء أدوات أصلي، أم تقليد؟
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "What's the weather in Tokyo? Use the tool."}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}],
tool_choice="auto",
)
msg = resp.choices[0].message
print("tool_calls:", msg.tool_calls) # الأصلي: استدعاء مُهيكَل get_weather(city="Tokyo")
# الوسيط المُعاد تغليفه الذي لا يدعم الأدوات فعليًا يُرجِع tool_calls=None
# ويحشر بدلًا من ذلك كتلة JSON كنصٍّ صِرف داخل message.content. تلك هي العلامة الفاضحة.الاختبار الثالث — الرؤية
أرسِل صورةً تعرف محتواها مسبقًا واطلب من النموذج قراءتها. النموذج المُخفَّض النصّي البحت لا يستطيع — فيُهلوِس أو يُطلق خطأً:
# test_vision.py — هل يرى فعلًا؟
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Reply with only the exact text shown in this image."},
{"type": "image_url", "image_url": {"url": "https://your-host/known-text.png"}},
],
}],
max_tokens=30,
)
print(resp.choices[0].message.content) # الأصلي: النص الموجود في الصورة
# النموذج المُخفَّض النصّي البحت لا يستطيع قراءتها — فيُهلوِس، أو يُطلق خطأً عند
# جزء الصورة، أو يتجاهلها. استخدم صورةً تعرف محتواها مسبقًا.الاختبار الرابع — التخزين المؤقت والفاتورة
الفحص الرابع هو ذاته الوارد في مقال تضخيم التوكن: أرسِل بادئةً طويلة مرتين وتأكَّد من أنّ cached_tokens لا يساوي صفرًا عند التكرار، وأنّ prompt_tokens يطابق النص الذي أرسلته فعلًا. وسيط القالب يفشل في كليهما — فهو لا يستطيع تخزين بادئةٍ يُعيد كتابتها مؤقتًا، ويحاسبك على الغلاف. أصالة النموذج وصدق العدّاد يسيران معًا؛ افحصهما معًا.
جمع الخيوط معًا
النموذج الأصلي يجتاز الأربعة جميعًا: يحتفظ بكامل سياقه، ويُرجِع استدعاءات أدوات حقيقية، ويقرأ الصور، ويُخزِّن البادئات مؤقتًا، ويحاسب على التوكن الذي أرسلته. أمّا إعادة التغليف أو التخفيض فتنكسر عند واحدٍ على الأقل — وغالبًا عند الأغلى تزييفًا أولًا (السياق الطويل والرؤية). شغِّل المجموعة مرةً عند توصيل بوابةٍ جديدة، ومجددًا كلما تدهورت إجابات النموذج بصمت؛ فالانحدارات هنا هي الطريقة التي تظهر بها التخفيضات الصامتة.
المرجع الصادق
توجِّه Brievio النماذج الأصلية من الطرف الأول عبر قنوات سحابية من الطبقة الأولى — Claude عبر AWS Bedrock، وGemini عبر Google Vertex — مع تمرير نافذة السياق الكاملة واستخدام الأدوات الأصلي والرؤية والتخزين المؤقت للطلبات دون مساس، والنموذج الذي تطلبه هو النموذج الذي تحصل عليه. شغِّل كل اختبارٍ أعلاه على Brievio ويُفترض أن يجتازها بنظافة. كتالوج النماذج يُدرِج القدرات والسياق الحقيقيين لكل نموذج، والوثائق تُبيّن أشكال الطلبات الدقيقة المستخدَمة هنا.
"هل هو النموذج الحقيقي" و"هل يقول العدّاد الحقيقة" هما السؤالان الجديران بطرحهما على أي بوابة ذكاء اصطناعي — بما فيها هذه. وكلٌّ منهما يستغرق دقيقةً تقريبًا للإجابة. اطرحهما.