۲۷ مهر ۱۴۰۴

Techboy

اخبار و اطلاعات روز تکنولوژی

بازبینی کد Roo: توسعه خودکار مبتنی بر هوش مصنوعی در IDE

Roo Code یکی از اولین موج‌های عوامل کدنویسی خودکار است که مستقیماً داخل IDE ساخته شده‌اند. این اولین نگاهی به توسعه برنامه‌های مبتنی بر هوش مصنوعی با Roo و Gemini درون VS Code است.

Roo Code یکی از اولین موج‌های عوامل کدنویسی خودکار است که مستقیماً داخل IDE ساخته شده‌اند. این اولین نگاهی به توسعه برنامه‌های مبتنی بر هوش مصنوعی با Roo و Gemini درون VS Code است.

به‌نظر می‌رسد مدت زمان زیادی انتظار ابزار برنامه‌نویسی هوش مصنوعی‌ای که دنبالش هستم را کشیده‌ام؛ ابزاری که از ایده به برنامه برسد و سپس در حین پیشرفت، بازنگری شود. من ابزاری می‌خواهم که مرا محکم در حوزهٔ ایده‌ها نگه دارد در حالی که تغییرات برنامه‌ام به‌صورت جادویی توسط هوش مصنوعی مولد به اجرا درآید. این‌که نمی‌خواهم در کدنویسی دست‌وپنجه بخورم نیست؛ اما فقط این‌که به ما این وعده داده شد. به ما گفته شد که به‌زودی توسعه‌دهندگان منسوخ خواهند شد، بنابراین می‌گوییم «اثباتش کنید». ابزاری نشان دهید که بتوانم برنامه‌ها را به‌صورت ادامه‌دار توسعه دهم بدون اینکه نیاز به درک جزئیات داشته باشم. دیگر «به‌زودی می‌آید» نگوید. ابزاری را نشان دهید که همین حالا بتوانم استفاده کنم.

شروع کار با Roo Code

Roo Code نوعی واسطه عامل‌محور برای موتور هوش مصنوعی شما است. این ابزار از محتوای برنامه شما و خروجی‌های حاصل، همراه با درخواست‌های شما، برای ارسال درخواست به موتور هوش مصنوعی استفاده می‌کند و سپس تغییرات شما را به‌صورت مستقیم به برنامه اعمال می‌سازد.

برای شروع استفاده از Roo Code، باید یک API هوش مصنوعی برای ارتباط آن فراهم کنید. چون قبلاً Gemini دارم، از آن استفاده کردم:

تصویر از رابط کاربری Roo Code

انتخاب Gemini در رابط کاربری Roo Code.

Matthew Tyson

توجه: اگرچه Roo Code رایگان است، اما هزینه تماس‌های API به فراهم‌کننده شما بستگی به نرخ تعیین‌شده دارد.

راه‌اندازی Roo Code در ترمینال

یکی از قابلیت‌های Roo Code این است که دستورات را مستقیماً در ترمینال اجرا می‌کند. برای درست کار کردن دستورات کنسول مجبور شدم تنظیمات پیش‌فرض ترمینال را تغییر دهم. من در ویندوز هستم و Git Bash را به‌عنوان ترمینال در VS Code استفاده می‌کردم. هر بار که Roo می‌خواست دستورات را اجرا کند خطا می‌داد، بنابراین به PowerShell تغییر دادم و یک دستور مجوز را همان‌طور که در as described here اجرا کردم. این کار خطاها را رفع کرد.

مدیریت نمایندگی در Roo Code

نسل کنونی دستیارهای هوش مصنوعی مانند Roo Code (همچنین به Kiro نگاه کنید) برای ارائه قابلیت نمایندگی ساخته شده‌اند و رویکرد فعلی به این موضوع تأکید بر مقایسهٔ فایل‌ها دارد. به‌نوعی، مقایسهٔ فایل‌ها گام میانی کامل بین دستیارهای برنامه‌نویسی هوش مصنوعی و هوش مصنوعی کاملاً نماینده است. ما به‌وضوح محدودیت‌های کپی‑پیست از رابط هوش مصنوعی به IDE را دیده‌ایم — که فقط دردسرساز است.

