دربارهٔ این فصل
یادداشتِ همراه نوارتا حالا به این فکر کردهاید که چرا گاهی وقتها یک مدل زبانی بزرگ، پاسخهایی کلی میدهد در حالی که با داشتن کمی اطلاعات شخصیسازیشده میتواند دقیقترین پیشنهادها را ارائه کند؟ چطور میشود اطلاعات درست را در کنار دستورات دقیق به مدل رساند تا بهترین نتیجه حاصل شود؟
در فصل پنجم از کتاب «مهندسی پرامپت برای مدلهای زبانی بزرگ» نوشتهٔ جان بریمن و آلبرت زیگلر، به بررسی دقیق محتوای پرامپت میپردازیم و میبینیم که چگونه باید محتوای ایستا و پویا را ترکیب کنیم تا کیفیت خروجی به شکل چشمگیری افزایش یابد.
اولین ایدهٔ کلیدی، استفاده از روش چندنمونهای (few-shot) است؛ یعنی گنجاندن چند مثال نمونه در پرامپت تا مدل الگو و سبک پاسخدهی را یاد بگیرد. مشکل اینجاست که مثالهای زیاد ممکن است با افزایش حجم متن، از پنجرهٔ زمینه (context window) که حداکثر حجم متن قابل پردازش در مدل است فراتر بروند یا مدل را دچار سوگیری کنند. گزینهٔ جایگزین، اتکا به دستورات صریح است، اما توازن بین مثالها و دستورات دشوار است. برای نمونه، اگر بخواهید مدل امتیاز یک کتاب را پیشبینی کند، دادن چند نمونه بررسی قبلی با امتیازهای مختلف به مدل کمک میکند فرمت خروجی را دقیقاً رعایت کند.
ایدهٔ دوم مربوط به چالش اطلاعات پویا و مدیریت تأخیر (latency) زمان انتظار کاربر برای دریافت پاسخ است. وقتی برنامهای میسازید که باید در لحظه اطلاعات کاربر را جمعآوری کند، زمان پاسخدهی اهمیت حیاتی پیدا میکند. گزینههای پیش روی شما شامل جستجوی ایستا در اطلاعات ازپیشآماده یا بازیابی پویا در زمان اجرای درخواست است. مبادلهٔ اصلی اینجا میان سرعت پاسخدهی و جامعیت اطلاعات است. برای نمونه، در یک برنامهٔ پیشنهاد کتاب که به سابقهٔ خرید کاربر نیاز دارد، اگر بخواهید کل تاریخچهٔ خریدهای سالیانهاش را در همان لحظه تحلیل کنید، تأخیر سیستم بالا میرود و کاربر منتظر نمیماند.
ایدهٔ سوم به نحوهٔ بازیابی اطلاعات برمیگردد که به کمک تولید مبتنی بر بازیابی (RAG) انجام میشود؛ روشی که در آن سیستم ابتدا مستندات مربوط را جستجو کرده و سپس به پرامپت اضافه میکند تا مدل به دادههای خارج از دادههای آموزشی خود دسترسی داشته باشد. مسئله این است که جستجو ممکن است اطلاعات نامربوط بیاورد و مدل هم اصرار دارد تمام اطلاعات دادهشده را به کار بگیرد. انتخاب میان بازیابی واژگانی بر اساس تطابق کلمات و بازیابی عصبی (neural retrieval) که بر اساس معنا و مفهوم کار میکند، یکی از تصمیمات مهم است. نویسندگان کتاب اشاره میکنند که اگر به دنبال یافتن دقیق نظرات پیشین کاربر دربارهٔ ژانر خاصی از کتاب هستید، جستجوی مبتنی بر معنا معمولاً نتایج بهتری نسبت به تطابق سادهٔ کلمات به دست میدهد.
ایدهٔ چهارم خلاصهسازی متنهای طولانی برای جا دادن آنها در پرامپت است. گاهی حجم متن چنان بزرگ است که در پنجرهٔ زمینه جا نمیشود و ناچاریم از روش خلاصهسازی ساختار درختی خلاصهسازی سلسلهمراتبی استفاده کنیم. مشکل اینجاست که هرچه متنها بیشتر خلاصه شوند، احتمال بروز خطای انتقال مفهوم افزایش مییابد. به عنوان مثال، اگر بخواهید تاریخچهٔ نظرات طولانی یک کاربر را خلاصه کنید، خلاصهسازی چندمرحلهای به شما کمک میکند کل سابقه را در حجم کمتری فشرده کنید، اما باید مراقب از دست رفتن جزئیات ظریف باشید.
پیشنهاد من به شما این است که هنگام طراحی پرامپتهای پیچیده، ابتدا اطلاعات ثابت و متغیر را تفکیک کنید و پیش از افزودن حجم انبوهی از مثالها یا دادههای پویا، حتماً عملکرد مدل را با دادههای کمتر بسنجید تا از گمراه شدن آن جلوگیری کنید.
امیدوارم این بررسی به شما کمک کند پرامپتهای دقیقتر و کارآمدتری بسازید. تا برنامهای دیگر، پیروز باشید.