النماذج اللغوية الكبيرة· الدرس 4 من 7
- 1إزاي الـ LLM بيشتغل من جوه8 دقيقة
- 2الـ Context Window — ذاكرة الموديل المؤقتة7 دقيقة
- 3الـ Temperature والـ Sampling — التحكّم في العشوائية7 دقيقة
- 4رسائل الـ System والـ User — مين بيتكلّم7 دقيقة
- 5اختيار الموديل — الأكبر مش دايمًا الأحسن8 دقيقة
- 6اللي الـ LLM ما بيعرفش يعمله7 دقيقة
- 7التكلفة والزمن — فاتورتك بتتحسب إزاي7 دقيقة
رسائل الـ System والـ User — مين بيتكلّم
في سطر واحد · المحادثة مصفوفة رسايل ليها أدوار: system بيحدّد السلوك والشخصية، user كلام المستخدم، assistant ردّ الموديل.
معظم التحكّم في سلوك الموديل بيحصل في رسالة الـ system — لو مش فاهم الأدوار، هتحاول تتحكّم من المكان الغلط.
زي مسرحية: الـ system هو ورقة التعليمات للممثّل (إنت مساعد مؤدّب بيرد بالعربي)، والـ user والـ assistant هما الحوار نفسه.
زي البريفينج اللي بياخده موظف الكول سنتر قبل ما يبدأ شيفته: القواعد دي ثابتة طول اليوم، والعملاء (الـ user) بيروحوا ويجوا فوقها. لو عايز تغيّر سلوكه، بتعدّل البريفينج، مش بتزنّ على كل عميل لوحده.
تحطّ في الـ system: «رُدّ دايمًا بنقاط قصيرة»، فكل ردود الموديل بعد كده تبقى نقاط — من غير ما تكرّر الطلب كل مرة.
لما تطبيقك بيندَه على الـ API، بيبعت مصفوفة رسايل، وكل رسالة معلّمة بدور. قبل ما توصل للموديل، المصفوفة دي بتتحوّل لنص واحد بعلامات خاصة بتفصل الأدوار عن بعض — والموديل متدرّب إنه يدّي تعليمات الـ system وزن ومرجعية أعلى من كلام الـ user. يعني الفصل مش جدار أمني صلب، ده انحياز اتبنى بالتدريب: قوي في الغالب، بس ممكن كلام user مصاغ بمكر يتغلّب عليه (ودي فكرة الـ prompt injection). رسالة الـ assistant بدورها بتتسجّل في التاريخ، فالموديل بيشوف ردوده السابقة كسياق في الأدوار الجاية.
المصفوفة اللي بتتبعت فعليًا — القواعد الثابتة في الـ system، وكلام المستخدم المتغيّر في الـ user:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "You are a support agent for Nour ISP. "
"Answer in Egyptian Arabic, max 3 sentences. "
"Never promise a refund."},
{"role": "user", "content": "النت فاصل عندي من ساعتين، هتعوضوني إزاي؟"},
],
)🧪 جرّب بنفسك — غيّر رسالة الـ system وشوف الفرق: خد نفس سؤال الـ user («اشرحلي الـ recursion») وشغّله 3 مرات بـ 3 رسايل system مختلفة: (1) «إنت مدرّس لأطفال 10 سنين»، (2) «إنت interviewer صارم في شركة تقنية»، (3) من غير رسالة system خالص. قارن النبرة والعمق والطول. بعدين جرّب تكسر قاعدة: حطّ في الـ system «متستخدمش أي أمثلة بالأكواد» وشوف في الـ user تقدر تقنعه يكسرها ولا لأ — هتحسّ بنفسك إن الفصل انحياز مش جدار.
- حشر كل حاجة في رسالة الـ user. القواعد الثابتة (الشخصية، اللغة، الفورمات، الممنوعات) مكانها الـ system — في الـ user بتضعف وبتتنسي مع طول المحادثة.
- الثقة إن الـ system حماية أمنية. تعليمات زي «متقولش السعر أبدًا» ممكن تتكسر بـ user message شاطرة — القواعد الأمنية الحقيقية بتتنفذ في كود التطبيق، مش في الـ prompt.
- نسيان إن تاريخ المحادثة بيتبعت كله كل مرة. لو عدّلت رسالة الـ system في الإصدار الجديد، الجلسات الشغّالة بتاريخها القديم ممكن تتصرف مختلف عن المتوقّع.
استخدم رسالة الـ system لأي حاجة لازم تفضل ثابتة عبر المحادثة كلها: الشخصية والنبرة، اللغة، شكل المخرجات، حدود الموضوع، وتعليمات التعامل مع الأدوات. وحطّ في رسالة الـ user المحتوى المتغيّر بس: سؤال المستخدم، البيانات، النص المطلوب معالجته.
متعتمدش على الـ system لتنفيذ قواعد أمنية أو قانونية — دي شغل الكود والـ guardrails برّه الموديل. ومتحوّلوش لمقال ضخم فيه كل احتمال في الدنيا: التعليمات الكتير المتضاربة بتخلّي الالتزام أضعف، وكل token فيها بتدفع تمنه في كل نداء. وأي بيانات جاية من مستخدم أو من الإنترنت مكانها الـ user message، عمرها ما تتحقن جوه الـ system.