پرامپت نویسی برای RAG (Retrieval-Augmented Generation)، فرایند طراحی پرامپت‌هایی است که به مدل زبانی بزرگ (Large Language Model یا LLM) کمک می‌کند بر اساس اسناد بازیابی‌شده از یک پایگاه دانش بیرونی، پاسخ دقیق، مستند و قابل‌اعتماد تولید کند.
در سامانه‌های RAG، پرامپت نه فقط یک دستور، بلکه یک قرارداد است که نحوه استفاده از اسناد، نحوه ارجاع و نحوه برخورد با اطلاعات ناکافی را تعیین می‌کند.
پرامپت ضعیف در RAG، منجر به پاسخ‌های بی‌ربط یا توهم می‌شود.
پرامپت دقیق در RAG، دقت را به‌طور چشمگیری افزایش می‌دهد و استنادپذیری را ممکن می‌کند.
این راهنما اجزا، الگوها و ملاحظات پرامپت نویسی برای RAG را به‌صورت فنی بررسی می‌کند.

پرامپت نویسی برای RAG، یکی از حوزه‌های تخصصی پرامپت نویسی است که در آن، پرامپت باید با اسناد بازیابی‌شده تعامل داشته باشد. در سامانه‌های RAG، مدل تنها به دانش داخلی خود متکی نیست؛ بلکه اسنادی را دریافت می‌کند که باید بر اساس آن‌ها پاسخ دهد. طراحی پرامپت در این سامانه‌ها، تعیین می‌کند که مدل چگونه از این اسناد استفاده کند. برای درک این حوزه، ابتدا باید با RAG چیست و پرامپت نویسی چیست آشنا باشیم.

در پروژه‌هایی که سامانه‌های RAG را در محیط تولید مستقر کردیم، مشاهده شد که کیفیت پرامپت، مهم‌ترین عامل در دقت نهایی است. یک سامانه RAG با اسناد باکیفیت اما پرامپت ضعیف، پاسخ‌های نامطلوبی تولید می‌کند؛ در حالی که همان سامانه با پرامپت دقیق، به پاسخ‌های قابل‌اعتماد می‌رسد. این نوشتار تلاش می‌کند اصول و الگوهای این حوزه را ارائه دهد.

پرامپت نویسی برای RAG را می‌توان با طراحی دستورالعمل یک تحلیلگر اسناد مقایسه کرد: تحلیلگر باید بداند اسناد را چگونه بخواند، چگونه به آن‌ها ارجاع دهد و در صورت نبود اطلاعات، چه پاسخ دهد. در سامانه‌های LLM، این دستورالعمل همان پرامپت RAG است. برای مطالعه بیشتر درباره مبانی، صفحه Retrieval-augmented generation در ویکی‌پدیا مرور مفیدی ارائه می‌دهد.

پرامپت نویسی برای RAG چیست؟

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

  • تزریق زمینه: اسناد بازیابی‌شده را به مدل ارائه می‌دهد.
  • هدایت پاسخ: مدل را به سمت استفاده از اسناد هدایت می‌کند.
  • کنترل کیفیت: از تولید پاسخ‌های بی‌ربط یا توهم جلوگیری می‌کند.

برای درک عمیق‌تر، پست پرامپت نویسی برای RAG را ببینید.

تفاوت با پرامپت معمولی

پرامپت معمولی بر دانش داخلی مدل متکی است. پرامپت RAG، بر اسناد بازیابی‌شده متکی است. این تفاوت، ساختار پرامپت را تغییر می‌دهد.

نقش پرامپت در کیفیت RAG

کیفیت نهایی RAG، حاصل تعامل سه عامل است: کیفیت بازیابی، کیفیت اسناد و کیفیت پرامپت. حتی با بازیابی و اسناد باکیفیت، پرامپت ضعیف می‌تواند نتیجه را خراب کند.

در سامانه‌های RAG، پرامپت نه یک دستور، بلکه یک قرارداد است که نحوه استفاده از دانش را تعیین می‌کند.

اجزای اصلی پرامپت RAG

یک پرامپت RAG مؤثر، از چند جزء اصلی تشکیل می‌شود:

  1. نقش و هویت: مدل باید بداند با چه هویتی پاسخ دهد.
  2. زمینه: اسناد بازیابی‌شده به‌عنوان زمینه ارائه می‌شوند.
  3. دستور: وظیفه مدل به‌صورت صریح تعریف می‌شود.
  4. قواعد استفاده از اسناد: نحوه ارجاع و استفاده از اسناد مشخص می‌شود.
  5. برخورد با نبود اطلاعات: رفتار مدل در صورت ناکافی بودن اسناد تعریف می‌شود.
  6. قالب خروجی: ساختار پاسخ نهایی تعیین می‌شود.
جزءهدفمثال
نقشتعریف هویت«تو یک دستیار تخصصی هستی»
زمینهارائه اسناد«اسناد مرتبط: ...»
دستورتعریف وظیفه«بر اساس اسناد پاسخ بده»
قواعد ارجاعمستندسازی«منبع هر ادعا را ذکر کن»
نبود اطلاعاتجلوگیری از توهم«اگر اطلاعات نبود، بگو»
قالبساختاردهی«پاسخ در قالب JSON»

