فهم السياق أمر ضروري لبناء تطبيقات الذكاء الاصطناعي التي تعمل فعلياً. يغطي هذا الفصل كل ما تحتاج معرفته حول إعطاء الذكاء الاصطناعي المعلومات الصحيحة في الوقت المناسب.

<Callout type="info" title="لماذا يهم السياق">
نماذج الذكاء الاصطناعي عديمة الحالة. فهي لا تتذكر المحادثات السابقة. في كل مرة ترسل فيها رسالة، تحتاج إلى تضمين كل ما يحتاج الذكاء الاصطناعي لمعرفته. هذا ما يُسمى "هندسة السياق".
</Callout>

## ما هو السياق؟

السياق هو كل المعلومات التي تقدمها للذكاء الاصطناعي إلى جانب سؤالك. فكر فيه بهذه الطريقة:

<Compare 
  before={{ label: "بدون سياق", content: "ما هي الحالة؟" }}
  after={{ label: "مع سياق", content: "أنت مساعد مدير مشروع. المستخدم يعمل على مشروع ألفا المستحق يوم الجمعة. آخر تحديث كان: 'الواجهة الخلفية مكتملة، الواجهة الأمامية 80% جاهزة.'\n\nالمستخدم: ما هي الحالة؟" }}
/>

بدون سياق، لا يعرف الذكاء الاصطناعي عن أي "حالة" تسأل. مع السياق، يمكنه إعطاء إجابة مفيدة.

### نافذة السياق

تذكر من الفصول السابقة: الذكاء الاصطناعي لديه "نافذة سياق" محدودة - الحد الأقصى من النص الذي يمكنه رؤيته في وقت واحد. هذا يشمل:

<InfoGrid items={[
  { label: "موجه النظام", description: "التعليمات التي تحدد سلوك الذكاء الاصطناعي", color: "purple" },
  { label: "سجل المحادثة", description: "الرسائل السابقة في هذه المحادثة", color: "blue" },
  { label: "المعلومات المسترجعة", description: "المستندات أو البيانات أو المعرفة المُجلبة لهذا الاستعلام", color: "green" },
  { label: "الاستعلام الحالي", description: "سؤال المستخدم الفعلي", color: "amber" },
  { label: "استجابة الذكاء الاصطناعي", description: "الإجابة (تُحسب أيضاً ضمن الحد!)", color: "rose" },
]} />

## الذكاء الاصطناعي عديم الحالة

<Callout type="warning" title="مفهوم مهم">
الذكاء الاصطناعي لا يتذكر أي شيء بين المحادثات. كل استدعاء API يبدأ من الصفر. إذا أردت أن "يتذكر" الذكاء الاصطناعي شيئاً، عليك أنت تضمينه في السياق في كل مرة.
</Callout>

لهذا السبب ترسل روبوتات المحادثة سجل محادثتك بالكامل مع كل رسالة. ليس أن الذكاء الاصطناعي يتذكر - بل أن التطبيق يُعيد إرسال كل شيء.

<TryIt compact prompt={`تظاهر أن هذه محادثة جديدة بدون سجل.

عن ماذا سألتك للتو؟`} />

سيقول الذكاء الاصطناعي أنه لا يعرف لأنه حقاً لا يملك وصولاً لأي سياق سابق.

## RAG: التوليد المعزز بالاسترجاع

RAG هي تقنية لمنح الذكاء الاصطناعي وصولاً للمعرفة التي لم يُدرَّب عليها. بدلاً من محاولة وضع كل شيء في تدريب الذكاء الاصطناعي، أنت:

1. **تخزّن** مستنداتك في قاعدة بيانات قابلة للبحث
2. **تبحث** عن المستندات ذات الصلة عندما يسأل المستخدم سؤالاً
3. **تسترجع** القطع الأكثر صلة
4. **تُعزز** موجهك بتلك القطع
5. **تُولّد** إجابة باستخدام ذلك السياق

