چیتشیت
چرا ایجنتها شکست میخورند؟
Why Agents Fail
شناسایی شکست، یافتن آن در ردگیری محاسبات و اعمال گیت. آشکارسازها، MAST، طوفانهای تلاش مجدد، PVE و ابزار دیباگ Trace.
فهرست مطالب
نشانهها، علل و راهکارها
عیبیابیپیام موفقیت روی خطای 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 برابر موفقیت بیشتر در تعدیل خطا.
طوفان تلاش مجدد
گامبهگام- سرویس پرداختدر 10% درخواستها شکست میخورد.
- ایجنت سفارشهر تلاش مجدد، یک استعلام موجودی جدید ایجاد میکند.
- سرویس انباربا 2 برابر بار معمول مواجه شده و شروع به ایجاد خطای مهلت زمانی میکند.
- تمام سفارشهامجدداً تلاش میشوند؛ انبار بار 10 برابری میبیند؛ کلاستر از کار میافتد.
- راهکارمدارشکن با نتایج کششده یا پیشفرض، توقف زودهنگام انجام میدهد.
شبیهساز مدارشکن و طوفان تلاش مجدد
کد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_threshold | 0.5 | نرخ خطایی که مدارشکن را باز میکند |
window_size | 20 | تعداد خروجیهای اخیر در محاسبهی نرخ خطا |
open_cooldown_s | 0.5 | زمان سپریشده قبل از ورود به HALF_OPEN |
Production open threshold | 5-10% | نرخ خطا به ازای هر فراخوانی خروجی |
CI trace gate | >=5% | تمرین درس: متوقف کردن فرایند بیلد در صورت شناسایی یک الگو توسط Traces |
Audit trace sample | ~1000 | بررسی ردگیریهای واقعی به ازای هر الگوی شکست |
Debate N, R | N=3, R=2 | آزمایشهای اولیه، با توجه به هزینهها |
الگوی PVE: پرامپت-اعتبارسنج-مجری
معماریتوپولوژیهای مناظره
مقایسه| فاکتور | مش کامل | ستارهای خلوت |
|---|---|---|
| چه کسی چه کسی را میخواند | هر مناظرهکننده خروجی همهی اعضا را میخواند | شاخهها فقط هاب مرکزی را میخوانند |
| پیشنهادها با N=5 و R=3 | 15 | 15 |
| عملیات نقد با N=5 و R=3 | 60 | 12 |
| خطر شکست | فروپاشی همگرایی | شکست هاب |
| کاهش ریسک | الزام به راندهای مخالفت | چرخش یا استفاده از چندین هاب |
| کد | full_mesh_round | sparse_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 JSON | node 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 واحد بیشتر شود.