بناء نظام RAG (استرجاع المعلومات المعزّز) بكلود AI — دليل عملي شامل

تخيّل أن لديك موظفاً يحفظ كل وثيقة أصدرتها شركتك منذ تأسيسها، كل عقد، كل سياسة، كل تقرير — ويُجيب على أي سؤال عنها في ثوانٍ بدقة مطلقة. هذا ما يفعله نظام RAG (Retrieval-Augmented Generation) حين تُدمجه مع كلود AI. RAG ليس مجرد تقنية، هو البنية الأساسية لأي تطبيق ذكاء اصطناعي مؤسسي جاد — من قواعد معرفة الشركات إلى أنظمة دعم العملاء إلى مساعدي البحث القانوني.
في هذا الدليل، ستتعلم كيف تبني نظام RAG كامل من الصفر: من استيعاب المستندات وتقطيعها، إلى إنشاء التضمينات ، إلى تخزينها في قاعدة بيانات متجهية، إلى الاسترجاع الذكي والإجابة النهائية بكلود. كل خطوة مشروحة مع كود Python حقيقي وقابل للنسخ مباشرة.
ما هو RAG ولماذا كلود تحديداً؟
RAG هو نمط معماري يجمع بين قوتين: قدرة نماذج اللغة الكبيرة على الفهم والتوليد، وقدرة قواعد البيانات المتجهية على الاسترجاع الدلالي الدقيق. بدلاً من الاعتماد فقط على ما تعلمه النموذج أثناء التدريب، يُزوّده RAG بالسياق الحقيقي والمحدّث من مصادرك الخاصة.
كلود AI يتفوق في سياق RAG لثلاثة أسباب محددة: أولاً، نافذة السياق الضخمة (200 ألف token) تسمح باسترجاع مقاطع كثيرة دون تضحية بالجودة. ثانياً، كلود يُقرّ صراحةً حين لا تكفي المعلومات المسترجعة للإجابة بدلاً من الاختلاق. ثالثاً، دقة كلود في الاستشهاد بمصادر محددة من السياق تجعل النتائج موثوقة وقابلة للمراجعة.
المكونات الأساسية لنظام RAG
قبل الكود، يجب فهم البنية المعمارية بوضوح. نظام RAG يتألف من مرحلتين رئيسيتين:
مرحلة الاستيعاب (Indexing): تُحوّل المستندات الخام إلى متجهات رقمية مُخزّنة في قاعدة بيانات متخصصة. هذا يحدث مرة واحدة عند إضافة مستند جديد.
مرحلة الاسترجاع والتوليد (Retrieval + Generation): حين يطرح المستخدم سؤالاً، يُحوَّل السؤال إلى متجه، تُبحث قاعدة البيانات عن أكثر المقاطع تشابهاً، تُرسل هذه المقاطع مع السؤال إلى كلود، وكلود يُنتج إجابة مبنية على هذا السياق.
استيعاب المستندات — من PDF إلى Word إلى الويب
أولى التحديات العملية هي تحويل المستندات المتنوعة إلى نص خام قابل للمعالجة. كلود يساعدك في كتابة كود استيعاب يتعامل مع كل الصيغ:
pip install anthropic langchain pypdf python-docx beautifulsoup4 requests
from langchain.document_loaders import PyPDFLoader, Docx2txtLoader
from langchain.document_loaders import WebBaseLoader
import os
def load_documents(source_path: str) -> list:
"""تحميل مستندات من مجلد يحتوي على PDF و Word وروابط ويب"""
documents = []
for filename in os.listdir(source_path):
filepath = os.path.join(source_path, filename)
if filename.endswith('.pdf'):
loader = PyPDFLoader(filepath)
documents.extend(loader.load())
elif filename.endswith('.docx'):
loader = Docx2txtLoader(filepath)
documents.extend(loader.load())
return documents
# تحميل مستندات من الويب
web_urls = [
"https://yourcompany.com/policies",
"https://yourcompany.com/procedures"
]
web_loader = WebBaseLoader(web_urls)
web_docs = web_loader.load()
print(f"تم تحميل {len(web_docs)} صفحة ويب")استراتيجيات التقطيع — القرار الأهم في بناء RAG
جودة نظام RAG تعتمد بشكل كبير على كيفية تقطيع النصوص إلى مقاطع (Chunks). هناك ثلاث استراتيجيات رئيسية:
التقطيع الثابت (Fixed-size Chunking): أبسط الطرق. تُقطّع النص بحجم ثابت مع تداخل بين المقاطع. مناسب كنقطة بداية لكنه يكسر أحياناً السياق الدلالي.
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512, # حجم كل مقطع بالحروف
chunk_overlap=50, # تداخل 50 حرف بين المقاطع
separators=["\n\n", "\n", ".", "!", "؟", " "] # ترتيب الفصل
)
chunks = splitter.split_documents(documents)
print(f"تم إنشاء {len(chunks)} مقطع")التقطيع الدلالي (Semantic Chunking): يُحلّل التشابه بين الجمل ويقطع عند نقاط التحول الدلالي. أبطأ لكن نتائجه أفضل للنصوص المتنوعة.
التقطيع التكراري (Recursive Chunking): يحاول الفصل على مستوى الفقرات أولاً، ثم الجمل، ثم الكلمات إذا احتاج — الأفضل للوثائق ذات البنية الهرمية.
نماذج التضمين — تحويل النص إلى أرقام
التضمينات (Embeddings) هي تمثيلات رقمية متعددة الأبعاد للنصوص تُحافظ على المعنى الدلالي. النصوص المتشابهة المعنى تُنتج متجهات متقاربة في الفضاء الرياضي.
Voyage AI هو النموذج الأفضل للغات غير الإنجليزية بما فيها العربية. Anthropic (الشركة المطوّرة لكلود) تشير إليه صراحةً في وثائقها:
import voyageai
client = voyageai.Client(api_key="your-voyage-api-key")
def create_embeddings(texts: list[str]) -> list[list[float]]:
"""إنشاء تضمينات لقائمة من النصوص"""
result = client.embed(
texts,
model="voyage-3", # أحدث نموذج لعام 2026
input_type="document" # للمستندات المُفهرسة
)
return result.embeddings
# للاستعلامات استخدم input_type="query"
def embed_query(query: str) -> list[float]:
result = client.embed([query], model="voyage-3", input_type="query")
return result.embeddings[0]قواعد البيانات المتجهية — المقارنة الكاملة
قاعدة البيانات المتجهية تُخزّن التضمينات وتُمكّن البحث بالتشابه بكفاءة عالية. فيما يلي مقارنة للخيارات الأبرز:
| قاعدة البيانات | الاستضافة | الأفضل لـ | التكلفة |
|---|---|---|---|
| Pinecone | سحابية مُدارة | الإنتاج الكبير، سهولة الإعداد | من 70$/شهر |
| Supabase pgvector | سحابية مجانية | المشاريع التي تستخدم PostgreSQL | مجاني إلى 25$/شهر |
| Qdrant | ذاتية أو سحابية | الأداء العالي، الإنتاج المتوسط | مجاني (ذاتي) |
| Weaviate | ذاتية أو سحابية | المشاريع المفتوحة المصدر | مجاني (ذاتي) |
| Chroma | محلية | التطوير والنماذج الأولية | مجاني تماماً |
سنستخدم Qdrant في مثالنا لأنه يوفر أداءً ممتازاً مع إمكانية النشر الذاتي المجاني:
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
import uuid
# الاتصال بـ Qdrant (محلياً أو عبر Docker)
client = QdrantClient("localhost", port=6333)
# إنشاء مجموعة للتضمينات
client.create_collection(
collection_name="company_knowledge",
vectors_config=VectorParams(
size=1024, # حجم متجهات Voyage AI
distance=Distance.COSINE
)
)
def index_chunks(chunks: list, embeddings: list[list[float]]):
"""فهرسة المقاطع مع تضميناتها"""
points = []
for i, (chunk, embedding) in enumerate(zip(chunks, embeddings)):
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=embedding,
payload={
"text": chunk.page_content,
"source": chunk.metadata.get("source", ""),
"page": chunk.metadata.get("page", 0)
}
))
client.upsert(collection_name="company_knowledge", points=points)
print(f"تم فهرسة {len(points)} مقطع")تقنيات الاسترجاع المتقدمة
الاسترجاع البسيط بالتشابه يكفي كبداية، لكن الأنظمة الاحترافية تستخدم تقنيات أكثر تطوراً:
البحث الهجين (Hybrid Search): يجمع البحث الدلالي (بالمتجهات) مع البحث النصي التقليدي (BM25). يُعطي نتائج أفضل خاصةً للمصطلحات الخاصة وأسماء المنتجات والأرقام.
إعادة الترتيب (Reranking): بعد استرجاع المقاطع الأولية، يُعيد نموذج Reranker ترتيبها بناءً على الصلة الفعلية بالسؤال. يُقلل الضوضاء ويرفع الدقة بشكل واضح.
import anthropic
def retrieve_and_answer(query: str, top_k: int = 5) -> str:
"""استرجاع المقاطع وتوليد إجابة بكلود"""
# 1. تضمين السؤال
query_embedding = embed_query(query)
# 2. البحث في قاعدة البيانات
results = qdrant_client.search(
collection_name="company_knowledge",
query_vector=query_embedding,
limit=top_k,
score_threshold=0.7 # تصفية المقاطع ضعيفة الصلة
)
# 3. بناء السياق
context_parts = []
for i, result in enumerate(results, 1):
source = result.payload.get("source", "مجهول")
text = result.payload.get("text", "")
context_parts.append(f"[مصدر {i}: {source}]\n{text}")
context = "\n\n---\n\n".join(context_parts)
# 4. استدعاء كلود مع السياق
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-5",
max_tokens=1500,
system="""أنت مساعد معرفي دقيق. أجب على الأسئلة حصرياً بناءً على السياق المقدّم.
إذا لم يحتوِ السياق على إجابة كافية، قل ذلك صراحةً.
استشهد دائماً بالمصدر في إجابتك.""",
messages=[{
"role": "user",
"content": f"السياق المتاح:\n\n{context}\n\nالسؤال: {query}"
}]
)
return message.content[0].textتقييم جودة النظام — مقاييس RAGAS
بناء النظام ليس النهاية — القياس المستمر هو ما يُميّز النظام الجيد عن الممتاز. استخدم مكتبة RAGAS لحساب مقاييس موضوعية:
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
# بيانات الاختبار (سؤال، إجابة مثالية، إجابة النظام، السياق المُسترجع)
test_dataset = {
"question": ["ما هي سياسة الإجازات في شركتنا؟"],
"ground_truth": ["الموظف يحق له 21 يوم إجازة سنوية..."],
"answer": [retrieve_and_answer("ما هي سياسة الإجازات؟")],
"contexts": [[ctx.page_content for ctx in retrieved_chunks]]
}
results = evaluate(
dataset=test_dataset,
metrics=[faithfulness, answer_relevancy, context_precision]
)
print(results)
# faithfulness: 0.92 — الإجابة مبنية على السياق
# answer_relevancy: 0.88 — الإجابة ذات صلة بالسؤال
# context_precision: 0.85 — المقاطع المُسترجعة دقيقةدراسة حالة: قاعدة معرفة مكتب المحاماة
مكتب محاماة يضم 50 محامياً يمتلك آلاف العقود والأحكام القضائية والمراسلات. تحدياته: البحث اليدوي يستغرق ساعات، الأحكام المتعارضة تضيع في الأرشيف، المحامون الجدد يستغرقون أشهراً للتأهل.
الحل المُنفَّذ: نظام RAG يُفهرس 15,000 وثيقة قانونية بمتوسط 20 صفحة لكل وثيقة. استُخدم التقطيع الدلالي مع حجم 800 token للمحافظة على السياق القانوني الكامل لكل بند. تكاملٌ مع نظام إدارة الوثائق الموجود عبر API.
النتائج بعد 3 أشهر: وقت البحث انخفض من ساعتين إلى 30 ثانية. دقة الاسترجاع 94% بناءً على تقييم المحامين الخبراء. وقت تأهيل المحامين الجدد انخفض 60%. عائد الاستثمار تجاوز 400% خلال السنة الأولى.
النشر في بيئة الإنتاج
لنقل النظام من التطوير إلى الإنتاج، هناك اعتبارات حيوية يجب معالجتها:
نصائح الخبراء لبناء RAG احترافي
لا تبدأ مشروعك بـ Pinecone المدفوع. Chroma مجاني ومحلي يُمكّنك من اختبار كل شيء قبل الانتقال للإنتاج.
أضف أكبر قدر ممكن من البيانات الوصفية: تاريخ المستند، القسم، مستوى الوصول، الكاتب. تُمكّن من الفلترة الدقيقة وتحسين الدقة.
لا يوجد حجم مثالي عالمي. اختبر 256 و512 و1024 token وقيّم دقة كل منها على مجموعة أسئلة تمثيلية.
إضافة Cohere Reranker أو Voyage Reranker يرفع الدقة 15-25% في معظم التطبيقات. التكلفة منخفضة والتأثير كبير.
كلود يدعم Prompt Caching للسياق الطويل. للمستندات الثابتة التي تُستخدم كثيراً، Caching يُخفّض التكلفة 90%.
أضف دائماً منطق التحقق: إذا كانت أعلى نتيجة تشابه أقل من 0.7، أخبر المستخدم أن المعلومة غير موجودة بدلاً من الاختلاق.
أرقام العقود وأسماء المنتجات والمصطلحات التقنية الدقيقة تحتاج BM25 إلى جانب البحث الدلالي لضمان استرجاعها.
أنشئ مجموعة اختبار من 100 سؤال نموذجي وشغّلها أسبوعياً. أي انخفاض في المقاييس يُنبهك لمشكلة قبل أن تشكو منها المستخدمون.
الجواهر الخمسة — تطبيقات RAG المتقدمة
فهرسة كل سياسات الشركة وإجراءاتها يُمكّن الموظفين من الحصول على إجابات دقيقة على أسئلة HR في ثوانٍ دون إزعاج فريق الموارد البشرية، ويضمن اتساق الإجابات دائماً.
دمج RAG مع الأحكام القضائية والقوانين واللوائح يُنشئ مساعداً قانونياً يستشهد بالمواد الدقيقة ورقم القضية والصفحة — مستوى البحث القانوني المحترف في ثوانٍ.
RAG على توثيق المنتج وقاعدة أخطاء السابقة يحل 80% من تذاكر الدعم الفني تلقائياً، ويُحيل الـ 20% المعقدة للمهندسين مع ملخص كامل للمشكلة.
فهرسة التقارير المالية الفصلية والسنوية يُتيح لمحللي الاستثمار طرح أسئلة مقارنة معقدة عبر سنوات مختلفة والحصول على إجابات مرجعية في لحظات.
RAG على كاتالوج المنتجات وردود المنافسين ونصائح البيع وسيناريوهات الاعتراض يُحوّل RAG إلى مدرب مبيعات متاح 24/7 يُجيب على أسئلة الفريق قبل كل صفقة.
الأسئلة الشائعة
🧭 اكتشف المزيد
مواضيع مرتبطة من أقسام أخرى تُكمّل ما تعلمته