آموزش هوش مصنوعی

تکنیک‌های پرامپت نویسی پیشرفته؛ از زنجیره فکر تا خوداصلاحی

مقدماتی مطالعه در ۱۱ دقیقه
mahdyar

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

در این مقاله هفت تکنیک اصلی را با مثال واقعی مرور می‌کنیم. بعد یاد می‌گیرید با پارامتر temperature، پاسخ مدل را ثابت‌تر یا متنوع‌تر کنید. این متن قسمت دوم از مجموعه‌ی «از پرامپت تا دستیار هوش مصنوعی» است و همه‌ی این روش‌ها روی هر مدل زبانی قابل اجرا هستند.

چرا پرامپت ساده کافی نیست؟

یک پرامپت ساده مثل «ده سؤال جغرافیا بساز» را در نظر بگیرید. در همین یک جمله دو تکنیک پنهان است. اول، زمینه را مشخص کرده‌اید: جغرافیا. دوم، خروجی را محدود کرده‌اید: حداکثر ده سؤال.

اما احتمالاً دقیقاً به چیزی که می‌خواهید نمی‌رسید. دو دلیل اصلی دارد:

  • موضوع خیلی گسترده است: معلوم نیست سؤال‌ها درباره‌ی کشورها باشند، پایتخت‌ها یا رودخانه‌ها.
  • قالب مشخص نیست: شاید سؤال چهارگزینه‌ای بخواهید یا جدولی با پاسخ. مدل این را حدس نمی‌زند.

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

تکنیک‌های پرامپت نویسی در یک نگاه

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

تکنیکایده‌ی اصلیمناسب برای
Zero-shotفقط دستور، بدون نمونهپرسش‌های عمومی و ساده
Few-shotچند نمونه از خروجی دلخواهسبک، لحن و قالب ثابت
زنجیره‌ی فکرنشان‌دادن مراحل حل یک مسئله‌ی مشابهمحاسبه و استدلال چندمرحله‌ای
دانش تولیدشدهافزودن داده‌ی خودتان به پرامپتپاسخ بر اساس اطلاعات سازمان
کمترین‌به‌بیشترینشکستن مسئله به زیرمسئله‌هاپروژه‌ها و کارهای بزرگ
خوداصلاحینقد پاسخ و درخواست نسخه‌ی بهترکد، متن و طرح اولیه
پرسش سقراطیتوضیح جزءبه‌جزء پاسخبررسی سازگاری و درستی

هفت تکنیک پرامپت نویسی با مثال

هر تکنیک را با یک مثال کوتاه بررسی می‌کنیم. پیشنهاد می‌کنم همزمان با خواندن، مثال‌ها را در ChatGPT یا هر دستیار دیگری امتحان کنید و خروجی را با متن مقایسه کنید.

Zero-shot؛ ساده‌ترین شکل پرسیدن

در zero-shot فقط یک درخواست می‌فرستید و مدل بر اساس دانسته‌های خودش جواب می‌دهد. مثلاً می‌پرسید «جبر چیست؟» و پاسخ می‌گیرید: «شاخه‌ای از ریاضیات که نمادها و قواعد کار با آن‌ها را بررسی می‌کند.»

این همان روشی است که بیشتر ما کار با هوش مصنوعی را با آن شروع می‌کنیم. برای پرسش‌های عمومی کافی است. اما هرچه کار تخصصی‌تر شود، کنترل شما بر قالب و دقت پاسخ کمتر می‌شود.

Few-shot؛ نشان‌دادن به‌جای توضیح‌دادن

در few-shot چند نمونه از خروجی مطلوب را همراه درخواست می‌فرستید. مثلاً سه غزل از حافظ را می‌آورید و بعد می‌نویسید «حالا در همین سبک غزلی درباره‌ی ماه بگو». مدل وزن، لحن و قالب را از روی نمونه‌ها تشخیص می‌دهد.

نمونه‌ها به مدل زمینه، قالب و سبک می‌دهند. این کار مخصوصاً وقتی مفید است که توضیح دادن سبک با کلمات سخت باشد. به‌جای ده خط توصیف لحن برند، دو نمونه‌ی خوب از متن‌های قبلی را نشان دهید.

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

زنجیره‌ی فکر (Chain-of-Thought)

زنجیره‌ی فکر یعنی به مدل نشان دهید یک مسئله را چطور مرحله‌به‌مرحله حل کند. مثال درسنامه ساده اما گویاست: «علی ۵ سیب دارد، ۳ تا را دور می‌اندازد، ۲ تا به رضا می‌دهد و رضا یکی را پس می‌دهد. علی چند سیب دارد؟» مدل در آزمایش اصلی جواب داد ۵، در حالی که پاسخ درست ۱ است.

راه‌حل این است که پیش از سؤال اصلی، یک مسئله‌ی مشابه را همراه محاسبه‌اش بیاورید:

txt
سارا ۷ سیب دارد، ۱ سیب را دور می‌اندازد، ۴ تا به مریم می‌دهد و مریم یکی را پس می‌دهد:
7 - 1 = 6
6 - 4 = 2
2 + 1 = 3
علی ۵ سیب دارد، ۳ تا را دور می‌اندازد، ۲ تا به رضا می‌دهد و رضا یکی را پس می‌دهد. علی چند سیب دارد؟

این بار مدل همان الگوی محاسبه را دنبال می‌کند و به عدد ۱ می‌رسد. پرامپت طولانی‌تر شده، اما دقت پاسخ به‌وضوح بالا رفته است. در بسیاری از مدل‌ها حتی جمله‌ی کوتاه «مرحله‌به‌مرحله فکر کن» هم بخشی از همین اثر را دارد.

دانش تولیدشده؛ پرامپت با داده‌ی خودتان

اغلب می‌خواهید مدل بر اساس داده‌ی سازمان شما جواب بدهد، نه دانش عمومی‌اش. در این روش بخشی از پرامپت را از داده‌های خودتان می‌سازید. معمولاً یک قالب با متغیرهایی مثل {{products}} دارید که برنامه آن را با داده‌ی واقعی پر می‌کند.

درسنامه یک شرکت بیمه را مثال می‌زند. فهرست بیمه‌ها و قیمت‌ها در پرامپت آمده و از مدل خواسته شده با بودجه‌ی ۱۰۰۰ دلار، بیمه‌ی خودرو و خانه پیشنهاد دهد. پاسخ اول بیمه‌ی عمر را هم اضافه کرد و جمع هزینه از بودجه بیشتر شد. پس از چند بار آزمون، پرامپت این‌طور اصلاح شد:

txt
Insurance products (cost per month):
- type: Car, cheap, cost: 500 USD
- type: Home, cheap, cost: 600 USD
- type: Life, cheap, cost: 100 USD
Budget: $1000 restrict choice to types: Car, Home

افزودن برچسب‌های type و cost و کلمه‌ی restrict کافی بود تا مدل فقط در محدوده‌ی درست پیشنهاد بدهد. درس اصلی این مثال روشن است: حتی با داده‌ی درست، باز هم باید پرامپت را آزمود و بهینه کرد.

کمترین‌به‌بیشترین (Least-to-Most)

در این تکنیک یک مسئله‌ی بزرگ را به زیرمسئله‌های کوچک‌تر می‌شکنید. مثلاً می‌پرسید «علم داده را در پنج مرحله چطور انجام دهم؟» و مدل پاسخ می‌دهد: جمع‌آوری داده، پاک‌سازی، تحلیل، نمودارسازی و ارائه.

حالا هر مرحله را جداگانه و به ترتیب از مدل می‌خواهید. این روش شبیه زنجیره‌ی فکر است، با این تفاوت که مسیر حل را خود مدل پیشنهاد می‌دهد و شما قدم‌به‌قدم جلو می‌روید. برای پروژه‌هایی که یک‌جا در یک پاسخ جا نمی‌شوند بسیار کاربردی است.

خوداصلاحی (Self-Refine)

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

در مثال درسنامه، مدل یک API ساده با Flask نوشت. بعد از آن خواسته شد «سه پیشنهاد برای بهبود این کد بده». مدل خطای import را پیدا کرد، اجرای برنامه را اضافه کرد و خروجی مسیرها را پویا کرد. نسخه‌ی دوم به‌وضوح از نسخه‌ی اول بهتر بود.

