بث مباشر 18.11 · الدفعة 318 نوفمبر، 19:00 بتوقيت موسكو — ورشة عملية مجانية لوكلاء الذكاء الاصطناعي · الدفعة 3 تبدأ 23.11ورشة 18 نوفمبر ←الدفعة 3 (23.11)
إصدارتحليل · على الرادارHabr AI→ المصدر

Claude Code على GLM-5.3 وQwen: خمس مطبّات عند استبدال النموذج عبر LiteLLM

يمكن توجيه Claude Code إلى أي نموذج عبر ANTHROPIC_BASE_URL، لكن كل شيء ينكسر عمليًا في التفاصيل الصغيرة. وضع فريق ZuBrIQ بوابة على LiteLLM بين الوكلاء والنماذج وخرج بخمس مطبّات. أكثرها إزعاجًا صامت: الطلب يتحول بهدوء إلى النموذج الاحتياطي، والاستهلاك يظهر صفرًا، والصورة تختفي دون أي خطأ.

معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
Claude Code على GLM-5.3 وQwen: خمس مطبّات عند استبدال النموذج عبر LiteLLM
المصدر: Habr AI. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليHabr AI ↗
رئيس التحرير
حقيقة رئيسية #1راقبوا الترويسة x-litellm-attempted-fallbacks وليس رموز الاستجابة فقط
حقيقة رئيسية #2حدّدوا أسعار النموذج في litellm_params، وإلا سيبقى spend صفرًا
حقيقة رئيسية #3في Claude Code عيّنوا نماذج Haiku وSonnet وOpus، وإلا ستظهر أخطاء 403

استبدال النموذج في 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. أغلى الأخطاء هنا لا تنهار برسالة خطأ، بل تجيب بثقة ولكن بكلمات غير صحيحة. البوابة جزء من المنصة التجارية لأصحاب المقال، فالمقال إعلاني جزئيًا، لكن التفاصيل التقنية يسهل التحقق منها على بيئة الاختبار الخاصة بكم.

القصة

أسئلة وأجوبة حول الخبر

ما أبرز التفاصيل حول المخطط والقاعدة الأساسية؟

بين العملاء (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.

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Hands-On AI Engineering · Hamidun Academy

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.

Start 72h Free Trial →Vibe-Coding Intensive
ما رأيك؟
جارٍ تحميل التعليقات…