المستوى المطلوب: مبتدئ. هذا المقال يفترض إنك تعرف Python أساسي وقدرت تجرّب Claude API أو ChatGPT مرة واحدة. ما يفترضش أي خبرة سابقة بالـ embeddings ولا vector databases. وقت القراءة المتوقع: 9-11 دقيقة.
لو سألت Claude عن سياسة الإجازات في شركتك، هيقولك "ما عنديش معلومات عن شركتك". لو رفعت 200 ملف PDF في الـ context window، السؤال الواحد هيكلّفك حوالي 14 دولار وفي 22% من المرات الموديل هيتشتّت ويرد إجابة عامة. RAG بيحل المشكلتين: بترفع الملفات مرة واحدة، وكل سؤال بيكلّف 1.2 سنت بدل 14 دولار، وClaude بيلاقي الإجابة الصح في 1.2 ثانية متوسط. الفرق 1166x في التكلفة و7x في الزمن.
RAG: المفهوم اللي بتشتغل عليه ChatGPT Enterprise وClaude Projects و Notion AI
المشكلة باختصار
Claude وChatGPT اتدربوا على بيانات مفيهاش مستندات شركتك ولا كود مشاريعك ولا تذاكر الدعم بتاعتك. عندك تلات حلول ممكنة:
- Fine-tuning: تدرّب الموديل على بياناتك. التكلفة: 100 إلى 5000 دولار لكل run، ولازم تعيد التدريب كل ما تضيف ملف جديد. مش عملي لو الملفات بتتحدّث أسبوعيًا.
- Long context: تحط كل ملفاتك في كل request. على Claude Sonnet بـ 200K context، 200 PDF بيكلّفوا 14 دولار للسؤال، وفي 80% من الحالات الموديل بيتشتّت بسبب ظاهرة Lost in the Middle (المرجع 3 آخر المقال).
- RAG: تخزّن الملفات في قاعدة بيانات ذكية، ولكل سؤال تجيب أهم 5 فقرات بس وتبعتهم لـ Claude. التكلفة: 1 إلى 3 سنت للسؤال.
المقال ده عن الحل التالت.
المثال اللي هيخلّيك تفهم RAG في 60 ثانية
تخيّل إنك أمين مكتبة فيها 50,000 كتاب. جالك زبون سأل: "أمتى الحرب العالمية الأولى بدأت؟". إنت ما هتقراش الـ 50,000 كتاب علشان تجاوب. هتعمل تلات خطوات بالظبط:
- Index: عندك فهرست بيقول "موضوع: تاريخ الحروب → كتاب رقم 4521، صفحة 12".
- Retrieve: تروح للرف، تجيب الكتاب 4521، تفتح صفحة 12.
- Answer: تقرا الفقرة وترد على الزبون "1914".
RAG بيعمل نفس التلات خطوات. بس "الفهرست" مش حرفي زي فهرست المكتبة، ده اسمه vector index. والكتب اسمها documents. وأمين المكتبة اسمه retriever. وآخر خطوة الردّ النهائي بيعملها Claude مش إنت.
التعريف العلمي بدقة
RAG اختصار Retrieval-Augmented Generation. الورقة الأصلية لـ Lewis et al. اتنشرت في NeurIPS 2020 من Facebook AI Research (المرجع 1). الفكرة: بدل ما تدرّب الموديل على معرفة جديدة (وهو مكلّف وبيتقادم)، إنت بتزود الـ prompt بسياق مسترجع من قاعدة بيانات خارجية وقت كل سؤال.
تقنيًا، الـ pipeline مرحلتين:
- Indexing time (مرة واحدة): كل document بيتقسّم لـ chunks (فقرات بحجم 200 إلى 500 كلمة). كل chunk بيتحوّل لـ vector (مصفوفة أرقام، عادةً 768 أو 1536 رقم). الـ vectors دي بتتخزّن في vector database زي pgvector أو Qdrant أو Pinecone.