باگ عجیب Opus 4.8 و Sonnet 5 تو فراخوانی ابزار
خلاصهٔ کاملتر
نویسندهی این پست، تو ابزار ادیت پروژهی خودش به اسم Pi، یه رفتار عجیب از مدلهای Anthropic دیده: وقتی Opus 4.8 یا Sonnet 5 میخوان ادیت انجام بدن، مقدار oldText و newText رو درست میسازن ولی یه سری کلید الکی و از خودشون ساخته مثل type، kind، requireUnique یا matchCase هم بهش اضافه میکنن. چون این کلیدها تو schema ابزار تعریف نشدن، فراخوانی رد میشه و مدل باید دوباره امتحان کنه.
نکتهی جالب اینه که این مشکل تو مدلهای قدیمیتر Anthropic اصلاً دیده نمیشه و فقط تو قویترین اعضای خانواده، یعنی Opus 4.8 و Sonnet 5، رخ میده. نویسنده میگه این اتفاق بیشتر تو گفتگوهای چندمرحلهای و طولانی رخ میده، نه تو یه پرامپت سادهی تکمرحلهای؛ و حذف کردن بلاکهای «فکر کردن» مدل از تاریخچه، نرخ خطا رو تقریباً نصف میکنه.
نویسنده توضیح میده که فراخوانی ابزار در واقع یه سری متن با نشانهگذاری خاصه، نه یه مکانیزم جادویی؛ مدل یاد گرفته این متنها رو تولید کنه و هارنس (harness) هم باید اعتبارسنجیشون کنه. برای آرایههایی مثل edits[]، به نظر میرسه مدل باید یه JSON کامل رو داخل یه پارامتر متنی بنویسه، و دقیقاً همونجایی که باید تصمیم بگیره ادیت رو ببنده یا ادامه بده، این کلیدهای اضافه سبز میشن.
فرضیهی اصلی نویسنده اینه که این یه اثر جانبی از نحوهی آموزشه، نه یه خرابی تصادفی. مدلهای جدیدتر Anthropic احتمالاً بخش زیادی از پسآموزششون رو داخل خود هارنس Claude Code یا چیزی شبیه بهش انجام دادن؛ ابزار ادیت خود Claude Code هم schema مسطحتری داره (file_path, old_string, new_string, یه فلگ اختیاری) و در برابر خطاهای کوچیک خیلی بخشندهست، چون کلیدهای ناشناخته رو بیسروصدا فیلتر میکنه و alias های مختلف رو قبول میکنه.
نتیجه اینه که وقتی آموزش تقویتی داخل چنین محیط بخشندهای انجام میشه، یه فراخوانی کمی خراب هم میتونه کار رو تموم کنه و پاداش بگیره، پس هیچ فشاری برای جلوگیری از اضافه کردن کلید تازه وجود نداره. وقتی همین مدل با یه schema متفاوت مثل Pi روبهرو میشه، اون عادت قوی رو دوباره تکرار میکنه، ولی چون اسم دقیق فیلد رو تو این schema یاد نگرفته، هر بار یه اسم تصادفی میسازه.
نویسنده این رفتار رو با فرمت مستندشدهی harmony از OpenAI مقایسه میکنه که یه نشانهی صریح مثل json داره و به موتور اجرا میگه دقیقاً کجا باید حالت نمونهگیری محدود به گرامر رو فعال کنه. طبق تستهای نویسنده، مدلهای Codex این مشکل رو ندارن. برای Anthropic، فعال کردن حالت strict مشکل رو حل میکنه، چون سمپلر اجازهی ساختن کلیدهای خارج از schema رو نمیده؛ اما همین strict mode محدودیت پیچیدگی روی تعریف ابزارها میذاره.
نتیجهگیری نویسنده اینه که schema ابزار دیگه یه قرارداد خنثی نیست؛ هرچی شکل یه ابزار به ابزارهای خود Claude Code نزدیکتر باشه، مدل بهتر رفتار میکنه، و هرچی متفاوتتر باشه، ممکنه مدل قویتر حتی سرسختتر هم بشه. چون هم مدل و هم هارنس Claude Code بسته و closed-source هستن، پیشبینی این رفتار برای سازندههای هارنسهای دیگه سختتر میشه؛ به همین خاطر نویسنده فکر میکنه گرامر-محدود کردن فراخوانی ابزار (strict mode) شاید دیگه یه گزینهی اختیاری نباشه.
نکات کلیدی:
- Opus 4.8 و Sonnet 5 موقع کار با ابزارهای غیر Claude Code، کلیدهای ساختگی به آرگومانهای JSON اضافه میکنن
- این مشکل تو مدلهای قدیمیتر دیده نمیشه و بیشتر تو گفتگوهای چندمرحلهای رخ میده
- فرضیهی نویسنده: آموزش تقویتی روی هارنس بخشندهی Claude Code باعث یادگیری یه schema مسطح و قوی شده
- فعال کردن حالت strict تو API خطا رو حل میکنه ولی محدودیت پیچیدگی روی تعریف ابزار میذاره
- هرچی schema یه ابزار به Claude Code شبیهتر باشه، اعتماد به رفتار مدل بیشتره