پیشنهاد مقایسهٔ تغییرات در اسناد داخل IDE چندین مزیت دارد. این امکان را به هوش مصنوعی می‌دهد تا قدرت خود در دستکاری توکن‌های متن را نشان دهد؛ یک نقطهٔ منطقی برای تعامل انسان‑در‑حلقه فراهم می‌کند (توسعه‌دهندگان تغییرات پیشنهادی را تأیید می‌کنند)؛ و سطح نمایندگی در تعامل را ارتقاء می‌دهد، زیرا هوش مصنوعی فایل‌ها را در محل تغییر می‌دهد. به این معناست که هوش مصنوعی اقدام به تغییر پروژه می‌کند.

اگر تأیید خودکار مقایسه را فعال کنید، وارد حالت نمایندگی بیشتری می‌شوید، جایی که درخواست می‌کنید و عامل کارهای مورد نیاز را بررسی کرده و انجام می‌دهد. Roo چند تنظیم خودکار تأیید دارد، همان‌طور که در اینجا نشان داده شده است:

تصویر از رابط کاربری Roo Code

Matthew Tyson

تأیید حالت به Roo اجازه می‌دهد بین حالت‌ها سوییچ کند، عمدتاً حالت کد و معمار. در حالت کد، Roo فقط کد را تغییر می‌دهد، در حالی که در حالت معمار، برای تصمیم‌گیری‌های سطح بالاتر «کلاه فکر» خود را می‌زند.

برنامهٔ نمونه: My Music Gear

از Roo Code خواستم برنامه‌ای برای فروش تجهیزات موسیقی بسازد. این ابزار برنامه‌ای کارا بر پایهٔ CSS/JavaScript/HTML خالص در جلو و Node/Express/SQLite در عقب ارائه داد. در مقایسه، زمانی که از Google Firebase Studio درخواست مشابهی کردم، برنامه‌ای مبتنی بر Next.js دریافت کردم. هر دو استک معقولی برای شروع هستند.

Roo Code در لایهٔ داده

Roo Code نوعی مکار واسطه برای موتور هوش مصنوعی شماست. این ابزار از محتوای برنامه شما و خروجی‌های حاصل، همراه با درخواست‌های شما، برای ارسال درخواست به موتور هوش مصنوعی استفاده می‌کند و سپس تغییرات شما را به‌صورت مستقیم به برنامه اعمال می‌سازد.

هنگام ایجاد برنامه My Music Gear، Roo ابتدا با استفاده از SQLite، انتخاب پیش‌فرض زمان توسعه برای پشت‌سرور Node شروع کرد؛ این منطقی بود چون Roo می‌توانست یک دیتابیس داخلی درون برنامه ایجاد کند.

هنگام پرسش درباره گزینه‌های تولید، معمار Roo چند گزینه پیشنهاد داد. یکی MongoDB بود که یکی از علاقه‌مندی‌های من است، بنابراین برای آزمایش قدرت نمایندگی Roo از درایور MDB استفاده کردم و کد پشت‌سرور را برای استفاده از آن تغییر دادم و کوئری‌ها را به MongoDB مهاجرت کردم. من تمام کارهای سنگین را خوشبختانه به هوش مصنوعی واگذار کردم.

اجرای یک نمونهٔ Mongo متفاوت بود؛ چون بیرون از برنامه است، Roo گفت باید خودم این بخش را انجام دهم.

این موضوع به یک حوزهٔ جذاب برای نماینده‌ها می‌رسد: تغییر خود سیستم و اجرای دستورات جسورانه‌تر. کاری مثل اجرای

wget

برای دانلود یک بستهٔ

mongo

