الانتقال إلى المحتوى الرئيسي

ضوابط التكلفة على مستوى المسار: وضع ميزانية لتشغيل الوكلاء قبل أن تكلفهم

محاسبة الرموز لكل استدعاء تخفي محرك التكلفة الحقيقي في أنظمة الوكلاء: الحلقات متعددة الخطوات. الميزانيات تنتمي إلى التشغيل، وتُفرض خارج النموذج.

A view of advanced industrial machinery displayed at a trade fair exhibit.

وحدة الحساب خاطئة

معظم لوحات التكلفة لأنظمة LLM مبنية حول سؤال واحد: كم كلف هذا الاستدعاء؟ هذا السؤال قابل للإجابة ودقيق وغير مفيد تقريبًا للوكلاء. تشغيل الوكيل ليس استدعاءً. إنه مسار: خطة، وتسلسل من استدعاءات الأدوات، وواحدة أو أكثر من تمريرات التأمل، وإعادات المحاولة بعد وسائط مشوهة، وتوليف نهائي. الاستدعاء هو الذرة؛ والمسار هو الجزيء. تسعير الذرة ووضع ميزانية للجزيء هو كيف ينتهي الأمر بالفرق إلى فاتورة شهرية لا يستطيع أحد تفسيرها من السجلات.

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

لماذا يضلل التسعير لكل استدعاء

الاستدعاء الواحد له تكلفة محدودة. أما المسار فلا، لأن عدد الاستدعاءات دالة على المهمة وقرارات النموذج نفسه واستجابات البيئة. ثلاثة عوامل تهيمن ولا يظهر أي منها في سجل لكل استدعاء.

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

توسع الأدوات. يمكن لخطوة تخطيط أن تقرر الاستعلام من مصدر واحد أو اثني عشر. النموذج لا يعرف اقتصاديات وحدتك، لذا ليس لديه سبب لتفضيل أحدها. التوسع هو حيث يتباعد الحالة الوسيطة الجيدة والحالة الطرفية المرضية بمقدار مرتبة من الحجم، والتباعد بنيوي وليس عرضيًا.

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

النتيجة هي توزيع تكلفة ثقيل الذيل. التشغيل الوسيط رخيص والمتوسط ليس كذلك. الفرق التي تضع ميزانية من الوسيط تتفاجأ بشكل منهجي؛ والفرق التي تضع ميزانية من المتوسط تفرط في التخصيص ولا تزال تتفاجأ بالذيل. الذيل ليس ضوضاء. إنه فئة محددة من المهام يتعامل معها الوكيل بالتكرار، وسيتكرر.

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

Close-up of a vibrant console control panel with illuminated buttons, ideal for technology themes.

أوليات الميزانية

ميزانية التشغيل هي مجموعة من السقوف المرتبطة بمعرف مسار وتُفرض بواسطة المنسق، وليس بواسطة النموذج. الفرض خارج النموذج مهم: نموذج يُطلب منه البقاء ضمن الميزانية يقدم وعدًا ناعمًا، والوعود الناعمة هي بالضبط ما يفشل في الذيل. المنسق يستطيع العد، والعد هو ما تتطلبه الميزانيات.

السقوف

ثلاثة سقوف تغطي معظم أنماط الفشل:

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

التنفيذ العملي يحتفظ بسجل لكل تشغيل تكتب فيه كل خطوة قبل إرسال الخطوة:

class RunLedger:
    def __init__(self, limits):
        self.limits = limits
        self.tokens = 0
        self.tools = 0
        self.started = now()

def admit(self, est_tokens, tool_name=None):
        if self.tokens + est_tokens > self.limits.tokens:
            raise BudgetExceeded("tokens")
        if tool_name and self.tools + 1 > self.limits.tools:
            raise BudgetExceeded("tools")
        if now() - self.started > self.limits.wall_clock:
            raise BudgetExceeded("wall_clock")
        self.tokens += est_tokens
        if tool_name:
            self.tools += 1

التقدير الممرر إلى admit متحفظ عن قصد: إنه التكلفة المتوقعة للخطوة بالإضافة إلى احتياطي لإعادة محاولة واحدة. الاحتياطي هو ما يجعل السقف ذا

التوقف الصارم عند السقف صحيح ولكنه فظ. التصميم الأفضل يحدد سلمًا من الأنماط المتدهورة ينزل فيه المنسق مع اقتراب التشغيل من حدوده:

Glass bottles on an automated line in a factory, showcasing industrial glass making.

  1. تقليل مجموعة الأدوات. إسقاط الأدوات الاختيارية أو عالية زمن الاستجابة، والإبقاء على التي لا يمكن للمهمة إكمالها بدونها.
  2. إسقاط تمريرات التأمل. تخطي النقد الذاتي والتحقق، وقبول جودة إجابة أقل، وتسجيل أن التشغيل تدهور.
  3. الفشل المغلق. إرجاع فشل منظم مع المسار الجزئي مرفقًا، بدلًا من محاولة غير محدودة للنجاح.

السلم محدد مسبقًا لأن لحظة الاستنفاد هي أسوأ وقت ممكن لتصميم بديل. تشغيل متدهور يعيد إجابة جزئية قابلة للاستخدام وعلامة واضحة أفضل تشغيليًا بكثير من تشغيل إما يتجاوز الميزانية بصمت أو ينتهي بلا شيء.

الإسناد

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

التبعات التشغيلية

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

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

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

ما الذي يجب بناؤه أولًا

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

مشاركةXLinkedInرابط دائم6 دقيقة قراءة

قراءات ذات صلة

الأسئلة التي يجيب عنها هذا

Why is per-call token accounting insufficient for agent systems?

Because the number of calls in a trajectory is not fixed. Retries, tool fan-out and reflection passes multiply the call count, and growing context makes later calls more expensive than earlier ones. A per-call ledger cannot see the loop that dominates the bill.

Should the model enforce its own budget?

No. A model asked to stay under budget is making a soft promise that tends to fail exactly in the tail cases where a budget matters. Enforce ceilings in the orchestrator, outside the model, by counting tokens, tool invocations and elapsed time.

What are tiered degraded modes?

A predefined ladder the orchestrator walks down as a run approaches its limits: first reduce the tool set, then drop reflection and verification passes, then fail closed with a structured partial result. The ladder is defined before the run starts, not at exhaustion.

How do budgets change agent evaluation?

They make comparisons meaningful. Without a shared cost bound, a more expensive design can win on success rate simply by trying longer. With equal ceilings, a cheaper trajectory at equal success is a genuine result.