این چرخه را می‌توانید چند بار تکرار کنید. فقط تعداد پیشنهادها را محدود کنید و جهت بهبود را مشخص کنید؛ مثلاً امنیت، کارایی یا خوانایی.

پرسش سقراطی (Maieutic)

این تکنیک شبیه خوداصلاحی است، اما تمرکزش روی «توضیح خواستن» است. اول پاسخ را می‌گیرید. بعد برای هر بخش از پاسخ، توضیح دقیق‌تر می‌خواهید. اگر توضیح‌ها با هم ناسازگار بودند، آن بخش را کنار می‌گذارید.

مثلاً از مدل پنج گام برای برنامه‌ی مدیریت بحران همه‌گیری می‌خواهید. بعد درباره‌ی گام اول و ریسک‌هایش سؤال می‌کنید و در ادامه می‌پرسید «دو ریسک بزرگ کدام‌اند؟». اگر پاسخ‌ها در هر مرحله با هم سازگار بمانند، با اطمینان بیشتری جلو می‌روید. با این حال، اعتماد کورکورانه هیچ‌وقت درست نیست.

این تکنیک‌ها در عمل با هم ترکیب می‌شوند. تصویر زیر چهار الگوی پرکاربرد را کنار هم نشان می‌دهد: زنجیره‌ی فکر، خوداصلاحی، دانش تولیدشده و تنظیم پارامترها.

چهار الگوی پیشرفته در تکنیک‌های پرامپت نویسی: زنجیره فکر، خوداصلاحی، دانش تولیدشده و temperature

کنترل تنوع خروجی با temperature

مدل‌های زبانی ذاتاً غیرقطعی‌اند. یک پرامپت یکسان را دو بار اجرا کنید؛ دو پاسخ متفاوت می‌گیرید. در درسنامه، درخواست «کد یک Web API با پایتون بنویس» یک بار API ساده داد و بار دوم یک API کامل کتاب‌ها.

temperature چیست و چطور تنظیمش کنیم؟

temperature عددی معمولاً بین ۰ و ۱ است. هرچه به صفر نزدیک‌تر باشد، پاسخ قطعی‌تر و تکرارپذیرتر است. هرچه به یک نزدیک‌تر شود، پاسخ متنوع‌تر و خلاقانه‌تر می‌شود. مقدار پیش‌فرض در بسیاری از سرویس‌ها حدود ۰٫۷ است.

در آزمایش درسنامه، با temperature برابر ۰٫۱ دو اجرای پشت‌سرهم تقریباً یک کد را تولید کردند. با ۰٫۹، دو اجرا آن‌قدر متفاوت بودند که انگار دو برنامه‌نویس جداگانه نوشته بودند. پس تنوع خروجی لزوماً مشکل نیست؛ بستگی دارد چه می‌خواهید.

اگر پاسخ مشخص و ثابت لازم دارید، temperature را پایین بیاورید. اگر ایده‌های متنوع می‌خواهید، آن را بالا ببرید. جدول زیر یک راهنمای شروع است.

مقدار temperatureرفتار مدلکاربرد پیشنهادی
۰ تا ۰٫۳ثابت و قابل‌تکراراستخراج داده، کد، پاسخ فنی
۰٫۴ تا ۰٫۷متعادلمتن آموزشی، خلاصه، گفت‌وگو
۰٫۸ تا ۱متنوع و خلاقایده‌پردازی، شعار تبلیغاتی، داستان

پارامترهای دیگر برای تنظیم پاسخ

temperature تنها ابزار کنترل نیست. پارامترهایی مثل top-p و top-k هم دامنه‌ی کلمه‌های قابل انتخاب را محدود می‌کنند. جریمه‌ی تکرار هم جلوی تکرار عبارت‌ها را می‌گیرد.

در شروع کار لازم نیست همه را تنظیم کنید. معمولاً تغییر temperature کافی است. فقط هم‌زمان چند پارامتر را عوض نکنید؛ وگرنه نمی‌فهمید کدام تغییر روی نتیجه اثر گذاشته است.

پنج عادت خوب در پرامپت نویسی

