MODULE 04 / LESSON 28

Prompt Engineering: Building Your Augmented Prompt در سیستم RAG

برای اینکه از یک LLM بیشترین کیفیت را بگیریم، فقط داشتن مدل قوی کافی نیست؛ باید Prompt مناسبی طراحی کنیم . به مجموعه تکنیک‌هایی که باعث می‌شوند Prompt بهتر نوشته شود و خروجی LLM بهبود پیدا کند، Prompt Engineering گفته می‌شود. در…

نویسنده: محمد ابوطالبی۷۷۵ واژهماژول ۴: LLM & Prompting

برای اینکه از یک LLM بیشترین کیفیت را بگیریم، فقط داشتن مدل قوی کافی نیست؛ باید Prompt مناسبی طراحی کنیم.

به مجموعه تکنیک‌هایی که باعث می‌شوند Prompt بهتر نوشته شود و خروجی LLM بهبود پیدا کند، Prompt Engineering گفته می‌شود.

در سیستم‌های RAG، Prompt Engineering اهمیت زیادی دارد چون باید:

  • اطلاعات بازیابی‌شده توسط Retriever
  • دستورالعمل‌های سیستم
  • مکالمه قبلی
  • سؤال کاربر

را به شکلی مناسب به LLM منتقل کنیم.


ساختار Prompt در LLMها

رایج‌ترین ساختار مورد استفاده:

OpenAI Messages Format

است.

ساختار کلی:

[
 {
   "role": "system",
   "content": "Instructions"
 },
 {
   "role": "user",
   "content": "Question"
 },
 {
   "role": "assistant",
   "content": "Previous answer"
 }
]

هر پیام دو بخش دارد:

  • role
  • content

Roleهای اصلی

سه نوع Role وجود دارد:


1. System Message

دستورهای سطح بالا برای رفتار مدل.

مثلاً:

You are a helpful medical assistant.
Answer only using provided documents.
Always cite sources.

System Prompt مشخص می‌کند:

  • مدل چگونه رفتار کند
  • چه قوانینی را رعایت کند
  • چه سبکی پاسخ دهد

2. User Message

پیام واقعی کاربر.

مثلاً:

What are the symptoms of diabetes?

3. Assistant Message

پاسخ‌های قبلی مدل.

در مکالمه‌های چندمرحله‌ای استفاده می‌شود.


نکته مهم درباره Memory مدل

یک LLM واقعاً مکالمه قبلی را "یادش نمی‌ماند".

مثلاً:

کاربر:

اسم من علی است

مدل:

خوشحالم علی

بعد:

سن من چیست؟

مدل به صورت واقعی حافظه ندارد.


کاری که سیستم انجام می‌دهد:

تمام مکالمه قبلی را دوباره تبدیل به Messages می‌کند:

System

User: اسم من علی است

Assistant: خوشحالم علی

User: سن من چیست؟

و کل آن را دوباره به مدل ارسال می‌کند.


Chat Template

قبل از ارسال به مدل:

Messages تبدیل به یک متن واحد می‌شود.

مثلاً:

<system>
You are helpful assistant
</system>

<user>
Question
</user>

<assistant>
Answer
</assistant>

مدل با این Tagها متوجه می‌شود:

  • کدام بخش دستور است
  • کدام بخش سؤال است
  • کدام بخش پاسخ قبلی است

System Prompt در RAG

اولین چیزی که باید طراحی کنیم:

System Prompt

است.

چون روی تمام پاسخ‌های مدل تأثیر دارد.


مثلاً:

You are an AI assistant.

Answer questions using only the provided context.

If the answer is not in the context,
say you don't know.

Always provide citations.

در RAG معمولاً System Prompt شامل موارد زیر است:


1. محدود کردن منبع پاسخ

مثلاً:

Use only retrieved documents.

یعنی:

مدل از دانش خودش استفاده نکند.


2. جلوگیری از Hallucination

مثلاً:

Do not make assumptions.

3. تعیین سبک پاسخ

مثلاً:

Answer briefly.

یا:

Provide detailed explanations.

4. درخواست Citation

مثلاً:

Mention the source document.

مثال System Prompt برای RAG

You are a company knowledge assistant.

Your task is to answer questions using only the provided documents.

Rules:
- Do not invent information.
- If information is missing, say you don't know.
- Explain answers clearly.
- Cite the retrieved documents.

Augmented Prompt چیست؟

در RAG، Prompt نهایی فقط سؤال کاربر نیست.

بلکه ترکیبی است از:

System Prompt

+

Conversation History

+

Retrieved Documents

+

User Question

ساختار کلی:

        User Question
              |
              ↓
        Retriever
              |
              ↓
    Relevant Documents
              |
              ↓

System Prompt
+
Context
+
Question

              |
              ↓

             LLM

              |
              ↓

          Answer

Prompt Template

برای مدیریت بهتر، معمولاً از Template استفاده می‌کنیم.

Template یعنی:

یک ساختار ثابت که اطلاعات مختلف داخل آن قرار می‌گیرد.


مثال:

SYSTEM:
You are helpful assistant.

CONTEXT:
{retrieved_documents}

CHAT HISTORY:
{conversation}

QUESTION:
{user_question}

بعد در زمان اجرا:

جای متغیرها مقدارگذاری می‌شود.


مثلاً:

CONTEXT:

Document 1:
RAG improves LLM accuracy...

Document 2:
Vector databases store embeddings...


QUESTION:

What is RAG?

چرا Prompt Template مهم است؟

چون اجازه می‌دهد:

1. آزمایش کنیم

مثلاً:

نسخه اول:

Context first
Question last

نسخه دوم:

Question first
Context last

و مقایسه کنیم.


2. کیفیت را بهینه کنیم

می‌توانیم بررسی کنیم:

  • حذف چه بخش‌هایی بهتر است؟
  • چه دستورهایی کمک می‌کنند؟
  • چه تعداد Document مناسب است؟

Prompt نهایی یک سیستم RAG حرفه‌ای

معمولاً شبیه این است:

SYSTEM:

You are an expert assistant.

Use only the provided context.
Do not hallucinate.
Cite sources.


CONVERSATION:

Previous messages...


RETRIEVED CONTEXT:

Chunk 1:
...

Chunk 2:
...


USER QUESTION:

...

نکات مهم طراحی Prompt برای RAG

1. دستورها را واضح بنویس

بد:

Answer well.

خوب:

Answer using only retrieved documents.
If information is unavailable, say "I don't know".

2. Context را مشخص کن

مدل باید بداند:

این متن چیست.

مثلاً:

The following text is retrieved from company documents:

3. نقش مدل را مشخص کن

مثلاً:

You are a legal assistant.

4. محدودیت ایجاد کن

مثلاً:

Never use outside knowledge.

جمع‌بندی

در یک سیستم RAG، کیفیت پاسخ فقط به مدل وابسته نیست.

سه عامل مهم هستند:

Retriever Quality
        +
Prompt Design
        +
LLM Capability

Prompt Engineering کمک می‌کند:

  • اطلاعات Retrieved بهتر استفاده شوند
  • Hallucination کمتر شود
  • پاسخ‌ها ساختارمندتر شوند
  • رفتار مدل قابل کنترل‌تر شود

یک Prompt خوب در RAG معمولاً شامل:

  1. System Instructions
  2. Conversation History
  3. Retrieved Context
  4. User Question

است.