فاز 15 · درس 13

سقف تکرار، بودجه‌بندی و مهار هزینه در ایجنت‌های هوش مصنوعی

نوع
مفهومی
زمان
حدود 60 دقیقه
زبان‌ها
Python (stdlib, layered cost-governor simulator)
پیش‌نیاز
فاز 15 · درس 10 (حالت‌های دسترسی و مجوزها)، فاز 15 · درس 12 (اجرای پایدار)
نمودار عقربه‌ای فشارسنج دیجیتال متصل به یک قطع‌کننده مدار که برای نشان دادن سقف بودجه مالی به رنگ قرمز درآمده است
فهرست مطالب
  1. صورت‌مسئله
  2. مفاهیم پایه
  3. پشته‌ی مهار هزینه‌ها
  4. چرا پشته، و نه فقط یک سقف؟
  5. سطح بودجه‌بندی در بستر آزمایشی
  6. قانون هوش مصنوعی اتحادیه اروپا و OWASP Agentic Top 10
  7. نمونه‌ی واقعی جهش 1200 دلاری به 4800 دلار
  8. استفاده از ابزارهای واقعی
  9. خروجی این درس
  10. تمرین‌ها
  11. اصطلاحات کلیدی
  12. برای مطالعه‌ی بیشتر

وقتی چت‌بات‌ها اشتباه کنند، صرفاً پاسخی اشتباه می‌نویسند؛ اما خطای یک ایجنت خودمختار، صورت‌حسابی سنگین روی دست توسعه‌دهنده می‌گذارد. در معماری‌های نوین، افتادن ایجنت در حلقه‌های نامتناهی استدلال یا استعلام‌های پیاپی ابزارها، آسیبی با عنوان محروم‌سازی کیف پول (Denial of Wallet) ایجاد می‌کند که هزینه‌های مصرف API را ناگهان چندبرابر می‌کند.

برای برنامه‌نویسان ایرانی با توجه به اینکه پرداخت مستقیم ارزی برای سرویس‌های خارجی مثل OpenAI یا Anthropic با کارت‌های بانکی داخلی ممکن نیست و شارژ حساب از مسیرهای واسط یا گیت‌وی‌های ارزی انجام می‌شود، هدررفت اعتبار بسیار دردناک‌تر است. پایان ناگهانی موجودی ارزی حساب API، سرویس زنده را بی‌درنگ متوقف می‌کند.

در این درس یاد می‌گیرید چطور با طراحی یک «پشته‌ی مهار هزینه» چندلایه متشکل از سقف تکرار (max_turns)، سقف مصرف توکن، چک‌پوینت‌های نظارت انسانی و محدودیت شتاب مالی، ایجنت‌های خود را ایمن کنید تا حتی در صورت بروز باگ یا حلقه‌های نامنتظره، هزینه‌های زیرساخت مهار شوند.

هزینه‌ی ماهانه‌ی مدل زبانی در یک ایجنت تجارت الکترونیکِ متوسط، پس از فعال‌سازی قابلیت «رهگیری سفارش» (order-tracking) توسط تیم توسعه، از 1200 دلار به 4800 دلار جهش کرد. این یک باگ در قیمت‌گذاری نیست؛ ایجنتی است که وارد یک حلقه‌ی جدید شده و بی‌وقفه درون آن هزینه تراشیده است. جعبه‌ابزار حاکمیت ایجنت مایکروسافت (2 آوریل 2026) لایه‌های دفاعی در برابر این دسته از مشکلات را مدون کرده است: محدودیت max_tokens به ازای هر درخواست، سهمیه‌ی توکن و دلاری به ازای هر وظیفه، سقف‌های روزانه و ماهانه، سقف تعداد تکرار، مسیریابی مدل چندسطحی، کش کردن پرامپت، پنجره‌بندی بافتار، چک‌پوینت‌های انسان در چرخه (HITL) برای اقدامات پرهزینه و سوئیچ‌های قطع اضطراری هنگام نقض بودجه. کیت توسعه‌ی نرم‌افزار ایجنت Claude Code متعلق به Anthropic نیز همین سازوکارهای پایه‌ای را با نام‌های متفاوتی عرضه می‌کند. محدودیت‌های شتاب مالی — مثلاً قطع دسترسی در صورت مصرف بیش از 50 دلار در 10 دقیقه — حلقه‌ها را بسیار سریع‌تر از سقف‌های ماهانه به دام می‌اندازند.

