مدت زیادی نیست که از فراگیر شدن فعل to) google) گذشته و حالا با دسترسی عموم مردم به LLMها (large language modelهایی که از طریق ChatGPT یا Google Gemini می‌توان از آنها استفاده کرد) شاید وقتش باشد با فعل جدید to) prompt) هم خو بگیریم.

فعل مربوط به سرچ کردن در گوگل، به روایت خود گوگل.

پرامپتینگ: فعلی جدید که باید صرف کردنش را بیاموزیم؟

واژهٔ پرامپت در سیستم‌های کامپیوتری واژه جدیدی نیست؛ هرکسی که تجربه کار با command line (یا shell در لینوکس) را داشته باشد با این واژه آشنایی دارد. به معنی این است که کامپیوتر منتظر یک ورودی از جانب شماست تا دستوری را انجام دهد. پرامپت در LLMها نیز عملکرد مشابهی دارد اما گستره دستوراتی که می‌تواند اجرا کند هیچگاه اینقدر وسیع نبوده است.

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

الان تا حد مورد نیازمان در این مرحله هوش مصنوعی و مدل‌های زبانی بزرگ را می‌شناسیم و اکنون وقتش است که بفهمیم چطور با آن‌ها کار بکنیم و ازشان کمک بگیریم؛ نه این‌که صرفاً روش کار کردنشان را بدانیم. برای گرفتن نتایج بهتر باید پرامپت‌های بهتری بنویسیم. فرایند بهینه کردن پرامت‌ها اصطلاحاً prompt engineering نام دارد.

فراموش نکنیم که کار LLM پیش‌بینی است و کار ما، کمک کردن به هدایت او به قسمتی از فضای «ذهنی»‌اش که اطلاعات مورد نیاز ما را پیدا بکند و آن را به ما نشان بدهد. LLM را می‌توانیم یک موتور پیش‌بینی‌گر (predictor engine) در نظر بگیریم. شاید هم راحت‌تر باشد که آن را همانند گوی‌های کریستالی رمال‌ها که با آن قرار بود آینده‌ی فرد را «پیش‌گویی» بکنند، بدانیم.

درست است که نگاه کردن به داخل LLM اسرار آمیز است و ما را یاد پیش‌گویی (fortune-telling) می‌اندازد؛ اما LLM پیش‌بینی (prediction) می‌کند. پیش‌بینی کردن از جنس علم است و بر آمار و احتمال تکیه داده است و نه باورهای خرافی ذهن یک شیاد. هر چند این پیش‌بینی کردن به یک هدایت‌گر نیاز دارد. هدایت‌گری که قرار است ما باشیم و سکان را به دست بگیریم و اگر نتوانیم این کار را به درستی انجام بدهیم، چه بسا کارمان به پیش‌گویی نزدیک‌تر بشود تا پیش‌بینی.

سوئیچ استارت این موتور، پرامپت (prompt) است. پرامپت، ورودی ما به یک هوش مصنوعی مولد برای گرفتن خروجی مطلوب است. این ورودی ما می‌تواند متن، عکس، صوت، ویدیو یا ترکیب از آن‌ها باشد و قرار است پلی شود بین آن‌چه ما می‌خواهیم و آن‌چه خروجی تولیدشده توسط هوش مصنوعی است (شاید تجربه این کار شما را به یاد نوشتن کوئری (query) برای جستجو در گوگل بیندازد که می‌خواستیم به سایت با محتوای مورد نظرمان برسیم).

همان‌طور که پزشکی را هنر و علم در کنار هم می‌دانند، پرامپت‌نویسی هم دقیقاً از همین جنس است. پس این‌طور نیست که به شما تعدادی قانون بگوییم و دیگر تمام. بلکه یک راهنمای کلی قرار است داشته باشید که بتوانید در این سرزمین به کاوش بپردازید.

موضوع مهمی را فراموش نکنیم. ما به کمک پرامپت‌ها هدایت می‌کنیم، اما پاسخ بر اساس داده‌هایی است که این LLM با آن آموزش دیده است – نه لزوماً دقیق‌ترین و علمی‌ترین داده‌ها. علاوه بر این، شرکت‌های صاحب این فناوری هم می‌توانند پاسخ‌ها را به مسیر دلخواه خود هدایت کنند. پس این امکان وجود دارد که شرکتی بخواهد با صرف هزینه، داروی ساخت خودش را در پاسخ ارائه شده توسط مدل LLM به عنوان موثرترین دارو ارائه کند.

