تصور کنید سیستمی دارید که در آن اسکنرهای قطعی (Deterministic Scanners) و مدلهای استدلالی زبانی (LLM Reasoners) نه به عنوان رقبای یکدیگر، بلکه به عنوان لایههای مکمل عمل میکنند. ابزار BrassCoders از همین جداسازی بهره میبرد تا باگهای تولید شده توسط هوش مصنوعی را شکار کند و آنها را بر اساس این معیار دسته بندی کند که آیا خطا یک «شکل» ساختاری است یا مسئلهای مربوط به «قصد» منطقی نویسنده.
زمینه: آزمایش دو دسته
توسعهدهندگان مدرن اغلب با پدیده «توهم» (Hallucination) در کدهای تولید شده توسط هوش مصنوعی دستوپنجه نرم میکنند؛ جایی که یک قطعه کد در ظاهر درست به نظر میرسد اما در محیط عملیاتی شکست میخورد. این چالشها، نیاز به روشهای دقیقتری برای عیبیابی را ایجاد میکند که راهنمای یافتن نقاط شکست در عاملهای هوش مصنوعی یکی از این مسیرها را بررسی کرده است. اگر از یک دستیار هوش مصنوعی مدرن — چه ChatGPT باشد، چه Claude یا Gemini — بپرسید که چگونه باگهای موجود در کدهای نوشته شده توسط AI را شکار کنیم، توصیههای آنها همواره در دو دسته قرار میگیرد.
پرسشهای ساختاری به اسکنرهای قطعی ارجاع داده میشوند و پرسشهای مربوط به قصد و هدف به یک مدل زبانی (LLM) سپرده میشوند. این مرز دقیقاً جایی است که خطر یک باگ از یک «شکل» ساده (Shape) به یک «معنای» پیچیده (Meaning) تبدیل میشود. برای مثال، اگر بپرسید «چگونه تزریق SQL یا رمزهای سختافزاری (hardcoded secrets) را در کدهای AI شناسایی کنم»، پاسخها بر روی ابزارهای قطعی متمرکز میشوند. اما اگر بپرسید «چگونه بفهمم کد تولید شده توسط AI در واقع صحیح است»، پاسخها به سمت تستهای نرمافزاری و بازبینیهای مبتنی بر LLM تغییر میکند.
این ابزار در پاسخ به محدودیتهای ذاتی استفاده از یک روش واحد — خواه تحلیل ایستا (Static Analysis) خالص باشد یا هوش مصنوعی مولد خالص — برای تأیید کیفیت کد عرضه شده است. BrassCoders بر اساس همین تقسیمبندی دقیقی بنا شده است که در دنیای واقعی کشف شده، نه بر اساس بحثهای تئوریک روی یک تختهسفید.
جزئیات: معماری دو لایه
طبق گزارشی در وبسایت dev.to که در ۳۱ ژوئیه ۲۰۲۶ منتشر شد، معماری BrassCoders از یک گردشکار دو مرحلهای مشخص پیروی میکند.
لایه ساختاری (The Structural Layer)
در ابتدا، این سیستم از یک لایه قطعی با استفاده از مجموعهای از اسکنرهای الگوی استاندارد بهره میبرد. این ابزارها اشکال شناختهشده و «بد» را به صورت تکرارپذیر شکار میکنند، زیرا این باگها دارای شکلهایی هستند که یک قانون (Rule) میتواند با آنها مطابقت یابد. این لایه شامل موارد زیر است:
- Bandit: متخصص در الگوهای امنیتی زبان پایتون.
- Semgrep: برای تطبیق الگوها در چندین زبان برنامهنویسی مختلف.
- detect-secrets: طراحی شده برای یافتن اعتبارنامهها و رمزهای سختافزاری.
- Trivy: متمرکز بر اسکن وابستگیها (Dependency Scanning).
این ابزارها در پوشش جامع الگوها میدرخشند و مواردی مانند تزریقهای SQL، رمزنگاریهای ضعیف یا وابستگیهای آسیبپذیری که ساختار متمایز و تکرارپذیری دارند را شناسایی میکنند. در این مرحله، دستیار هوش مصنوعی به سراغ اسکنر میرود، زیرا اسکنر کاری را انجام میدهد که یک مدل استدلالی در آن مهارت کمتری دارد.
لایه قصد (The Intent Layer)
زمانی که لایه ساختاری کد را تأیید کرد، فرآیند به لایه قصد منتقل میشود. در این مرحله، یک LLM برای استدلال در مورد منطق و باگهای مربوط به مجوزهای دسترسی (Authorization Bugs) به کار گرفته میشود؛ خطاهایی که هیچ شکل ثابتی ندارند و بنابراین از اسکنرهای سنتی میگریزند.
- استدلال به جای تطبیق: خطاهای منطقی نیازمند خوانندهای هستند که درباره آنچه کد «قرار بود» انجام دهد، استدلال کند. این رویکرد استدلالی، در واقع تکامل یافتهی همان فرآیندهایی است که در جایگزینی روش سنتی اردک لاستیکی با جفت-برنامهنویسی AI شاهد آن بودیم.
- یکسان بودن ساختاری: برای مثال، یک خطای «تقسیم بر صفر» و یک محاسبه درستِ میانگین، در سورس کد از نظر ساختاری کاملاً یکسان به نظر میرسند. همچنین یک بررسی مجوز (Authorization check) درست و یک بررسی غلط، از نظر ساختاری مشابه هستند. تنها یک مدل استدلالی (Reasoner) میتواند تشخیص دهد که آیا منطق کد با هدف مورد نظر مطابقت دارد یا خیر.
شواهد برای تحلیل ترکیبی
این رویکرد ترکیبی توسط دادههای آکادمیک پشتیبانی میشود. مطالعهای در سال ۲۰۲۵ با عنوان 'ZeroFalse' (arXiv 2510.02534) گزارش داد که بازبینیهای ترکیبی (تحلیل ایستای استاتیک به علاوه LLM) به امتیاز F1 بالای ۰.۹۱ دست یافتند که از هر دو روش به صورت مجزا بهطور قابلتوجهی برتر بود.
به همین ترتیب، یک بنچمارک در سال ۲۰۲۵ توسط Gnieciak و Szandala نشان داد که در حالی که مدلهای زبانی بازخوانی (Recall) بالاتری ارائه میدهند، اما اغلب در مکانیابی یافتهها دچار خطا میشوند؛ در حالی که ابزارهای استاتیک یافتهها را با دقت (Precision) بسیار بالایی پین میکنند. بنابراین، پوشش قطعی به علاوه استدلال بر روی قصد، هر یک از آنها را به تنهایی شکست میدهد؛ این جداسازی، پیکربندی برنده است.
ادغام در گردشکار
برای گردشکار روزانه یک توسعهدهنده، این بدان معنای این است که لایه استدلال دیگر برای تطبیق الگوهای پیشپاافتاده تلف نمیشود. با فیلتر کردن نویزهای ساختاری در ابتدا، پنجره توجه محدودِ LLM برای باگهای منطقی با پیچیدگی بالا رزرو میشود. این توالی — ابتدا پوشش الگو و سپس استدلال — مثبتهای کاذب (False Positives) را به حداقل رسانده و کاربرد توکنهای گرانقیمت LLM را به حداکثر میرساند.
شما میتوانید این سیستم را با اجرای دستور pip install brasscoders و سپس اجرای فرمان اسکن آفلاین: brasscoders --offline scan /path/to/your/project ادغام کنید. این کار اجازه میدهد تا ابتدا اسکن قطعی یافتههای خود را منتشر کند و سپس دستیار AI آنها را تأیید کرده و تمرکز خود را به لایه عمیقترِ قصد معطوف کند. دو ابزار، که هر کدام کاری را انجام میدهند که دیگری قادر به انجام آن نیست.
گام بعدی شما
- نصب ابزار با دستور
pip install brasscodersبرای شروع. - اجرای اسکن آفلاین با دستور
brasscoders --offline scan /path/to/your/projectجهت شناسایی سریع الگوها. - استفاده از خروجی لایه ساختاری بهعنوان ورودی برای مدل زبانی جهت تحلیل عمیقتر منطق کد.
اما داستان سختافزاری اجرای این لایهها در محیطهای محلی حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو