استفاده از مثال در پرامپت، یکی از مؤثرترین تکنیک‌ها برای افزایش دقت، پایداری و قابلیت پردازش خروجی مدل‌های زبانی است که در آن، الگوی مورد انتظار از طریق چند نمونه مرجع به مدل نشان داده می‌شود. این تکنیک که با نام Few-shot Prompting شناخته می‌شود، در وظایفی که ساختار مشخصی دارند، می‌تواند دقت خروجی را تا چندین برابر افزایش دهد. برای درک عمیق این تکنیک، ابتدا باید با ساختار یک پرامپت مؤثر آشنا باشیم و سپس جایگاه مثال در آن را تحلیل کنیم.

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

مثال در پرامپت دقیقاً چیست؟

مثال در پرامپت، یک نمونه ورودی-خروجی است که پیش از وظیفه اصلی به مدل ارائه می‌شود. هدف این مثال، نشان دادن الگوی مورد انتظار به مدل است. به‌جای توضیح طولانی درباره قالب، لحن و ساختار مورد نظر، یک مثال کوتاه می‌تواند همان پیام را به‌مراتب مؤثرتر منتقل کند.

این تکنیک، ریشه در مفهومی به نام In-context Learning دارد. مدل‌های زبانی مدرن، بدون نیاز به آموزش مجدد، می‌توانند از مثال‌های موجود در پرامپت الگو بگیرند. این قابلیت، یکی از مهم‌ترین ویژگی‌های مدل‌های زبانی مدرن است و آن‌ها را از مدل‌های سنتی یادگیری ماشین متمایز می‌کند.

برای درک بهتر، به یک مثال ساده توجه کنید:

Example 1:
Input: "وردپرس کند است"
Output: {"category": "performance", "severity": "high"}

Example 2:
Input: "افزونه با قالب تداخل دارد"
Output: {"category": "compatibility", "severity": "medium"}

Now classify: "دیتابیس بهینه نیست"

در این پرامپت، دو مثال به مدل نشان می‌دهد که خروجی باید در قالب JSON و با دو کلید category و severity باشد. بدون این مثال‌ها، مدل ممکن است قالب دیگری انتخاب کند یا سطح جزئیات متفاوتی ارائه دهد.

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

چرا مثال‌ها بر خروجی مدل اثر می‌گذارند؟

مکانیزم اثرگذاری مثال‌ها را می‌توان در چند محور تحلیل کرد:

محدودسازی فضای احتمال

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

انتقال الگوی ساختاری

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

کاهش ابهام

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

آموزش در لحظه

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

پایداری خروجی

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

ویژگیبدون مثالبا مثال
پایداری خروجیپایینبالا
دقت قالبمتوسطبالا
قابلیت پردازشضعیفقوی
هزینه تکراربالاپایین

انواع مثال در پرامپت نویسی

مثال‌ها را می‌توان بر اساس تعداد و ماهیت، به چند دسته تقسیم کرد:

بر اساس تعداد

  • Zero-shot: بدون مثال. مدل فقط بر اساس دستور پاسخ می‌دهد.
  • One-shot: با یک مثال. مدل الگو را از یک نمونه استخراج می‌کند.
  • Few-shot: با چند مثال (معمولاً ۳ تا ۱۰). مدل الگو را از چند نمونه استخراج می‌کند.
  • Many-shot: با تعداد زیادی مثال (بیش از ۱۰). در مدل‌های با پنجره زمینه بزرگ کاربرد دارد.

بر اساس ماهیت

  • مثال مثبت: نمونه‌ای که الگوی مطلوب را نشان می‌دهد.
  • مثال منفی: نمونه‌ای که الگوی نامطلوب را نشان می‌دهد و به مدل می‌گوید چه چیزی تولید نکند.
  • مثال مرزی: نمونه‌ای که در مرز میان دو دسته قرار دارد و به مدل کمک می‌کند تمایز دقیق‌تری ایجاد کند.
  • مثال پویا: نمونه‌ای که بر اساس ورودی جاری به‌صورت پویا انتخاب می‌شود. برای جزئیات، پست تولید پرامپت پویا در زمان اجرا را ببینید.