استفاده از چارچوب CO-STAR برای نوشتن پرامپت

فرض کنید بیماری با ترومبوز وریدهای عمقی پا (deep vein thrombosis) دارید و می‌خواهید در مورد DVT بیشتر بدانید. ChatGPT را باز کرده و برایش می‌نویسید: tell me about DVT یا شاید بنویسید DVT چیه؟ چه پاسخی دریافت خواهید کرد؟ اجازه بدهید یک تجربه ذهنی انجام بدهیم و خودمان را جای این موتور پیش‌بینی‌گر بگذاریم:

او که هست؟ یک بیمار است که کلمه DVT را شنیده و میخواهد بداند که چیست؟ یک کتاب میخواند و این کلمه را دیده است و نمیداند که چیست؟ پزشک است؟ پیراپزشکی میخواند؟ اگر بیمار است چقدر سواد دارد؟ اگر پزشک است چه مقطعی است؟ اصلاً در مورد چه چیز DVT میخواهد بداند؟ چقدر شایع است؟ کجا را درگیر میکند؟ چرا ایجاد میشود؟ مخفف چه هست؟ چه درمانی دارد؟ چه خطری دارد؟ چطور دلش میخواهد جواب را به او بگویم؟ جدول درست بکنم؟ متن طولانی بنویسم؟ تیکه تیکه با علامتگذاری باشد؟ با چه لحنی بگوییم؟ رسمی مثل یک روزنامه؟ دانشگاهی؟ خودمانی؟ اه. مدارهایم درد گرفت. کاش این کاربر این موارد را مشخص میکرد. چرا یاد نمیگیرد؟ هر بار از او سؤالهایی میپرسم که این موارد را به او یادآوری کنم. چقدر یادگیریناپذیر است.

می‌بینید؟ همان‌طور که راضی نگاه داشتن تمام انسان‌ها کار سختی است – اگرکه غیرممکن نباشد.
با یک پرامپت بسیار کلی، رسیدن به جوابی که همه را راضی بکند نیز، غیرممکن خواهد بود.

هنگام نوشتن پرامپت، اگر چند شرط را رعایت بکنیم، احتمال این‌که ما را به جواب مورد نظرمان برساند، بیشتر خواهد شد. به همین منظور بهتر است چارچوب CO-STAR را به خاطر داشته باشید (خود این کلمه نیز معنای جالبی برای ارتباط ما با AI به نظر می‌رسد).

حرف C به Context اشاره دارد. یک کار اثربخش این است که به او نقش (role) بدهیم. مثلاً با گفتن اینکه او یک استاد طب داخلی است سعی می‌کنیم LLM را به فضای آکادمیک هل بدهیم:

Suppose you are a professor of internal medicine. Tell me about DVT.

دومین حرف که O است به Output یا خروجی اشاره دارد. دقت کنید که قرار نیست این‌ها را به همین ترتیب بنویسیم. صرفاً این گونه گذاشتن حرف‌ها کنار هم، یک کلمه‌ی معنادار خلق کرده است. منظور از خروجی این است که به LLM بگوییم اطلاعات را چگونه به ما بدهد. مفصل باشد؟ کوتاه باشد؟ مرحله به مرحله بگوید؟ تک جمله بگوید؟ جدول باشد؟ بولت باشد؟ مثلاً می‌توانیم بگوییم:

Suppose you are a professor of internal medicine. Tell me about DVT in brief, but step-by-step.

حرف S از Specificity می‌گوید. DVT برای خودش جهانی است. اما اگر بگوییم Pathophysiology of DVT مشخص‌تر می‌شود. اگر بگوییم Treatment of DVT in pregnancy باز هم مشخص‌تر. اگر بتوانیم پرامپت مشخص‌تری بنویسیم، به جواب بهتری می‌رسیم. البته اینجا دقت کنیم که افزایش Specificity لزوماً به معنای دادن اطلاعات بیشتر نیست. هر جایی نمی‌توان این کار را کرد. مثلاً همان‌طور که ذهن ما هنگام تشخیص گذاشتن قرار است مسئله را بازنمایی بکند و فرق بین سیگنال و نویز را مشخص بکند، اگر بخواهیم LLM را با نویز بمباران بکنیم، احتمالاً به نتیجه مطلوب نرسیم.

