RAGدليل تعليميPythonقاعدة بيانات متجهات

بناء نظام RAG من الصفر: دليل عملي

212AY Team·2026-04-10·20 دقيقة

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

ما الذي نبني

نظام أسئلة وأجوبة للمستندات يمكنه الإجابة على أسئلتك حول ملفات PDF أو ملفات markdown أو أي مستندات نصية.

المتطلبات الأساسية

  • Python 3.10+
  • مفتاح OpenAI API (أو أي LLM API)
  • فهم أساسي للغة Python

الخطوة 1: الإعداد

mkdir rag-system && cd rag-system
python -m venv venv
source venv/bin/activate
pip install openai chromadb tiktoken pypdf

الخطوة 2: استيراد المستندات

import os
from typing import List
from pypdf import PdfReader

def load_documents(folder_path: str) -> List[str]:
    documents = []
    for filename in os.listdir(folder_path):
        if filename.endswith('.pdf'):
            reader = PdfReader(os.path.join(folder_path, filename))
            text = ""
            for page in reader.pages:
                text += page.extract_text()
            documents.append(text)
        elif filename.endswith('.txt') or filename.endswith('.md'):
            with open(os.path.join(folder_path, filename), 'r') as f:
                documents.append(f.read())
    return documents

الخطوة 3: التقطيع

def chunk_text(text: str, chunk_size=500, overlap=50) -> List[str]:
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end])
        start = end - overlap
    return chunks

الخطوة 4: إنشاء التضمينات والتخزين

import chromadb
from openai import OpenAI

client = OpenAI()
chroma_client = chromadb.Client()
collection = chroma_client.create_collection(name="documents")

def index_documents(chunks: List[str]):
    for i, chunk in enumerate(chunks):
        response = client.embeddings.create(
            model="text-embedding-3-small",
            input=chunk
        )
        embedding = response.data[0].embedding
        collection.add(
            embeddings=[embedding],
            documents=[chunk],
            ids=[str(i)]
        )

الخطوة 5: الاسترجاع والتوليد

def query_rag(question: str) -> str:
    # تضمين السؤال
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=question
    )
    query_embedding = response.data[0].embedding
    
    # استرجاع القطع ذات الصلة
    results = collection.query(
        query_embeddings=[query_embedding],
        n_results=3
    )
    
    context = "

".join(results['documents'][0])
    
    # توليد الإجابة
    completion = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "أجب على السؤال بناءً على السياق المقدم."},
            {"role": "user", "content": f"السياق:
{context}

السؤال: {question}"}
        ]
    )
    return completion.choices[0].message.content

الخطوة 6: النشر كواجهة API

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/query', methods=['POST'])
def query():
    data = request.json
    answer = query_rag(data['question'])
    return jsonify({'answer': answer})

if __name__ == '__main__':
    app.run(port=5000)

الخطوات التالية

  • أضف إعادة الترتيب لاسترجاع أفضل
  • طبق البحث الهجين (كلمات مفتاحية + دلالي)
  • أضف استشهادات بالمصادر للإجابات
  • جرب استراتيجيات تقطيع مختلفة

برنامجنا "ابنِ باستخدام LLMs" يغطي تقنيات RAG المتقدمة والنشر الإنتاجي.

أدلة ذات صلة

كيف تبني روبوت محادثة ذكي لشركتك

دليل خطوة بخطوة لبناء ونشر روبوت محادثة ذكي مخصص لخدمة العملاء، وتوليد العملاء المحتملين، والدعم الداخلي.

الرؤية الحاسوبية للمبتدئين: بناء مصنف صور

دليل صديق للمبتدئين في الرؤية الحاسوبية، يغطي تصنيف الصور، واكتشاف الأشياء، وبناء أول تطبيق رؤية ذكاء اصطناعي.

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

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