بر اساس ساختار

  • مثال ساختاریافته: نمونه‌ای با ساختار مشخص (مانند JSON یا XML).
  • مثال متنی: نمونه‌ای به‌صورت متن آزاد.
  • مثال چندوجهی: نمونه‌ای شامل تصویر یا صدا. برای جزئیات، پست پرامپت نویسی برای مدل‌های چندوجهی را ببینید.

اصول طراحی مثال مؤثر

طراحی مثال مؤثر، نیازمند رعایت چند اصل است:

وضوح ساختاری

هر مثال باید ساختار مشخصی داشته باشد. اگر خروجی مورد انتظار JSON است، همه مثال‌ها باید JSON معتبر باشند. اگر خروجی متنی است، ساختار متن باید در همه مثال‌ها یکسان باشد.

سادگی

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

مرتبط بودن

مثال‌ها باید مستقیماً به وظیفه اصلی مربوط باشند. مثال‌های نامرتبط، می‌توانند مدل را منحرف کنند.

دقت

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

تنوع

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

یکنواختی قالب

همه مثال‌ها باید یک قالب یکسان داشته باشند. تنوع در قالب، مدل را سردرگم می‌کند.

طول مناسب

هر مثال باید به‌اندازه‌ای طولانی باشد که الگو را منتقل کند، اما نه بیشتر. مثال‌های طولانی، هزینه توکن را افزایش می‌دهند و ممکن است مدل را از وظیفه اصلی دور کنند.

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

ساختار یک مثال استاندارد

هر مثال استاندارد، از سه بخش اصلی تشکیل می‌شود:

برچسب یا جداکننده

هر مثال باید با یک برچسب مشخص شروع شود، مانند Example 1: یا ###. این برچسب، مرز میان مثال‌ها را مشخص می‌کند.

ورودی

ورودی مثال، همان چیزی است که مدل در وظیفه اصلی دریافت می‌کند. این ورودی باید دقیقاً مشابه ساختار ورودی واقعی باشد.

خروجی

خروجی مثال، همان چیزی است که مدل باید در وظیفه اصلی تولید کند. این خروجی باید دقیقاً مشابه ساختار خروجی مورد انتظار باشد.

نمونه‌ای از ساختار کامل

Example 1:
Input: "وردپرس کند است"
Output:
{
  "category": "performance",
  "severity": "high",
  "action": "optimize database queries"
}

Example 2:
Input: "افزونه با قالب تداخل دارد"
Output:
{
  "category": "compatibility",
  "severity": "medium",
  "action": "disable plugin and test"
}

Now classify: "دیتابیس بهینه نیست"

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

جداکننده‌ها

برای تفکیک بخش‌های مختلف مثال، می‌توان از جداکننده‌های مختلف استفاده کرد. برای جزئیات، پست استفاده از Delimiter در پرامپت را ببینید.

تعداد مناسب مثال‌ها

تعداد مناسب مثال‌ها به نوع وظیفه بستگی دارد:

وظایف ساده

در وظایف ساده مانند طبقه‌بندی دو حالته، ۱ تا ۳ مثال کافی است. افزودن مثال بیشتر، بهبود معناداری ایجاد نمی‌کند و فقط هزینه را افزایش می‌دهد.

وظایف متوسط

در وظایف متوسط مانند طبقه‌بندی چندحالته یا استخراج اطلاعات، ۳ تا ۵ مثال مناسب است. این تعداد، تعادل خوبی بین دقت و هزینه ایجاد می‌کند.

وظایف پیچیده

در وظایف پیچیده مانند تولید متن با ساختار خاص یا ترجمه با لحن مشخص، ۵ تا ۱۰ مثال ممکن است لازم باشد. تعداد بهینه، جایی است که افزودن مثال بیشتر، بهبود معناداری ایجاد نکند.

منحنی یادگیری در Few-shot Prompting

پژوهش‌ها نشان می‌دهد که در Few-shot Prompting، دقت با افزایش تعداد مثال‌ها افزایش می‌یابد، اما این افزایش در تعداد بالاتر، کند می‌شود. نقطه اشباع، بسته به نوع وظیفه متفاوت است.

