مرور کد محلی با Docker و smollm2 پیش از ارسال به گیت
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۳/۱۳ ۱۰:۴۳
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
git push اجرا میکند. برای پیادهسازی این سیستم، پیشنیازهای زیر لازم است:docker model run).pre-push در دایرکتوری پروژه است. این کار با ساخت پوشه scripts و فایل pre-push در مسیر .git/hooks/ انجام میشود. فایل pre-push باید دارای مجوز اجرایی (chmod +x) باشد و اسکریپت bash scripts/review_with_model.sh را اجرا کند. این تنظیم تضمین میکند که هر بار که توسعهدهنده تلاش به git push میکند، کد او از طریق فرآیند بازبینی محلی مدل عبور کند. در صورت وجود هرگونه مشکل در بازبینی، فرآیند push متوقف میشود و پیام خطا نمایش داده میشود.review_with_model.sh است که تعامل با مدل هوش مصنوعی را مدیریت میکند. این اسکریپت وظایف زیر را بر عهده دارد:git diff --cached، تغییراتی که برای ارسال آماده شدهاند، استخراج میشوند. اگر هیچ تغییری وجود نداشته باشد، اسکریپت با پیامی مبنی بر عدم وجود تغییرات، خاتمه مییابد.ai/smollm2:360M-Q4_K_M در دسترس است یا خیر، و در صورت نیاز آن را از طریق docker model pull دریافت میکند. سپس، پرامپت ایجاد شده به عنوان ورودی به docker model run ai/smollm2:360M-Q4_K_M ارسال میشود تا بازبینی کد انجام شود. مدل smollm2 به دلیل حجم کم (حدود ۳۶۰ مگابایت) و سرعت بالا، برای بازبینیهای ساده کد مناسب است، اما میتوان آن را با مدلهای بزرگتر مانند llama3 یا phi3 جایگزین کرد.print('Hello world!') به یک فایل پایتون)، مرحلهبندی آن (git add) و سپس تلاش برای git push، سیستم را آزمایش کند. در این مرحله، هوک pre-push فعال شده و مدل شروع به بازبینی تغییرات در ترمینال میکند. خروجی نمونه شامل پیشنهاداتی مانند "پیچیدن دستور print در یک تابع main()"، "اضافه کردن خط shebang" یا "استفاده از logging به جای print برای کد تولید" خواهد بود.REVIEW_OUTPUT) و سپس اسکن آن برای کلمات کلیدی مانند "bug" (باگ)، "security" (امنیت) یا "vulnerability" (آسیبپذیری) انجام میشود. در صورت تشخیص چنین کلماتی، اسکریپت با کد خطا خارج شده و push را لغو میکند.smollm2: به دلیل اندازه کوچک، برای بازبینیهای سبک مناسب است و نه بازسازیهای عمیق (deep refactoring).