پرامپت نویسی چیست؟ راهنمای عملی نوشتن پرامپت حرفهای برای API هوش مصنوعی
پرامپت نویسی مهارتی است که فاصله بین «جواب معمولی» و «جواب دقیقاً همان چیزی که میخواستم» را پر میکند. وقتی از طریق API با مدلهای هوش مصنوعی کار میکنید، پرامپت در واقع کد شماست: هر کلمهاش روی کیفیت خروجی، ثبات پاسخها و حتی هزینه اثر میگذارد. در این راهنما اصولی را مرور میکنیم که مستندات رسمی OpenAI و Anthropic هم روی آنها تأکید دارند، همراه با مثالهای عملی برای پروژههای فارسی.
پرامپت نویسی چیست و چرا برای توسعهدهندهها مهم است؟
پرامپت نویسی (Prompt Engineering) یعنی نوشتن دستورالعملهایی که مدل با خواندن آنها، بهطور پایدار خروجی موردنظر شما را تولید کند. خروجی مدلهای زبانی قطعی نیست؛ یعنی یک سؤال ثابت ممکن است هر بار جواب کمی متفاوتی بگیرد. پرامپت خوب این نوسان را کم میکند و رفتار مدل را قابل پیشبینی میکند.
در چت با یک اپلیکیشن، اگر جواب بد بود دوباره میپرسید. اما در محصولی که هزاران کاربر دارد، فرصت تکرار ندارید. پرامپت شما باید از اول درست کار کند.
۱. واضح، مستقیم و مشخص بنویسید
مدل ذهن شما را نمیخواند. فرض کنید دارید به یک همکار تازهوارد باهوش توضیح میدهید که هیچ اطلاعی از پروژه ندارد. هدف، مخاطب، طول، قالب و لحن را صریح بگویید.
| پرامپت مبهم | پرامپت دقیق |
|---|---|
| درباره این محصول توضیح بنویس. | برای صفحه محصول یک فروشگاه اینترنتی، توضیحی ۸۰ کلمهای به فارسی رسمی بنویس. مخاطب: خریداران غیرفنی. سه مزیت اصلی را در قالب فهرست بیاور. |
| این متن را خلاصه کن. | این گزارش را در حداکثر پنج جمله خلاصه کن و فقط تصمیمها و مهلتها را نگه دار. |
وقتی ترتیب مراحل مهم است، دستورها را بهصورت فهرست شمارهدار بنویسید تا مدل هیچ مرحلهای را جا نیندازد.
۲. نقش و قواعد کلی را در پیام سیستم بگذارید
در APIهای چت، پیام system (یا در مستندات جدید OpenAI، پیام developer) جای تعیین نقش، لحن و قواعد ثابت است. جزئیات هر درخواست و ورودی کاربر را در پیام user بفرستید. این تفکیک هم نگهداری پرامپت را سادهتر میکند و هم بخش ثابت پرامپت را برای کش شدن آماده نگه میدارد.
messages = [
{"role": "system", "content": (
"تو کارشناس پشتیبانی یک فروشگاه اینترنتی هستی. "
"مؤدب و کوتاه جواب بده. اگر جواب را نمیدانی، "
"بگو که سؤال را به پشتیبانی انسانی ارجاع میدهی."
)},
{"role": "user", "content": "سفارشم کی میرسد؟"},
]
۳. با مثال نشان بدهید (Few-shot)
یکی از مطمئنترین راهها برای کنترل قالب و لحن خروجی، آوردن چند نمونه ورودی و خروجی در پرامپت است. به این روش Few-shot میگویند. مستندات هر دو شرکت توصیه میکنند مثالها:
- مرتبط باشند: شبیه داده واقعی شما باشند، نه مثالهای کتابی.
- متنوع باشند: حالتهای مختلف و موارد مرزی را پوشش دهند تا مدل الگوی ناخواستهای یاد نگیرد.
- جدا باشند: با برچسب یا تگ از دستورالعمل جدا شوند تا مدل آنها را با دستور اشتباه نگیرد.
احساس هر نظر را با یکی از برچسبهای مثبت، منفی یا خنثی مشخص کن.
نظر: بستهبندی عالی بود و زود رسید.
برچسب: مثبت
نظر: رنگش با عکس فرق داشت.
برچسب: منفی
نظر: هنوز استفاده نکردهام.
برچسب: خنثی
نظر: {متن_نظر_جدید}
برچسب:
یک قاعده ساده از راهنمای OpenAI: اول بدون مثال (Zero-shot) امتحان کنید، اگر نتیجه کافی نبود چند مثال اضافه کنید و فقط وقتی هیچکدام جواب نداد سراغ Fine-tuning بروید.
۴. بخشهای پرامپت را با تگ یا تیتر جدا کنید
وقتی پرامپت شما ترکیبی از دستورالعمل، متن مرجع، مثال و ورودی کاربر است، مدل ممکن است مرز اینها را گم کند. تگهای XML یا تیترهای Markdown این مرزها را روشن میکنند. Anthropic بهطور خاص استفاده از تگهایی مثل <instructions> و <context> را توصیه میکند و OpenAI هم ترکیب Markdown و XML را برای مشخص کردن بخشها پیشنهاد میدهد.
<instructions>
قرارداد زیر را بخوان و بندهای مربوط به فسخ را فهرست کن.
برای هر بند، شماره بند و یک جمله توضیح بنویس.
</instructions>
<contract>
{متن_قرارداد}
</contract>
این روش یک مزیت امنیتی هم دارد: وقتی ورودی کاربر داخل تگ مشخصی قرار میگیرد، راحتتر میتوانید به مدل بگویید محتوای آن بخش را داده بداند، نه دستور.
۵. قالب خروجی را دقیق تعیین کنید
اگر خروجی مدل قرار است در کد شما پردازش شود، قالب را دقیق بخواهید؛ مثلاً JSON با کلیدهای مشخص. توصیف کنید هر فیلد چه نوعی دارد و اگر اطلاعاتی موجود نبود چه مقداری برگردد. بسیاری از APIها امکان خروجی ساختاریافته (Structured Outputs) هم دارند که پایبندی به قالب را مطمئنتر میکند.
از متن زیر نام، شهر و شماره سفارش را استخراج کن.
فقط یک JSON با این کلیدها برگردان:
{"name": string, "city": string, "order_id": string | null}
اگر شماره سفارش در متن نبود، مقدار null بگذار.
۶. کارهای پیچیده را مرحلهبندی کنید
برای تحلیلها و تصمیمهای چندمرحلهای، از مدل بخواهید قبل از جواب نهایی مسئله را مرحلهبهمرحله بررسی کند، یا خودتان مراحل را مشخص کنید. اگر کار خیلی بزرگ است، آن را به چند درخواست پشتسرهم بشکنید (Prompt Chaining): مثلاً اول استخراج اطلاعات، بعد تحلیل، بعد نوشتن گزارش. هر مرحله سادهتر و قابلآزمایشتر میشود.
توجه کنید که مدلهای استدلالی (Reasoning) خودشان قبل از پاسخ فکر میکنند؛ برای این مدلها معمولاً بهتر است هدف و معیار موفقیت را روشن بگویید و جزئیات مسیر را به خود مدل بسپارید.
نکات ویژه پرامپت نویسی فارسی
- زبان پاسخ را صریح بگویید. اگر بخشی از ورودی انگلیسی است، بنویسید «پاسخ را فقط به فارسی بده».
- سطح زبان را مشخص کنید. «فارسی رسمی»، «محاورهای مؤدبانه» یا «لحن دوستانه» نتیجههای کاملاً متفاوتی میدهند.
- اصطلاحات فنی را تعیین کنید. بگویید واژههایی مثل API یا Token ترجمه شوند یا به همان شکل انگلیسی بمانند تا متن یکدست شود.
- به هزینه فکر کنید. متن فارسی معمولاً توکن بیشتری از معادل انگلیسی مصرف میکند؛ پیام سیستم طولانی که در هر درخواست تکرار میشود را تا جای ممکن فشرده نگه دارید.
پرامپت را مثل کد آزمایش و نسخهبندی کنید
پرامپت نویسی کاری تکرارشونده است. یک مجموعه کوچک از ورودیهای واقعی (مثلاً ۲۰ نمونه) آماده کنید و هر تغییر پرامپت را روی همه آنها بسنجید. پرامپتها را در فایل جدا و زیر کنترل نسخه (Git) نگه دارید تا بدانید کدام تغییر باعث بهتر یا بدتر شدن نتیجه شده است. با عوض شدن مدل هم پرامپتها را دوباره آزمایش کنید؛ رفتار مدلهای مختلف یکسان نیست.
جمعبندی
پرامپت خوب واضح است، نقش و قواعد را جدا میکند، با مثال حرف میزند، بخشهایش مرز روشن دارند و قالب خروجی را دقیق مشخص میکند. این اصول ساده در عمل کیفیت و ثبات خروجی را بالا میبرند و هزینه آزمونوخطا را کم میکنند. برای اینکه همین امروز این تکنیکها را روی مدلهای مختلف امتحان کنید، از فروشگاه الینلند کلید API مدل دلخواهتان را با پرداخت ریالی و تحویل فوری تهیه کنید.