تزریق زمینه در پرامپت

تزریق زمینه، بخش حیاتی پرامپت RAG است. در این بخش، اسناد بازیابی‌شده به پرامپت اضافه می‌شوند.

ساختار تزریق زمینه

ساختار تزریق، باید به‌گونه‌ای باشد که مدل بتواند مرز میان اسناد و دستور را تشخیص دهد. یک ساختار رایج:

<context>
[Document 1]
Title: ...
Content: ...

[Document 2]
Title: ...
Content: ...
</context>

Instruction: Answer the question based strictly on the context above.

استفاده از Delimiter

برای جداسازی مرزها، می‌توان از Delimiter استفاده کرد. برای جزئیات، پست استفاده از Delimiter در پرامپت را ببینید.

مدیریت طول زمینه

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

نحوه ارجاع به اسناد

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

الگوهای ارجاع

  • ارجاع درون‌متنی: ذکر شماره سند در متن پاسخ.
  • ارجاع انتهایی: فهرست منابع در پایان پاسخ.
  • ارجاع ساختاریافته: استفاده از قالب JSON با فیلد منبع.
  • ارجاع با نقل‌قول: نقل مستقیم بخش‌های کلیدی سند.

نمونه‌ای از تعریف ارجاع

When answering, cite the source document for each claim using the
format [Doc N]. If multiple documents support a claim, cite all.

Example:
The WordPress REST API supports custom endpoints [Doc 2]. This allows
developers to extend the API with domain-specific resources [Doc 3, Doc 5].

اهمیت ارجاع

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

برخورد با اطلاعات ناکافی

یکی از چالش‌های اصلی RAG، برخورد با اطلاعات ناکافی است. اگر اسناد بازیابی‌شده پاسخ را شامل نشوند، مدل باید چه کار کند؟

راهکارهای برخورد

  • اعلام صریح نبود اطلاعات: مدل بگوید «اطلاعات کافی در اسناد نیست».
  • پاسخ جزئی: مدل بر اساس اطلاعات موجود پاسخ دهد و نقاط ابهام را مشخص کند.
  • درخواست اطلاعات بیشتر: مدل از کاربر بخواهد اطلاعات بیشتری ارائه دهد.
  • ترکیب با دانش عمومی: مدل با ذکر صریح، از دانش عمومی خود نیز استفاده کند.

نمونه‌ای از تعریف برخورد

If the context does not contain the answer, respond with:
"I don't have enough information in the provided context to answer
this question. The retrieved documents discuss [topic], but do not
address [specific aspect]."

Do NOT use your general knowledge to answer if the context is insufficient.

جلوگیری از توهم

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

قالب خروجی و ساختاردهی

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

قالب‌های رایج

  • JSON: برای پردازش برنامه‌نویسی. برای جزئیات، پست درخواست خروجی JSON را ببینید.
  • Markdown: برای مستندسازی. برای جزئیات، پست پرامپت نویسی با Markdown را ببینید.
  • جدول: برای مقایسه اسناد.
  • لیست: برای مراحل.
  • XML: برای کاربردهای خاص.

نمونه‌ای از تعریف قالب

Format your response as follows:

## Answer
[Your main answer here]

## Supporting Evidence
- [Evidence 1] [Doc N]
- [Evidence 2] [Doc N]

## Confidence
[High/Medium/Low] - [Brief justification]

## Limitations
[Any limitations of the answer]

اعتبارسنجی قالب

در سامانه‌های پیشرفته، از JSON Schema برای اعتبارسنجی خروجی استفاده می‌شود. برای جزئیات، پست JSON Schema برای کنترل پاسخ مدل را ببینید.

الگوهای رایج طراحی

چند الگوی رایج برای طراحی پرامپت RAG وجود دارد:

الگوی ساده

در این الگو، اسناد در ابتدای پرامپت قرار می‌گیرند و دستور در ادامه می‌آید. این الگو، ساده‌ترین و پرکاربردترین است.

الگوی تفکیک‌شده

در این الگو، اسناد و دستور در بخش‌های جداگانه قرار می‌گیرند و مرزها با Delimiter مشخص می‌شوند. این الگو، دقت بالاتری دارد.

الگوی مرحله‌ای

در این الگو، مدل ابتدا اسناد را تحلیل می‌کند، سپس پاسخ را تولید می‌کند. این الگو، برای وظایف پیچیده مناسب است.

الگوی مبتنی بر پرسش

در این الگو، مدل ابتدا سؤال‌های فرعی را تولید می‌کند، سپس بر اساس اسناد به آن‌ها پاسخ می‌دهد و در نهایت پاسخ نهایی را ترکیب می‌کند.

الگومناسب برایپیچیدگی
سادهوظایف سادهپایین
تفکیک‌شدهوظایف عمومیمتوسط
مرحله‌ایوظایف پیچیدهمتوسط
مبتنی بر پرسشوظایف استدلالیبالا

تکنیک‌های پیشرفته

برای افزایش دقت RAG، تکنیک‌های پیشرفته‌ای توسعه یافته است:

Self-RAG

در این تکنیک، مدل خودش تصمیم می‌گیرد که به بازیابی نیاز دارد یا نه. برای جزئیات، پست Self-RAG را ببینید.

Corrective RAG

در این تکنیک، اگر اسناد بازیابی‌شده ضعیف باشند، مدل تلاش می‌کند بازیابی مجدد انجام دهد. برای جزئیات، پست Corrective RAG را ببینید.

Graph RAG

در این تکنیک، از گراف دانش برای پاسخ‌های مبتنی بر روابط استفاده می‌شود. برای جزئیات، پست Graph RAG را ببینید.

Reranking

در این تکنیک، اسناد بازیابی‌شده با یک مدل جداگانه رتبه‌بندی می‌شوند. برای جزئیات، پست Reranking اسناد در RAG را ببینید.

Hybrid Search

در این تکنیک، جستجوی کلیدواژه‌ای و معنایی ترکیب می‌شوند. برای جزئیات، پست Hybrid Search برای RAG را ببینید.

ملاحظات امنیتی

سامانه‌های RAG، سطح حمله گسترده‌تری دارند. اسناد بازیابی‌شده می‌توانند منبع تزریق باشند.

ریسک‌های امنیتی RAG

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

راهکارهای امنیتی

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

در سامانه‌های RAG، امنیت اسناد به‌اندازه امنیت پرامپت مهم است.

ارزیابی پرامپت RAG

ارزیابی پرامپت RAG، نیازمند معیارهای خاص است. برای معیارهای ارزیابی، پست معیارهای ارزیابی پرامپت را ببینید.

معیارهای ارزیابی

  • دقت: درصد پاسخ‌های درست.
  • استنادپذیری: درصد ادعاهای مستند.
  • پوشش: درصد سؤالاتی که پاسخ داده شده‌اند.
  • عدم توهم: درصد پاسخ‌های بدون ادعای نادرست.
  • کارایی: تعداد توکن مصرفی.

روش‌های ارزیابی

  • مجموعه تست استاندارد: ارزیابی روی یک مجموعه سؤال و پاسخ مرجع.
  • آزمون A/B: مقایسه دو نسخه از پرامپت. برای جزئیات، پست آزمون A/B برای پرامپت‌ها را ببینید.
  • مدل داور: استفاده از یک مدل جداگانه برای ارزیابی.
  • ارزیابی انسانی: در موارد حساس، از داور انسانی استفاده می‌شود.

پرسش‌های پرتکرار درباره پرامپت RAG

پرامپت RAG چه تفاوتی با پرامپت معمولی دارد؟

پرامپت معمولی بر دانش داخلی مدل متکی است. پرامپت RAG، بر اسناد بازیابی‌شده متکی است و باید نحوه استفاده از این اسناد را تعریف کند.

چطور اسناد را در پرامپت تزریق کنیم؟

اسناد باید در یک بخش مجزا با مرزهای مشخص قرار گیرند. استفاده از Delimiter مانند <context> توصیه می‌شود.

آیا ارجاع به اسناد همیشه لازم است؟

در سامانه‌های حساس، بله. در سامانه‌های عمومی، ممکن است اختیاری باشد.

چطور از توهم در RAG جلوگیری کنیم؟

با تعریف صریح رفتار در صورت نبود اطلاعات. مدل باید بداند که در صورت ناکافی بودن اسناد، باید اعلام کند.

آیا RAG نیازمند تکنیک‌های خاص پرامپت است؟

بله. تکنیک‌هایی مانند Self-RAG، Corrective RAG و Reranking می‌توانند دقت را افزایش دهند.

آیا پرامپت RAG بر هزینه اثر دارد؟

بله. اسناد تزریق‌شده، هزینه توکن را افزایش می‌دهند. بهینه‌سازی حجم اسناد، هزینه را کاهش می‌دهد.

آیا پرامپت RAG با امنیت تداخل دارد؟

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

آیا پرامپت RAG با سایر تکنیک‌ها قابل ترکیب است؟

بله. می‌توان از زنجیره تفکر و خودسازگاری در RAG استفاده کرد.

آیا RAG برای همه وظایف مناسب است؟

در وظایفی که به دانش تخصصی یا به‌روز نیاز دارند، بله. در وظایف عمومی، پرامپت معمولی کافی است.

چطور پرامپت RAG را بهینه کنیم؟

با ارزیابی مستمر، تحلیل خطاها و استفاده از تکنیک‌های پیشرفته مانند Reranking و Hybrid Search.

آیا RAG نیازمند حاکمیت است؟

در سازمان‌های بزرگ، بله. برای جزئیات، پست حاکمیت پرامپت را ببینید.

نتیجه‌گیری کاربردی

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

در سامانه‌های RAG، پرامپت نه یک دستور، بلکه یک قرارداد است که نحوه استفاده از دانش را تعیین می‌کند.

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