پرش به محتوای اصلی
پرش به محتوای مقاله

حلقهٔ بررسی تخاصمی مدل‌ها ۱۶ باگ بحرانی یک اپلیکیشن را شناس کرد

·۱۳ مرداد ۱۴۰۵۷ دقیقه مطالعه۱ بازدید
دوستم مرا به ساختن بازی «خوک‌ها را رد کن» در مهمانی شام دعوت کرد. دو مدل زبانی بزرگ طرحم را بررسی کردند.
دوستم مرا به ساختن بازی «خوک‌ها را رد کن» در مهمانی شام دعوت کرد. دو مدل زبانی بزرگ طرحم را بررسی کردند.
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

جایگزینی مهندسی پرامپت با «حلقه‌های بررسی تخاصمی» (Adversarial Review Loops) برای حذف سوگیری مسیر خوش‌بینانه در کدنویسی.

تصور کنید اپلیکیشنی با حجم تنها ۱۶ کیلوبایت (در حالت gzipped)، از یک میلیون شبیه‌سازی رول و ۷۳ تست واحد با موفقیت عبور کند. این دستاورد در شب ۳ آگوست ۲۰۲۶ رخ داد؛ درست زمانی که یک توسعه‌دهنده به‌جای پرامپت‌های سنتی، از یک حلقهٔ بررسی تخاصمی (Adversarial Review Loop) استفاده کرد. آنچه به عنوان یک شرط‌بندی دوستانه و ساده در یک شب‌نشینی شروع شد، به سرعت به یک نسخه قابل بازی در GitHub Pages تبدیل شد که توسط یک خط لوله (Pipeline) هماهنگ شده توسط Hermes Agent مدیریت می‌شد.

این رویکرد مستقیماً نقطهٔ ضعف مزمن در توسعهٔ فعلی با AI را هدف قرار می‌دهد: «سوگیری مسیر خوش‌بینانه» (Happy Path Bias). وقتی یک مدل زبانی بزرگ (LLM) — مثل کتابخانه‌داری که میلیاردها صفحه را خوانده و حالا با همان لحن کتاب‌ها جواب می‌دهد — هم کد را بنویسد و هم خودش بررسی کند، معمولاً نقاط کور مشترکی دارد و توهمات خود را تقویت می‌کند. این چالش با تغییر معماری سیستم‌ها برای رفع توهمات مدل‌ها همسو است، چرا که ثابت می‌کند کیفیت از پرامپت‌های «بهتر» نمی‌آید، بلکه حاصل تضاد ساختاری بین مدل‌های مستقل از یکدیگر است.

زمینه: یک جسارت در شب (Apéro Dare)

این پروژه زمانی آغاز شد که یک دوست غیرفنی در جریان یک شب‌نشینی (Apéro)، توسعه‌دهنده را به چالش کشید تا نسخهٔ دیجیتالی بازی le jeu de cochons یا همان Pass the Pigs را بسازد. Pass the Pigs یک بازی مبتنی بر ریسک (Push-your-luck) است که در آن بازیکنان دو خوک کوچک پلاستیکی را پرتاب می‌کنند. این خوک‌ها می‌توانند در هفت موقعیت مختلف فرود بیایند. هدف بازیکن این است که امتیازات خود را در برابر یک تابلوی امتیازات ذخیره کند، بدون اینکه دچار «باخت کامل» یا همان Pigging Out شود.

چالش:
آن دوست می‌خواست دقیقاً ببیند هوش مصنوعی در یک سناریوی بلادرنگ (Real-time) چه کاری می‌تواند انجام دهد. او فقط به دنبال یک محصول نهایی نبود؛ بلکه نظاره‌گر بود که AI چگونه بازی را برنامه‌ریزی می‌کند و سپس شاهد بود که چگونه دو AI به‌طور جمعی آن برنامه را تکه‌تکه و نقد می‌کنند. این وضعیت، یک محیط پرتنشی را برای آنچه می‌توان «یک شعبده‌بازی مدرن» نامید، ایجاد کرد.

هدف:
هدف توسعه‌دهنده ایجاد یک گردش کار «از یک خط تا کد» (One-line to code) بود؛ یعنی یک پرامپت کوتاه برای برنامه‌ریزی و ساخت، و سپس انتشار. اگرچه این فرآیند در واقعیت دقیقاً یک خط نبود و چند تبادل کوتاه صورت گرفت، اما هدف این بود که نتیجه با کمترین میزان دخالت و راهنمایی اپراتور انسانی به دست آید.

