در چند سال اخیر، ابزارهایی مثل Claude، Cursor، Windsurf و GitHub Copilot نحوه نوشتن کد را تغییر دادهاند. اما واقعیت این است که کیفیت خروجی این ابزارها بیش از هر چیز به کیفیت پرامپت شما بستگی دارد. برنامهنویسانی که پرامپتهای ضعیف و مبهم مینویسند، معمولاً خروجی متوسط یا پر از باگ دریافت میکنند، در حالی که برنامهنویسانی که پرامپتهای دقیق و ساختاریافته مینویسند، میتوانند از این ابزارها به عنوان یک همکار ارشد استفاده کنند.
در این مقاله، ابتدا اصول کلی پرامپتنویسی را مرور میکنیم و سپس به صورت تخصصی به پرامپتنویسی برای AI Coding Agentها میپردازیم.
اصول کلی پرامپتنویسی
پرامپتنویسی خوب بر پایه چند اصل ساده اما مهم بنا شده است:
- وضوح و دقت: هرچه دستور شما مبهمتر باشد، خروجی هم مبهمتر خواهد بود.
- تعیین نقش و زمینه: مشخص کردن نقش مدل و دادن اطلاعات زمینهای، کیفیت پاسخ را بالا میبرد.
- مشخص کردن فرمت خروجی: بگویید خروجی به چه شکلی باشد (کد، توضیح، جدول، گامبهگام و غیره).
- محدود کردن دامنه: محدودیتها را صریح بیان کنید (مثلاً «از فریمورک خاصی استفاده نکن»).
- درخواست تفکر مرحلهبهمرحله: از مدل بخواهید قبل از نوشتن کد، مسئله را تحلیل کند.
این اصول پایهای هستند، اما وقتی پای AI Coding Agent به میان میآید، قواعد کمی تغییر میکند.
پرامپتنویسی برای AI Coding Agentها (Cursor، Claude، Codex و …)
برخلاف چتباتهای عمومی، ابزارهای کدنویسی مثل Cursor و Claude در محیط کد شما کار میکنند. آنها تا حدی خودشان Role و Context را مدیریت میکنند. بنابراین، تمرکز شما باید روی چیز دیگری باشد: انتقال دقیق نیت (Intent) و مشخصات فنی.
در ادامه، مهمترین اصول پرامپتنویسی برای این دسته از ابزارها را بررسی میکنیم:
۱. از Spec-Driven Prompting استفاده کنید
بهترین روش کار با AI Coding Agentها، Spec-Driven بودن است. یعنی به جای اینکه مستقیماً بگویید «این تابع را بنویس»، ابتدا مشخصات دقیق آنچه میخواهید بسازید را توصیف کنید.
مثال ضعیف:
یک API برای ثبتنام کاربر بنویس.
مثال بهتر (Spec-Driven):
میخواهم یک endpoint برای ثبتنام کاربر بسازم. این endpoint باید:
- ایمیل و رمز عبور را دریافت کند
- رمز عبور را هش کند
- وجود کاربر تکراری را چک کند
- در صورت موفقیت، یک توکن JWT برگرداند
- از FastAPI و SQLAlchemy استفاده کند
- خطاهای مناسب (۴۰۰، ۴۰۹، ۲۰۱) را هندل کند
هرچه مشخصات دقیقتر باشد، احتمال اینکه کد درست و تمیز تحویل بگیرید بیشتر است.
۲. ابتدا Planning بخواهید، بعد کد
یکی از اشتباهات رایج برنامهنویسان این است که مستقیماً درخواست کد میکنند. در حالی که AI Coding Agentها وقتی ابتدا پلن (طرح) را بنویسند، عملکرد خیلی بهتری دارند.
پرامپت پیشنهادی:
قبل از نوشتن هر کدی، ابتدا معماری و ساختار پیادهسازی این ویژگی را به صورت گامبهگام برایم توضیح بده. فقط بعد از تأیید من، کد را بنویس.
این روش باعث میشود از انحراف و بازنویسیهای متعدد جلوگیری شود.
۳. Context را هوشمندانه مدیریت کنید
در ابزارهایی مثل Cursor، میتوانید فایلها یا بخشهایی از پروژه را به عنوان Context به پرامپت اضافه کنید. هرچه Context مرتبطتر باشد، نتیجه بهتر خواهد بود.
به جای اینکه همه چیز را در پرامپت بنویسید، بهتر است بگویید:
با توجه به ساختار موجود در فایل auth_service.py، متد لاگین را بهروزرسانی کن تا از Refresh Token هم پشتیبانی کند.
۴. محدودیتها و استانداردها را صریح بیان کنید
AIها معمولاً کد را به روشهای مختلف مینویسند. اگر استاندارد خاصی مد نظرتان است، آن را در پرامپت ذکر کنید:
- نوع نامگذاری (snake_case، camelCase)
- استفاده یا عدم استفاده از کتابخانه خاص
- رعایت اصول SOLID یا Clean Architecture
- نوشتن تست برای edge caseها
۵. از مدل بخواهید چند رویکرد پیشنهاد دهد
گاهی اوقات بهتر است قبل از انتخاب راهحل، چند گزینه مختلف را ببینید:
سه رویکرد مختلف برای پیادهسازی این قابلیت پیشنهاد بده و مزایا و معایب هر کدام را بگو. بعد از انتخاب من، کد را بر اساس آن رویکرد بنویس.
۶. Iteration را مدیریت کنید
به ندرت در اولین پرامپت، کد کامل و بدون نقص دریافت میکنید. پرامپتهای خوب معمولاً شامل چرخه اصلاح هستند. مثلاً بعد از دریافت کد، میتوانید بگویید:
کد را بررسی کن و موارد زیر را بهبود بده: خوانایی، مدیریت خطا، و عملکرد.
جمعبندی
کار با AI Coding Agentها بیش از آنکه به دانش برنامهنویسی شما بستگی داشته باشد، به مهارت انتقال دقیق مشخصات وابسته است. برنامهنویسانی که از روش Spec-Driven Prompting استفاده میکنند، معمولاً خروجی باکیفیتتر، تمیزتر و قابل اعتمادتری از ابزارهایی مثل Cursor و Claude دریافت میکنند.
به جای دستور دادن، مشخصات دقیق بدهید. به جای درخواست مستقیم کد، ابتدا Planning بگیرید. و مهمتر از همه، پرامپت را به عنوان یک فرآیند تکرارشونده و دقیق ببینید، نه یک دستور یکباره.
