در چشمانداز سریعاً در حال تحول مدلهای زبانی بزرگ (LLM)، کیفیت خروجی شما مستقیماً با کیفیت ورودی شما متناسب است. اگرچه پرامپتینگ بدون نمونه (zero-shot prompting)—یعنی درخواست از مدل برای انجام یک کار بدون ارائه مثال—راحت است، اما اغلب دقت لازم برای کاربردهای پیچیده و تخصصی را ندارد. اینجاست که پرامپتینگ با چند نمونه (few-shot prompting) وارد عمل میشود. با ارائه تعداد کمی مثال illustrative در پرامپت خود، میتوانید رفتار مدل را به طور قابل توجهی هدایت کنید، ثبات را بهبود بخشید و توهمسازی (hallucinations) را کاهش دهید.
پرامپتینگ با چند نمونه چیست؟
پرامپتینگ با چند نمونه تکنیکی است که در آن شما چند جفت ورودی-خروجی را قبل از درخواست از مدل برای حل یک مسئله جدید به LLM ارائه میدهید. این کار از قابلیتهای یادگیری درونمتنی (in-context learning) مدل بهره میبرد. به بیان ساده، شما الگو، لحن و فرمی را که انتظار دارید مدل دنبال کند، نشان میدهید، نه اینکه فقط آن را به زبان طبیعی توصیف کنید.
تفاوت بین گفتن به یک آشپز «یک ساندویچ درست کن» (بدون نمونه) و نشان دادن یک عکس از ساندویچ خاص مورد علاقهتان (با چند نمونه) را در نظر بگیرید. دومی محدودیتهای ضمنی را در مورد مواد اولیه، لایهبندی و سبک ارائه میدهد که بیان کامل آنها در کلمات دشوار است.
چرا Few-Shot را بر Zero-Shot ترجیح دهیم؟
در حالی که پرامپتهای بدون نمونه کاملاً به دانش پیشآموزشدیده مدل تکیه دارند، میتوانند غیرقابل پیشبینی باشند. پرامپتینگ با چند نمونه مزایای متمایزی ارائه میدهد:
- رعایت فرمت: تضمین میکند که خروجی با یک طرحواره دقیق (مانند JSON یا XML) مطابقت دارد که برای یکپارچهسازی برنامهنویسی حیاتی است.
- کالیبراسیون لحن: به شما امکان میدهد صدای هوش مصنوعی را تعریف کنید، چه باید حرفهای باشد، چه طنزآمیز یا همدلانه.
- منطق پیچیده: برای وظایفی که نیاز به استدلال چندمرحلهای دارند، مثالها به مدل نشان میدهند که چه مراحل میانی را باید طی کند.
ساختاردهی پرامپت شما
یک پرامپت few-shot به خوبی ساختار یافته از سه بخش اصلی تشکیل شده است: توضیح وظیفه، مثالها و ورودی آزمایش. کلید کار، وضوح و ثبات در مثالهای شماست. هر مثال باید به وضوح ورودی را از خروجی مطلوب جدا کند.
در زیر یک مثال پایتون برای نشان دادن نحوه ساخت یک پرامپت few-shot برای تحلیل احساسات با استفاده از API اوپنایآی آورده شده است. توجه کنید که چگونه سه مثال متمایز شامل احساسات مثبت، منفی و خنثی ارائه میدهیم.
import openai
def analyze_sentiment(text):
prompt = f"""
احساس متن زیر را به عنوان 'مثبت'، 'منفی' یا 'خنثی' طبقهبندی کنید.
متن: "من واقعاً این بهروزرسانی نرمافزاری جدید را دوست دارم! اینقدر سریع است."
احساس: مثبت
متن: "خدمات مشتری بسیار بد بود و محصول بلافاصله خراب شد."
احساس: منفی
متن: "بسته روز سهشنبه رسید."
احساس: خنثی
متن: "{text}"
احساس:
"""
# فراخوانی API در اینجا قرار میگیرد
# response = openai.ChatCompletion.create(
# model="gpt-3.5-turbo",
# messages=[{"role": "user", "content": prompt}]
# )
return prompt
# مثال استفاده
print(analyze_sentiment("جلسه اتلاف وقت بود."))
در این مثال، مدل نیازی ندارد که به او گفته شود احساس «مثبت» چگونه به نظر میرسد؛ او آن را از مثال اول استنتاج میکند. این کار بار شناختی روی مدل را کاهش داده و ابهام را به حداقل میرساند.
بهترین شیوهها برای پیادهسازی
- آن را مرتبط نگه دارید: مثالهایی را انتخاب کنید که به شدت شبیه دادههای واقعی باشند که پردازش خواهید کرد. تنوع در مثالها به مدل کمک میکند تا بهتر تعمیم دهد.
- تعداد شاتها را محدود کنید: اگرچه مثالهای بیشتر گاهی اوقات میتوانند کمک کنند، اما زمینه توکن را مصرف کرده و تأخیر را افزایش میدهند. با ۳ تا ۵ مثال شروع کنید و ارزیابی نمایید.
- جداسازی صریح: از جداکنندههای واضح مانند خط تیره، خط جدید یا تگهای XML برای جدا کردن ورودیها و خروجیها استفاده کنید. این کار به مدل کمک میکند تا ساختار را به درستی تجزیه کند.
نتیجهگیری
پرامپتینگ با چند نمونه ابزاری قدرتمند در جعبه ابزار مهندسی پرامپت است. این روش شکاف بین پیروی از دستورهای عمومی و اجرای وظایف تخصصی را پر میکند. با صرف زمان برای گردآوری مثالهای با کیفیت بالا، توسعهدهندگان میتوانند کنترل بیشتری بر خروجیهای LLM داشته باشند که منجر به برنامههای هوش مصنوعی قابل اعتمادتر و مقاومتر میشود. همانطور که گردش کارهای خود را اصلاح میکنید، به یاد داشته باشید که مهندسی پرامپت یک فرآیند تکراری است—آزمایش کنید، اندازهگیری کنید و شاتهای خود را برای یافتن تعادل کامل برای مورد استفاده خاص خود بهینه کنید.