ظننت أنني كنت ذكياً. لقد كتبت دالة مساعدة تحجز بالضبط ثلاثين بالمائة من نافذة السياق كميزانية تفكير لمسار الذكاء الاصطناعي الخاص بنا. كانت نظيفة، وقابلة للتنبؤ، وعملت بشكل رائع على Opus 4.5. ثم انتقلت إلى Opus 4.8 وفشل كل طلب مع خطأ 400. لقد تحولت حسابات الرموز (token math) التي صغتها بعناية إلى مجرد هراء بين عشية وضحاها.
كان النمط القديم بسيطاً. تقوم بتعيين قيمة budget_tokens ويقوم النموذج بتقنين تفكيره ليتناسب مع هذا الحد الأقصى. إذا سلمته سياقاً بحجم 128K، فسيقوم الكود الخاص بي باقتطاع حوالي 38,000 رمز لعملية الاستنتاج وترك الباقي للإجابة. شعرت حينها أنني أتصرف بمسؤولية، تماماً مثل الالتزام بحد السرعة في السيارة.
لقد انتهى ذلك النموذج. الإصدارات الأحدث مثل Opus 4.7 و 4.8 تستخدم التفكير التكيفي (adaptive thinking). لم تعد تختار رقماً، بل تمرر "مقبض جهد" (effort knob). قد يبدو هذا مجرد تغيير في المسمى، لكن التحكمين لا يمكن أن يكونا أكثر اختلافاً. كانت budget_tokens تضع سقفاً صلباً لمقدار ما يُسمح للنموذج بالتفكير فيه، أما الجهد (effort) فيتحكم في كيفية تفكير النموذج وتصرفه في المقام الأول. أحدهما يشبه عداد مضخة الوقود، والآخر يشبه خريطة المحرك.
ربط الجهد بالعمل الفعلي
عندما تغيرت طريقة التحكم، توقفت بديهتي القديمة عن العمل. كان عليّ إعادة تعلم ما الذي يمنحه كل إعداد فعلياً. أجريت اختبارات عبر حركة المرور الداخلية لدينا لمعرفة أين يستقر كل مستوى جهد في الممارسة العملية.
التصنيف والتوجيه (Classification and routing) يجب أن يستخدم دائماً تقريباً جهد low. هذه المهام عبارة عن قرارات سريعة. هل هذا طلب استرداد أم سؤال مبيعات؟ هل يحتاج إدخال السجل هذا إلى تصعيد؟ أنت لا تحتاج إلى مونولوج طويل. الجهد المنخفض (low) يحافظ على انخفاض زمن الاستجابة ويجعل التكلفة ضئيلة للغاية.
معظم حركة مرور التطبيقات (Most app traffic)، وهي العمل اليومي من التلخيص، وإعادة الكتابة، وردود الدعم، واستخراج المحتوى، تناسب الجهد من medium إلى high. هذه هي نقطة التوازن؛ حيث يحصل النموذج على مساحة كافية لحل الغموض الحقيقي دون استهلاك الرموز في مهمة لا تحتاج إلى سلسلة تفكير ممتدة.
البرمجة والحلقات الوكيلية (Coding and agentic loops) تحتاج إلى جهد xhigh. هذا هو المكان الذي تتراكم فيه الأخطاء. إذا كتب النموذج خطة سيئة في الدورة الأولى من حلقة استدعاء الأدوات (tool-calling loop)، فسيقضي الخطوات الثلاث التالية في إصلاح الضرر. أو والأسوأ من ذلك، قد يستدعي الأدوات الخاطئة، أو يهلوس بالمعلمات (parameters)، ويترك المستخدم يحدق في سير عمل معطل. التفكير الأفضل في البداية يمنع هذا المنحدر.
المهام الحرجة (Critical tasks) يجب أن تحصل على جهد max. لا تستخدم هذا لكل شيء. احتفظ به للحظات التي تكلف فيها الإجابة الخاطئة أكثر من أي فاتورة رموز. التسويات المالية، وفحوصات السلامة، وقرارات الهندسة المعمارية، والفرز الطبي هي الأنسب لهذا المستوى. إذا كان الخطأ يعني أن على الإنسان فك تشابك الفوضى لساعات، فادفع مقابل التفكير الإضافي.
مفاجأة التكلفة
إليك الجزء الذي حطم نموذجي الذهني. افترضت أن الجهد الأقصى (max) سيؤدي دائماً إلى تضخم تكاليفي. في جولة واحدة، يحدث ذلك؛ فمسار الاستنتاج يكون أطول. ولكن في المهام الوكيلية متعددة الخطوات، غالباً ما تنخفض الفاتورة الإجمالية.
النموذج يخطط بشكل أفضل من المحاولة الأولى. يقوم باستدعاءات أقل للأدوات. ويمنع نفسه من التيه في طرق مسدودة. لقد راقبت وكيل استخراج بيانات كان يحتاج عادةً إلى خمس دورات من الأخذ والرد، فأنجز المهمة في دورتين فقط لأن النموذج كان لديه مساحة كافية من التفكير لتحليل المخطط (schema) بشكل صحيح في البداية. عندما تقيس التكلفة، انظر إلى إتمام المهمة، وليس إلى الطلب الواحد. ميزانية تفكير أكبر لكل خطوة قد تعني خطوات أقل بشكل عام.
كيفية الانتقال دون كسر كل شيء آخر
إذا كان لا يزال لديك budget_tokens تائهة في الكود الخاص بك، فإليك المسار الدقيق للخروج. لا تتخطَّ الخطوتين الثالثة والخامسة؛ لقد فعلت ذلك، وكلفني الأمر ظهيرة كاملة من تصحيح الأخطاء.
ابحث في الكود الخاص بك عن budget_tokens. يجب إزالة كل نسخة منها. هذا المعامل لم يعد يعمل في النماذج الأحدث وسيؤدي إلى خطأ 400.
استبدل كائن الميزانية بكتلة تفكير تكيفية. استخدم thinking: { type: "adaptive" }.
أضف output_config مع مستوى جهد صريح لكل استدعاء. لا تترك هذا لإعداد افتراضي عام إذا كانت حركة المرور لديك مختلطة. لا ينبغي لنقطة نهاية التصنيف خفيفة الوزن أن ترث بالخطأ نفس إعداد الجهد الخاص بوكيل البرمجة. كن صريحاً عند موقع الاستدعاء.
احذف دالة حساب الميزانية المساعدة. أعلم ذلك. ربما تحتوي على اختبارات وحدة (unit tests). كانت تحتوي على ذلك. لكنها أصبحت الآن عبئاً بلا فائدة. المنصة لا تريد حسابات الرموز الخاصة بك؛ فالنموذج يدير وتيرته الخاصة.
قم بإزالة temperature و top_p و top_k. في إصدارات Opus 4.7 و 4.8، ستتسبب معاملات أخذ العينات (sampling parameters) هذه في أخطاء من نوع 400. لقد قامت المنصة بإزالتها من هذا الجيل. حيل ضبط درجة الحرارة (temperature-tuning) القديمة التي تستخدمها لن تجدي نفعاً هنا، وتركها سيؤدي إلى تعطل عملية النقل (migration) الخاصة بك بصمت.
اختبر كل نموذج على حدة. Opus 4.5 و 4.8 مختلفان تماماً. الإعداد (config) الذي يعمل على أحدهما لن يعمل بالضرورة على الآخر. إذا كنت تدعم إصدارات متعددة، فقم بتفريع منطق العمل (logic) الخاص بك أو تعامل معها كخلفيات (backends) منفصلة.
إصلاح تجمّد واجهة المستخدم (UI)
هناك سلوك واحد في البث (streaming) سيُربك مستخدميك إذا لم تتعامل معه. في النماذج الجديدة، يتم بث كتل التفكير (thinking blocks) ولكن النص يكون فارغاً بشكل افتراضي. في واجهتك، سيبدو هذا وكأنه توقف طويل ومحرج دون أي تقدم مرئي. سيفترض المستخدمون أن التطبيق قد تعطل.
لإصلاح ذلك، قم بتمرير thinking: { type: "adaptive", display: "summarized" }. سيمنحك ذلك مؤشراً مرئياً للتقدم دون إلقاء تدفق الأفكار الخام في نافذة الدردشة. ستظل الواجهة الأمامية (frontend) مستجيبة، وسيعرف مستخدموك أن هناك شيئاً ما يحدث في الخلفية.
الدرس الحقيقي
لقد بنيت طبقة تجريد (abstraction layer) كاملة فوق معامل لم يكن المورد ينوي استمراره. لقد قمت بتغليف إعداداتهم في منطقي الخاص لأنني اعتقدت أنني أفهم المقايضة (tradeoff) بشكل أفضل من المنصة. لم أكن كذلك. التفكير التكيفي (Adaptive thinking) هو خيار أفضل لأن النموذج يقرر فعلياً متى يحتاج إلى التفكير بعمق ومتى يمكنه العمل بأقل جهد. أصبح الكود البرمجي الخاص بي أصغر الآن، وأصبحت النتائج أكثر دقة. أحياناً، تكون الخطوة الهندسية الصحيحة هي حذف الكود "الذكي" وترك المنصة تقوم بعملها.
إذا كنت ترغب في قراءة ملاحظات النقل الأصلية، يمكنك العثور عليها هنا. لمزيد من المناقشات العملية مثل هذه، انضم إلى مجتمع GyaanSetu AI على Telegram.
