اصول اولیه پرامپت‌نویسی

نوشتن پرامپت برای یک مدل زبانی بزرگ (LLM)

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

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

پرامپت:

				
					The sky is
				
			

خروجی:

				
					blue.


				
			

اگر از OpenAI Playground یا هر محیط دیگری برای کار با مدل‌های زبانی بزرگ استفاده می‌کنی، می‌تونی مدل رو به شکلی که در تصویر زیر نشون داده شده، راهنمایی کنی:

نمایی از بخش playground سایت openai

نکته‌ای که باید در نظر داشته باشی اینه که وقتی از مدل‌های چت OpenAI مثل gpt-3.5-turbo یا gpt-4 استفاده می‌کنی، می‌تونی پرامپت خودت رو با سه نقش مختلف ساختاربندی کنی:

این ساختار شامل سه بخش اصلیه:
پیام سیستم(System Message): این پیام اختیاریه، ولی می‌تونه به هوش مصنوعی کمک کنه که بفهمه شما چی ازش می‌خواید.
پیام کاربر (User Message): این پیام، همون دستوری هست که شما به هوش مصنوعی می‌دید.
پیام دستیار(Assistant Message): این پیام، جواب هوش مصنوعی به شماست.
مثال:

پیام سیستم: هوش مصنوعی، تو یک شاعر ترانه‌سرای معاصر هستی که اشعار شاعرانه میگی.
پیام کاربر: شعر بنویس درباره بارون
پیام دستیار: (هوش مصنوعی یه شعر در مورد بارون می‌نویسه

در مثال قبل می‌تونی ببینی که مدل زبانی به دنباله‌ای از کلمات به متن “The sky is” ، پاسخ می‌ده. خروجی ممکنه غیرمنتظره باشه یا با کاری که می‌خوای انجام بدی فاصله داشته باشه. در واقع، این مثال ساده نیاز به ارائه زمینه یا دستورالعمل‌های بیشتر برای مشخص کردن اینکه دقیقاً چی می‌خوای با سیستم به‌دست بیاری رو برجسته می‌کنه. این همون چیزی هست که مهندسی پرامپت (prompt engineering) درباره‌ش هست.

بیایید سعی کنیم کمی بهترش کنیم:

پرامپت:

				
					Complete the sentence: 
The sky is

				
			

خروجی:

				
					blue during the day and dark at night.


				
			

آیا این بهتره؟ خب، با پرامپت بالا، داری به مدل می‌گی جمله رو تکمیل کنه، بنابراین نتیجه خیلی بهتر به نظر می‌رسه چون دقیقاً همون کاری رو انجام می‌ده که بهش گفتی (“جمله رو تکمیل کن”). این روش طراحی پرامپت‌های مؤثر برای راهنمایی مدل به انجام کار مورد نظر، چیزی هست که توی این راهنما بهش مهندسی پرامپت (prompt engineering) گفته می‌شه.

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

فرمت‌دهی پرامپت

یک پرامپت خیلی ساده رو در بالا امتحان کردین. یک پرامپت استاندارد فرمت زیر رو داره

				
					<Question>?

				
			

یا

				
					<Instruction>

				
			

می‌تونی این رو به فرمت پرسش و پاسخ (QA) که در بسیاری از دیتاست‌های QA استاندارده، به شکل زیر تبدیل کنی:

				
					Q: <Question>?
A: 
				
			

وقتی مثل بالا پرامپت می‌دی، بهش می‌گن پرامپت‌دهی بدون نمونه (zero-shot prompting)، یعنی مستقیماً از مدل درخواست پاسخ می‌کنی بدون اینکه هیچ نمونه یا مثالی درباره وظیفه‌ای که می‌خوای انجام بده، بهش بدی. بعضی از مدل‌های زبانی بزرگ توانایی انجام پرامپت‌دهی بدون نمونه رو دارن، اما این بستگی به پیچیدگی و دانش وظیفه مورد نظر و وظایفی که مدل برای انجام خوب آموزش دیده، داره.

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

پرامپت:

				
					Q: What is prompt engineering?
				
			

با برخی از مدل‌های جدیدتر می‌تونی قسمت “:Q” رو حذف کنی چون مدل به‌طور ضمنی بر اساس نحوه ساختار جمله متوجه می‌شه که وظیفه، پرسش و پاسخ هست. به عبارت دیگه، پرامپت می‌تونه به شکل ساده‌تری به این صورت باشه:

پرامپت:

				
					What is prompt engineering?
				
			

با توجه به فرمت استاندارد بالا، یکی از تکنیک‌های محبوب و مؤثر در پرامپت‌دهی، که بهش پرامپت‌دهی چندنمونه‌ای (few-shot prompting) می‌گن، ارائه نمونه‌ها (یعنی مثال‌ها) است. می‌تونی پرامپت‌های چندنمونه‌ای رو به این شکل فرمت‌دهی کنی:

				
					<Question>?
<Answer>

<Question>?
<Answer>

<Question>?
<Answer>

<Question>?

				
			

نسخه فرمت پرسش و پاسخ (QA) به این صورت خواهد بود:

				
					Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A: <Answer>

Q: <Question>?
A:
				
			

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

پرامپت:

				
					This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //
				
			

خروجی:

				
					Negative
				
			

پرامپت‌های چندنمونه‌ای، یادگیری در متن (in-context learning) رو ممکن می‌کنن، که به مدل‌های زبانی امکان می‌ده وظایف رو با دادن چند مثال یاد بگیرن. ما پرامپت‌دهی بدون نمونه و پرامپت‌دهی چندنمونه‌ای رو به‌طور مفصل‌تر در بخش‌های بعدی بحث می‌کنیم.