جزئیات: پرامپت‌های بدون مهندسی

طبق مستندات این پروژه، پرامپت‌های استفاده شده کاملاً «در سطح یک شب‌نشینی» بودند: یعنی غیررسمی، ساده و حتی به زبان فرانسوی در حالی که توسعه‌دهنده مشغول نوشیدن بود. هیچ قالبی (Template)، چارچوب نقش‌بازی (Role-play)، مثال‌های Few-shot یا ترغیب برای زنجیره تفکر (Chain-of-thought) وجود نداشت. توالی درخواست‌ها در ترجمه به این شرح بود:

  • درخواست مشخصات (Spec Ask): «می‌خواهم این بازی را تحلیل کنی — https://fr.wikipedia.org/wiki/Jeu_de_cochons — و فکر کنی چطور می‌توان آن را به یک بازی تبدیل کرد. هیچ کدی ننویس: فقط قوانین را تحلیل کن و تعریف کن که چه کارهایی باید انجام شود، در حالت تعریف محصول (Product-definition mode).» در اینجا، تمام توصیفات بازی تنها از طریق یک لینک ویکی‌پدیا ارائه شد و مدل خودش قوانین را خواند.
  • درخواست برنامه (Plan Ask): «من رویکرد B را می‌پسندم، آن را با جزئیات شرح بده و یک برنامه توسعه اولیه برای رسیدن به یک بازی قابل بازی، بدون باگ، تست شده و مستحکم آماده کن... آن برنامه را به من بده تا بررسی شود. اگر بررسی بد باشد، تصویر بدی از DeepSeek Pro پیدا خواهم کرد.» این پرامپت از یک سیستم انگیزشی ساده بر اساس «اعتبار/تصویر» مدل برای افزایش کیفیت استفاده کرد.
  • درخواست بررسی (Review Ask): «یک بررسی تخاصمی روی این برنامه انجام بده، به طوری که Codex نقش رهبر و Claude نقش ثانویه را داشته باشد، با ۲ حلقه تکرار.»

مکانیسم تخاصمی: تقابل دو خانواده

توسعه‌دهنده برای مدیریت این فرآیند از DeepSeek Flash در قالب Hermes Agent استفاده کرد و از آن به‌عنوان «بخش ارزانِ حلقه» بهره برد. بار اصلی مهندسی بین دو خانوادهٔ متمایز از مدل‌ها تقسیم شد تا اطمینان حاصل شود که نظر دوم، کپی برابر اصل نظر اول نیست:

  • معمار (Architect): مدل Codex برای پیش‌نویس تعریف محصول و تدوین برنامه توسعه به کار گرفته شد.
  • بازرس (Inspector): مدل Claude Fable 5 به‌عنوان بررسی‌کننده تخاصمی عمل کرد و برنامه معمار را به شدت نقد و تخریب نمود. این رقابت مدل‌ها یادآور مقایسه عملکرد Claude Opus 5 و GPT-5.6 در تولید بازی‌های پیچیده است که هر یک نقاط قوت متفاوتی در منطق برنامه‌نویسی دارند.
  • سنتز (Synthesis): یک مرحله نهایی، یافته‌ها را ادغام کرد، آن‌ها را دسته‌بندی نمود و بر اساس شدت خطا رتبه‌بندی کرد.

این خط لوله منحصر به یک مدل خاص نیست و هر رابط خط فرمان (CLI) مدل زبانی، از جمله Gemini, GLM یا مدل‌های محلی اجرا شده با llama.cpp را می‌پذیرد. تنها شرط لازم، استفاده از دو خانواده مختلف از مدل‌ها برای جلوگیری از نقاط کور مشترک است.

تحلیل عددی «نظر دوم»