و نصب و پیکربندی آن برای استفادهٔ زمان توسعه، نمونهٔ بزرگی از نمایندگی برای یک دستیار هوش مصنوعی است. این کار به احراز هویت و مجوز می‌رسد که به‌طور غیرممکن حساس است.

گام بعدی این است که اجازه بدهیم نماینده دارایی‌های مثل MongoDB Atlas یا سایر استقرارهای ابری را تهیه کند و برنامه را برای توسعه، تست و تولید به آن‌ها متصل کند. هر یک از این گام‌ها شبکه‌ای از پیامدهای بیشتری را به‌وجود می‌آورد. به نظر می‌رسد هوش مصنوعی نماینده در نهایت نقش مشروعی در همهٔ این‌ها خواهد داشت، اما تعادل ظریفی برای حفظ امنیت احراز و هزینه‌ها لازم است.

ممکن است نماینده‌های مختلف برای حوزه‌های مختلف تمرکز شوند؛ جایی که Roo Code نقش خود را ایفا می‌کند و سپس هوش‌های ارکستراسیون زیرساخت‌های دیگر بخش‌های تخصصی را بر عهده می‌گیرند.

خوشبختانه، زمانی که تصمیم گرفتم از MongoDB به SQLite بازگردم، Roo Code توانست این کار را برایم انجام دهد. این‌گونه تغییرات اکتشافی در حین توسعه دستی کاملاً خسته‌کننده است.

مقایسهٔ خودکار

اگر دسترسی‌های خواندن و نوشتن را بر روی true تنظیم کنید، فرایند مقایسه به‌صورت خودکار انجام می‌شود. بسیاری از به‌روزرسانی‌های برنامه شما بدون مداخلهٔ کاربر اتفاق می‌افتند. هنوز می‌توانید مجموعهٔ تغییرات را نگاه کنید، زیرا هر مرحله‌ای که یک سؤال

allow

ایجاد می‌شد، به شما دسترسی به مقایسهٔ انجام‌شده می‌دهد:

تصویر از رابط کاربری Roo Code

Matthew Tyson

افزودن صفحهٔ درباره

بعداً از Roo Code خواستم صفحهٔ «درباره ما» را به برنامه اضافه کند:

تصویر از رابط کاربری Roo Code

درخواست صفحهٔ درباره از Roo Code.

Matthew Tyson

این کار به‌خوبی انجام شد؛ Roo قالبی کاملاً منطقی ارائه داد که من برای پر کردن جزئیات صفحهٔ درباره استفاده کردم. باز هم این همان کاری است که می‌خواهم نماینده انجام دهد.

افزودن درگاه پرداخت

راه‌اندازی فرآیند پرداخت محدودیت‌های مشابهی با پایگاه داده داشت؛ Roo Code می‌توانست بخش‌های داخلی برنامه را تنظیم کند، اما کار یکپارچه‌سازی حساب Stripe (یا مشابه) و دریافت کلیدهای API و تست آن بر عهدهٔ من بود.

در جزئیات عمیق با Roo Code

سپس می‌خواستم کاری کمی پیچیده‌تر اما همچنان در حوزهٔ برنامه انجام دهم. از Roo Code خواستم صفحهٔ مدیریت بسازد که بتوانم اقلام جدید برای فروش را به دیتابیس اضافه کنم. Roo فرم ورودی معقولی در

admin.html

تولید کرد، اما وقتی سعی کردم «گیتار ضد گرانش» جدیدی را ثبت کنم، خطای زیر رخ داد:

تصویر از رابط کاربری Roo Code

خطا هنگام ارسال یک مورد جدید از طریق صفحهٔ مدیریت.

Matthew Tyson

این پیام خطا می‌گوید که داده‌ها JSON نیستند و بخشی از HTML را نشان می‌دهد؛ علامتی کلاسیک برای ارسال فرم به یک نقطهٔ انتهایی JSON است. من این خطا را به Roo Code اطلاع دادم و او گفت باید سرور پشت‌سرور را دوباره راه‌اندازی کنم، که نمی‌تواند زیرا در ترمینال جداگانه اجرا می‌شود. این جالب است چون من آن را راه‌اندازی نکردم؛ Roo Code خودش انجام داد.

