چیت‌شیت

چرا ایجنت‌ها شکست می‌خورند؟

Why Agents Fail

شناسایی شکست، یافتن آن در ردگیری محاسبات و اعمال گیت. آشکارسازها، MAST، طوفان‌های تلاش مجدد، PVE و ابزار دیباگ Trace.

  • ۱۲ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. نشانه‌ها، علل و راهکارها
  2. پنج الگوی تکرارشونده و آشکارسازهای آن‌ها
  3. دسته‌های ریشه‌ای MAST
  4. خانواده‌ی تفکر گروهی
  5. طوفان تلاش مجدد
  6. شبیه‌ساز مدارشکن و طوفان تلاش مجدد
  7. مقادیر پیش‌فرض و ارقام
  8. الگوی PVE: پرامپت-اعتبارسنج-مجری
  9. توپولوژی‌های مناظره
  10. ابزار دیباگ Agent Trace
  11. خطاهای ابزار دیباگ Trace
  12. پرسش‌ها

نشانه‌ها، علل و راهکارها

عیب‌یابی
  • پیام موفقیت روی خطای 400

    علت
    توهم موفقیت
    راه‌حل
    آزمون ارزیابی مجدد وضعیت؛ آیا فایل واقعاً ایجاد شده است؟
  • یک فراخوانی اشتباه چهار فراخوانی API را تحریک می‌کند

    علت
    خطای آبشاری
    راه‌حل
    گیت‌های اعتبارسنجی خودکار در تمام مراحل
  • بار بخش‌های پایینی سیستم 10 برابر می‌شود

    علت
    طوفان تلاش مجدد
    راه‌حل
    مدارشکن‌ها و سقف بودجه‌ی تلاش مجدد برای هر درخواست
  • کاهش تدریجی دقت، بدون کرش

    علت
    مسموم‌سازی حافظه
    راه‌حل
    لاگ فقط‌افزودنی، منشأ و سندیت، اعتبارسنج غیرقابل‌نوشتن
  • سه ایجنت پاسخ اشتباه یکسانی می‌دهند

    علت
    فروپاشی تک‌کشت (همگنی مدلی)
    راه‌حل
    استفاده از پرامپت‌ها و/یا مدل‌های متنوع
  • هر دو ایجنت خود را بازبین فرض می‌کنند

    علت
    ابهام در نقش
    راه‌حل
    قراردادهای صریح نقشی و آزمون‌های پذیرش برای هر وظیفه
  • ایجنت A اتمام کار را اعلام می‌کند، ایجنت B همچنان در حال اجراست

    علت
    دریفت وضعیت
    راه‌حل
    وضعیت مشترک نسخه‌بندی‌شده، چک‌پوینت‌های همگام‌سازی وضعیت
  • صفحه‌ی بازیابی‌شده پرامپت توسعه‌دهنده را بازنویسی می‌کند

    علت
    تزریق غیرمستقیم پرامپت
    راه‌حل
    ناامن دانستن تمام داده‌های بازیابی‌شده؛ افزودن الگو PVE

پنج الگوی تکرارشونده و آشکارسازهای آن‌ها

دستورها
دستورعملکرد
detect_hallucinated_actionنام ابزار خارج از KNOWN_TOOLS باشد
detect_scope_creepفراخوانی write_file بدون وجود کلمه‌ی نوشتن در درخواست
detect_cascading_errorsیک خطا و در پی آن 2 یا چند فراخوانی ابزار
detect_context_lossظهور توکن "do not" در ورودی‌های ابزار
detect_tool_misuseنبود آرگومان‌های ضروری اسکیمای ابزار
detect_success_hallucinationادعای موفقیت، نیت نوشتن، عدم تغییر وضعیت
tag(trace)اجرای تمام DETECTORS و بازگرداندن برچسب‌ها
python3 code/main.pyبرچسب‌های هر Trace و توزیع تجمیعی

دسته‌های ریشه‌ای MAST