صورت‌مسئله

ایجنت‌های خودمختار در هر نوبت گفت‌وگو پول واقعی خرج می‌کنند. خروجی بدِ یک چت‌بات نهایتاً پاسخی نامناسب است؛ اما حلقه‌ی معیوب یک ایجنت، صورت‌حسابی سنگین روی دست‌تان می‌گذارد. اصطلاح رایج در صنعت برای این حالت شکست، «محروم‌سازی کیف پول» (Denial of Wallet) است؛ ایجنت مدام استدلال می‌کند، ابزارها را فراخوانی می‌کند، هزینه می‌تراشد و هیچ ترمزی جلویش را نمی‌گیرد، چون اصلاً سازوکاری برای مهارش طراحی نشده است.

راهکار این مشکل تعیین یک عددِ تنها نیست، بلکه چیدن پشته‌ای از محدودیت‌ها در مقیاس‌های زمانی و سطوح دانه‌بندی متفاوت است: به ازای هر درخواست، به ازای هر وظیفه، به ازای هر ساعت، به ازای هر روز و به ازای هر ماه. یک پشته‌ی درست‌طراحی‌شده، حلقه‌ی لجام‌گسیخته را در عرض چند دقیقه، نشتیِ آرام را ظرف چند ساعت و انتشار یک نسخه‌ی معیوب را طی یک روز مهار می‌کند. همین پشته به ایجنت خودمختار با افق زمانی طولانی اجازه می‌دهد اصلاً بودجه‌اش را حفظ کند و از مدار خارج نشود.

این یک درس مهندسی است: محاسبات ریاضی آن بسیار ساده‌اند؛ جایی که تیم‌ها شکست می‌خورند، رعایت انضباط است. تمام محدودیت‌های فهرست زیر یا در جعبه‌ابزار حاکمیت ایجنت مایکروسافت آمده‌اند یا در مستندات Agent SDK در Claude Code شرکت Anthropic.

مفاهیم پایه

پشته‌ی مهار هزینه‌ها

  1. محدودیت max_tokens به ازای هر درخواست. سازوکاری ساده که جلوی تولید خروجی بی‌پایان در یک فراخوانی را می‌گیرد.
  2. سهمیه‌ی توکن به ازای هر وظیفه. در کل فرایند اجرا، مصرف نباید از N توکن فراتر برود؛ با رسیدن به سقف، کار بلافاصله متوقف می‌شود.
  3. سهمیه‌ی دلاری به ازای هر وظیفه. همان منطق توکن اما بر حسب پول واقعی؛ که در Claude Code با عنوان max_budget_usd شناخته می‌شود.
  4. سقف فراخوانی به ازای هر ابزار. حداکثر N بار فراخوانی برای WebFetch، نهایتاً N بار برای shell_exec و به همین ترتیب.
  5. سقف تکرار (max_turns). کل دورهای حلقه‌ی ایجنت که از افتادن در حلقه‌های استدلال بی‌پایان جلوگیری می‌کند.
  6. سقف دقیقه‌ای / ساعتی / روزانه / ماهانه. پنجره‌های زمانی لغزان که نشتی‌ها را در مقیاس‌های زمانی متفاوت به دام می‌اندازند.
  7. محدودیت شتاب مالی. مثلاً «اگر هزینه در 10 دقیقه از 50 دلار بیشتر شد، دسترسی را قطع کن». این ترمز، سوختن بودجه در حلقه‌ها را بسیار پیش از فعال شدن سقف‌های ماهانه متوقف می‌کند.
  8. مسیریابی مدل چندسطحی. به‌صورت پیش‌فرض از مدل کوچک‌تر استفاده کنید و کار را تنها زمانی به مدل بزرگ‌تر ارتقا دهید که یک دسته‌بند تشخیص دهد وظیفه به آن نیاز دارد.
  9. کش کردن پرامپت. پرامپت سیستم و بافتار پایدار در کشِ ارائه‌دهنده ذخیره می‌شوند؛ به این ترتیب، هزینه‌ی توکن برای ارسال مجدد تقریباً به صفر می‌رسد.
  10. پنجره‌بندی بافتار. فشرده‌سازی و خلاصه‌سازی برای نگه‌داشتن بافتار فعال زیر یک آستانه‌ی معین که مستقیماً هزینه‌ی توکن را کاهش می‌دهد.
  11. چک‌پوینت‌های HITL روی اقدامات گران. قبل از هر اقدامی که پرهزینه بودنش مسجل است (فراخوانی ابزاری طولانی، دانلود فایلی حجیم، ارتقا به مدلی گران)، سیستم باید تأیید دستی یک انسان را درخواست کند.
  12. سوئیچ قطع اضطراری هنگام نقض بودجه. با عبور از هر سقفی، نشست متوقف می‌شود. مورد نقض‌شده ثبت می‌گردد و فعال‌سازی مجدد آن نیازمند مسیری مستقل و مشخص خواهد بود.

