اصول و تکنیک‌های استاندارد پرامپت نویسی

0

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

مبانی پرامپت نویسی: از فهرست‌های ساده تا داده‌های ساختاریافته

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

تولید لیست‌های ساده و بهینه:

هنگامی که یک پرامپت ساده مانند «لیستی از شخصیت‌های دیزنی ایجاد کن» ارائه می‌دهید ، GPT-4 قادر به ارائه لیستی از شخصیت‌ها خواهد بود. با این حال، این رویکرد دارای چالش‌هایی است:

  • GPT ممکن است تصمیم بگیرد ۳۰ مثال را به صورت یک لیست شماره‌گذاری شده، جدا شده با کاراکترهای \n ارائه دهد. اگر کد پایتون شما انتظار داشته باشد که بر اساس (bullet points) تقسیم‌بندی انجام دهد، با نتایج نامطلوب یا خطای اجرایی مواجه خواهید شد.
  • GPT ممکن است نظرات مقدماتی ارائه دهد؛ حذف این نظرات، تجزیه خروجی را آسان‌تر می‌کند.
  • اندازه لیست کنترل نشده و به مدل زبان واگذار شده است.
  • برخی از شخصیت‌ها نام فیلم مربوطه خود را در داخل پرانتز دارند (مثلاً باگیرا (کتاب جنگل)) و برخی دیگر ندارند. این امر استخراج نام‌ها را دشوارتر می‌کند زیرا نیاز به حذف عناوین فیلم خواهید داشت.
  • هیچ فیلتر یا انتخابی بر اساس نتیجه دلخواه ما بر روی تولید LLM اعمال نشده است.

برای رفع این مشکلات، می‌توان پرامپت را بهینه‌سازی کرد. به عنوان مثال: “یک لیست گلوله‌ای از ۵ شخصیت مرد دیزنی ایجاد کن. فقط نام شخصیت را برای هر خط شامل کن. هرگز فیلم مربوط به هر شخصیت دیزنی را شامل نکن. فقط شخصیت‌های دیزنی را برگردان، هرگز هیچ نظری را شامل نکن.”. ارائه مثال‌هایی در پرامپت (few-shot prompting) نیز می‌تواند تأثیر زیادی بر خروجی مطلوب داشته باشد. با بهینه‌سازی پرامپت، می‌توانید لیست را به اندازه ثابت محدود کنید، فقط شخصیت‌های با جنسیت خاص تولید کنید، لیست را با فرمت صحیح (مانند نقاط گلوله‌ای) دریافت کنید و هرگونه نظر مقدماتی را حذف نمایید.

تولید لیست‌های سلسله مراتبی (Hierarchical Lists):

در حالی که لیست‌های ساده برای اکثر وظایف مناسب هستند، ساختار کمتری دارند و برای برخی وظایف، دریافت ساختارهای داده تودرتو از خروجی GPT-4 مفید است. لیست‌های سلسله مراتبی برای زمانی مفید هستند که خروجی مورد نظر شما تودرتو باشد ، مانند یک ساختار مقاله دقیق. برای مثال، پرامپت “یک طرح کلی مقاله سلسله مراتبی و فوق‌العاده دقیق در مورد: مزایای مهندسی داده چیست، ایجاد کن” همراه با یک مثال از ساختار سلسله مراتبی می‌تواند خروجی دقیقی مانند طرح کلی مقاله با عنوان “مزایای مهندسی داده چیست؟” با مقدمه و نتیجه‌گیری و بخش‌های متعدد دیگر ایجاد کند.