نوع وظیفهتعداد مثال
طبقه‌بندی دو حالته۱ تا ۳
طبقه‌بندی چندحالته۳ تا ۵
استخراج اطلاعات۳ تا ۷
تولید متن ساختاریافته۵ تا ۱۰
ترجمه با لحن خاص۵ تا ۱۰

ترتیب و چیدمان مثال‌ها

ترتیب مثال‌ها، بر رفتار مدل اثر می‌گذارد. اگرچه مدل‌های مدرن به ترتیب حساسیت کمتری دارند، اما رعایت یک چیدمان منطقی، نتایج پایدارتری تولید می‌کند.

از ساده به پیچیده

ترتیب از ساده به پیچیده، به مدل کمک می‌کند الگو را به‌تدریج یاد بگیرد. این ترتیب، در وظایف پیچیده مؤثرتر است.

از نزدیک به دور

اگر مثال‌ها به وظیفه اصلی نزدیک باشند، مدل بهتر می‌تواند الگو را به کار ببرد. مثال‌های دور، ممکن است مدل را منحرف کنند.

Recency Bias

مدل‌ها به مثال‌های آخر وزن بیشتری می‌دهند. بنابراین، بهترین مثال را در انتهای لیست قرار دهید.

تعادل در دسته‌ها

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

تنوع مثال‌ها و پوشش حالت‌ها

تنوع مثال‌ها، یکی از مهم‌ترین عوامل موفقیت در Few-shot Prompting است:

پوشش حالت‌های مرزی

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

پوشش تفاوت‌های لحن

اگر وظیفه شامل لحن‌های مختلف است، مثال‌ها باید این تفاوت‌ها را نشان دهند.

پوشش طول‌های مختلف

اگر خروجی می‌تواند طول‌های مختلفی داشته باشد، مثال‌ها باید این تنوع را پوشش دهند.

پوشش زبان‌های مختلف

در سامانه‌های چندزبانه، مثال‌ها باید زبان‌های مختلف را پوشش دهند. برای جزئیات، پست پرامپت نویسی برای ترجمه را ببینید.

اشتباهات رایج در استفاده از مثال

اشتباهات رایج در استفاده از مثال‌ها:

مثال‌های متناقض

اگر مثال‌ها با یکدیگر متناقض باشند، مدل سردرگم می‌شود. همه مثال‌ها باید یک الگوی یکسان را نشان دهند.

مثال‌های نامرتبط

اگر مثال‌ها به وظیفه اصلی مربوط نباشند، مدل ممکن است پاسخ‌های نامرتبط تولید کند.

مثال‌های بیش از حد طولانی

مثال‌های طولانی، هزینه توکن را افزایش می‌دهند و ممکن است مدل را از وظیفه اصلی دور کنند.

عدم تعادل در دسته‌ها

اگر مثال‌ها در دسته‌های مختلف متعادل نباشند، مدل به سمت دسته غالب منحرف می‌شود.

مثال‌های تکراری

اگر همه مثال‌ها مشابه باشند، مدل نمی‌تواند الگو را به‌طور کامل یاد بگیرد.

نادیده گرفتن حالت‌های مرزی

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

مثال‌های نادرست

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

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

ارزیابی اثر مثال‌ها

برای ارزیابی اثر مثال‌ها، می‌توان از روش‌های زیر استفاده کرد:

آزمون A/B

دو نسخه از پرامپت (یکی با مثال و یکی بدون آن) را در یک مجموعه تست مشترک اجرا کنید. برای جزئیات، پست آزمون A/B برای پرامپت‌ها را ببینید.

معیارهای دقت

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

معیارهای پایداری

پایداری خروجی را در چند اجرا با ورودی یکسان اندازه‌گیری کنید. مثال‌ها باید پایداری را افزایش دهند.

هزینه

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

ترکیب مثال با سایر تکنیک‌ها