چرا پشته، و نه فقط یک سقف؟

یک سقف ماهانه‌ی تنها، زمانی متوجه رفتار لجام‌گسیخته‌ی ایجنت می‌شود که کار از کار گذشته و جیب‌تان خالی شده است. از سویی دیگر، یک سقف ساده به ازای هر درخواست نیز هیچ نظارتی روی سطح نشست ندارد. حالت‌های مختلف شکست به مقیاس‌های زمانی متفاوتی نیاز دارند:

  • حلقه‌ی لجام‌گسیخته (ایجنت در چرخه‌ی تلاش مجددِ 5 ثانیه‌ای گیر افتاده): با محدودیت شتاب مهار می‌شود.
  • نشتی آرام (ایجنت در هر وظیفه حدود 2 برابرِ حجم کار موردانتظار مصرف می‌کند): با سقف روزانه مهار می‌شود.
  • انتشار نسخه‌ی معیوب (نسخه‌ی جدید 5 برابر توکن می‌سوزاند): با سقف هفتگی یا ماهانه شناسایی می‌شود.
  • افزایش ناگهانی و واقعی ترافیک (تقاضای واقعی بازار و نه باگ نرم‌افزاری): با سقف ساعتی یا روزانه همراه با لاگ دقیق شفاف‌سازی می‌شود.

سطح بودجه‌بندی در بستر آزمایشی

کیت توسعه‌ی ایجنت Claude Code این متغیرها را در مستندات عمومی خود ارائه می‌دهد:

  • max_turns — سقف تکرار حلقه.
  • max_budget_usd — سقف دلاری؛ با نقض آن نشست متوقف می‌شود.
  • allowed_tools / disallowed_tools — فهرست سفید و سیاه ابزارها.
  • قلاب‌ها (Hooks) پیش از فراخوانی ابزار برای ثبت و حسابرسی اختصاصی هزینه‌ها.

این موارد را با نردبان سطوح دسترسی (درس 10) ترکیب کنید. اجرای یک نشست در حالت autoMode بدون تنظیم max_budget_usd، یعنی خودمختاریِ مهارنشده. Anthropic صراحتاً تأکید می‌کند که حالت Auto Mode نیازمند کنترل‌های بودجه است؛ سازوکار دسته‌بند مستقل از مدیریت هزینه کار می‌کند.

قانون هوش مصنوعی اتحادیه اروپا و OWASP Agentic Top 10

جعبه‌ابزار حاکمیت ایجنت مایکروسافت، بندهای OWASP Agentic Top 10 و الزامات ماده‌ی 14 قانون هوش مصنوعی اتحادیه اروپا (نظارت انسانی) را پوشش می‌دهد. برای سیستم‌هایی که در محیط عملیاتی (پروداکشن) اروپا مستقر می‌شوند، ثبت لاگ و اعمال سقف‌ها اختیاری نیست، بلکه الزامی است.