مفهوم‌ها
منبع
1642 ردگیری محاسبات، 7 سیستم چندایجنت متن‌باز، 41 تا 86.7 درصد نرخ شکست.
مشکلات مشخصات (41.77%)
ابهام در نقش، وظیفه‌ی نامشخص، معیارهای موفقیت ضمنی.
شکست‌های هماهنگی (36.94%)
پیام‌های گمشده، وضعیت مشترک همگام‌نشده، دریفت وضعیت.
شکاف‌های اعتبارسنجی (21.30%)
ادعای موفقیت یک ایجنت بدون اعتبارسنجی توسط دیگری.
هزینه
شکاف‌های اعتبارسنجی بالاترین هزینه را در هر شکست دارند؛ بدون اخطار شکست می‌خورند.
کد
تابع categorize_incident(symptoms) مقادیر spec، coord، verify یا unknown را برمی‌گرداند.

خانواده‌ی تفکر گروهی

اصطلاح‌ها
فروپاشی تک‌کشت (همگنی مدلی)
مدل پایه‌ی یکسان خطاهای همبسته می‌دهد؛ سیگنال correlated_errors.
سوگیری همرنگی با جماعت
ایجنت‌ها با رساترین طرف ارتباط همسو می‌شوند؛ سیگنال agreement_rate_spike.
نقص تئوری ذهن
ایجنت‌ها توان مدل‌سازی رفتار یکدیگر را ندارند؛ سیگنال coordination_drop_long_horizon.
پویایی انگیزه‌های مختلط
سازش بینابینی هیچ سمتی را راضی نمی‌کند؛ سیگنال compromise_outputs.
شکست‌های آبشاری اتکاپذیری
الگوی یک خطا خطاهای دیگر را برمی‌انگیزد؛ سیگنال retry_amplification.
STRATUS
ایجنت‌های تشخیص، عیب‌یابی و اعتبارسنجی؛ 1.5 برابر موفقیت بیشتر در تعدیل خطا.

طوفان تلاش مجدد

گام‌به‌گام
  1. سرویس پرداختدر 10% درخواست‌ها شکست می‌خورد.
  2. ایجنت سفارشهر تلاش مجدد، یک استعلام موجودی جدید ایجاد می‌کند.
  3. سرویس انباربا 2 برابر بار معمول مواجه شده و شروع به ایجاد خطای مهلت زمانی می‌کند.
  4. تمام سفارش‌هامجدداً تلاش می‌شوند؛ انبار بار 10 برابری می‌بیند؛ کلاستر از کار می‌افتد.
  5. راهکارمدارشکن با نتایج کش‌شده یا پیش‌فرض، توقف زودهنگام انجام می‌دهد.

شبیه‌ساز مدارشکن و طوفان تلاش مجدد

کد
python
breaker = CircuitBreaker()     # با وضعیت BreakerState.CLOSED شروع می‌شود
breaker.allow()                # در وضعیت OPEN، درون بازه‌ی سردسازی برابر با False است
breaker.record(ok)             # هنگام عبور نرخ خطا از آستانه، باز می‌شود
# در HALF_OPEN: یک موفقیت آن را می‌بندد و یک خطا مجدداً بازش می‌کند
service = DownstreamService()  # نرخ خطای پایه‌ی 0.1
effective_rate = self.base_failure_rate + (self.load * 0.02)
while attempts_for_req < 4:    # سقف بودجه‌ی تلاش مجدد به ازای هر درخواست
    ...
simulate_retry_storm(200, use_breaker=True, seed=0)
# مقادیر total_calls، successes و short_circuits را بازمی‌گرداند

مقادیر پیش‌فرض و ارقام

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
failure_threshold0.5نرخ خطایی که مدارشکن را باز می‌کند
window_size20تعداد خروجی‌های اخیر در محاسبه‌ی نرخ خطا
open_cooldown_s0.5زمان سپری‌شده قبل از ورود به HALF_OPEN
Production open threshold5-10%نرخ خطا به ازای هر فراخوانی خروجی
CI trace gate>=5%تمرین درس: متوقف کردن فرایند بیلد در صورت شناسایی یک الگو توسط Traces
Audit trace sample~1000بررسی ردگیری‌های واقعی به ازای هر الگوی شکست
Debate N, RN=3, R=2آزمایش‌های اولیه، با توجه به هزینه‌ها

الگوی PVE: پرامپت-اعتبارسنج-مجری