بازی Pass the Pigs به داشتن دفترچه قوانینی مشهور به «مبهم بودن» شناخته می‌شود. معناشناسی امتیازدهی — به‌ویژه در مورد Bon Jambon، Cochon à Cheval، Pig Out و قوانین Sum — دقیقاً همان نقاطی است که یک برنامه چند خطی ساده معمولاً در آن‌ها شکست می‌خورد. حلقه تخاصمی توانست این ظرافت‌ها را از طریق یک فرآیند یافته‌های ساختاریافته شناسایی کند:

  • آمار خام: مدل Codex به‌تنهایی ۷ مورد را یافت. مدل Claude Fable 5 به‌تنهایی ۱۱ مورد را شناسایی کرد. اما حلقه ادغامی تخاصمی، ۱۶ یافته منحصربه‌فرد را استخراج کرد.
  • سلسله‌مراتب اطمینان:
    • ۳ مورد با اطمینان بالا: مواردی که هر دو مدل به‌طور مستقل یافتند. این‌ها به عنوان سه خطرناک‌ترین باگ در مدل احتمالات شناسایی شدند.
    • ۶ مورد اجماعی: مسائلی که پس از یک دوره بحث و تبادل نظر، مورد توافق قرار گرفتند.
    • ۴ مورد جزئی: توافق بر سر وجود مشکل، اما اختلاف نظر در مورد شدت آن.
    • ۳ مورد مورد مناقشه: یافته‌هایی که حتی پس از اتمام حلقه بررسی، همچنان مورد اختلاف بودند.

سه باگ بحرانی در مدل احتمالات:
همگرایی دو مدل روی یک باگ، نزدیک‌ترین چیزی است که می‌توان به «نظر دوم» در LLMها دانست. این سه باگ عبارت بودند از:
۱. خطای احتمال لبه (Flank): برنامه ۱۲.۲۵٪ را به هر یک از دو نتیجه لبه اختصاص داده بود. اما در واقعیت، مجموع این دو نتیجه با هم ۱۲.۲۵٪ است، نه ۲۴.۵٪. این یعنی کل استراتژی ریسک بازیکن بر اساس احتمالی دو برابر شده بود.
۲. شکست در بازنویسی (Override): بررسی‌های متوالی برای نتایجی مانند Bon Jambon و Cochon à Cheval به‌طور خاموش نتایج دیگر را حذف می‌کردند. به همین دلیل، Cochon à Cheval به ۰.۷۸٪ می‌رسید، مگر اینکه به عنوان یک پارتیشن احتمالی مجزا مدل‌سازی می‌شد.
۳. تناقض Jambon: قانون Jambon به‌طور متناقض رفتار می‌کرد. یک بخش از برنامه، Bon Jambon را به عنوان یک فاجعه پایان‌دهنده نوبت می‌دید، در حالی که بخش دیگر آن را به عنوان امتیاز منفی می‌شناخت که با استفاده از Math.max(0, score) در صفر متوقف می‌شد.

از نقشه تا تولید

سرعت اجرای پروژه در طول شب بسیار بالا بود. جسارت در ساعت ۲۱:۱۲ شروع شد. برنامه‌ریزی و بررسی تخاصمی در همان شب انجام شد، هرچند پیشرفت کار زمانی متوقف شد که یکی از اشتراک‌ها در میانه حلقه به پایان رسید (Quota Wall).

  • ساعت ۰۱:۳۸: یک نسخه قابل بازی (Playable Build) در گیت‌هاب ثبت شد. تاریخچه کامیت چنین بود: «موتور قوانین کامل (ریسک، احتمالات کالیبره شده) ... ۷۳ تست (واحد + کالیبراسیون ۱ میلیون پرتاب + Playwright E2E) — بیلد Vite با حجم حدود ۱۶ کیلوبایت». این نسخه شامل موتور کامل قوانین بود و از طریق حلقه توسعه تخاصمی (Codex برای توسعه و Claude Fable 5 برای بررسی) ساخته شده بود.
  • ساعت ۱۰:۳۲: اصلاحیه نهایی روی URL گیت‌هاب پیجز اعمال شد تا یک خطای رایج 404 در مسیر پایه (base-path) Vite حل شود و سایت برای اولین افرادی که صبح آن روز لینک را امتحان می‌کردند، در دسترس باشد.

حتی پس از عبور از مجموعه ۷۳ تست، adversarial-code-loop دو باگ بزرگ نهایی را گرفت: نام بازیکنان در لایه‌ای اشتباه HTML-escape می‌شد (مثلاً نام A&B <Bob> به‌جای مدیریت صحیح، به شکل ناقص نمایش داده می‌شد) و لودر امتیازات بالای localStorage به نام‌های تاییدنشده اعتماد می‌کرد. هر دو مورد اصلاح و تست‌ها دوباره سبز شدند.

ارزش مناقشه

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