در این مقطع، خوشحالم که یک توسعه‌دهنده واقعی هستم که بخش‌های مختلف برنامه را می‌فهمد و می‌داند چگونه کار کنند.

به Roo Code گفتم فرآیندی در ترمینال در حال اجرا نیست و او یک فرمان پیچیدهٔ PowerShell برای کشتن و راه‌اندازی مجدد پردازش Node پیشنهاد داد. این یک پنجرهٔ جداگانه را باز کرد و به نظر می‌رسید کار کرده است، اما اکنون فرم ارسال خطای «failed to fetch» می‌دهد و محصولات دیگر بارگذاری نمی‌شوند. به‌علاوه، وقتی به localhost:3000 می‌روم، چیزی وجود ندارد؛ بنابراین سرور پشت‌سرور خاموش است. این موضوع را به Roo Code گفتیم و او بار دیگر سعی کرد بک‌اند را راه‌اندازی کند، این بار با اجرای دستور node در پوشهٔ سرور داخل ترمینال VS Code.

این تلاش معلق شد، اما من آن را کشتن و دوباره راه‌اندازی کردم و سرور دوباره فعال شد. اما همچنان خطاهایی هنگام ارسال یک مورد جدید وجود دارد. سپس خطای SQLite زیر را در کنسول سرور دیدم:

<anonymous_script>:0 [Error: SQLITE_ERROR: table products has no column named description Emitted 'error' event on Statement instance at: ] { errno: 1, code: 'SQLITE_ERROR' }

این خطا پردازش سرور را متوقف کرد و حالا Roo Code دستور زیر را پیشنهاد داد:

Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force -ErrorAction SilentlyContinue; rm music-gear-backend/musicgear.db -ErrorAction SilentlyContinue; Start-Process node -ArgumentList server.js -WorkingDirectory music-gear-backend

به فرمان نگاه کردم و فکر کردم «این چی می‌گوید؟» بنابراین از Roo Code پرسیدم چه کاری باید انجام دهم. او گفت راه‌حل حذف جدول SQLite است تا دوباره ساخته شود. آیا این منطقی به نظر می‌رسد؟ شاید. من اجازه دادم Roo Code این کار را انجام دهد و خطای جدید زیر ظاهر شد:

تصویر از رابط کاربری Roo Code

پیام خطای دیگری در رابط کاربری Roo Code.

Matthew Tyson

متوجه شدیم که Roo Code راه‌اندازی Node را نیز در اینجا بسته‌بندی کرده بود. بنابراین، اگرچه فرمان SQLite شکست خورد، دوباره بک‌اند را راه‌اندازی کرد—این‌بار در یک پنجرهٔ جداگانه خارج از VS Code.

به‌نسبت Roo، او خطا را مشاهده و در کنسول نظر داد (و گفت نگران نباشید، کلید این است که برنامه با یک شِمای تازه دوباره راه‌اندازی شده). این یک ویژگی کلیدی واقعی‌نمایندگی است؛ توانایی مصرف خروجی‌های برنامه.

به نظر می‌رسد کمی در جزئیات عمیق گیر کرده‌ایم. من شروع به فکر کردم که کلاه برنامه‌نویس خود را بزنم و جزئیات را بررسی کنم تا بفهمم چه می‌شود، نه اینکه دور و دور در حلقه بزنم. اما سپس برنامه را یک بار دیگر بارگذاری کردم و دیدم ساختن مورد جدید کار می‌کند. عالی!

افزودن اعتبارسنجی