معماری
نیتاسکن‌شدهفراخوانی کاندیدمجازردتلاش مجددپیام کاربرمنبع user_messageمحتوای بازیابی‌شدهوب، حافظه، خروجی ابزارمدل اصلییک ToolCall پیشنهاد می‌دهداعتبارسنجبررسی لیست مجاز + اسکن نشانگرهامجریفراخوانی تأییدشده را اجرا می‌کندامتناع مدلتلاش با روشی دیگر

توپولوژی‌های مناظره

مقایسه
فاکتورمش کاملستاره‌ای خلوت
چه کسی چه کسی را می‌خواندهر مناظره‌کننده خروجی همه‌ی اعضا را می‌خواندشاخه‌ها فقط هاب مرکزی را می‌خوانند
پیشنهادها با N=5 و R=31515
عملیات نقد با N=5 و R=36012
خطر شکستفروپاشی همگراییشکست هاب
کاهش ریسکالزام به راندهای مخالفتچرخش یا استفاده از چندین هاب
کدfull_mesh_roundsparse_star_round

ابزار دیباگ Agent Trace

کار و کد
وظیفهکد
مقداردهی اولیه‌ی فضای کاریpython3 scripts/project_test.py agent-trace-debugger --init learning-artifacts/agent-trace-debugger
نمره‌دهی به یک مرحلهpython3 scripts/project_test.py agent-trace-debugger --stage 1 --path learning-artifacts/agent-trace-debugger --strict
مقایسه با خط مبناnode cli.ts --input samples/trace.jsonl --baseline samples/before.jsonl --output trace.html --json trace.json
وارد کردن OTLP JSONnode cli.ts --format otlp --input samples/otlp.json --output otlp-trace.html --json otlp-trace.json
رابط‌های عمومی (Public API)`parseTrace`, `validateTree`, `unionDuration`, `analyze`, `render`
فیلدهای رگرسیون`wall_time_delta_ms`, `token_delta`, `error_delta`

خطاهای ابزار دیباگ Trace

عیب‌یابی
  • invalid JSON line <n>

    علت
    خط مدنظر JSON نیست
    راه‌حل
    اصلاح خط n؛ خطوط خالی نیز محاسبه می‌شوند
  • invalid span line <n>

    علت
    فیلد نامعتبر، end < start یا توکن‌های منفی
    راه‌حل
    ارسال ok یا error همراه با زمان‌های معین
  • duplicate span id

    علت
    دو اسپن شناسه یکسان دارند
    راه‌حل
    یکتا کردن شناسه‌ها
  • span cycle

    علت
    حلقه در زنجیره‌ی والد
    راه‌حل
    اصلاح شناسه‌های والد
  • missing parent

    علت
    شناسه‌ی والد در Trace وجود ندارد
    راه‌حل
    اکسپورت اسپن والد
  • child outside parent

    علت
    بازه فرزند فراتر از والد است
    راه‌حل
    همگام‌سازی ساعت‌های سیستم‌های مختلف
  • format must be jsonl or otlp

    علت
    مقدار نامعتبر --format
    راه‌حل
    استفاده از jsonl یا otlp

پرسش‌ها

پرسش و پاسخ
چرا فقط ثبت کرش‌ها کافی نیست؟
اغلب شکست‌های ایجنت خروجی‌های به ظاهر درست تولید می‌کنند.
چرا نباید گاردریل‌ها را فقط در انتها گذاشت؟
چون مدل پیش از آن اثر خود را روی محیط گذاشته است.
کدام شاخص‌ها به شناسایی شکست‌های تدریجی کمک می‌کنند؟
نرخ توافق، نرخ تلاش مجدد و توزیع طول خروجی.
چرا اجتماع بازه‌های فرزند کسر می‌شود؟
فرزندان موازی همپوشانی دارند و جمع ساده‌ی آن‌ها به شمارش مضاعف منجر می‌شود.
چرا توکن‌ها و خطاها با هم مقایسه می‌شوند و نه صرفاً زمان واقعی؟
چون یک نمونه ممکن است روی 100 میلی‌ثانیه بماند ولی مصرف توکن آن 200 واحد بیشتر شود.
ترجمه‌ی فارسی چیت‌شیت Why Agents Fail از دوره‌ی AI Engineering from Scratch، نوشته‌ی Rohit Ghumare، تحت مجوز MIT. کد و دستورها عیناً از متن اصلی‌اند. همه‌ی چیت‌شیت‌ها