نمونه‌ی واقعی جهش 1200 دلاری به 4800 دلار

یک نمونه‌ی واقعی که در مستندات مایکروسافت آمده است: هزینه‌ی ماهانه‌ی یک ایجنت تجارت الکترونیک بعد از اضافه‌شدن یک ابزار جدید 4 برابر شد. این ابزار به ایجنت اجازه می‌داد در هر نشست وضعیت سفارش را مدام استعلام کند. هیچ مکانیزمی برای تشخیص حلقه پیاده‌سازی نشده بود؛ سقف مصرفی به ازای هر ابزار وجود نداشت و هیچ هشداری هم برای رشد هزینه‌ها نسبت به هفته‌ی قبل ثبت نمی‌شد. راهکار نهایی، تعیین سقف مصرف به ازای هر ابزار و ارسال هشدار بر اساس رشد روزانه بود. این تجربه یک الگو به ما می‌دهد: هر سطح ابزارِ تازه، یک حلقه‌ی بالقوه‌ی جدید است؛ پس هر ابزار جدید به سقف مصرف و هشدار اختصاصی خودش نیاز دارد.

پشته حاکمیت هزینهسقف‌های مجاز در هر مقیاس زمانی
COST-GOVERNOR STACKA single monthly cap catches a runaway agent only after the wallet is gone. The fix is a stack of limits at different time scales — per-request, per-task, velocity, per-day, per-month. A runaway loop burns fast, so the velocity limit ("$50 in 10 minutes") trips long before the daily or monthly caps would ever fire.هر درخواستهر وظیفهنرخ مصرف (10 دقیقه)روزانهماهانههزینه ($)⚡ قطع دسترسی
تعیین تنها یک سقف ماهانه، زمانی جلوی ایجنت مهارنشدنی را می‌گیرد که بودجه کاملاً تمام شده باشد. راه‌حل، پشته‌ای از محدودیت‌ها در مقیاس‌های زمانی مختلف است: به ازای هر درخواست، هر وظیفه، نرخ مصرف، روزانه و ماهانه. یک حلقهٔ مهارنشدنی با سرعت بالا بودجه را می‌سوزاند، بنابراین محدودیت نرخ مصرف («50 دلار در 10 دقیقه») بسیار زودتر از سقف‌های روزانه یا ماهانه فعال می‌شود.

استفاده از ابزارهای واقعی

فایل code/main.py اجرای یک ایجنت را در دو حالتِ با و بدون پشته‌ی لایه‌بندی‌شده‌ی مهار هزینه شبیه‌سازی می‌کند. ایجنت شبیه‌سازی‌شده بعد از چند نوبت گفت‌وگو وارد حلقه‌ی استعلام مداوم می‌شود؛ پشته‌ی چندلایه، آن را در همان پنجره‌ی شتاب به دام می‌اندازد، در حالی که اگر فقط یک سقف ماهانه تعیین کرده بودید، روزها طول می‌کشید تا سیستم فعال شود.

خروجی این درس

فایل outputs/skill-agent-budget-audit.md پشته‌ی مهار هزینه‌ی یک سناریوی پیشنهادی برای استقرار ایجنت را ارزیابی کرده و لایه‌های غایب را مشخص می‌کند.

