دربارهٔ این فصل
یادداشتِ همراه نوارتا حالا به این فکر کردهاید که وقتی قطعات زیادی از اطلاعات را جمعآوری میکنیم، چطور باید آنها را کنار هم بگذاریم تا یک مدل هوش مصنوعی گیج نشود و دقیقترین پاسخ را به ما بدهد؟ چطور میتوانیم مطمئن شویم که تمام نکات مهم در محدودیتهای فنی مدل گم نمیشوند؟
در کتاب «مهندسی پرامپت برای مدلهای زبانی بزرگ» نوشتهٔ جان بریمن و آلبرت زیگلر، فصل ششم با عنوان «مونتاژ پرامپت» دقیقاً به همین پرسش پاسخ میدهد و نشان میدهد که چگونه میتوان قطعات مختلف را به یک پرامپت (Prompt) کارآمد تبدیل کرد. پرامپت متنی است که به مدل زبانی داده میشود تا خروجی تولید کند و نحوهٔ سازماندهی بخشهای مختلف آن نقش کلیدی در موفقیت نهایی دارد.
نخستین ایدهٔ کلیدی در ساخت پرامپت، پدیدهٔ درهای از بیحالی «Valley of Meh» است که از تأثیر یادگیری درونزمینهای و پدیدهٔ میانِ گمشده ناشی میشود. مدلهای زبانی اطلاعات ابتدای متن و انتهای متن را بهخوبی به خاطر میسپارند اما در بهکارگیری اطلاعاتی که در بخش میانی انباشته شدهاند دچار مشکل میشوند. برای حل این مشکل، نویسندگان پیشنهاد میکنند که عناصر کلیدی و حیاتی را بیرون از این بخش میانی قرار دهیم و متن را تا حد امکان خلاصه نگه داریم تا مدل تمرکز خود را از دست ندهد.
دومین موضوع مهم، انتخاب ساختار مناسب برای سند است که میتواند مکالمهٔ مشاورهای، گزارش تحلیلی یا سند ساختیافته باشد. برای نمونه، در قالب مکالمه، تعامل به صورت پرسش و پاسخ پیش میرود و مدل نقش ارائهدهندهٔ راهنمایی را بر عهده میگیرد. نویسندگان اشاره میکنند که ساختارهایی مثل Markdown به دلیل ساختار درختی و پشتیبانی از سرتیترها به مدل کمک میکنند تا به خوبی جهتیابی کند و بخشهای مختلف پرامپت را تشخیص دهد.
ایدهٔ سوم به نحوهٔ تبدیل اطلاعات به قطعات متنی اسنیپتها مربوط میشود که باید ویژگیهایی مانند مدولار بودن، سادگی و خنثی بودن را داشته باشند. خنثی بودن یعنی اینکه توکنسازی (Tokenization) یک قطعه متنی نباید روی توکنسازی قطعات مجاور تأثیر بگذارد. توکن واحد کوچک متنی است که مدل پردازش میکند و توکنسازی فرایند تبدیل متن به این واحدهاست. از آنجا که شمارش توکنها جمعپذیری خطی ندارد، اتصال نادرست کلمات میتواند تعداد توکنها را بهطور پیشبینینشدهای تغییر دهد.
چهارمین ایده به مدیریت اندازهٔ پرامپت و پنجرهٔ زمینه (Context Window) مربوط میشود. پنجرهٔ زمینه حداکثر حجم متن یا توکنی است که مدل میتواند در یک درخواست پردازش کند. وقتی با محدودیت فضا روبهرو هستیم، استفاده از اسنیپتهای کشسان کمک میکند تا نسخههای مختلفی از یک قطعه متن داشته باشیم و بزرگترین نسخه را که در پنجرهٔ زمینه جا میشود انتخاب کنیم. همچنین باید روابط میان عناصر مانند موقعیت، اهمیت و وابستگی را در قالب نیازمندیها یا ناسازگاریها مدیریت کرد.
در نهایت، برای مونتاژ نهایی این قطعات، به یک مسئلهٔ بهینهسازی میرسیم که شبیه به مسائل کولهپشتی است. نویسندگان دو الگوریتم حریصانهٔ افزایشی و کاهشی را برای این کار معرفی میکنند. در روش افزایشی، از یک پرامپت خالی شروع میکنیم و عناصر باارزش را یکییکی اضافه میکنیم تا ظرفیت پر شود، در حالی که در روش کاهشی همهٔ عناصر را در ابتدا قرار میدهیم و موارد کمارزش را حذف میکنیم.
پیشنهاد شخصی من این است که در پروژههای واقعی، کار را با ساختارهای ساده و حداقلی آغاز کنید و با بزرگتر شدن برنامه، به سراغ الگوریتمهای مرتبسازی و مدیریت وابستگی بروید تا همواره بهترین استفاده را از ظرفیت مدل ببرید.
امیدوارم این مرور کوتاه به شما کمک کرده باشد تا پرامپتهای دقیقتر و ساختاریافتهتری بسازید. تا برنامهای دیگر، بدرود.