برای اینکه از یک 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 معمولاً شامل:
- System Instructions
- Conversation History
- Retrieved Context
- User Question
است.