تمرین‌ها

  1. اسکریپت code/main.py را اجرا کنید. بررسی کنید که محدودیت شتاب چگونه در مسیر یک حلقه‌ی استعلامی، قبل از رسیدن به سقف تکرار فعال می‌شود. حالا محدودیت شتاب را خاموش کنید و بسنجید که ایجنت پیش از رسیدن به سقف تکرار، چقدر هزینه می‌تراشد.

  2. مجموعه‌ای از سقف‌های مصرف به ازای ابزار را برای یک ایجنت مرورگر وب (درس 11) طراحی کنید. کدام ابزار به سخت‌گیرانه‌ترین سقف نیاز دارد؟ کدام ابزار می‌تواند بدون ریسک به‌صورت نامحدود اجرا شود؟

  3. مستندات جعبه‌ابزار حاکمیت ایجنت مایکروسافت را بخوانید. تمام انواع سقف‌های نام‌برده در آن را فهرست کنید. هر کدام را به یکی از حالت‌های شکست (حلقه‌ی لجام‌گسیخته، نشتی آرام، انتشار معیوب، افزایش ناگهانی ترافیک) نگاشت کنید.

  4. هزینه‌ی یک اجرای شبانه‌ی بدون نظارت را برای وظیفه‌ای واقعی (مثلاً «بررسی و اولویت‌بندی 50 ایشو در یک مخزن گیت‌هاب») برآورد کنید. مقدار max_budget_usd را معادل 2 برابر تخمین اولیه‌تان بگذارید. دلیل در نظر گرفتن این ضریب 2 برابری را توجیه کنید.

  5. متغیر max_budget_usd در Claude Code روی هزینه‌ی کل نشست اعمال می‌شود. یک محدودیت شتاب مکمل طراحی کنید که بتوانید آن را به‌صورت بیرونی اعمال کنید. چه شرایطی باعث قطع اتصال می‌شود و روند فعال‌سازی مجدد به چه صورت خواهد بود؟

اصطلاحات کلیدی

اصطلاح چیزی که معمولاً می‌گویند معنای واقعی آن
Denial of Wallet «قبض نجومی» حلقه‌ی ایجنت که بی‌وقفه پول می‌سوزاند و سقفی برای توقف آن نیست
max_tokens «سقف هر درخواست» حداکثر طول مجاز برای یک پاسخِ تک‌مرحله‌ای
max_turns «سقف تکرار» حداکثر تکرارهای حلقه‌ی ایجنت در طول یک نشست
max_budget_usd «سوئیچ قطع اضطراری دلاری» سقف هزینه‌ی نشست؛ با نقض آن نشست متوقف می‌شود
Velocity limit «سقف نرخ مصرف» محدودیت هزینه در پنجره‌ی زمانی کوتاه (مثلاً 50 دلار در 10 دقیقه)
Tiered routing «اول مدل کوچک» استفاده‌ی پیش‌فرض از مدل ارزان؛ ارتقا تنها با نظر دسته‌بند
Prompt caching «کش پرامپت سیستم» کش سمت ارائه‌دهنده که هزینه‌ی ارسال مجدد توکن را به نزدیک صفر می‌رساند
HITL checkpoint «دروازه‌ی تأییدیه انسان» الزام به تأیید کاربر پیش از اجرای عملیات پرهزینه

برای مطالعه‌ی بیشتر

سؤالات متداول

منظور از خطای محروم‌سازی کیف پول (Denial of Wallet) چیست؟

حالتی است که ایجنت در یک حلقه‌ی نامتناهی از فراخوانی مکرر ابزارها و مدل زبانی گیر می‌افتد و به دلیل نبود سقف بازدارنده، تمام بودجه یا سقف اعتباری حساب را مصرف می‌کند.

چرا تعیین یک سقف ماهانه برای جلوگیری از هزینه‌ی سرسام‌آور کافی نیست؟

چون سقف ماهانه تنها زمانی فعال می‌شود که کل بودجه مصرف شده باشد؛ در حالی که پشته‌ی لایه‌بندی‌شده و محدودیت شتاب، حلقه‌ی مخرب را ظرف چند دقیقه متوقف می‌کند.

محدودیت شتاب مالی (Velocity limit) در مدیریت ایجنت‌ها چطور عمل می‌کند؟

این محدودیت مصرف هزینه را در بازه‌های زمانی کوتاه می‌سنجد (مثلاً قطع خودکار در صورت مصرف بیش از 50 دلار طی 10 دقیقه) و نشت هزینه را پیش از پایان بودجه متوقف می‌سازد.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.