آموزش مهندسی پرامپت برای به حداکثر رساندن بهرهوری با ChatGPT
با افزایش محبوبیت هوش مصنوعی مولد (Generative) از دیدگاه کلی و چتجیپیتی به طور خاص، پرامپت نوشتن به یک مهارت بسیار مهم برای افراد، در دنیای هوش مصنوعی تبدیل شده است. ساختن یک پرامپت، یعنی مکانیزم تعامل با یک مدل زبانی بزرگ (LLM) مانند چتجیپیتی، کار ساده و دستورالعملی نیست که در وهله اول به نظر میرسد. پس از جذابیتهای موجود در اولین تعاملات با چتجیپیتی، روشن میشود که نیاز به یکسری تمرین و آگاهی برای تسلط بر پرامپتنویسی وجود دارد. در نتیجه، توسعه فرآیندهای ایجاد پرامپتهای مفیدتر (که به عنوان مهندسی پرامپت شناخته میشود) در میان مدلهای زبانی بزرگ و فراتر از آن، تبدیل به یک تخصص شده است.
در این پست، شما درباره مهندسی پرامپت خواهید آموخت. به طور خاص:
– چگونگی ارائه اطلاعات در پرامپت نوشتن برای اثرگذاری بیشتر بر روی پاسخها
– شخصیت(های درخواستدهنده)، پرامپتهای مثبت و منفی، پرامپتهای صفر-شات و غیره چه مفاهیمی هستند و چه کاربردهایی دارند؟
– چگونگی استفاده از پرامپتها به صورت تکراری برای بهرهبرداری بیشتر از طبیعت گفتوگو محورِ چتجیپیتی
مرور
این نوشتار به 4 بخش تقسیم شده است؛ آنها عبارتند از:
اصول پرامپتکردن
مهندسی پرامپت پایه
استراتژیهای پیشرفته مهندسی پرامپت
توصیههایی برای همکاری موثرتر با ChatGPT
1- اصول پرامپت نوشتن
مهندسی پرامپت اساس مهمترین استفاده از مدلهای زبانی بزرگ و ابزار قدرتمندی برای سفارشی کردن تعاملات با چتجیپیتی است. این موضوع شامل نوشتن دستورالعملها یا پرسشهای واضح و مشخص برای برانگیختن پاسخهای مطلوب از مدل زبانی میشود. با نوشتن پرامپتهای دقیق، کاربران میتوانند خروجی چتجیپیتی را به سمت اهداف موردنظر خود هدایت کرده و اطمینان حاصل کنند که پاسخهای دقیقتر و مفیدتری دریافت میکنند.
در فرایند بهینهسازی پرامپت برای چتجیپیتی، چندین تکنیک پایه وجود دارد که باید به آنها توجه کرد.
در ابتدای نوشتن یک پرامپت، ارائه درخواستهای صریح به کاربران کمک میکند تا سیاق و وظیفه مدل را تعیین کنند. مشخص کردن فرم یا نوع پاسخ مورد انتظار نیز مفید است. به علاوه، میتوانید با ادغام پیامهای سیستم یا تکنیکهای نقش-محور (Role-Play) در پرامپت، تعامل را بهبود بخشید.
اینجا یک نمونه پرامپت با تکنیکهای فوق است:
“من میخواهم شما 10 ایده غذای شام سریع برای وبلاگهای دستور پخت معرفی کنید، که هر ایده شامل یک عنوان و یک جمله توصیف غذا باشد. این وبلاگها برای مخاطبان والدینی است که به دنبال آماده کردن غذاهای خانوادگی آسان هستند. نتایج را به صورت لیست نقطهای خروجی دهید.”
اگر تفاوت این پرامپت با پرامپت روبهرو را ببینید: “10 وبلاگ دستور پخت بنویسید.” ، بطور ذاتی پرامپت اول نتایج مفیدتری را به دنبال خواهد داشت.
به یاد داشته باشید که میتوانید با تقویت کیفیت پرامپتها و همچنین ارتباط مداوم با پرامپتها، محتوای پاسخ مدل را بهبود بخشید و به گفتگوهای موثرتر دست یابید. درضمن از آزمودن پرامپتهای بالقوه بر چتجیپیتی به صورت مستقیم نترسید.
2- مهندسی پرامپت پایه
اکنون که میدانید یک پرامپت پایه چگونه باید به نظر برسد، بیایید به بررسی دقیقتر برخی از ملاحظات مهندسی پرامپت پایه بپردازیم.
واژگان پرامپت
واژگان یک پرامپت بسیار حائز اهمیت است، زیرا مدل زبانی را در تولید خروجی مطلوب هدایت میکند. مهم است که سوال یا اظهارات را به گونهای فرموله کنید که چتجیپیتی بفهمد و بتواند به دقت پاسخ دهد. به عنوان مثال، اگر کاربر در یک حوزه متخصص نباشد و اصطلاح صحیح برای فرموله کردن یک سوال را نداند، چتجیپیتی ممکن است در ارائه پاسخها محدودیت داشته باشد. این موضوع شبیه به جستجو در وب بدون دانستن کلمه کلیدی صحیح است.
با وجود اینکه ممکن است اطلاعات اضافی برای ایجاد پرامپتهای بهتر استفاده شوند، اما این نکته هم مهم است که سخنوری بیش از حد، به طور کلی استراتژی بهینهای نیست. بهتر است به انتخاب واژگان پرامپت به عنوان یک تکنیک جداگانه فکر نکنید، بلکه آنها را به عنوان یک نخ متصل در تمام تکنیکهای دیگر در نظر بگیرید.
مختصر بودن
مختصر بودن یک پرامپت برای وضوح و دقت کار حائز اهمیت است. یک پرامپت خوب باید به دور از سخنوری و مفید و مختصر باشد و به اندازه کافی اطلاعات را فراهم کند تا چتجیپیتی بتواند قصد کاربر را درک کند. با این حال، اطمینان حاصل کردن از آن که پرامپت خیلی مختصر نباشد، نیز حائز اهمیت است، زیرا ممکن است منجر به ابهام یا سوءتفاهم شود. ایجاد تعادل بین کم و زیاد بودن پرامپتها ممکن است سخت باشد. بهترین راه برای تسلط بر این مهارت، تمرین است.
نقشها و اهداف
در مهندسی پرامپت، نقشها در واقع شخصیتهای خیالی اختصاص داده شده به مدل زبانی بزرگ و مخاطبان موردنظر هستند. به عنوان مثال، اگر کسی علاقهمند به استفاده از چتجیپیتی برای نوشتن یک طرح برای یک پست وبلاگ در مورد معیارهای طبقهبندی یادگیری ماشین است، بهتر است صراحتاً اعلام کند که چتجیپیتی باید به عنوان یک متخصص یادگیری ماشین عمل کند و مخاطبان هدفش تازهواردان علوم داده هستند. این کار بدون شک به ارائه پاسخ مفید کمک خواهد کرد. اینکه آیا این موضوع باید به زبان گفتگویی (“شما باید به عنوان یک نماینده املاک با 10 سال سابقه در منطقه سعادتآباد عمل کنید”) یا به شیوهای رسمیتر (“نویسنده: نماینده املاک حرفهای سعادتآباد؛ مخاطب: خریداران خانههای تازهکار”) بیان شود، در یک سناریو خاص قابل آزمایش است.
همچنین مهم است که اهداف به طور نزدیک به نقشها مرتبط باشند. بیان کردن صریح هدف در تعامل پرامپتمحور، نه تنها یک ایده خوب است بلکه ضروری است. بدون این، چگونه چتجیپیتی میتواند حداقل تصوری از آنچه باید تولید کند، داشته باشد؟ در زیر یک پرامپت شایسته آورده شده است که هم نقشها و هم اهداف را بصورت کاملا مشخص در نظر گرفته است:
“شما باید به عنوان یک مشاور املاک با 10 سال سابقه در منطقه سعادتآباد عمل کنید. هدف شما باید تولید یک خلاصه یک پاراگرافی از هر یک از 5 محله خانوادگی برتر در منطقه سعادتآباد باشد. مخاطب موردنظر، خریداران خانه تازهکار هستند.”
پرامپتنویسی مثبت و منفی
پرامپتنویسی مثبت و منفی یک مجموعه دیگر از روشهای قالببندی است که برای هدایت خروجی مدل استفاده میشود. پرامپتهای مثبت (“این کار را انجام دهید (do this)”) مدل را تشویق میکنند تا انواع خاصی از خروجی را شامل شود و پاسخهای خاصی را تولید کند. از سوی دیگر، پرامپتهای منفی (“این کار را انجام ندهید (don’t do this)”) از مدل جلوگیری میکنند تا انواع خاصی از خروجی را شامل نشود و پاسخهای خاصی را تولید نکند. استفاده از پرامپتهای مثبت و منفی میتواند به طور قابل توجهی جهت و کیفیت خروجی مدل را تحت تأثیر قرار دهد.
در مثال قبل (مشاور املاک)، قالببندی پرامپت طبیعت مثبتی داشت و هدایت مرکرد که چتجیپیتی چه چیزهایی باید تولید کند. در عین حال میتوانید از افزودن برخی کلمات برای جلوگیری از خروجی معین، چه در محتوا و چه در قالب، استفاده کنید. به عنوان مثال برای پرامپتنویسی منفی هدایت شده، میتوان محدودیت زیر را اضافه کرد:
“هیچ محلهای در ۵ کیلومتری فاصله از مرکز شهر یا مجاور فرودگاه را شامل نکنید.”
این محدودیت اضافی به چتجیپیتی در درک آنچه باید تولید کند، کمک میکند.
3- استراتژیهای پیشرفته مهندسی پرامپت
در بخش قبل برخی راهنماییهای عمومی برای تعامل با مدلهای زبان بزرگ ارائه شد. حال قصد داریم به استراتژیهای پیشرفتهتر مهندسی پرامپت نگاه کنیم. در ادامه گونههای متنوعی از استراتژیهای پیچیدهتر که در جعبه ابزار مهندسین پرامپت برای توانایی تعامل با چتجیپیتی استفاده میشود، را مرور میکنیم.
پرامپت ورودی/خروجی
استراتژی پرامپت ورودی/خروجی شامل تعریف ورودیهایی است که کاربر به LLM ارائه میدهد و خروجیای که LLM باید به آن پاسخ دهد. این استراتژی به عنوان یک اصل اساسی و مؤثر در مهندسی پرامپت مطرح است زیرا به طور مستقیم بر کیفیت پاسخ چتجیپیتی تأثیر میگذارد.
به عنوان مثال، کاربر ممکن است یک پرامپت ورودی ارائه دهد که از چتجیپیتی خواسته شود یک اسکریپت پایتون برای یک وظیفه خاص تولید کند و خروجی مورد نظر اسکریپت تولید شده باشد. در زیر یک مثال از استراتژی پایهای پرامپت ورودی/خروجی آورده شده است:
“یک اسکریپت پایتون تولید کنید که یک آرگومان خط فرمان ([پروژه]) را دریافت کند و وظایف زیر را انجام دهد:
– یک پوشه جدید با نام [پروژه] ایجاد کند
– یک فایل درون پوشه جدید با نام [پروژه].py ایجاد کند
– یک هدر (header) ساده برای فایل اسکریپت پایتون در فایل [پروژه].py بنویسد”
پرامپت صفر-نمونهای (Zero-Shot)
استراتژی پرامپت صفر-نمونهای شامل تولید پاسخ توسط LLM بدون استفاده از هیچ نمونه یا زمینهای است. این استراتژی میتواند زمانی مفید باشد که کاربر میخواهد یک پاسخ سریع، بدون ارائه جزئیات اضافی دریافت کند، یا زمانی که موضوع به گونهای عمومی است که استفاده از نمونهها باعث محدود کردن پاسخ میشود. به عنوان مثال:
“10 نام احتمالی برای طوطی جدیدم تولید کن.”
پرامپت یک نمونهای (One-Shot)
استراتژی پرامپت یک نمونهای شامل تولید پاسخ توسط LLM بر اساس یک نمونه یا بخشی از زمینهای است که توسط کاربر ارائه شده است. این استراتژی میتواند پاسخ ChatGPT را هدایت کند و اطمینان حاصل کند که با نیت کاربر همخوانی دارد. ایده این نوع پراپمتها این است که یک نمونه میتواند راهنمایی بیشتری به مدل بدهد تا هیچ. به عنوان مثال:
“10 نام احتمالی برای طوطی جدیدم تولید کن.
نام طوطیای که من دوست دارم، پرتغال است.”
استفاده از پرامپت چند نمونه (Few-Shot)
استراتژی پرامپت چند نمونه شامل تولید پاسخ توسط LLM بر اساس چند نمونه یا بخشهایی از زمینهای است که توسط کاربر ارائه شده است. این استراتژی میتواند پاسخ ChatGPT را هدایت کند و اطمینان حاصل کند که با نیت کاربر همخوانی دارد. ایده این نوع پراپمتها این است که چندین نمونه میتواند راهنمایی بیشتری به مدل بدهد تا یک نمونه. به عنوان مثال:
“10 نام احتمالی برای طوطی جدیدم تولید کن.
نامهای طوطیی که من دوست دارم شامل:
– پرتغال
– کیوی
– آناناس
– نارگیل”
همانطور که میتوانید حدس بزنید، هر چقدر نمونههای بیشتری بدهید، خروجی تولید شده به خواسته شما نزدیکتر خواهد بود. در پرامپت صفر-نمونهای، ممکن است هیچ نام مربوط به میوهها پیشنهاد نشود؛ در پرامپت یک نمونهای، ممکن است چندین نام پیشنهاد شود؛ و در پرامپت چند نمونهای، پیشنهادات ممکن است کاملاً از نامهای مرتبط با میوهها تشکیل شود.
پرامپت زنجیره اندیشه (chain of thought)
استراتژی پرامپت زنجیره اندیشه شامل ارائه چند نمونه به LLM است که به بهبود سوال اصلی کمک کرده و اطمینان حاصل میکند که یک پاسخ دقیقتر و جامعتر تولید شود. نامگذاری این پرامپتها به این دلیل است که شامل چند نمونه از زنجیرهای از اندیشه در پرامپتنویسی میشوند. ساختار پرامپتهای زنجیره اندیشه بگونهای اسن که به تفکر انتقادی تشویق شوند و برای کمک به کشف بینشها یا رویکردهای جدیدی که ChatGPT ممکن است در نظر نگرفته باشد، طراحی شدهاند. این موضوع تفاوت مهم این نوع پرامپتها با تکنیکهای پرامپت X-shot است.
این تکنیک همچنین LLM را به تولید استدلالات خود تشویق میکند. علامت تجاری پرامپت زنجیره اندیشه عبارت “بیایید گام به گام فکر کنیم” است که معمولاً به انتهای یک پرامپت الحاق میشود و تحقیقات نشان میدهد که این کار برای بهبود نتایج تولید شده کافی است.
به مثال زیر دقت کنید:
سوال کاربر: “علی 20 تخم مرغ دارد. او 2 سبد دیگر تخم مرغ میخرد. هر سبد شامل 12 تخم مرغ است. حالا جو چند تخم مرغ دارد؟”
جواب ChatGPT: “پاسخ 44 است.”
سوال کاربر: “رضا 93 مرغ داشت. اگر 20 تای از آنها را به حسین بفروشد و دو برابر تعداد فروخته شده را دوباره بخرد، حالا رضا چند مرغ دارد؟”
و پاسخ نادرست ChatGPT را در نظر بگیرید: “پاسخ 146 است.”
حالا بیایید به نحوه عملکرد پرامپت زنجیره اندیشه زیر نگاه کنید که برای تشویق تفکر انتقادی توسط LLM نوشته شده است:
سوال کاربر: “علی 20 تخم مرغ دارد. او 2 سبد دیگر تخم مرغ میخرد. هر سبد شامل 12 تخم مرغ است. حالا جو چند تخم مرغ دارد؟ بیایید گام به گام فکر کنیم.”
جواب ChatGPT: “علی با 20 تخم مرغ شروع کرد. 2 سبد با 12 تخم مرغ، 24 تخم مرغ است. پس 20 + 24 = 44. بنابراین، علی 44 تخم مرغ دارد و پاسخ 44 است.”
سوال کاربر: “رضا 93 مرغ داشت. اگر 20 تای از آنها را به حسین بفروشد و دو برابر تعداد فروخته شده را دوباره بخرد، حالا رضا چند مرغ دارد؟ بیایید گام به گام فکر کنیم.”
پاسخ ChatGPT این بار متفاوت است:
“رضا 20 مرغ را به حسین فروخت، بنابراین برای او 93 – 20 = 73 مرغ باقی مانده است. سپس دو برابر تعداد مرغهایی که فروخته است، تعداد مرغهایی است که خریده است، بنابراین او 2 * 20 = 40 مرغ خریده است. با اضافه کردن این مرغهای تازه خریده شده به موجودی باقیمانده، رضا حالا 73 + 40 = 113 مرغ دارد.”
با ارائه مثالی از فرآیند تفکر انتقادی مورد نیاز برای حل این مسئله و آموزش آن برای فکر کردن گام به گام، ChatGPT توانست همین استدلال را به سوال ما اعمال کند و اینبار با پاسخ صحیح بیاید.
استراتژی خودانتقادی (Self-Criticism)
استراتژی خودانتقادی شامل پرامپتهایی برای ارزیابی خروجیهای خودِ مدل LLM، جهت یافتن عدم دقتها یا بهبود بیشتر است. این استراتژی میتواند اطمینان حاصل کند که اطلاعات ارائه شده توسط ChatGPT به اندازهی ممکن دقیق باشد. این میتواند به کاربران در رفع اشکالات پرامپتهایشان و تعیین دلایلی که منجر به عدم دریافت نتایج مطابق با انتظارشان میشود، کمک کند.
یک مثال از چنین پرامپتی به صورت زیر است:
“لطفاً پاسخ بالا را دوباره بخوانید. آیا مشکلات یا اشتباهاتی در پاسخ خود مشاهده میکنید؟ اگر بله، لطفاً این مشکلات یا اشتباهات را شناسایی کرده و ویرایشهای لازم را انجام دهید.”
مثال دیگر مربوط به آموزش ChatGPT برای استفاده از خودانتقادی برای رفع اشکالات کد نامنظم آن است:
“به کدی که به تازگی تولید کردهای نگاه کن. در حال حاضر اجرا نمیشود. آیا قادر به مشاهده هر گونه خطاهای سینتکس یا اشتباهات فلوکنترل هستید که قادر به اصلاح آنها باشید؟ اگر بله، لطفاً بخش کد مشکلدار را شناسایی کرده و مجدداً تولید کنید.”
استفاده از تواناییهای خودبهبود دهنده ChatGPT، یک تکنیک مهندسی پرامپت است که نباید آن را نادیده بگیرید.
استراتژی تکرارشونده یا گستردهسازی (itrative)
استراتژی تکرارشونده یا گستردهسازی شامل پرامپتهای پیگیری بر اساس خروجی پرامپت اولیه است. این شامل تکرار و بهبود نتایج با پرسشهای بیشتر یا ارسال درخواستهای اضافی و متوالی پس از هر پاسخ میشود.
به عنوان مثال، فرض کنید ChatGPT در ایجاد چکیدهای برای کتابی که شما در حال نوشتن هستید، به شما کمک کند. پرامپت اولیه ممکن است به صورت زیر باشد:
“من در حال نگارش یک کتاب درباره نظریههای سفر در زمان هستم. من هنوز بر روی یک موضوع خاص تصمیم نگرفتهام. 5 پیشنهاد خاص برای چنین کتابی تولید کنید. برای هر پیشنهاد، یک عنوان و یک پاراگراف توضیح از آنچه کتاب شامل خواهد بود ارائه دهید. این کتاب برای خوانندگان عادی است.”
حال فرض کنید یکی از موضوعات پیشنهاد شده به صورت زیر باشد:
“عنوان: پارادوکسهای زمانی: راهبردهای مواجهه با پیچیدگیهای سفر در زمان”
“توضیح: پارادوکسهای زمانی به پیچیدگیهای ذهنی سفر در زمان میپردازد و معماهای جذابی را که ارائه میدهد، بررسی میکند. این کتاب به بررسی پارادوکسهای مختلف مانند پارادوکس Bootstrap، پارادوکس سرنوشت و پارادوکس اطلاعات و … میپردازد.”
سپس میتوانید با استفاده از یک پرامپت پیگیر، بر روی این موضوع ادامه دهید:
“من قصد دارم کتاب پیشنهاد شده توسط شما، “پارادوکسهای زمانی: راهبردهای مواجهه با پیچیدگیهای سفر در زمان” را بنویسم. یک طرح فصل برای این کتاب تولید کنید، شامل بخشها و زیربخشها.”
قطعه خروجی ممکن:
“مقدمه
– تعریف پارادوکسهای زمان
– اهمیت پارادوکسهای زمان در داستانهای سفر در زمان
– مرور ساختار فصل
فصل 1: پارادوکس Bootstrap
1.1 جوهر پارادوکس Bootstrap
– توضیح مفهوم و منشأ آن
– نمونههای کلیدی از ادبیات، فیلم و روایتهای واقعی
1.2 …”
این تکرار میتواند تا تکمیل فصول کتاب ادامه یابد.
اگر همچنان بخواهیم پرامپت بیشتری بنویسیم، ممکن است به صورت زیر باشد:
“بیایید به بخش مقدمه، جزئیات بیشتری بدهیم. خلاصه دو پاراگرافی از آنچه هر یک از بخشهای فصول پوشش میدهند را تولید کنید. طرح فصل برای مقدمه به شرح زیر است.
– – –
مقدمه
-تعریف پارادوکسهای زمانی
-اهمیت پارادوکسهای زمانی در داستانهای سفر در زمان
-مرور ساختار فصل
—-“
مشاهده میکنید که چگونه این تکرار میتواند در این مثال ادامه یابد. در مثال دیگری، یک تکرار مشابه میتواند برای تولید کد ChatGPT استفاده شود: شروع با یک دید کل، تکرار بر روی دید کلی برای تولید ماژولها، تولید بر روی ماژولها برای نوشتن توابع و در نهایت تولید کد در داخل توابع. همانطور که شکستن مسائل بزرگ به مسائل کوچکتر و قابل مدیریتتر به طور کلی دستورالعمل موفقیت ما انسانهاست، ChatGPT نیز در تکمیل وظایف بزرگ با قطعات کوچکتر و ملموستر، عالی عمل میکند.
4- توصیههایی برای همکاری موثرتر با ChatGPT
بهترین روش برای نگاه کردن به ChatGPT این است که به عنوان یک دستیار جوان، مثلاً یک دستیار تحقیقاتی، یک دستیار کدنویسی، یک دستیار حل مسئله یا هر نوع دستیاری که نیاز دارید، در نظر گرفته شود. شناخت و تقویت این همکاری میتواند منجر به موفقیتهای بیشتر شود. در ادامه چند نکته سریع برای ترویج این همکاری آورده شده است.
۱. پرامپت به پرامپت
یک راه برای بهبود پرامپتسازی شما این است که ChatGPT را درگیر کنید. یک پرامپت مانند “در حال حاضر چه پرامپتی میتوانم استفاده کنم تا به شما در این کار کمک کنم؟” میتواند منجر به نتایج مفیدی شود.
۲. پرامپت مدل-راهنما
پرامپت مدل-راهنما شامل دستور دادن به LLM به منظور به دست آوردن اطلاعات مورد نیاز برای انجام یک کار درخواست شده در پرامپت شما است. این مانند این است که به کسی بگویید “از من بپرسید تا به شما بگویم به دانستن چه اطلاعاتی نیاز دارید!“. اجازه دادن به ChatGPT برای تصمیمگیری در مورد اطلاعات مورد نیاز برای انجام یک کار میتواند مفید باشد، زیرا بخشی از حدس و گمان را حذف میکند. البته، یک پرامپت نامناسب برای پرامپت مدل-راهنما ممکن است باعث شود شما با تعدادی سوال غیرمرتبط از سوی ChatGPT روبرو شوید، بنابراین پرامپت اولیه همچنان باید با دقت نوشته شود.
دیدگاهتان را بنویسید