مثالهای پرامپت
بخش قبلی یک مثال ساده از چگونگی پرامپت دادن به مدلهای زبانی بزرگ (LLMs) معرفی کردیم.
در این بخش، مثالهای بیشتری از نحوه استفاده از پرامپتها برای انجام وظایف مختلف و معرفی مفاهیم کلیدی در طول راه ارائه خواهد شد. اغلب بهترین راه برای یادگیری مفاهیم، مرور مثالهاست. چند مثال زیر نشان میدهد که چطور میتوان از پرامپتهای خوب طراحی شده برای انجام وظایف مختلف استفاده کرد.
موضوعات:
خلاصهسازی متن
یکی از وظایف استاندارد در تولید زبان طبیعی، خلاصهسازی متنه. خلاصهسازی متن میتونه شامل حوزهها و سبکهای مختلفی باشه. در واقع، یکی از کاربردهای امیدوارکننده مدلهای زبانی، توانایی خلاصه کردن مقالات و مفاهیم به صورت خلاصههای سریع و قابل فهمه. بیایید یه کار ساده خلاصهسازی متن رو با استفاده از پرامپتها امتحان کنیم.
فرض کن میخوای درباره آنتیبیوتیکها یاد بگیرین، میتونی از یه پرامپت مثل این استفاده کنین:
پرامپت:
آنتی بیوتیک ها را توضیح دهید
A:
“A:” یک قالب پرامپت مشخص برای پاسخ به سوالاته. شما اینجا از اون استفاده کردید تا به مدل بگین که انتظار میره یک پاسخ ارائه بشه.
خروجی:
آنتیبیوتیکها نوعی دارو هستند که برای درمان عفونتهای باکتریایی استفاده میشوند. این داروها با کشتن باکتریها یا جلوگیری از تکثیر آنها عمل میکنند و به این ترتیب به سیستم ایمنی بدن کمک میکنند تا با عفونت مبارزه کند. آنتیبیوتیکها معمولاً به صورت خوراکی به شکل قرص، کپسول یا محلولهای مایع مصرف میشوند و گاهی نیز به صورت وریدی تزریق میشوند. این داروها بر عفونتهای ویروسی تأثیری ندارند و استفاده نادرست از آنها میتواند به مقاومت باکتریها در برابر آنتیبیوتیکها منجر شود.
در این مثال، مشخص نیست که این کار در مقایسه با عدم استفاده از آن چقدر مفیده، اما برای مثالهای بعدی این موضوع را بررسی خواهیم کرد. فرض کنید این اطلاعات بیش از حده و میخواهین اون رو خلاصه کنید. در واقع، میتوانید به مدل دستور بدهید که اون رو در یک جمله خلاصه کند به این شکل:
آنتی بیوتیک ها نوعی دارویی هستند که برای درمان عفونت های باکتریایی استفاده می شود. آنها با کشتن باکتری ها یا جلوگیری از تولید مثل آنها عمل می کنند و به سیستم ایمنی بدن اجازه می دهند با عفونت مبارزه کند. آنتی بیوتیک ها معمولاً به صورت خوراکی به شکل قرص، کپسول یا محلول های مایع مصرف می شوند یا گاهی اوقات به صورت داخل وریدی تجویز می شوند. آنها در برابر عفونت های ویروسی موثر نیستند و استفاده نامناسب از آنها می تواند منجر به مقاومت آنتی بیوتیکی شود.
موارد فوق را در یک جمله توضیح دهید:
خروجی:
آنتیبیوتیکها داروهایی هستند که برای درمان عفونتهای باکتریایی از طریق کشتن باکتریها یا توقف تکثیر آنها استفاده میشوند، اما در برابر ویروسها مؤثر نیستند و استفاده بیش از حد میتواند منجر به مقاومت آنتیبیوتیکی شود.
بدون اینکه خیلی به دقت نتیجهای که بالا دیدیم توجه کنیم، مدل سعی کرده جملهای برای خلاصه کردن پاراگراف بنویسه. میتونید با دستورها بازی کنید، اما این رو برای فصل بعد میذاریم. اگه دوست دارید، اینجا مکث کنید و امتحان کنید ببینید آیا نتیجههای بهتری میگیرید یا نه.
استخراج اطلاعات
درسته که مدلهای زبانی برای تولید متن طبیعی و کارهای مرتبط آموزش دیدهاند، اما این مدلها در انجام کارهای دستهبندی و بسیاری از وظایف دیگر پردازش زبان طبیعی (NLP) هم خیلی توانمند هستند.
این هم یک مثال از دستوری هست که اطلاعاتی رو از یک پاراگراف مشخص استخراج میکنه.
پرامپت:
بخشهای مربوط به مشارکت نویسندگان و قدردانیها در مقالات پژوهشی باید به طور صریح و مشخص بیان کنند که آیا نویسندگان از تکنولوژیهای هوش مصنوعی مانند ChatGPT در تهیه دستنویس و تجزیه و تحلیل خود استفاده کردهاند و به چه میزان. همچنین باید مشخص کنند که از کدام مدلهای زبانی بزرگ (LLMs) استفاده شده است. این شفافسازی به ویراستاران و داوران کمک میکند تا دستنویسها را برای احتمال بروز تعصبات، نادرستیها و عدم ارجاع صحیح به منابع با دقت بیشتری بررسی کنند. همینطور، مجلات علمی نیز باید درباره استفاده خود از مدلهای زبانی بزرگ شفاف باشند، به عنوان مثال هنگام انتخاب دستنویسهای ارسال شده.
محصول مبتنی بر مدل زبانی بزرگ که در پاراگراف فوقالذکر را ذکر کنید:
خروجی:
محصول مبتنی بر مدل زبان بزرگ ذکر شده در پاراگراف بالا ChatGPT است.
راههای زیادی وجود داره که میتونی نتایج رو بهتر کنی، ولی همین الان هم خیلی مفیده. الآن باید روشن شده باشه که میتونی از مدل بخوای کارهای مختلفی رو انجام بده، فقط کافیه بگی چی کار کنه. این یه توانایی قدرتمندیه که توسعهدهندگان محصولات هوش مصنوعی دارن ازش استفاده میکنن تا محصولات و تجربههای بهتری بسازن.
سوال جواب
یکی از بهترین راهها برای اینکه مدل جوابهای خاصی بدهد، بهتر کردن شکل درخواست (پرامپت) است. همونطور که قبلاً گفته شد، یه درخواست میتونه شامل دستورالعمل، زمینه، ورودی و نشانههای خروجی باشه تا نتایج بهتری بگیریم. هرچند این اجزا ضروری نیستند، اما استفاده ازشون به عنوان یک عادت خوبم تبدیل میشه، چون هرچی درخواستمون دقیقتر باشه، نتایج بهتری خواهیم داشت. در زیر یه مثال هست که نشون میده چطور میشه با یک درخواست منظمتر این کار رو انجام داد.
پرامپت:
با توجه به شرایط زیر به سوال پاسخ دهید. پاسخ را کوتاه و مختصر بنویسید. اگر در مورد پاسخ مطمئن نیستید، با «مطمئن نیستم که این پاسخ درست باشد.» پاسخ دهید.
زمینه: ریشه شرکت تپلیزومب به یک شرکت دارویی در نیوجرسی به نام Ortho Pharmaceutical باز می گرداند. در آنجا، دانشمندان نسخه اولیه آنتی بادی به نام OKT3 را تولید کردند. این مولکول که در اصل از موش تهیه شده بود، قادر بود به سطح سلولهای T متصل شود و پتانسیل کشتن سلولی آنها را محدود کند. در سال 1986، برای کمک به جلوگیری از رد عضو پس از پیوند کلیه تأیید شد و آن را به اولین آنتی بادی درمانی مجاز برای استفاده انسانی تبدیل کرد.
سوال: OKT3 در اصل از چه منبعی بود؟
پاسخ:
خروجی:
موشها
طبقه بندی متن
تا الان، شما از دستورهای ساده برای انجام کارها استفاده کردید. اما به عنوان یک مهندس پرامپت، باید بهتر بشید و دستورهای بهتری ارائه بدید. ولی فقط این کافی نیست! شما متوجه خواهید شد که برای مسائل پیچیدهتر، صرفاً دادن دستور کافی نیست. اینجا جاییه که باید بیشتر به زمینه و عناصر مختلفی که میتونید در پرامپت به کار ببرید، فکر کنید. یکی از این عناصر میتونه دادههای ورودی یا مثالها باشه.
بذارید اینو با یک مثال از طبقهبندی متن نشون بدیم:
پرامپت:
Classify the text into neutral, negative or positive.
Text: I think the food was okay.
Sentiment:
خروجی:
Neutral
شما دستور دادید که متن را طبقهبندی کنند و مدل به درستی پاسخ داد ‘Neutral’. هیچ مشکلی در این نیست، اما فرض کنید که واقعاً میخواهید مدل برچسب را دقیقاً به فرمتی که میخواهید بدهد. بهجای Neutral، شما میخواهید که neutral را برگرداند. چطور میتوانید اینکار را انجام دهید؟ راههای مختلفی برای این کار وجود دارد. در اینجا شما به جزئیات اهمیت میدهید، بنابراین هر چه اطلاعات بیشتری به دستور بدهید، نتایج بهتری خواهید گرفت. میتوانید با ارائه مثالها رفتار صحیح را مشخص کنید. بیایید دوباره امتحان کنیم
پرامپت:
Classify the text into neutral, negative or positive.
Text: I think the vacation is okay.
Sentiment: neutral
Text: I think the food was okay.
Sentiment:
خروجی:
neutral
عالی! این بار مدل خروجی “nutral” رو برگشت داد که همون برچسب مشخصی بود که دنبالش بودی. به نظر میرسه مثالی که در خواست داده شده بود به مدل کمک کرده تا خروجی مشخصتری بده.
برای اینکه بفهمی چرا گاهی اوقات مشخص بودن مهمه، به مثال زیر نگاهی بنداز و مشکلش رو پیدا کن:
پرامپت:
Classify the text into nutral, negative or positive.
Text: I think the vacation is okay.
Sentiment:
خروجی:
Neutral
مسئله اینجا چیه؟ به عنوان یه نکته، برچسب nutral که خودمون درست کردیم به طور کامل توسط مدل نادیده گرفته میشه. در عوض، مدل برچسب Neutral رو خروجی میده چون یه جور تعصب به این برچسب داره.(به املای دو برچسب دقت کنید) اما فرض کنیم واقعاً میخوایم که نتیجه nutral باشه. چطور میتونی این رو درست کنی؟ شاید بتونی توضیحات بیشتری به برچسبها اضافه کنی یا مثالهای بیشتری به پرامپت اضافه کنی؟ در بخشهای بعدی چندتا ایده رو با هم بررسی میکنیم.
مکالمه
احتمالاً یکی از جالبترین چیزهایی که میتونی با مهندسی پرامپت ایجاد کنی اینه که به سیستم LLM بگی چطور باید رفتار کنه، هدفش چیه و چه شخصیتی داره. این موضوع بهخصوص وقتی که داری سیستمهای گفتگویی مثل چتباتهای خدمات مشتری درست میکنی، خیلی به کار میاد.
برای مثال، بیایید یک سیستم گفتگویی درست کنیم که بتونه جوابهای فنی و علمی بیشتری به سوالات بده. دقت کن که به وضوح داری بهش میگی چطور رفتار کنه. این کار رو بعضیا وقتها “رول پرامپتینگ” مینامند.
پرامپت:
این یک گفتوگو با یک دستیار تحقیقاتی هوش مصنوعی است. لحن دستیار فنی و علمی است.
انسان: سلام، تو کی هستی؟
هوش مصنوعی: سلام! من یک دستیار تحقیقاتی هوش مصنوعی هستم. چطور میتوانم امروز به تو کمک کنم؟
انسان: میتونی دربارهی تشکیل سیاهچالهها برام بگی؟
هوش مصنوعی:
خروجی:
بله! سیاهچالهها جاهایی در فضا هستند که نیروی گرانشی آنقدر قوی است که هیچ چیزی نمیتواند از آن فرار کند، حتی نور! سیاهچالهها وقتی که یک ستاره خیلی بزرگ میمیرد و هستهاش به درون خودش فرو میریزد، درست میشوند. این فرایند باعث به وجود آمدن چیزی به نام “نقطه سینگولار” میشود که چگالیاش بینهایت است. نیروی گرانشی شدید این نقطه، همه مادهها و تابشهای اطرافش را به خود میکشد و به همین ترتیب، سیاهچاله تشکیل میشود.
دستیار تحقیق هوشمصنوعی ما کمی بیش از حد فنی به نظر میرسد، درسته؟ بسیار خوب، بیایید این رفتار را تغییر دهیم و به سیستم دستور بدیم که پاسخهای در راحتتری بدهد.
در ادامه، گفتگویی با یک دستیار تحقیقاتی هوش مصنوعی ارائه شده است. پاسخهای این دستیار به گونهای تنظیم شدهاند که حتی دانشآموزان مقطع ابتدایی نیز قادر به درک آنها باشند.
انسان: سلام، شما کی هستید؟
هوش مصنوعی: سلام! من یک دستیار تحقیقاتی هوش مصنوعی هستم. چگونه میتوانم به شما کمک کنم؟
انسان: آیا میتوانید دربارهی ایجاد سیاهچالهها توضیح دهید؟
هوش مصنوعی:
خروجی:
سیاهچالهها زمانی ایجاد میشوند که یک ستاره بسیار بزرگ سوخت خود را تمام کرده و به درون خود فرو میریزد. نیروی گرانشی این ستاره آنقدر قوی است که هیچ چیز، حتی نور، نمیتواند از جاذبه آن فرار کند. این پدیده منجر به تشکیل نقطهای در فضا-زمان با نیروی گرانشی شدید میشود که به آن سیاهچاله میگویند.
تولید کد
یکی از کاربردهای خیلی خوب مدلهای زبانی بزرگ (LLMs) توی تولید کد هست. یکی از مثالهای عالی هم Copilot هست. با استفاده از دستورات هوشمند، میتونید کارهای زیادی توی تولید کد انجام بدید. بیایید چندتا مثال رو ببینیم.
اول، بگذارید یک برنامه ساده بسازیم که کاربر رو سلام کند.
پرامپت:
/*
از کاربر نامش را بپرسید و بگویید ‘سلام’
*/
خروجی:
let name = prompt("What is your name?");
console.log(`Hello, ${name}!`);
ببینید که شما حتی نیازی نبود تا زبان برنامهنویسی رو مشخص کنید.
حالا بیایید یک کم سطح رو بالاتر ببریم. مثال زیر نشون میده که مدلهای زبانی بزرگ چقدر میتونند با کمی دقت در طراحی دستورات قوی باشند.
پرامپت:
“””
جدول دپارتمانها، ستونها = [DepartmentId, DepartmentName]
جدول دانشجوها، ستونها = [DepartmentId, StudentId, StudentName]
یک کوئری برای MySQL بنویسید که تمام دانشجوهای دپارتمان علوم کامپیوتر را بگیرد.
“””
خروجی:
SELECT StudentId, StudentName
FROM students
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
این واقعاً عالیه. در این مورد، شما اطلاعاتی درباره ساختار پایگاه داده ارائه دادید و از h,ن خواستید که یک کوئری MySQL تولید کنه.
استدلال
شاید یکی از سختترین کارها برای مدلهای زبانی امروز، کارهایی باشه که نیاز به نوعی استدلال دارن. استدلال یکی از جالبترین حوزههاست به خاطر انواع کاربردهای پیچیدهای که میتونه از مدلهای زبانی به وجود بیاد.
توی کارهایی که مربوط به تواناییهای ریاضی هست، یه سری پیشرفتهایی به وجود اومده. اما باید گفت که مدلهای زبانی فعلی هنوز برای انجام کارهای منطقی مشکل دارن، پس نیاز به تکنیکهای پیشرفتهتری برای نوشتن دستورات داریم. ما در راهنما بعدی این تکنیکهای پیشرفته رو بررسی میکنیم. فعلاً بیایید چند مثال ساده رو برای نشون دادن تواناییهای حساب، بررسی کنیم.
پرامپت:
9,000 * 9,000 چقدر میشه؟
خروجی:
81,000,000
حالا بیایید یه سوال سختتر بپرسیم.
پرامپت:
حاصل جمع اعداد فرد در این گروه برابر با یک عدد زوج است: 15، 32، 5، 13، 82، 7، 1.
خروجی:
نه، حاصل جمع اعداد فرد در این گروه برابر با یک عدد فرد است: 119.
این جواب اشتباه بود! بیایید سعی کنیم با بهبود دستور، جواب بهتری بگیریم.
پرامپت:
اعداد فرد در این گروه به عدد زوج جمع میشوند: ۱۵، ۳۲، ۵، ۱۳، ۸۲، ۷، ۱.
برای حل این مسئله، به مراحل زیر تقسیمش میکنیم.
ابتدا، اعداد فرد را مشخص میکنیم و سپس آنها را جمع میزنیم و بررسی میکنیم که آیا نتیجه فرد است یا زوج.
خروجی:
اعداد فرد: ۱۵، ۵، ۱۳، ۷، ۱
جمع: ۴۱
۴۱ یک عدد فرد است.
بهتر شد، راستی، ما این کار را چند بار امتحان کردیم و مدل بعضی وقتها نتیجه نمیداد. اگر پرامپتهای بهتری به همراه مثالها ارائه بدهید، ممکن است کمک کند تا نتیجههای دقیقتری بگیریم.
در بخش بعدی، مفاهیم و تکنیکهای پیشرفتهتری را برای بهبود عملکرد در این نوع کارها و کارهای سختتر بررسی خواهیم کرد.