<div className="my-6 p-4 border rounded-lg bg-muted/30">
  <p className="font-semibold mb-3">كيف يعمل RAG:</p>
  <div className="flex flex-col gap-2 text-sm">
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">1</span>
      <span>المستخدم يسأل: "ما هي سياسة الاسترداد لدينا؟"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">2</span>
      <span>النظام يبحث في مستنداتك عن "سياسة الاسترداد"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">3</span>
      <span>يجد القسم ذي الصلة من وثيقة السياسة الخاصة بك</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">4</span>
      <span>يرسل للذكاء الاصطناعي: "بناءً على هذه السياسة: [النص]، أجب: ما هي سياسة الاسترداد لدينا؟"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-green-100 dark:bg-green-900 flex items-center justify-center text-green-600 font-bold">5</span>
      <span>الذكاء الاصطناعي يُولّد إجابة دقيقة باستخدام سياستك الفعلية</span>
    </div>
  </div>
</div>

### لماذا RAG؟

<div className="my-6 grid md:grid-cols-2 gap-4">
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-green-600 dark:text-green-400 mb-2 flex items-center gap-2"><IconCheck className="text-green-600" /> مزايا RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>يستخدم بياناتك الفعلية والحالية</li>
      <li>يقلل الهلوسات</li>
      <li>يمكنه الاستشهاد بالمصادر</li>
      <li>سهل التحديث (فقط حدّث المستندات)</li>
      <li>لا حاجة للضبط الدقيق المكلف</li>
    </ul>
  </div>
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-amber-600 dark:text-amber-400 mb-2 flex items-center gap-2"><IconLightbulb className="text-amber-600" /> متى تستخدم RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>روبوتات دعم العملاء</li>
      <li>البحث في التوثيق</li>
      <li>قواعد المعرفة الداخلية</li>
      <li>أي أسئلة وأجوبة متخصصة في مجال معين</li>
      <li>عندما تهم الدقة</li>
    </ul>
  </div>
</div>

## التضمينات: كيف يعمل البحث

كيف يعرف RAG أي المستندات "ذات صلة"؟ يستخدم **التضمينات** - طريقة لتحويل النص إلى أرقام تلتقط المعنى.

### ما هي التضمينات؟

التضمين هو قائمة من الأرقام ("متجه") تمثل معنى النص. المعاني المتشابهة = أرقام متشابهة.

<EmbeddingsDemo />

### البحث الدلالي

مع التضمينات، يمكنك البحث بالمعنى، وليس فقط بالكلمات المفتاحية:

<Compare 
  before={{ label: "البحث بالكلمات المفتاحية", content: "الاستعلام: 'سياسة الإرجاع'\nيجد: المستندات التي تحتوي على 'إرجاع' و'سياسة'\nيفقد: 'كيفية الحصول على استرداد'" }}
  after={{ label: "البحث الدلالي", content: "الاستعلام: 'سياسة الإرجاع'\nيجد: جميع المستندات ذات الصلة بما في ذلك:\n- 'إرشادات الاسترداد'\n- 'كيفية إرجاع العناصر'\n- 'ضمان استرداد الأموال'" }}
/>

هذا هو سبب قوة RAG - فهو يجد المعلومات ذات الصلة حتى عندما لا تتطابق الكلمات بالضبط.

## استدعاء الدوال / استخدام الأدوات

استدعاء الدوال يتيح للذكاء الاصطناعي استخدام أدوات خارجية - مثل البحث في الويب، أو التحقق من قاعدة بيانات، أو استدعاء API.

<Callout type="tip" title="يُسمى أيضاً">
مزودو الذكاء الاصطناعي المختلفون يسمون هذا بأسماء مختلفة: "استدعاء الدوال" (OpenAI)، "استخدام الأدوات" (Anthropic/Claude)، أو "الأدوات" (مصطلح عام). جميعها تعني نفس الشيء.
</Callout>

### كيف يعمل

1. تخبر الذكاء الاصطناعي بالأدوات المتاحة
2. الذكاء الاصطناعي يقرر إذا كان يحتاج أداة للإجابة
3. الذكاء الاصطناعي يُخرج طلباً منظماً للأداة
4. الكود الخاص بك يُشغّل الأداة ويُرجع النتائج
5. الذكاء الاصطناعي يستخدم النتائج لتشكيل إجابته