برای تولید یک طرح کلی مقاله موثر، گنجاندن عبارات کلیدی مانند “سلسله مراتبی” (Hierarchical) برای نشان دادن نیاز به ساختار تودرتو و “فوق‌العاده دقیق” (incredibly detailed) برای هدایت مدل زبان به سمت تولید خروجی بزرگتر مفید است. کلمات دیگری که می‌توانند همین تأثیر را داشته باشند عبارتند از “بسیار طولانی” (very long) یا تعیین تعداد زیادی زیرعنوان. توجه داشته باشید که درخواست تعداد ثابتی از موارد از مدل زبان، تولید همان تعداد را تضمین نمی‌کند. بنابراین، کد شما باید یا وجود تعداد مشخصی از سرفصل‌ها را تأیید کند یا انعطاف‌پذیر باشد تا طول‌های متغیر از LLM را مدیریت نماید.

تجزیه لیست‌های سلسله مراتبی با Python و Regex:

پس از تولید یک طرح کلی مقاله سلسله مراتبی، ممکن است نیاز به تجزیه رشته به داده‌های ساختاریافته داشته باشید. ماژول re در پایتون برای کار با عبارات منظم (regular expressions) استفاده می‌شود. می‌توان از دو عبارت منظم برای استخراج سرفصل‌ها و زیرعنوان‌ها از نتیجه OpenAI استفاده کرد. الگوی سرفصل (heading_pattern = r'\* (.+)') برای استخراج سرفصل‌های اصلی طراحی شده است. این الگو شامل موارد زیر است:

  • \* ستاره (*) را در ابتدای یک سرفصل مطابقت می‌دهد. بک‌اسلش برای فرار از ستاره استفاده می‌شود، زیرا ستاره معنای خاصی در عبارات منظم دارد.
  • یک کاراکتر فاصله پس از ستاره مطابقت داده می‌شود.
  • (.+) یک یا چند کاراکتر را مطابقت می‌دهد و پرانتزها یک گروه ضبط ایجاد می‌کنند. . یک wildcard است که هر کاراکتری به جز خط جدید را مطابقت می‌دهد و + یک کمیت‌سنج است که به معنای یک یا چند وقوع عنصر قبلی است.

الگوی زیرعنوان (subheading_pattern = r'\s+[a-z]\. (.+)') تمام زیرعنوان‌ها را در رشته نتیجه مطابقت می‌دهد:

  • \s+ یک یا چند کاراکتر فضای خالی (فاصله، تب و غیره) را مطابقت می‌دهد. + به معنای یک یا چند وقوع عنصر قبلی است.
  • [a-z] یک حرف کوچک از a تا z را مطابقت می‌دهد.
  • \. یک کاراکتر نقطه را مطابقت می‌دهد. بک‌اسلش برای فرار از نقطه استفاده می‌شود، زیرا معنای خاصی در عبارات منظم دارد.
  • یک کاراکتر فاصله پس از نقطه مطابقت داده می‌شود.
  • (.+) یک یا چند کاراکتر را مطابقت می‌دهد و پرانتزها یک گروه ضبط ایجاد می‌کنند.

تابع re.findall() برای یافتن تمام تطابق‌های غیرهمپوشان الگوها در رشته ورودی و برگرداندن آنها به عنوان یک لیست استفاده می‌شود. عبارات منظم امکان تطبیق الگو کارآمد را فراهم می‌کنند و امکان مدیریت تغییرات در متن ورودی مانند وجود یا عدم وجود فاصله‌ها یا تب‌های پیشرو را ممکن می‌سازند.

برای ارتباط مستقیم هر زیرعنوان با سرفصل مناسب خود، می‌توان عبارات منظم را اصلاح کرد و نتیجه را در یک دیکشنری پایتون ذخیره نمود. در این روش، یک حلقه بر روی هر خط در رشته ورودی تکرار می‌شود. با برخورد به خطی که با عبارت منظم عنوان بخش مطابقت دارد، حلقه عنوان تطبیق داده شده را به عنوان بخش فعلی تنظیم می‌کند و یک لیست خالی را به عنوان مقدار آن در دیکشنरी result_dict اختصاص می‌دهد. هنگامی که یک خط با عبارت منظم زیربخش مطابقت دارد، متن زیربخش تطبیق داده شده به لیست مربوط به بخش فعلی اضافه می‌شود.

چه زمانی از عبارات منظم اجتناب کنیم؟

