Claude Code على GLM-5.3 وQwen: خمس مطبّات عند استبدال النموذج عبر LiteLLM
يمكن توجيه Claude Code إلى أي نموذج عبر ANTHROPIC_BASE_URL، لكن كل شيء ينكسر عمليًا في التفاصيل الصغيرة. وضع فريق ZuBrIQ بوابة على LiteLLM بين الوكلاء والنماذج وخرج بخمس مطبّات. أكثرها إزعاجًا صامت: الطلب يتحول بهدوء إلى النموذج الاحتياطي، والاستهلاك يظهر صفرًا، والصورة تختفي دون أي خطأ.
معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
استبدال النموذج في Claude Code أمر في غاية السهولة: ANTHROPIC_BASE_URL ورمز وصول، ويرسل الوكيل طلباته وفق بروتوكول Anthropic Messages إلى أي وجهة. تبدأ المشكلات في اليوم الثاني. وصف فريق البوابة البيلاروسية ZuBrIQ، حيث لا يعمل Claude Code رسميًا ولا توجد وسيلة للدفع لشركة Anthropic، خمس مطبّات وقع فيها بنفسه.
المخطط والقاعدة الأساسية
بين العملاء (Claude Code وCodex وOpenCode وZed وCursor) والنماذج توجد LiteLLM على حاويتين (pods). لا يعرف العملاء سوى أسماء ثابتة: zubr وzubr-flash وzubr-coder. وخلف كل اسم قائمة مسارات مرتبة مع احتياطي: GLM-5.3 لدى مزوّد خارجي، وDeepSeek V4 Pro كخيار احتياطي، ونموذج Qwen3.8-27B الخاص بهم على أربع بطاقات V100. إذا تغيّرت الأوزان أو سقط المزوّد فلن تلاحظ التكاملات ذلك. هذا مريح، لكن هنا تحديدًا تختبئ الأعطال الصامتة.
ثلاثة أعطال صامتة
الأول: التحويل الخفي إلى الاحتياطي. أُضيف GLM-5.3 كواجهة خلفية عادية من نوع openai/. اشتغلت الدردشة، لكن Claude Code وCodex كانا يتلقّيان ردودًا من النموذج الاحتياطي. تحوّل LiteLLM الطلبين /v1/messages و/v1/responses إلى Responses API، فيردّ المزوّد بالخطأ 404، ويمضي الموجّه بصمت إلى الخيار التالي. لا يظهر أي خطأ في السجلات، ولا يكشف الأمر إلا الترويسة x-litellm-attempted-fallbacks: 1. الحل هو استخدام مزوّد LiteLLM الأصلي لهذا المورّد، الذي يحوّل كل شيء إلى chat/completions.
الثاني: الاستهلاك الصفري. مع المزوّد الأصلي لا تأخذ LiteLLM السعر من model_info، فيبقى spend صفرًا، ولا تعمل ميزانيات المفاتيح، ويصبح تقرير الهامش خاطئًا. يجب تكرار الأسعار مباشرة في litellm_params: input_cost_per_token وoutput_cost_per_token وcache_read_input_token_cost. وهناك ملاحظة أخرى: التعديل عبر PATCH /model/{id}/update يصل إلى الحاوية الثانية بعد دقيقة أو دقيقتين، فلا تتعجلوا في الاستنتاج بأنه لم ينجح.
الثالث: الصور. GLM-5.3 قوي في البرمجة لكنه لا يقبل الصور. تردّ نقطة الدردشة لدى المزوّد بالخطأ 400، بينما تُسقط نقطة النهاية المتوافقة مع Anthropic الصورة بصمت، ويخمّن النموذج بثقة اعتمادًا على النص. يرسل المستخدم لقطة شاشة لخطأ فيتلقى استنتاجات عن شيء لم يره النموذج. في ZubrCode جرى التحايل على ذلك هكذا: إذا لم تكن لدى النموذج قدرة الرؤية في الفهرس، تُستبدل الصورة بوصف نصي من GLM-5.3 Flash، ويُخزَّن الناتج مؤقتًا بحسب sha256 للصورة، لأن الوكيل يعيد تشغيل السجل بأكمله في كل دور. وهناك خطأ آخر في الفهرس: كانت القيمة supports_vision: null تُعامَل على أنها false، فاختفت الرؤية من نموذج يرى فعلًا.
إعداد Claude Code والبطاقات الخاصة
يرسل Claude Code بنفسه مهام فرعية خدمية — العناوين وضغط السياق والوكلاء الفرعيين — إلى نماذج من فئات Haiku وSonnet وOpus. إذا استبدلتم ANTHROPIC_MODEL فقط، فستفشل هذه الطلبات بالخطأ 403 في منتصف العمل. يجب تعيين ANTHROPIC_DEFAULT_OPUS_MODEL وANTHROPIC_DEFAULT_SONNET_MODEL وANTHROPIC_DEFAULT_HAIKU_MODEL. اكتبوا ANTHROPIC_BASE_URL دون /v1، وإلا ستحصلون على /v1/v1/messages. اللاحقة [1m] تعلن عن نافذة بحجم 1M وتُحذف قبل الإرسال؛ أما للنماذج التي لا تحملها فتحدد النافذة عبر CLAUDE_CODE_MAX_CONTEXT_TOKENS.
تشغيل نموذج خاص على بطاقات من عام 2017 قصة أخرى. لا تدعم V100 صيغتي bf16 وFP8، ولذلك يُستخدم AWQ INT4 مع حسابات بصيغة FP16، وvLLM مع توازٍ موتّري على 4 بطاقات، ونسخة متفرعة (fork) تدعم SM70. لا تطرح هذه النسخة الأوزان عند حساب ميزانية KV-cache، لذا يُحدَّد --kv-cache-memory-bytes صراحةً. ولا يمكن تشغيل نسختين في الوقت نفسه: فذروة التهيئة تتجاوز 16 غيغابايت، ويصطدم العامل (worker) بخطأ OOM، بينما تتجمد العملية الرئيسية عند NCCL watchdog رغم أن systemd يعرض active. والآن تنتظر الوحدة الثانية health الأولى. النموذج الكثيف 27B بدلًا من MoE 35B-A3B أذكى ويرى الصور بنفسه، لكن أول رمز يصل بعد نحو 1,3 ثانية بدلًا من نحو 0,6 ثانية، ولذلك يُستخدم للمهام الخلفية والبيانات المغلقة.
ما العمل
القيود واضحة: هذه تجربة فريق واحد، والأسعار في الأمثلة افتراضية، وقد يتغير سلوك LiteLLM بين الإصدارات. لكن المبدأ عام. إذا وضعتم بوابة بين الوكيل والنماذج، فراقبوا ترويسات fallback، وقارنوا الاستهلاك بالفواتير الفعلية للمزوّد، وتحققوا مما يحدث للصورة على كل مسار، وعيّنوا الخانات الثلاث Haiku وSonnet وOpus. أغلى الأخطاء هنا لا تنهار برسالة خطأ، بل تجيب بثقة ولكن بكلمات غير صحيحة. البوابة جزء من المنصة التجارية لأصحاب المقال، فالمقال إعلاني جزئيًا، لكن التفاصيل التقنية يسهل التحقق منها على بيئة الاختبار الخاصة بكم.
- 12 نوفمبر 2026AWS تفتح 23 مكوّنًا جاهزًا للذكاء الاصطناعي التوليدي: DoorDash وRicoh تخفضان ساعات التطوير بنسبة 90%
- 12 نوفمبر 2026وكيل ذكي يُنتج فيديو 4K في Blender ويرندره على 10 معالجات رسوميات خلال 51 دقيقة بتكلفة 5.75 دولار
- 12 نوفمبر 2026Anthropic تطلق Claude Fable 5.2: ضعف سعر Opus 5.5 لكنه أرخص من 5.1
- 12 نوفمبر 2026Anthropic نقلت Claude إلى شرائح AMD في ثلاثة أيام بفضل نموذج Mythos
أسئلة وأجوبة حول الخبر
ما أبرز التفاصيل حول المخطط والقاعدة الأساسية؟
بين العملاء (Claude Code وCodex وOpenCode وZed وCursor) والنماذج توجد LiteLLM على حاويتين (pods). لا يعرف العملاء سوى أسماء ثابتة: zubr وzubr-flash وzubr-coder. وخلف كل اسم قائمة مسارات مرتبة مع احتياطي: GLM-5.3 لدى مزوّد خارجي، وDeepSeek V4 Pro كخيار احتياطي، ونموذج Qwen3.8-27B الخاص بهم على أربع بطاقات V100. إذا تغيّرت الأوزان أو سقط المزوّد فلن تلاحظ التكاملات ذلك. هذا مريح، لكن هنا تحديدًا تختبئ الأعطال الصامتة.
ما أبرز التفاصيل حول ثلاثة أعطال صامتة؟
الأول: التحويل الخفي إلى الاحتياطي. أُضيف GLM-5.3 كواجهة خلفية عادية من نوع openai/. اشتغلت الدردشة، لكن Claude Code وCodex كانا يتلقّيان ردودًا من النموذج الاحتياطي. تحوّل LiteLLM الطلبين /v1/messages و/v1/responses إلى Responses API، فيردّ المزوّد بالخطأ 404، ويمضي الموجّه بصمت إلى الخيار التالي. لا يظهر أي خطأ في السجلات، ولا يكشف الأمر إلا الترويسة x-litellm-attempted-fallbacks: 1. الحل هو استخدام مزوّد LiteLLM الأصلي لهذا المورّد، الذي يحوّل كل شيء إلى chat/completions. الثاني: الاستهلاك الصفري.
ما أبرز التفاصيل حول إعداد Claude Code والبطاقات الخاصة؟
يرسل Claude Code بنفسه مهام فرعية خدمية — العناوين وضغط السياق والوكلاء الفرعيين — إلى نماذج من فئات Haiku وSonnet وOpus. إذا استبدلتم ANTHROPIC_MODEL فقط، فستفشل هذه الطلبات بالخطأ 403 في منتصف العمل. يجب تعيين ANTHROPIC_DEFAULT_OPUS_MODEL وANTHROPIC_DEFAULT_SONNET_MODEL وANTHROPIC_DEFAULT_HAIKU_MODEL. اكتبوا ANTHROPIC_BASE_URL دون /v1، وإلا ستحصلون على /v1/v1/messages. اللاحقة [1m] تعلن عن نافذة بحجم 1M وتُحذف قبل الإرسال؛ أما للنماذج التي لا تحملها فتحدد النافذة عبر CLAUDE_CODE_MAX_CONTEXT_TOKENS.
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
أهم ما في عالم الذكاء الاصطناعي — مرة كل أسبوع
سبع قصص مهمة فعلاً هذا الأسبوع، مختارة بعناية. بلا ضجيج ولا بيانات صحفية.
تم! تحقق من بريدك للتأكيد.