<TryIt 
  title="مثال على استدعاء الدوال"
  description="هذا الموجه يوضح كيف يقرر الذكاء الاصطناعي استخدام أداة:"
  prompt={`لديك وصول لهذه الأدوات:

1. get_weather(city: string) - الحصول على الطقس الحالي لمدينة
2. search_web(query: string) - البحث في الإنترنت
3. calculate(expression: string) - إجراء العمليات الحسابية

المستخدم: كيف الطقس في طوكيو الآن؟

فكر خطوة بخطوة: هل تحتاج أداة؟ أي واحدة؟ ما المعلمات؟`}
/>

## التلخيص: إدارة المحادثات الطويلة

مع طول المحادثات، ستصل إلى حد نافذة السياق. بما أن الذكاء الاصطناعي عديم الحالة (لا يتذكر أي شيء)، يمكن للمحادثات الطويلة أن تفيض. الحل؟ **التلخيص**.

### المشكلة

<Compare 
  before={{ label: "بدون تلخيص", content: "الرسالة 1 (500 رمز)\nالرسالة 2 (800 رمز)\nالرسالة 3 (600 رمز)\n... 50 رسالة أخرى ...\n────────────────────\n= 40,000+ رمز\n= تجاوز الحد!" }}
  after={{ label: "مع تلخيص", content: "[ملخص]: 200 رمز\nالرسائل الأخيرة: 2,000 رمز\nالاستعلام الحالي: 100 رمز\n────────────────────\n= 2,300 رمز\n= يناسب تماماً!" }}
/>

### استراتيجيات التلخيص

الأساليب المختلفة تناسب حالات الاستخدام المختلفة. انقر على كل استراتيجية لترى كيف تعالج نفس المحادثة:

<SummarizationDemo />

### ما يجب التقاطه في الملخصات

الملخص الجيد للمحادثة يحافظ على ما يهم:

<Checklist 
  title="قائمة مراجعة الملخص"
  items={[
    { text: "القرارات الرئيسية المتخذة" },
    { text: "الحقائق المهمة المذكورة" },
    { text: "تفضيلات المستخدم المكتشفة" },
    { text: "المهمة أو الهدف الحالي" },
    { text: "أي أسئلة معلقة" },
    { text: "النبرة ومستوى الرسمية" }
  ]}
/>

### جرّبها: أنشئ ملخصاً

<TryIt 
  title="ملخص المحادثة"
  description="تدرب على إنشاء ملخص يحافظ على السياق من هذه المحادثة:"
  prompt={`لخص هذه المحادثة لإدارة السياق. الملخص سيحل محل المحادثة الكاملة في ذاكرة الذكاء الاصطناعي.

المحادثة:
المستخدم: مرحباً، أنا أتعلم Python لتحليل البيانات
المساعد: مرحباً! Python رائع لتحليل البيانات. ما مستوى خبرتك الحالي؟
المستخدم: أعرف Excel الأساسي. مبتدئ تماماً في البرمجة.
المساعد: نقطة انطلاق مثالية! لنبدأ بالمتغيرات - إنها مثل خلايا Excel التي تخزن البيانات.
المستخدم: هل يمكنك شرح المتغيرات؟
المساعد: المتغيرات هي حاويات لتخزين البيانات. في Python: name = "Alice" أو age = 25
المستخدم: ماذا عن القوائم؟ أحتاج للتعامل مع قيم متعددة.
المساعد: القوائم مثل أعمدة Excel! أنشئ واحدة هكذا: prices = [10, 20, 30]. الوصول للعناصر بـ prices[0].
المستخدم: هل يمكنني إجراء حسابات على القوائم؟
المساعد: نعم! استخدم sum(prices) أو len(prices) أو max(prices). للتحليل المعقد، سنستخدم pandas لاحقاً.
المستخدم: ما هو pandas؟
المساعد: Pandas هي مكتبة لتحليل البيانات - فكر فيها كـ "Excel المعزز". لديها DataFrames (مثل جداول البيانات).

أنشئ ملخصاً يلتقط:
1. هدف المستخدم وخلفيته (جملة واحدة)
2. الموضوعات التي تم تغطيتها حتى الآن (جملة واحدة)
3. أسلوب/تفضيلات تعلم المستخدم (جملة واحدة)
4. ما يجب تغطيته بعد ذلك (جملة واحدة)`}
/>

