پرامپت‌نویسی

پرامپت برای کدنویسی

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

نوشتهٔ به‌روزرسانی: ۳ دقیقه مطالعه
تصویر مقالهٔ پرامپت برای کدنویسی

اگه تا حالا از یه مدل زبانی خواستی کدی بنویسه و جواب گرفتی که نه به زبان پروژه‌ات بود، نه به استایل تیمت، نه به نسخه‌ای که داری — این مقاله برات نوشته شده. مشکل پرامپت‌نویسی برای کدنویسی اینه که اکثر آدم‌ها فکر می‌کنن کافیه بنویسن «یه تابع بنویس که X بکنه» و تمام. ولی واقعیت خیلی پیچیده‌تره.

چرا پرامپت‌های کدنویسی با بقیه فرق می‌کنن

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

  • زبان و نسخه: Python 3.11؟ TypeScript 5؟ Go 1.22؟ اگه مشخص نکنی، مدل از الگوهای رایج‌ترین نسخه استفاده می‌کنه که ممکنه با محیطت فرق داشته باشه.
  • Context پروژه: تابع باید درون کلاس باشه؟ از چه کتابخونه‌ای استفاده کنه؟ چه error handling‌ای داریم؟
  • محدودیت‌ها: حافظه؟ سرعت؟ باید async باشه؟
  • هدف نهایی: تست می‌نویسی یا production code؟

پرامپت‌های copy-paste آماده

اینا رو کپی کن، جاهای [کروشه] رو جایگزین کن:

تولید تابع جدید

زبان: [Python/TypeScript/Go/...]
نسخه: [مثلاً Python 3.11]
کتابخونه‌های در دسترس: [مثلاً FastAPI, SQLAlchemy]

وظیفه: یه تابع بنویس که [شرح دقیق عملکرد].
ورودی: [نوع داده و مثال]
خروجی: [نوع داده و مثال]
محدودیت‌ها: [async بودن/نبودن، حجم داده، ...]
نمونهٔ استفاده: [یه مثال واقعی از کجا صدا زده می‌شه]

رفع باگ

زبان: [زبان]
کدی که مشکل داره:
[کد را اینجا paste کن]

خطایی که می‌گیرم:
[پیام خطای کامل]

انتظار دارم [توضیح رفتار صحیح].
فقط بخش مشکل‌دار رو تغییر بده و توضیح بده چرا این باگ رخ داده.

ریفکتور کردن کد قدیمی

این کد کار می‌کنه ولی می‌خوام بهترش کنم:
[کد]

اهداف ریفکتور:
- خوانایی بیشتر
- [هدف دوم مثلاً حذف تکرار / بهینه‌سازی حافظه]

قابلیت و رفتار خروجی باید دقیقاً همون بمونه. test case‌ها عوض نمی‌شن.

نوشتن تست

این تابع رو داری:
[کد تابع]

برام [pytest/jest/go test] بنویس که:
۱. حالت عادی رو تست کنه
۲. edge case‌هایی مثل [ورودی خالی / مقدار صفر / رشتهٔ خیلی بلند] رو پوشش بده
۳. خطاهای مورد انتظار رو verify کنه
از mock فقط وقتی واقعاً لازمه استفاده کن.

اشتباهات رایج که خروجی رو خراب می‌کنن

اشتباه ۱: پرامپت بدون context

«یه API endpoint بنویس برای login»

این پرامپت برای Express می‌نویسه یا FastAPI؟ JWT استفاده می‌کنه یا session؟ هیچ‌کدوم از این‌ها مشخص نیست.

نسخه بهتر:

«با FastAPI یه endpoint POST برای /auth/login بنویس. داده ورودی: username و password در body. اگه اعتبارسنجی موفق بود JWT token با expiry 24 ساعت برگردون. از library python-jose استفاده کن. schema Pydantic هم بنویس.»

اشتباه ۲: خواستن همه‌چیز یکجا

«یه سیستم کامل authentication بنویس با registration، login، logout، forgot password، و rate limiting»

مدل‌های زبانی روی task‌های بزرگ کیفیتشون پایین میاد. آن رو به step های کوچیک تقسیم کن.

اشتباه ۳: نگفتن چی نمی‌خوای

اضافه کن: «از global variable استفاده نکن.» یا «class نساز، فقط functions.» یا «کامنت فارسی نمی‌خوام.»

تکنیک few-shot برای استایل کدنویسی

اگه می‌خوای مدل به استایل خاص تیمت بنویسه، یه نمونه از کد موجود پروژه بده:

ما این استایل رو داریم:
[۱۰-۲۰ خط از کد پروژه که نمونه استایلت رو نشون بده]

حالا با همین استایل تابع زیر رو بنویس:
[توضیح تابع]

این خیلی بهتر از توضیح دستی استایل عمل می‌کنه.

وقتی AI کد اشتباه می‌ده

اگه کد تولید شده غلط بود، به جای شروع مکالمه از اول، این الگو رو استفاده کن:

کد تولیدشده رو اجرا کردم و [این خطا / این رفتار اشتباه] گرفتم.
اینجا چه مشکلی هست؟ [خطا یا رفتار اشتباه رو describe کن]
فقط این بخش رو fix کن، بقیه کد رو دست نزن.

این الگو مدل رو وادار می‌کنه جواب focused بده نه اینکه کل کد رو از اول بنویسه.

AiraCode و حافظهٔ پروژه

یه مشکل اساسی توی استفاده از مدل‌های زبانی برای کدنویسی اینه که هر مکالمهٔ جدید از صفر شروع می‌شه. مدل نمی‌دونه پروژه‌ات چه structure‌ای داره، چه conventions‌ای داری، و هفتهٔ پیش چه تصمیم‌های معماری گرفتی.

AiraCode این مشکل رو با حافظهٔ پیوستهٔ پروژه حل می‌کنه — یه CLI که context پروژه رو نگه می‌داره و پرامپت‌های کدنویسیت رو غنی‌تر می‌کنه بدون اینکه مجبور باشی هر بار همه چیز رو توضیح بدی.

همچنین بخوان

#پرامپت‌نویسی

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «پرامپت‌نویسی»