با تلاش برای استخراج داده‌های ساختاریافته‌تر از پاسخ‌های LLM، اتکای صرف به عبارات منظم می‌تواند جریان کنترل را به طور فزاینده‌ای پیچیده کند. فرمت‌های دیگری مانند JSON و YAML وجود دارند که تجزیه داده‌های ساختاریافته از پاسخ‌های LLM را با سهولت بیشتری تسهیل می‌کنند.

تولید JSON:

برای هدایت LLM به برگرداندن پاسخ JSON، می‌توانید در پرامپت خود درخواست کنید که یک طرح کلی مقاله بسیار دقیق با ساختار بار JSON که نکات کلیدی را برجسته می‌کند، ایجاد کند و تأکید کنید که فقط JSON معتبر برگردانده شود. ارائه یک مثال از ساختار JSON نیز بسیار مفید است. خطاهای رایج هنگام کار با JSON شامل بارهای نامعتبر یا قرار گرفتن JSON در داخل بک‌تیک‌های سه‌گانه (“`) است. برای بهبود تجزیه JSON، نکات زیر را به پرامپت‌های خود اضافه کنید:

  • فقط JSON معتبر برگردانده شود.
  • هرگز نمادهای بک‌تیک مانند “` را شامل نشود.
  • پاسخ با json.loads() تجزیه خواهد شد، بنابراین باید JSON معتبر باشد.

تجزیه خروجی JSON با پایتون با استفاده از json.loads() انجام می‌شود. ساختاردهی داده‌ها از پاسخ LLM هنگام درخواست پاسخ در قالب JSON معتبر، ساده‌تر از تجزیه با عبارات منظم است. با این حال، مشکلاتی ممکن است رخ دهد، مانند اضافه کردن متن اضافی توسط مدل زبان به پاسخ یا نامعتبر بودن JSON تولید شده.

تولید YAML:

فایل‌های .yml یک فرمت داده ساختاریافته هستند که مزایای متفاوتی نسبت به JSON ارائه می‌دهند:

  • عدم نیاز به فرار از کاراکترها: الگوی دندانه‌گذاری YAML نیاز به آکولاد، براکت و کاما برای نشان دادن ساختار را از بین می‌برد. این می‌تواند منجر به فایل‌های تمیزتر و کمتر مستعد خطا شود.
  • خوانایی: YAML برای خوانایی توسط انسان طراحی شده است، با سینتکس و ساختار ساده‌تر نسبت به JSON. این امر ایجاد، خواندن و ویرایش پرامپت‌ها را آسان‌تر می‌کند، به خصوص هنگام کار با ساختارهای پیچیده یا تودرتو.
  • نظرات (Comments): برخلاف JSON، YAML از نظرات پشتیبانی می‌کند و به شما امکان می‌دهد توضیحات یا حاشیه‌نویسی‌ها را مستقیماً در فایل به پرامپت‌ها اضافه کنید. این می‌تواند هنگام کار در یک تیم یا هنگام بازبینی پرامپت‌ها پس از مدتی بسیار مفید باشد.

می‌توان از LLM برای استنتاج فرمت .yml صحیح از یک رشته پرس‌وجوی کاربر (User Query) استفاده کرد. همچنین می‌توان به LLM فرصت داد تا یک پاسخ .yml معتبر، یک پاسخ .yml فیلتر شده، یا در صورت عدم تطابق پس از فیلتر کردن، “No Items” را برگرداند. این رویکرد LLM را به عنوان یک موتور استدلال به کار می‌گیرد و واگذاری وظایف جریان کنترل بیشتری را به مدل یادگیری زبان (LLM) تسهیل می‌کند، وظایفی که به طور معمول نیاز به کدنویسی در یک زبان برنامه‌نویسی مانند پایتون یا جاوا اسکریپت دارند. یک نمودار جریان می‌تواند منطق اعمال شده هنگام پردازش پرس‌وجوهای کاربر توسط LLM را نشان دهد. برای مدیریت بارهای نامعتبر در YAML، می‌توان یک اسکریپت پایتون ایجاد کرد که استثناهای سفارشی برای انواع خطاهایی که ممکن است رخ دهد، تعریف می‌کند و بررسی‌های سفارشی را در برابر پاسخ اجرا می‌کند تا اطمینان حاصل شود که پاسخ YML می‌تواند با خیال راحت به برنامه‌های نرم‌افزاری/میکروسرویس‌های پایین‌دستی منتقل شود.

راهبردهای پیشرفته پرامپت نویسی برای ارتقای خروجی

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

تولید فرمت‌های متنوع:

ChatGPT نه تنها قادر به تولید فایل‌های .json یا .yml است، بلکه می‌تواند از بسیاری از فرمت‌های داده دیگر نیز پشتیبانی کند. به عنوان مثال، می‌تواند در ایجاد یک نمودار mermaid یا تولید یک سند .csv ساختگی به شما کمک کند. تطبیق‌پذیری آن حتی به تولید کد، مکالمات و اسکریپت‌ها نیز گسترش می‌یابد. Mermaid یک زبان اسکریپت‌نویسی شبیه به markdown برای تولید نمودارها، دیاگرام‌ها و سایر تجسم‌ها است. با ارائه دستورالعمل‌های مشخص در پرامپت، مانند “یک نمودار فلوچارت در سینتکس mermaid ایجاد کن که یک فرآیند ساده سفارش غذا را نشان می‌دهد…” ، خروجی تولید شده هنگام ورود به یک رندر کننده نمودار mermaid، یک فلوچارت دقیق ایجاد می‌کند. به طور مشابه، ChatGPT می‌تواند داده‌های CSV ساختگی برای اهداف آزمایشی تولید کند. به یاد داشته باشید، مدل‌های GPT به شدت به فرمتی که شما مشخص می‌کنید، متکی هستند.

“مانند یک کودک پنج ساله توضیح بده” (Explain It like I’m Five):

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

ترجمه جهانی از طریق LLMها:

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

درخواست زمینه (Ask for Context):

LLMها نه تنها قادر به تولید متن هستند، بلکه می‌توانند به عنوان عامل‌های ساده با قابلیت استدلال محدود عمل کنند. این به شما امکان می‌دهد پرامپتی بنویسید که از مدل زبان بخواهد یا یک نتیجه معتبر برای یک سوال یا عبارت برگرداند، یا برای پاسخگویی مناسب به سوال، زمینه بیشتری درخواست کند. اگر پرامپت زمینه کافی ارائه ندهد ، پاسخ کمتر مفید خواهد بود. به عنوان مثال، در پاسخ به سوال “آیا باید از MongoDB یا PostgreSQL برای پروژه‌ام استفاده کنم؟” ، مدل بدون زمینه کافی نمی‌تواند توصیه معناداری ارائه دهد. در عوض، می‌توان از ChatGPT لیستی از نیازمندی‌هایی را درخواست کرد که به آن در تصمیم‌گیری موثر کمک می‌کند. پس از دریافت این لیست (شامل ساختار داده ، مقیاس‌پذیری، انطباق با ACID، قابلیت‌های پرس‌وجو، جامعه و اکوسیستم، یکپارچگی داده‌ها و محدودیت‌ها، تراکنش‌ها و همزمانی، بلوغ و پایداری، سهولت توسعه و عملیات، و هزینه )، کاربر می‌تواند زمینه لازم را فراهم کند. با زمینه اضافی، مدل می‌تواند توصیه آگاهانه‌تری ارائه دهد. می‌توان با گنجاندن عبارت کلیدی “اگر به زمینه بیشتری نیاز دارید، لطفاً مشخص کنید چه چیزی به شما در تصمیم‌گیری بهتر کمک می‌کند” به LLM اجازه داد تا به طور پیش‌فرض زمینه بیشتری درخواست کند.

جداسازی سبک متن (Text Style Unbundling):

جداسازی سبک متن یک تکنیک قدرتمند در مهندسی پرامپت است که به شما امکان می‌دهد ویژگی‌های متنی خاصی مانند لحن، طول، واژگان و ساختار را از یک سند معین استخراج و جدا کنید. این به شما امکان می‌دهد محتوای جدیدی ایجاد کنید که ویژگی‌های مشابهی با سند اصلی داشته باشد و از ثبات در سبک و لحن در اشکال مختلف ارتباط اطمینان حاصل کنید. مزایای این تکنیک شامل بهبود ثبات برند ، ساده‌سازی ایجاد محتوا و سازگاری است. فرآیند جداسازی سبک متن شامل شناسایی ویژگی‌های متنی مورد نظر یا ایجاد یک متا پرامپت (پرامپتی برای ایجاد پرامپت‌ها) برای استخراج این ویژگی‌ها و سپس استفاده از ویژگی‌های استخراج شده برای هدایت تولید محتوای جدید است. ویژگی‌های متنی رایج شامل لحن صدا، طول و واژگان و عبارت‌بندی است. می‌توان یک متا پرامپت ایجاد کرد که به طور پویا این ویژگی‌ها را نشان دهد. با تجزیه و تحلیل یک متن ، LLM می‌تواند یک “راهنمای نوشتن سبک” با ویژگی‌هایی مانند لحن صدا ، محتوا و غیره ارائه دهد. پس از استخراج ویژگی‌های مورد نظر، می‌توان از این اطلاعات برای هدایت تولید محتوای آینده استفاده کرد ، به عنوان مثال: “یک پست وبلاگ جدید در مورد [موضوع] با استفاده از همان لحن صدا، طول، واژگان و ساختار متن تحلیل شده قبلی بنویسید.”.

خلاصه‌سازی (Summarization):

در عصر اطلاعات بیش از حد، توانایی فشرده‌سازی حجم زیادی از متن به خلاصه‌های مختصر و قابل هضم به یک مهارت ضروری تبدیل شده است. هوش مصنوعی پیشرفت‌های قابل توجهی در این زمینه داشته است و ابزارهای قدرتمندی برای تولید خلاصه‌هایی ارائه می‌دهد که مهمترین اطلاعات را حفظ کرده و جزئیات کمتر مرتبط را حذف می‌کنند. خلاصه‌سازی کاربرد ارزشمندی از هوش مصنوعی است که به کاربران امکان می‌دهد به سرعت بینش‌های کلیدی را از مقالات، گزارش‌ها یا تحقیقات طولانی استخراج کنند. برای اسناد بزرگتر از آنچه LLM می‌تواند در یک درخواست API واحد مدیریت کند، یک رویکرد رایج، تقسیم سند به قطعات (chunking)، خلاصه‌سازی هر قطعه و سپس ترکیب این خلاصه‌ها در یک خلاصه نهایی است. افراد ممکن است به دلایل مختلف به انواع مختلفی از خلاصه‌ها نیاز داشته باشند و اینجا جایی است که خلاصه‌سازی با هوش مصنوعی مفید واقع می‌شود. به عنوان مثال، یک سند PDF بزرگ می‌تواند برای تولید خلاصه‌های متمایز متناسب با نیازهای فردی پردازش شود: خلاصه A بینش‌های کلیدی ارائه می‌دهد، خلاصه B اطلاعات تصمیم‌گیری و خلاصه C همکاری و ارتباط را تسهیل می‌کند. با سفارشی‌سازی خلاصه‌ها برای کاربران مختلف، خلاصه‌سازی با هوش مصنوعی به افزایش بازیابی اطلاعات برای همه کاربران کمک می‌کند.

قطعه‌بندی متن (Chunking Text):

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

استراتژی‌های مختلف قطعه‌بندی عبارتند از: تقسیم بر اساس جمله ، تقسیم بر اساس پاراگراف ، تقسیم بر اساس موضوع یا بخش ، تقسیم بر اساس پیچیدگی ، تقسیم بر اساس طول و تقسیم بر اساس توکن‌ها با استفاده از یک توکنایزر. انتخاب استراتژی قطعه‌بندی مناسب برای مورد استفاده خاص شما می‌تواند عملکرد و دقت مدل‌های زبان هوش مصنوعی را بهینه کند. کتابخانه‌های NLP مانند spaCy برای تقسیم بر اساس جمله استفاده می‌شوند. Tiktoken یک توکنایزر سریع کدگذاری زوج بایت (BPE) است که متن را به واحدهای زیرکلمه تقسیم می‌کند و برای استفاده با مدل‌های OpenAI طراحی شده است. شناسایی تعداد توکن‌ها در متن به شما کمک می‌کند بفهمید آیا متن برای پردازش توسط یک مدل بیش از حد طولانی است یا خیر و به مدیریت کارآمد منابع کمک می‌کند.

از کم به بیش (Least to Most):

تکنیک “از کم به بیش” در مهندسی پرامپت یک روش قدرتمند برای تولید یا استخراج متوالی دانش به طور فزاینده دقیق در مورد یک موضوع معین است. این روش از یک زنجیره پرامپت استفاده می‌کند که در آن هر پرامپت جدید بر اساس پاسخ قبلی است. این رویکرد گام به گام به جمع‌آوری اطلاعات دقیق‌تر در هر بار کمک می‌کند. این تکنیک همچنین می‌تواند برای تولید کد اعمال شود. به عنوان مثال، می‌توان از LLM خواست تا ابتدا معماری پایه یک برنامه ساده Flask “Hello World” را ترسیم کند ، سپس یک قطعه کد برای یک مسیر ساده “Hello World” ارائه دهد و در نهایت یک مورد آزمایشی برای آن مسیر تولید کند. این روش به ویژه برای کارهای پیچیده مفید است، زیرا به LLM امکان می‌دهد دانش مرتبطی تولید کند که متعاقباً به عنوان زمینه برای کارهای آینده استفاده خواهد شد. مزایای آن شامل کاوش پیشرونده ، انعطاف‌پذیری ، درک بهبود یافته و یادگیری مشارکتی است. با این حال، چالش‌هایی مانند اتکای بیش از حد به دانش تولید شده قبلی و وابستگی به پرامپت‌های قبلی نیز وجود دارد. ارزیابی کیفیت هر پاسخ قبلی LLM بسیار مهم است.

پرامپت نویسی نقش (Role Prompting):

پرامپت نویسی نقش تکنیکی است که در آن به هوش مصنوعی یک نقش یا شخصیت خاص برای ایفای آن در حین تولید پاسخ داده می‌شود. این به هدایت سبک و محتوای پاسخ هوش مصنوعی کمک می‌کند تا بهتر با نیازهای کاربر یا نتیجه مطلوب هماهنگ شود. به عنوان مثال، می‌توان از ChatGPT خواست تا نقش یک بازبین فنی برای MongoDB را ایفا کند. این پرامپت به وضوح نقش (بازبین فنی) و انتظارات (بررسی عمیق MongoDB) را تعریف می‌کند. اختصاص یک نقش خاص به هوش مصنوعی، زمینه مناسبی را برای پاسخ تعیین می‌کند و خروجی متمرکزتر و مرتبط‌تری ایجاد می‌کند. پرامپت نویسی نقش به محدود کردن پاسخ‌های هوش مصنوعی کمک می‌کند و نتایج متمرکزتر، متناسب با زمینه و سفارشی‌تری را تضمین می‌کند. همچنین می‌تواند با وادار کردن هوش مصنوعی به تفکر و پاسخ از دیدگاه‌های منحصر به فرد، خلاقیت را افزایش دهد. با این حال، چالش‌هایی مانند خطرات بالقوه برای سوگیری یا کلیشه‌سازی بر اساس نقش اختصاص داده شده و حفظ ثبات در نقش در طول یک تعامل طولانی وجود دارد. نظارت مداوم بر کیفیت پاسخ‌های LLM، به ویژه هنگام استفاده از پرامپت نویسی نقش، ضروری است. پرامپت نویسی نقش به ویژه زمانی مفید است که می‌خواهید تخصص خاصی را استخراج کنید ، سبک پاسخ را سفارشی کنید ، پاسخ‌های خلاقانه را تشویق کنید ، دیدگاه‌های متنوع را بررسی کنید یا تعامل کاربر را افزایش دهید.

تاکتیک‌های پیشرفته GPT برای دقت بیشتر

OpenAI چندین تاکتیک را برای افزایش دقت خروجی هوش مصنوعی توصیه می‌کند. این روش‌ها از یک یا چند اصل مهندسی پرامپت استفاده می‌کنند.

اجتناب از توهم‌زایی (Hallucinations) با متن مرجع:

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

دادن “زمان تفکر” به GPTها:

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

تاکتیک تک‌گویی درونی (Inner Monologue):

در برخی موارد، ممکن است نخواهید فرآیند استدلال مدل برای کاربر قابل مشاهده باشد. این امر با درخواست از LLM برای ایجاد یک تک‌گویی درونی قابل دستیابی است. تاکتیک تک‌گویی درونی به مدل دستور می‌دهد تا بخش‌هایی از خروجی را که باید از کاربر پنهان شوند، در یک فرمت خاص ساختار دهد. این امر حذف این بخش‌ها را قبل از ارائه خروجی نهایی به کاربر آسان می‌کند. این به ویژه در برنامه‌های آموزشی مفید است که در آن افشای استدلال مدل ممکن است راه‌حل را پیش از موعد فاش کند.

خودارزیابی پاسخ‌های LLM (Self-Eval LLM Responses):

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

کاربردهای تخصصی: طبقه‌بندی و ارزیابی

طبقه‌بندی با LLMها (Classification):

طبقه‌بندی، در زمینه هوش مصنوعی، به فرآیند پیش‌بینی کلاس یا دسته یک نقطه داده یا نمونه معین اشاره دارد. LLMها دارایی‌های قدرتمندی در زمینه طبقه‌بندی هستند، حتی با صفر یا تعداد کمی مثال ارائه شده در یک پرامپت. دو استراتژی کلی در حل مسائل طبقه‌بندی با LLMها وجود دارد: یادگیری صفر-شات (zero-shot learning) و یادگیری چند-شات (few-shot learning). در یادگیری صفر-شات، LLM داده‌ها را با دقت استثنایی و بدون کمک هیچ مثال خاص قبلی طبقه‌بندی می‌کند. در یادگیری چند-شات، تعداد کمی مثال به LLM ارائه می‌دهید. این استراتژی می‌تواند به طور قابل توجهی بر ساختار فرمت خروجی شما تأثیر بگذارد و دقت کلی طبقه‌بندی را افزایش دهد. استفاده از LLMها به شما امکان می‌دهد از فرآیندهای طولانی که فرآیندهای یادگیری ماشین سنتی نیاز دارند، اجتناب کنید. موارد استفاده خوب برای طبقه‌بندی LLM شامل بررسی‌های مشتری ، فیلتر کردن ایمیل ، تجزیه و تحلیل احساسات رسانه‌های اجتماعی ، دسته‌بندی مقالات خبری و غربالگری رزومه است.

رأی اکثریت برای طبقه‌بندی (Majority Vote for Classification):

استفاده از چندین درخواست LLM می‌تواند به کاهش واریانس برچسب‌های طبقه‌بندی شما کمک کند. این فرآیند، معروف به رأی اکثریت، با درخواست چندین طبقه‌بندی و در نظر گرفتن متداول‌ترین طبقه‌بندی، تأثیر موارد پرت بالقوه یا تفسیرهای غیرمعمول از یک استنتاج مدل واحد را کاهش می‌دهد. با این حال، این رویکرد می‌تواند معایب قابل توجهی از جمله افزایش زمان مورد نیاز و هزینه برای چندین فراخوانی API داشته باشد.

ارزیابی معیار (Criteria Evaluation):

یک رویکرد رایج، استفاده از یک LLM پیچیده‌تر برای ارزیابی پاسخ‌های یک مدل کوچکتر است. شواهد در مورد اینکه آیا LLMها می‌توانند به عنوان ارزیاب‌های مؤثر عمل کنند، متفاوت است. با این حال، GPT-4 به عنوان یک ارزیاب مفید با نتایج ثابت در مجموعه متنوعی از وظایف، به ویژه در ارزیابی پاسخ‌های مدل‌های کوچکتر و کمتر پیچیده مانند GPT-3.5-turbo، مؤثر و قابل اعتماد است. استفاده از GPT-4 برای ارزیابی پاسخ‌های مدل‌های کمتر پیچیده یک رویه استاندارد نوظهور است، اما باید مراقب بود که نتایج قابل اعتماد و ثابت باشند. در مقایسه با ارزیابی مبتنی بر انسان، ارزیابی مبتنی بر LLM یا مصنوعی معمولاً هزینه کمتری دارد و در چند دقیقه به جای چند روز یا هفته تکمیل می‌شود. حتی در موارد مهم یا حساس که بررسی دستی نهایی توسط انسان ضروری است، تکرار سریع و آزمایش A/B پرامپت از طریق بررسی‌های مصنوعی می‌تواند در زمان صرفه‌جویی کرده و نتایج را به طور قابل توجهی بهبود بخشد.

متا پرامپت نویسی(Meta Prompting):

متا پرامپت نویسی تکنیکی است که شامل ایجاد پرامپت‌های متنی است که به نوبه خود، پرامپت‌های متنی دیگری تولید می‌کنند. این پرامپت‌های متنی سپس برای تولید دارایی‌های جدید در بسیاری از رسانه‌ها مانند تصاویر، فیلم‌ها و متن بیشتر استفاده می‌شوند. به عنوان مثال، در تألیف یک کتاب کودک با کمک GPT-4، ابتدا LLM را برای تولید متن کتاب هدایت می‌کنید و سپس با دستور دادن به GPT-4 برای تولید پرامپت‌هایی که برای مدل‌های تولید تصویر مناسب هستند، متا پرامپت نویسی را فراخوانی می‌کنید. متا پرامپت‌ها مزایای متعددی برای کاربردهای مختلف ارائه می‌دهند، از جمله تولید تصویر از توضیحات محصول ، تولید پرامپت‌های سبک/ویژگی و بهینه‌سازی پرامپت‌ها برای دستیابی به اهداف خاص.

نتیجه‌گیری

تسلط بر اصول استاندارد تولید متن با ChatGPT، از جمله ارائه دستورالعمل‌ها و مثال‌های واضح، استخراج داده‌های ساختاریافته با استفاده از لیست‌های سلسله مراتبی، JSON و YAML، و به‌کارگیری تکنیک‌های پیشرفته پرامپت نویسی مانند “توضیح مانند یک کودک پنج ساله”، پرامپت نویسی نقش و متا پرامپت نویسی، برای دستیابی به خروجی‌های مطلوب و قدرتمند ضروری است. با درک و پیاده‌سازی این شیوه‌ها، کاربران می‌توانند پتانسیل کامل ChatGPT را برای طیف گسترده‌ای از وظایف، از تولید محتوای خلاقانه گرفته تا تجزیه و تحلیل داده‌های پیچیده، به کار گیرند و به نتایجی دست یابند که هم دقیق و هم متناسب با نیازهای خاص آنها باشد. این دانش پایه محکمی برای کاوش در گردش‌کارهای پیشرفته‌تر مهندسی پرامپت فراهم می‌کند.

اصول و تکنیک‌های استاندارد پرامپت نویسی
اصول و تکنیک‌های استاندارد پرامپت نویسی
Share.
Leave A Reply