تصور کنید یک عامل خودکار با اطمینان کامل گزارش میدهد که کار را به درستی انجام داده، اما در واقعیت، کل سیستم شما را بهطور خاموش از کار انداخته است. برای کاربرانی که از کلود کد (Claude Code) در نسخههای اواسط سال ۲۰۲۶ بر بستر Node.js 22.x استفاده میکنند، این شکستهای متناقض یک الگوی مشخص دارند: باگهای این عاملها بهندرت در جایی هستند که علائم ظاهر میشوند.
به نقل از یک راهنمای فنی در dev.to، مشکل اصلی معمولاً یک «نقطه واگرایی» (Divergence Turn) است؛ لحظهای که باورهای داخلی مدل با واقعیت ابزارها فاصله میگیرد و تمام مراحل بعدی، صرفاً استنتاجهای منطقی بر اساس دادههای غلط هستند. در برنامهنویسی سنتی، شما یک stack trace دارید که دقیقاً خط خطا را میگوید، اما در عاملهای هوش مصنوعی (AI Agents) — که شبیه دستیارهای هوشمندی هستند که میتوانند به جای شما کد بزنون و ابزارها را اجرا کنند — شما با یک گزارش موفقیتآمیز مواجه میشوید در حالی که مدل یک فایل پیکربندی خیالی را تغییر داده است.
همانطور که در تحلیل قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، اعتماد کورکورانه به خروجی مدلهای زبانی ریسکهای عملیاتی ایجاد میکند. از اواسط سال ۲۰۲۶، توسعهدهندگان در حال ترک عادت «پرامپتنویسی خرافی» هستند؛ یعنی همان روشی که در آن کاربر پس از مشاهده یک خطا، کل تسک را دوباره اجرا میکرد و یک دستور با حروف بزرگ مثل «هرگز این کار را نکن!» به پرامپت اضافه میکرد، بدون اینکه بفهمد ریشه مشکل کجاست.
طبق این متدولوژی، هدف این نیست که بپرسیم چرا خروجی نهایی بد است، بلکه باید بفهمیم در کدام گام، تصویر ذهنی مدل از جهان با واقعیت تطبیق نداشت. این یعنی تغییر واحد تحلیل از «کل مدل» به «هر گام از نشست».
گام اول: بازسازی حداقلی (Minimal Reproduction)
اولین قدم این است که از اجرای مجدد تسکهای طولانی دوری کنید. یک نشست ۴۰-مرحلهای مثل گشتن دنبال سوزن در انبار کاه است. شما باید کوچکترین پرامپتی را پیدا کنید که منجر به رفتار نادرست شود.
- مثال: در یک مورد، عاملی مهاجرت پایگاه داده را خراب کرد. تسک اصلی «پیادهسازی کامل فیلدهای صورتحساب» بود.
- سادهسازی: توسعهدهنده تسک را به یک دستور تبدیل کرد: «پوشه migrations را بخوان و نسخه فعلی اسکیما را بگو».
- نتیجه: ۴۰ گام به یک گام تبدیل شد و باگ فوراً ظاهر شد: عامل نسخهای را گزارش کرد که اصلاً وجود نداشت.
اگر بازسازی یک باگ بیش از ۳ گام زمان میبرد، یعنی هنوز جای برش دادن هست. ریشه اکثر باگها در ادراک (خواندن فایل یا تحلیل خروجی ابزار) است، نه در منطق پیچیده استدلال.
گام دوم: یافتن نقطه واگرایی
کلود کد تمام تاریخچه نشستها را بهصورت فایلهای JSONL در مسیر ~/.claude/projects/ ذخیره میکند. این فایلها در واقع «جعبه سیاه» یا ضبطکننده پرواز عامل هستند.
برای یافتن نقطه واگرایی، باید تاریخچه را با این پرسش بخوانید: «مدل دقیقاً بعد از هر فراخوانی ابزار چه ادعایی کرد؟». شما بهدنبال اولین گامی میگردید که در آن خلاصه مدل از نتیجه ابزار، با نتیجه واقعی که در لاگ است، همخوانی ندارد.
برای سرعت بخشیدن به این کار، میتوان از دستور jq استفاده کرد تا فقط نتایج ابزار و متن پاسخ دستیار استخراج شود:
jq -r 'select(.type == "tool_result" or .type == "assistant") | .content // .text' session.jsonl | less
با این روش، شما دو روایت را مقایسه میکنید: روایت ابزار و روایت مدل. اولین جایی که این دو داستان با هم اختلاف دارند، همان نقطه واگرایی است. هر چه بعد از این نقطه رخ دهد، «میوه یک درخت مسموم» است و تحلیل آن اتلاف وقت است.
گام سوم: مقایسه واقعیت در برابر فرض
پس از یافتن نقطه واگرایی، باید مقدار بازگشتی واقعی ابزار را با فرض مدل مقایسه کنید تا بفهمید با شکست در «خواندن» طرف هستید یا شکست در «منطق».
در یک تجربه واقعی، عاملی سعی داشت یک webhook را ثبت کند. سرویس پاسخ داد: { "ok": false, "error": "duplicate_endpoint" }. با وجود اینکه مقدار ok برابر با false بود، اما کد وضعیت HTTP برابر با ۲۰۰ (OK) بود. مدل بلافاصله گزارش داد: «وبهوک با موفقیت ثبت شد. میروم سراغ هندلر اعلانها».
- پیامد: عامل ۶ گام بعدی را صرف ساختن هندلری کرد که بر پایه یک شناسه تهی (null) بود.
- فریب: تستها سبز شدند چون مدل کدهای حفاظتی
if (webhookId)نوشته بود که باعث میشد کل مسیر کد بهطور خاموش نادیده گرفته شود و چون چیزی اجرا نمیشد، خطایی هم نمیداد. - علت: مدل روی کد ۲۰۰ و کلمه «registered» در متن پاسخ تمرکز کرد؛ دقیقاً شبیه انسانی که ساعت ۲ صبح متون را سرسری میخواند.
شکستها به سه دسته تقسیم میشوند:
- باگهای ابهام: دستورات بهگونهای بودهاند که دو interpretation داشتهاند و مدل اشتباه را انتخاب کرده است.
- باگهای تأیید: اطلاعات در خروجی ابزار بوده، اما مدل اصلاً آن را چک نکرده است.
- باگهای قرارداد ابزار: خروجی ابزار بهگونهای طراحی شده که inviting به اشتباه است (مثل ارسال خطا در قالب پاسخ ۲۰۰ OK).
گام چهارم: اصلاح در لایه درست
بزرگترین اشتباه، اعمال اصلاح نادرست است. غریزه ما میگوید قوانین پرامپت را زیاد کنیم (مثلاً: «همیشه فیلد ok را چک کن!»)، اما هر دسته از خطاها نیاز به یک لایه اصلاحی متفاوت دارد:
- باگهای ابهام $\rightarrow$ اصلاح دستورات. جملات مبهم در فایل
CLAUDE.mdیا پرامپت تسک را بازنویسی کنید. یک جمله دقیق مؤثرتر از پنج پاراگراف هشدار است. - باگهای تأیید $\rightarrow$ افزودن چکهای قطعی (Deterministic). قوانین پرامپت احتمالی هستند. برای موارد حیاتی، منطق را به بیرون از مدل ببرید. در مورد وبهوک، توسعهدهنده یک اسکریپت
validate-response.shنوشت که باjqفیلدokرا چک میکند و در صورت خطا، برنامه را با کد غیرصفر میبندد. - باگهای قرارداد ابزار $\rightarrow$ اصلاح ابزار. اگر ابزاری خطاها را با کد ۲۰۰ برمیگرداند یا ۴۰۰۰ خط متن اضافه میدهد، پرامپت راهکار دائمی نیست. راهکار سطح بالا، اصلاح کلاینت سرویس است تا خطاها منجر به شکست واقعی سیستم شوند.
پس از اعمال اصلاح، دوباره گام اول (بازسازی حداقلی) را اجرا کنید. چون بازسازی فقط یک گام است، تأیید اصلاح در چند ثانیه انجام میشود.
گام بعدی شما
- اگر با شکست عاملهای خودکار مواجه شدید، بهجای بازنویسی پرامپت، ابتدا فایلهای JSONL در دایرکتوری
.claudeرا باز کنید. - سعی کنید تسک شکستخورده را به کوچکترین دستوری که باگ را تکرار میکند (Repro) تبدیل کنید.
- برای هر خطای تکراری، بهجای هشدار در پرامپت، یک چک قطعی (مانند اسکریپت شل یا کد اعتبارسنجی) در مسیر اجرای ابزار قرار دهید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو