MODULE 04 / LESSON 29

Prompt Engineering: Advanced Techniques در سیستم‌های RAG

بعد از اینکه یک Prompt Template ساده برای RAG ساختید، می‌توانید تکنیک‌های پیشرفته‌تر Prompt Engineering را برای بهبود کیفیت پاسخ‌ها آزمایش کنید. اما نکته مهم: هر تکنیک پیشرفته‌ای همیشه بهتر نیست. باید با آزمایش مشخص شود که واقعاً…

نویسنده: محمد ابوطالبی۹۳۱ واژهماژول ۴: LLM & Prompting

بعد از اینکه یک Prompt Template ساده برای RAG ساختید، می‌توانید تکنیک‌های پیشرفته‌تر Prompt Engineering را برای بهبود کیفیت پاسخ‌ها آزمایش کنید.

اما نکته مهم:

هر تکنیک پیشرفته‌ای همیشه بهتر نیست. باید با آزمایش مشخص شود که واقعاً کیفیت سیستم را افزایش می‌دهد یا فقط هزینه و پیچیدگی را زیاد می‌کند.


1. In-Context Learning (یادگیری درون Prompt)

مفهوم

در این روش، شما به LLM مثال‌هایی از:

  • ورودی
  • خروجی مطلوب

می‌دهید تا مدل یاد بگیرد چه نوع پاسخی تولید کند.


مثال:

فرض کنید یک Chatbot پشتیبانی مشتری دارید.

به جای اینکه فقط بگویید:

Answer customer questions politely

مثال اضافه می‌کنید:

Customer:
I cannot login

Assistant:
Please reset your password using the forgot password option.

---

Customer:
My payment failed

Assistant:
Please check your card information...

حالا مدل ساختار پاسخ را بهتر متوجه می‌شود.


چرا In-Context Learning کار می‌کند؟

چون شما اطلاعات بیشتری به Prompt اضافه می‌کنید.

مشابه RAG:

در RAG:

Retrieve documents
        ↓
Inject context
        ↓
Generate answer

در In-context Learning:

Retrieve examples
        ↓
Inject examples
        ↓
Generate answer

انواع In-Context Learning

1. One-shot Learning

فقط یک مثال داده می‌شود.

مثلاً:

Example:

Question:
How to reset password?

Answer:
Use password recovery page.

2. Few-shot Learning

چندین مثال داده می‌شود.

مثلاً:

Example 1
Example 2
Example 3

Few-shot معمولاً بهتر است چون مدل الگوی بیشتری می‌بیند.


استفاده از RAG برای In-Context Learning

به جای اینکه مثال‌ها را ثابت داخل Prompt قرار دهید:

می‌توانید آنها را در Vector Database ذخیره کنید.

ساختار:

Previous successful conversations

          ↓

Vector Database

          ↓

Retrieve similar examples

          ↓

Inject into Prompt

          ↓

LLM

مثلاً:

کاربر:

My account was blocked

Retriever:

پیدا می‌کند:

Previous conversation:

User:
My account was blocked

Assistant:
I will help unlock your account...

و این را به Prompt اضافه می‌کند.


2. Chain-of-Thought Prompting (CoT)

یکی از معروف‌ترین تکنیک‌های Prompt Engineering است.

ایده:

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


Prompt معمولی:

Solve this problem.

Chain of Thought:

Think step by step before answering.

مثال:

سؤال:

If a train travels 60 km/h for 3 hours,
how far does it go?

مدل ابتدا:

Distance = speed × time

60 × 3 = 180 km

بعد پاسخ:

180 kilometers

Scratchpad

یک روش مشابه:

به مدل یک فضای فکر کردن می‌دهید.

مثلاً:

<thinking>

Reason here

</thinking>

<answer>

Final response

</answer>

مزایای Chain-of-Thought

کمک می‌کند در:

  • ریاضی
  • برنامه‌نویسی
  • برنامه‌ریزی
  • مسائل چندمرحله‌ای

همچنین Debug کردن راحت‌تر می‌شود چون مسیر تصمیم‌گیری مشخص‌تر است.


3. Reasoning Models

امروزه بعضی مدل‌ها ذاتاً برای Reasoning ساخته شده‌اند.

مثل مدل‌هایی که قبل از پاسخ:

  • برنامه‌ریزی می‌کنند
  • گزینه‌ها را بررسی می‌کنند
  • مراحل داخلی ایجاد می‌کنند

ساختار:

User Question

      ↓

Reasoning Tokens

      ↓

Final Answer Tokens

مزایا

عملکرد بهتر در:

  • Coding
  • Mathematics
  • Planning
  • Complex workflows

معایب

چون Token بیشتری تولید می‌کنند:

  • کندتر هستند
  • هزینه بیشتری دارند

Reasoning Model در RAG

برای RAG می‌تواند بسیار مفید باشد.

مثلاً:

Retriever پیدا کرده:

Document A
Document B
Document C

مدل Reasoning بهتر می‌تواند تشخیص دهد:

کدام سند واقعاً مرتبط است.


کاربردها:

  • پزشکی
  • حقوقی
  • تحلیل اسناد
  • تحقیقات علمی

تفاوت Prompt برای Reasoning Models

نکته مهم:

روش‌های قدیمی همیشه روی مدل‌های Reasoning جواب نمی‌دهد.

مثلاً:

این دستور:

Think step by step

ممکن است لازم نباشد.

چون مدل قبلاً برای این کار آموزش دیده است.


بهتر است:

هدف واضح بدهید

مثلاً:

Analyze these documents and provide the most accurate conclusion.

فرمت خروجی را مشخص کنید

مثلاً:

Return:
1. Summary
2. Evidence
3. Recommendation

4. Context Window Management

هر چیزی که به LLM می‌دهید، Context را مصرف می‌کند.

شامل:

System Prompt

+

Conversation History

+

Retrieved Documents

+

Examples

+

Generated Answer

اگر Context پر شود:

  • هزینه زیاد می‌شود
  • سرعت کم می‌شود
  • کیفیت کاهش پیدا می‌کند

مشکل Multi-turn Conversation

در چت طولانی:

هر پیام قبلی دوباره ارسال می‌شود.

مثلاً:

User message 1

Assistant answer 1

User message 2

Assistant answer 2

...

User message 50

خیلی سریع بزرگ می‌شود.


Context Pruning

راه‌حل‌هایی برای کوچک کردن Context.


روش 1: نگه داشتن آخرین پیام‌ها

مثلاً فقط:

Last 5 user messages

+
Last 5 assistant answers

مزیت:

ساده و سریع.


روش 2: خلاصه‌سازی مکالمه

یک LLM دیگر پیام‌های قدیمی را خلاصه می‌کند.

مثلاً:

قبل:

100 پیام

بعد:

Summary:
User wants a RAG chatbot for medical documents.

در Reasoning Model

نباید Reasoning Tokenها را در History نگه داشت.

بهتر:

نگه داشتن:

Final Answer

نه:

Internal reasoning

در RAG

معمولاً نباید تمام Documentهای قبلی را نگه دارید.

بهتر:

فقط:

Documents retrieved for current question

5. افزایش Context Window همیشه راه‌حل نیست

ممکن است بگویید:

"مدل بزرگ‌تر با Context بیشتر می‌گیرم."

اما:

Context بزرگ:

  • هزینه بیشتر
  • سرعت کمتر

دارد.

بنابراین باید Prompt را بهینه کرد.


چه زمانی از تکنیک‌های پیشرفته استفاده کنیم؟

اشتباه رایج:

از ابتدا همه چیز اضافه کنیم:

+ Chain of Thought
+ Few Shot
+ Huge Context
+ Reasoning Model
+ Long History

نتیجه:

  • هزینه بالا
  • پیچیدگی بالا
  • سرعت پایین

روش بهتر:

مرحله‌ای پیش بروید:


مرحله 1

شروع ساده:

System Prompt

+

Retrieved Context

+

Question

مرحله 2

اگر مشکل داشت:

اضافه کنید:

Query rewriting

Reranking

Better chunks

مرحله 3

اگر هنوز مشکل داشت:

اضافه کنید:

Few-shot examples

Reasoning models

Advanced prompting

جمع‌بندی نهایی

تکنیک‌های پیشرفته Prompt Engineering:

تکنیک کاربرد
In-context Learning یاد دادن سبک پاسخ با مثال
Few-shot Learning چند مثال داخل Prompt
One-shot Learning یک مثال داخل Prompt
Chain-of-Thought حل مسائل چندمرحله‌ای
Scratchpad فضای فکر کردن
Reasoning Models استدلال داخلی بهتر
Context Pruning کاهش حجم مکالمه
Summarization مدیریت History

در یک سیستم RAG حرفه‌ای معمولاً ترتیب بهینه این است:

Good Retrieval
        ↓
Good Chunking
        ↓
Good System Prompt
        ↓
Prompt Template
        ↓
Query Rewriting
        ↓
Reranking
        ↓
Advanced Reasoning (if needed)

نکته کلیدی:

بهترین RAG معمولاً با پیچیده‌ترین Prompt ساخته نمی‌شود؛ با ساده‌ترین طراحی‌ای ساخته می‌شود که نیاز واقعی پروژه را برطرف کند.