### متى تُلخص

<TryIt compact prompt={`أنت تدير نافذة سياق محادثة. بالنظر لهذه الشروط، قرر متى تُفعّل التلخيص:

نافذة السياق: 8,000 رمز كحد أقصى
الاستخدام الحالي:
- موجه النظام: 500 رمز
- سجل المحادثة: 6,200 رمز
- مساحة للاستجابة: 1,500 رمز

القواعد:
- لخص عندما يتجاوز السجل 70% من المساحة المتاحة
- احتفظ بآخر 5 رسائل سليمة
- احفظ جميع تفضيلات وقرارات المستخدم

هل يجب أن تُلخص الآن؟ إذا نعم، أي الرسائل يجب تلخيصها مقابل الاحتفاظ بها سليمة؟`} />

## MCP: بروتوكول سياق النموذج

MCP (بروتوكول سياق النموذج) هو طريقة قياسية لربط الذكاء الاصطناعي بالبيانات والأدوات الخارجية. بدلاً من بناء تكاملات مخصصة لكل مزود ذكاء اصطناعي، يوفر MCP واجهة عالمية.

### لماذا MCP؟

<InfoGrid columns={2} items={[
  { label: "بدون MCP", description: "ابنِ تكاملات منفصلة لـ ChatGPT، Claude، Gemini... حافظ على قواعد كود متعددة. ينكسر عندما تتغير الـ APIs.", color: "red" },
  { label: "مع MCP", description: "ابنِ مرة واحدة، يعمل في كل مكان. بروتوكول قياسي. الذكاء الاصطناعي يمكنه اكتشاف واستخدام أدواتك تلقائياً.", color: "green" },
]} />

### ما يوفره MCP

- **الموارد**: البيانات التي يمكن للذكاء الاصطناعي قراءتها (الملفات، سجلات قاعدة البيانات، استجابات API)
- **الأدوات**: الإجراءات التي يمكن للذكاء الاصطناعي اتخاذها (بحث، إنشاء، تحديث، حذف)
- **الموجهات**: قوالب موجهات مُعدة مسبقاً

<Callout type="info" title="prompts.chat يستخدم MCP">
هذه المنصة لديها خادم MCP! يمكنك توصيله بـ Claude Desktop أو عملاء آخرين متوافقين مع MCP للبحث واستخدام الموجهات مباشرة من مساعد الذكاء الاصطناعي الخاص بك.
</Callout>

## بناء السياق: الصورة الكاملة

<ContextPlayground />

## أفضل الممارسات

<Checklist 
  title="قائمة مراجعة هندسة السياق"
  items={[
    { text: "اجعل موجهات النظام موجزة لكن كاملة" },
    { text: "ضمّن فقط السياق ذي الصلة (ليس كل شيء)" },
    { text: "لخص المحادثات الطويلة" },
    { text: "استخدم RAG للمعرفة المتخصصة في المجال" },
    { text: "أعطِ الذكاء الاصطناعي أدوات للبيانات في الوقت الفعلي" },
    { text: "راقب استخدام الرموز للبقاء ضمن الحدود" },
    { text: "اختبر مع الحالات الحدية (مدخلات طويلة جداً، إلخ.)" }
  ]}
/>

## الملخص

هندسة السياق هي إعطاء الذكاء الاصطناعي المعلومات الصحيحة:

- **الذكاء الاصطناعي عديم الحالة** - ضمّن كل ما يحتاجه في كل مرة
- **RAG** يسترجع المستندات ذات الصلة لتعزيز الموجهات
- **التضمينات** تُمكّن البحث الدلالي (المعنى، وليس فقط الكلمات المفتاحية)
- **استدعاء الدوال** يتيح للذكاء الاصطناعي استخدام الأدوات الخارجية
- **التلخيص** يدير المحادثات الطويلة
- **MCP** يُوحد كيفية اتصال الذكاء الاصطناعي بالبيانات والأدوات

<Callout type="tip" title="تذكر">
جودة مخرجات الذكاء الاصطناعي تعتمد على جودة السياق الذي تقدمه. سياق أفضل = إجابات أفضل.
</Callout>