این سیگنال مناقشه بسیار گرانبهاست زیرا به توسعه‌دهنده انسانی دقیقاً می‌گوید کجا برنامه مبهم است و نیاز به یک تصمیم انسانی دارد، نه اینکه یک فرض اشتباه و خاموش در کد باقی بماند. ۱۳ یافته‌ای که از بحث‌ها جان سالم به در بردند، برای ایجاد «نسخه ۱.۱ برنامه» استفاده شدند تا مدل احتمالات بازسازی شود و انتقال‌های وضعیت (State Transitions) پیش از نوشتن حتی یک خط کد بازی، متمرکز شوند.

دسترسی و صداقت

برای یک علاقه‌مند (Hobbyist)، این ساختار کاملاً در دسترس است. این سیستم روی اشتراک‌های استاندارد ۲۰ دلاری ماهانه برای Claude و Codex اجرا شد و نیازی به اعتبارهای سازمانی API نداشت. خط لوله به‌گونه‌ای طراحی شده بود که در محدودیت‌های یک طرح مصرف‌کننده استاندارد جای بگیرد.

با این حال، سه «بند صداقت» باقی می‌ماند:
۱. سازگاری داخلی در برابر حقیقت: بررسی‌ها باعث شد احتمالات از نظر منطقی با هم سازگار شوند، اما لزوماً با «فیزیک واقعی» پرتاب خوک تطبیق نداشتند. شبیه‌سازی یک میلیون پرتاب، کد را تست می‌کند، نه عمل واقعی پرتاب خوک را. این مقادیر از استدلال مدل آمده‌اند و توسعه‌دهنده اشاره می‌کند که برای اعتماد به توصیه‌های استراتژیک بازی، نیاز به کالیبراسیون با داده‌های واقعی پرتاب است.
۲. واقعیت پرامپت: این فرآیند دقیقاً با یک پرامپت نبود؛ بلکه چند تبادل کوتاه برای رسیدن به مرحله ساخت لازم بود.
۳. مدیریت نویز: یافتن موارد بیشتر همیشه به معنای نتایج بهتر نیست اگر آن موارد «نویز» باشند؛ به همین دلیل دسته‌بندی یافته‌ها به کلاس‌های «تثبیت شده» و «مورد مناقشه» ضروری است.

این تغییر رویکرد نشان می‌دهد که آینده «از یک خط تا کد» در پرامپت‌های کامل نیست، بلکه در مدیریت تضاد دیدگاه‌هاست. استفاده توسعه‌دهنده از adversarial-spec (مشخصات تخاصمی)، adversarial-plan (برنامه تخاصمی) و adversarial-code-loop (حلقه کد تخاصمی) که همگی توسط Hermes Agent مدیریت می‌شدند، LLM را از یک ماشین تحریر جادویی به یک هیئت بررسی همتا (Peer-review Board) سخت‌گیر تبدیل می‌کند.

گام بعدی شما

  • اگر از یک مدل واحد برای بررسی کد استفاده می‌کنید، یک مدل از خانوادهٔ متفاوت (مثلاً Claude در برابر GPT) را به‌عنوان بازرس وارد زنجیره کنید.
  • به‌جای تلاش برای نوشتن «پرامپت کامل»، سیستمی طراحی کنید که در آن دو مدل بر سر خروجی یکدیگر بحث کنند.
  • روی نقاط مناقشه (Disputes) تمرکز کنید؛ این‌ها دقیق‌ترین نقاط برای ورود مداخلهٔ انسانی هستند.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما دربارهٔ تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این رویکرد با تکیه بر اعتبار متقابل دو مدل (Cross-Verification)، نرخ خطای منطقی را در نرم‌افزارهای تولید‌شده با AI به‌شدت کاهش می‌دهد. این تغییر برای شرکت‌هایی که به دنبال استقرار کد تولیدی AI در محیط‌های حساس هستند، حیاتی است.

تأثیر برای ایران

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

·نگاه ما
تحریریه دات‌هوش

این تجربه نشان می‌دهد که پیشرفت در کدنویسی AI از مسیر «مدل‌های بزرگتر» یا «پرامپت‌های پیچیده‌تر» نمی‌گذرد، بلکه در مدیریت تضاد دیدگاه‌هاست. انتقال از پارادایم «ماشین تحریر جادویی» به «هیئت بازبینی هم‌تا»، استدلال مدل را از حالت احتمالی به حالت تاییدشده تبدیل می‌کند. در واقع، «خطای مدل» در این ساختار تبدیل به «سیگنال اصلاحی» می‌شود.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.