می‌خواستم کارها را یکم جلوتر ببرم و برای صفحهٔ مدیریت احراز هویت و اعتبارسنجی درخواست کنم تا فقط کاربران وارد شده با دسترسی مناسب بتوانند اقلام جدید اضافه کنند. ورودی‌ها را دادم و Roo Code برنامه‌ای شامل نصب bcrypt، هش کردن رمزها، تغییرات شِما و افزودن صفحهٔ ورود و چک‌های auth ارائه داد. این کاری بود که خوشحالم که به هوش مصنوعی واگذار کردم. Roo Code تغییرات را اعمال کرد و اگرچه هنوز بسیار ساده است، ولی کار می‌کند.

تمام این کارها به‌صورت دستی زمان‌بر می‌بود. داشتن هوش مصنوعی نماینده مستقیماً در IDE، به‌جای ارکستراسیون از یک پنجرهٔ جداگانه یا قطعه‌قطعهٔ کد، قدرتی سطح بالاتر را به ارمغان می‌آورد.

تغییر پشتهٔ متن

از Roo Code دربارهٔ تبدیل نمونه‌ام به برنامه‌ای Next.js برای استقرار در Vercel پرسیدم. او یک برنامه عملیاتی شامل «نقشهٔ مرمید» زیر را ارائه داد:

نقشهٔ مرمید Roo Code.

طرح Roo Code برای سوئیچ کردن پشتهٔ برنامه به Next.js.

Matthew Tyson

نظرات کلی دربارهٔ Roo Code

همان‌طور که دیده شد، Roo Code عموماً به‌خوبی جریان دارد، اما گاهی دچار گیر می‌شود. بعضی کارها زمان‌بر می‌شوند. چند بار متوقف شد و من مجبور شدم کار را دوباره انجام دهم. یک بار کاملاً خراب شد و مجبور شدم VS Code را مجدداً راه‌اندازی کنم.

در یک زمان کوچک، به جزئیات ظریف UI پرداخت کردم؛ این مسأله خنده‌دار شد چون سعی می‌کردم دو دکمه را طوری تنظیم کنم که رنگ آن‌ها با رنگ‌های اصلی تم تداخل نداشته باشد، اما Roo Code دائماً دکمه‌ها را جابجا می‌کرد. من در حال نوشتن یک مرور بودم، اما در یک موقعیت واقعی برنامه‌نویسی، همهٔ این‌ها می‌توانست خسته‌کننده باشد.

به‌طور کلی، پرداختن به نکات دقیق UI می‌تواند زمان‌بر باشد و به‌هم‌رفتارهای زیاد نیاز داشته باشد. هوش مصنوعی یک مورد را اصلاح می‌کند، دیگری را عقب می‌گذارد. گاهی حس می‌شد خودم بهتر است CSS را دست‌به‌دست ویرایش کنم. این حوزه‌ای است که ایدهٔ «هوش مصنوعی مبتنی بر GUI»—یعنی عاملانی که بتوانند از طریق بینایی کامپیوتری با UI تعامل داشته باشند—ارزشمند خواهد بود.

وضعیت حاضر و آیندهٔ هوش مصنوعی نماینده

Roo Code همراه با Gemini در VS Code تا کنون مؤثرترین تنظیمی بود که من برای تحقق وعدهٔ نمایندگی یافته‌ام. با این حال، ادعای اینکه هوش مصنوعی نماینده جایگزین انسان برنامه‌نویس می‌شود نه‌که آن را تقویت می‌کند، همچنان بعید است. Roo Code شبیه یک اگزوسوک توسعه‌دهنده است نه یک ربات خودکار.

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

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

سؤال پیش می‌آید: پایان منطقی این همه چیست؟ آیا روزی می‌رسد که بتوانم بگویم: «خب، هوش مصنوعی، برنامه‌ای بساز که سالانه دو میلیون دلار برایم درآمد داشته باشد، آن را به‌هر طریقی که فکر می‌کنی مستقر کن و سپس بیت‌کوین را به کیف پول مجازی‌ام واریز کن…»

اگر به‌این‌گونه خیال‌پردازی بپردازیم، می‌تواند تا حدی علم‌تخیلی باشد.