مثال‌ها می‌توانند با سایر تکنیک‌های پرامپت نویسی ترکیب شوند:

  • مثال + زنجیره تفکر: مثال‌هایی که شامل استدلال گام‌به‌گام باشند. برای جزئیات، پست زنجیره تفکر در پرامپت نویسی را ببینید.
  • مثال + خودسازگاری: چند نمونه با مثال‌های متنوع و رأی‌گیری اکثریت. برای جزئیات، پست روش خودسازگاری را ببینید.
  • مثال + درخت تفکر: مثال‌هایی که مسیرهای استدلال مختلف را نشان دهند. برای جزئیات، پست درخت تفکر در پرامپت نویسی را ببینید.
  • مثال + ReAct: مثال‌هایی که چرخه Thought-Action-Observation را نشان دهند. برای جزئیات، پست روش ReAct در پرامپت نویسی را ببینید.
  • مثال + RAG: مثال‌هایی که نحوه پاسخ بر اساس اسناد بازیابی‌شده را نشان دهند. برای جزئیات، پست RAG چیست را ببینید.
  • مثال + JSON Schema: مثال‌هایی که با یک Schema مشخص مطابقت داشته باشند. برای جزئیات، پست JSON Schema برای کنترل پاسخ مدل را ببینید.

پرسش‌های پرتکرار درباره مثال در پرامپت

آیا مثال‌ها همیشه دقت را افزایش می‌دهند؟

در بیشتر موارد، بله. اما اگر مثال‌ها نامرتبط یا متناقض باشند، می‌توانند دقت را کاهش دهند. کیفیت مثال‌ها، به‌اندازه تعداد آن‌ها مهم است.

چند مثال برای یک وظیفه کافی است؟

تعداد به نوع وظیفه بستگی دارد. در وظایف ساده، ۱ تا ۳ مثال کافی است. در وظایف پیچیده، ۵ تا ۱۰ مثال ممکن است لازم باشد. تعداد بهینه، جایی است که افزودن مثال بیشتر، بهبود معناداری ایجاد نکند.

آیا ترتیب مثال‌ها مهم است؟

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

آیا مثال منفی مؤثر است؟

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

آیا مثال‌ها بر هزینه اجرا اثر دارند؟

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

آیا مثال‌ها بر امنیت اثر دارند؟

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

آیا می‌توان از مثال‌های پویا استفاده کرد؟

بله. در سامانه‌های پیشرفته، مثال‌ها بر اساس ورودی جاری به‌صورت پویا انتخاب می‌شوند. این روش که Dynamic Few-shot Prompting نامیده می‌شود، دقت را در وظایف متنوع افزایش می‌دهد.

آیا مثال‌ها برای همه مدل‌ها یکسان است؟

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

آیا مثال‌ها می‌توانند جایگزین آموزش مدل شوند؟

در برخی وظایف، بله. In-context Learning با مثال‌های خوب می‌تواند عملکردی مشابه Fine-tuning ارائه دهد. اما در وظایف پیچیده، Fine-tuning ممکن است همچنان لازم باشد.

چطور بفهمم مثال‌های من مؤثر هستند؟

سه معیار: پایداری خروجی، دقت پاسخ و قابلیت پردازش. اگر خروجی مدل با مثال‌ها پایدارتر، دقیق‌تر و قابل‌پردازش‌تر شده باشد، مثال‌های شما مؤثر هستند.

آیا می‌توان از مثال‌های چندزبانه استفاده کرد؟

بله. در سامانه‌های چندزبانه، مثال‌ها می‌توانند زبان‌های مختلف را پوشش دهند. این موضوع در پست پرامپت نویسی برای ترجمه بررسی شده است.

نتیجه‌گیری کاربردی

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

مثال خوب، یک قرارداد ارتباطی است که الگوی مورد انتظار را بدون توضیح طولانی منتقل می‌کند.

در پروژه‌هایی که به خروجی ساختاریافته و قابل‌اتکا نیاز داشتیم، مثال‌ها ابزار اصلی برای دستیابی به این هدف بوده‌اند. توصیه می‌کنم مثال‌ها را به‌عنوان یک دارایی مستقل مدیریت کنید و از یک چارچوب نسخه‌بندی برای آن‌ها استفاده کنید. برای مفاهیم پایه‌ای مرتبط، پست اصول پرامپت نویسی و اصول پایه پرامپت نویسی را ببینید. برای کسب اطلاعات بیشتر درباره In-context Learning، صفحه In-context Learning را در ویکی‌پدیا مطالعه کنید.

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