آن‌چه که مهم است، شناختن بهتر مسئله و مشکل خودمان (problem space) و هدایت LLM به سمت فضایی است که راه حل را در میان دارد (solution space). البته که باز هم فراموش نکنیم کیفیت خروجی به کیفیت داده‌ای که LLM با آن آموزش دیده نیز، بستگی دارد. پس قرار است اختصاصی بنویسم ولی نه این‌که آن‌قدر خاص باشد که فضا را تنگ کنیم که به solution space نرسیم.

حرف T نیز مخفف Tone است. می‌توانیم برای LLM لحن را مشخص کنیم. می‌خواهیم به زبان رسمی بگوید یا خودمانی؟ مفصل و کتابی باشد یا محاوره‌ای و کوتاه؟

A به Audience اشاره می‌کند. مخاطب این پاسخ کیست؟
جواب tell me about DVT for patient education با tell me (an internal medicine resident) about DVT بسیار متفاوت است. بهتر است که مخاطب را برای LLM مشخص کنیم.

آخرین حرف، R نیز به Response اشاره دارد. آیا شرط خاصی هست که بخواهیم در این پاسخ رعایت بکند یا نه. مثلاً از محتوایی که خودمان در قالب فایل برای او فرستادیم، پاسخ را آماده بکند؛ یا این‌که محدودیت تعداد کلمه داشته باشد یا …

حالا بر اساس چارچوب CO-STAR می‌توانیم tell me about DVT را این‌گونه بنویسیم:

Suppose you are an internal medicine professor and you want to give an explanation about pathophysiology of DVT to medical interns. Make it brief, concise, and in simple language. Use bullets and tables.

برای این‌که پرامپت‌نویسی‌مان بهتر بشود، چند نکتهٔ دیگر را نیز می‌توانیم در نظر بگیریم.

نخست این‌که وقتی بر اساس چارچوب CO-STAR پرامپت را می‌نویسیم، پرامپت‌ها طولانی می‌شوند. اگرچه طولانی بودن پرامپت به خودی خود مشکل‌ساز نیست؛ گوگل در راهنمایی که برای پرامپت‌نویسی منتشر کرده، گفته که بهترین نتیجه با پرامپت‌هایی که به طور میانگین ۲۱ کلمه هستند به دست می‌آید در حالی که بسیاری از کاربران از پرامپت‌هایی با حدود ۹ کلمه استفاده می‌کنند. در صورت طولانی شدن پرامپت، می‌توان تکرار کردن نکات مهم و یادآوری آن‌ها را نیز امتحان کرد.

نکتهٔ بعدی این است که می‌توانیم از مثال هم استفاده بکنیم؛ اما حواسمان باشد گفتن مثال می‌تواند مصداقی از هل دادن «بیش از حد» LLM به یک فضای شاید نامطلوب باشد. احتمالاً این نکته اکنون برای شما ملموس نباشد.

پیشنهاد می‌کنیم که در مورد شاخص Exploit/Explore از این درس متمم مطالعه کنید تا فضا دادن و Explore را بهتر درک بکنید. حتی انتخاب کلمات ما در هل دادن به سمت آن فضا مؤثر است. مثلاً کلمهٔ symptom را با manifestations مقایسه بکنید. یکی عمومی‌تر و دیگری تخصصی‌تر است.

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

تمرین درس

یک پرامپت بنویسید که دست‌کم چهار بخش از CO-STAR را در خودش داشته باشد. سپس، آن را در ChatGPT یا مدل‌های دیگر تست کرده و نتیجه را بررسی کنید. در نهایت به عنوان فیدبک، از خودتان بپرسید: آیا خروجی مناسب بود؟ اگر نه، کدام بخش پرامپت را باید تغییر بدهید تا خروجی بهتری بگیرید؟ پرامپت اولیه، فیدبکی که گرفتید و تغییراتی که بعد از آن انجام دادید را برایمان بنویسید.

دیدگاه‌ خود را بنویسید

برای نوشتن دیدگاه باید وارد شوید.