علاوه بر تکنیک‌ها، چند عادت ساده کیفیت پاسخ را بالا می‌برد. با تمرین، سبک شخصی خودتان را هم پیدا می‌کنید:

  • زمینه را مشخص کنید: حوزه، موضوع و مخاطب را بگویید.
  • خروجی را محدود کنید: تعداد مورد یا طول دقیق را تعیین کنید.
  • هم «چه» و هم «چطور» را بگویید: مثلاً «یک API با مسیرهای محصولات و مشتریان بساز و آن را در سه فایل تقسیم کن».
  • از قالب استفاده کنید: داده‌ی سازمان را با متغیرهای قالب وارد پرامپت کنید.
  • درست بنویسید: املا و نگارش درست، پاسخ دقیق‌تری به همراه دارد.

این پنج عادت روی هر هفت تکنیک اثر مثبت دارند. پرامپتی که زمینه، محدودیت و قالب روشنی دارد، با هر تکنیکی نتیجه‌ی بهتری می‌دهد.

تمرین عملی؛ خوداصلاحی روی یک کد ساده

کد کوچک زیر یک API ساده با Flask است. آن را به یک دستیار هوش مصنوعی بدهید و تکنیک خوداصلاحی را اجرا کنید:

python
from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def hello():
    name = request.args.get('name', 'World')
    return f'Hello, {name}!'

if __name__ == '__main__':
    app.run()

از مدل بخواهید فقط سه پیشنهاد بهبود بدهد و جهت آن را هم مشخص کنید؛ مثلاً امنیت. بعد نسخه‌ی اصلاح‌شده را بگیرید و دوباره نقدش کنید. در پایان نسخه‌ی اول و آخر را مقایسه کنید. برای پروژه‌ی مشترک مجموعه هم همین کار را روی پرامپت دستیار دوره‌ها انجام دهید.

سخن پایانی

تکنیک‌های پرامپت نویسی جادو نیستند، اما فاصله‌ی «جواب تصادفی» تا «جواب قابل‌اعتماد» را کم می‌کنند. few-shot سبک را منتقل می‌کند، زنجیره‌ی فکر استدلال را درست می‌کند، دانش تولیدشده داده‌ی شما را وارد بازی می‌کند و خوداصلاحی کیفیت را مرحله‌به‌مرحله بالا می‌برد. temperature هم تعیین می‌کند پاسخ‌ها تا چه حد ثابت یا خلاق باشند.

در قسمت سوم از پنجره‌ی چت فاصله می‌گیریم و اولین برنامه‌ی تولید متن را با کد می‌سازیم.

این آموزش بر پایه‌ی درس Creating Advanced Prompts از مجموعه‌ی آزاد Generative AI for Beginners مایکروسافت (مجوز MIT) به فارسی بازنویسی و تکمیل شده است.

پرسش‌های پرتکرار

بهترین تکنیک پرامپت نویسی برای مسائل محاسباتی کدام است؟

زنجیره‌ی فکر (Chain-of-Thought). یک مسئله‌ی مشابه را همراه راه‌حل مرحله‌به‌مرحله در پرامپت بیاورید تا مدل همان روش را روی مسئله‌ی اصلی اجرا کند.

temperature را روی چه عددی بگذارم؟

برای کارهای دقیق مثل استخراج داده، کد یا پاسخ فنی عددی نزدیک صفر مثل 0.1 تا 0.3 مناسب است. برای ایده‌پردازی و متن خلاقانه عددهای بالاتر مثل 0.8 تا 0.9 تنوع بیشتری می‌دهند.

فرق خوداصلاحی و پرسش سقراطی چیست؟

در خوداصلاحی از مدل می‌خواهید پاسخ خودش را نقد و بهتر کند. در پرسش سقراطی از مدل می‌خواهید هر بخش پاسخ را جداگانه توضیح دهد تا بخش‌های ناسازگار پیدا و حذف شوند.

آیا با این تکنیک‌ها دیگر لازم نیست پاسخ مدل را بررسی کنم؟

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

دیدگاه‌ها

هنوز دیدگاهی ثبت نشده است. شروع‌کننده باشید — پرسش و اصلاح را با آغوش باز می‌پذیریم.

دیدگاه بگذارید

برای **پررنگ**، *مورب*، `کد` و لینک از Markdown استفاده کنید. لینک‌ها nofollow هستند.