دليل UltraRAG الشامل: بناء أنظمة RAG المتقدمة باستخدام إطار العمل منخفض الأكواد
⏱️ وقت القراءة المتوقع: 15 دقيقة
مقدمة عن UltraRAG
UltraRAG 2.0 هو إطار عمل ثوري منخفض الأكواد قائم على MCP (بروتوكول سياق النموذج) طورته OpenBMB. بشعار “أكواد أقل، حاجز أدنى، نشر أسرع”، يمكّن UltraRAG الباحثين والمطورين من بناء خطوط أنابيب RAG معقدة بجهد برمجة أدنى.
الخصائص الرئيسية
- إطار عمل منخفض الأكواد: بناء أنظمة RAG متطورة باستخدام ملفات تكوين YAML
- تكامل MCP: الاستفادة من بروتوكول سياق النموذج للتواصل السلس بين النماذج
- دعم واسع لمجموعات البيانات: دعم مدمج لأكثر من 17 مجموعة بيانات تقييم شائعة
- طرق خط أساس متعددة: تنفيذ مسبق لأحدث أساليب RAG
- دعم Docker: نشر سهل وبيئات حاويات
- معمارية نمطية: مكونات خط أنابيب مرنة للتخصيص
طرق خط الأساس المدعومة
يأتي UltraRAG مع طرق RAG متقدمة مُنفّذة مسبقاً:
- Vanilla RAG: الجيل المعزز بالاسترجاع الأساسي
- IRCoT: تداخل الاسترجاع مع سلسلة الأفكار
- IterRetGen: الاسترجاع والجيل التكراري
- RankCoT: سلسلة الأفكار القائمة على التصنيف
- R1-searcher: منهجية بحث متقدمة
- Search-o1: خوارزمية بحث محسّنة
- Search-r1: منهج بحث مُحدّث
- WebNote: تكامل تدوين الملاحظات القائم على الويب
المتطلبات المسبقة
قبل البدء، تأكد من أن نظامك يلبي هذه المتطلبات:
# متطلبات النظام
- Python 3.9+
- دعم CUDA (اختياري، لتسريع GPU)
- Docker (اختياري، للنشر المحوسب)
- Git لاستنساخ المستودع
دليل التثبيت
الطريقة 1: استخدام مدير الحزم UV (موصى)
يستخدم UltraRAG مدير الحزم الحديث uv
لحل التبعيات والتثبيت بشكل أسرع.
الخطوة 1: تثبيت مدير الحزم UV
# تثبيت uv إذا لم يكن مثبتاً بالفعل
curl -LsSf https://astral.sh/uv/install.sh | sh
# إنعاش الشل أو تشغيل:
source ~/.bashrc # أو ~/.zshrc لمستخدمي zsh
الخطوة 2: استنساخ المستودع
# استنساخ مستودع UltraRAG
git clone https://github.com/OpenBMB/UltraRAG.git
cd UltraRAG
الخطوة 3: تثبيت التبعيات
اختر خيار التثبيت الذي يناسب احتياجاتك:
# التثبيت الأساسي (تبعيات أدنى)
uv pip install -e .
# لدعم استضافة LLM (يتضمن vLLM)
uv pip install -e ".[vllm]"
# لقدرات تحليل المستندات
uv pip install -e ".[corpus]"
# التثبيت الكامل (جميع الميزات عدا FAISS)
uv pip install -e ".[all]"
الخطوة 4: التحقق من التثبيت
# اختبار التثبيت
ultrarag run examples/sayhello.yaml
الإخراج المتوقع:
Hello, UltraRAG 2.0!
مرحباً بك في إطار عمل RAG المتقدم!
الطريقة 2: تثبيت Docker
للنشر المحوسب وإدارة البيئة الأسهل:
الخطوة 1: بناء صورة Docker
# استنساخ والانتقال إلى دليل UltraRAG
git clone https://github.com/OpenBMB/UltraRAG.git
cd UltraRAG
# بناء صورة Docker
docker build -t ultrarag:v2.0.0-beta .
الخطوة 2: تشغيل حاوية تفاعلية
# بدء حاوية Docker تفاعلية مع دعم GPU
docker run -it --rm --gpus all ultrarag:v2.0.0-beta bash
# داخل الحاوية، التحقق من التثبيت
ultrarag run examples/sayhello.yaml
الاستخدام الأساسي: خط أنابيب RAG الأول
فهم سير عمل UltraRAG
يتبع UltraRAG عملية بسيطة من ثلاث خطوات:
- تجميع خط الأنابيب: توليد تكوين المعاملات من YAML
- تعديل المعاملات: تخصيص الإعدادات حسب الحاجة
- تشغيل خط الأنابيب: تنفيذ نظام RAG المكوّن
المثال 1: RAG الأساسي
لنبدأ بتنفيذ vanilla RAG بسيط:
الخطوة 1: فحص التكوين
# عرض مثال RAG الأساسي
cat examples/rag.yaml
الخطوة 2: تجميع خط الأنابيب
# توليد معاملات التكوين
ultrarag compile examples/rag.yaml
ينشئ هذا ملف rag_params.yaml
مع جميع المعاملات القابلة للتكوين.
الخطوة 3: تخصيص المعاملات (اختياري)
# تحرير ملف المعاملات المُولّد
nano rag_params.yaml
# المعاملات الرئيسية للتخصيص:
# - model_name: نموذج LLM للاستخدام
# - retriever_name: نموذج التضمين للاسترجاع
# - corpus_path: مسار مجموعة المستندات
# - dataset_path: موقع مجموعة بيانات التقييم
الخطوة 4: تشغيل خط الأنابيب
# تنفيذ خط أنابيب RAG
ultrarag run examples/rag.yaml
المثال 2: RAG متقدم مع سلسلة الأفكار
لنطبق نظام RAG أكثر تطوراً باستخدام IRCoT (تداخل الاسترجاع مع سلسلة الأفكار):
# تجميع خط أنابيب IRCoT
ultrarag compile examples/IRCoT.yaml
# تشغيل نظام IRCoT RAG
ultrarag run examples/IRCoT.yaml
العمل مع مجموعات البيانات والمجموعات النصية
مجموعات بيانات التقييم المدعومة
يوفر UltraRAG دعماً مدمجاً لـ 17 مجموعة بيانات شائعة:
نوع مجموعة البيانات | اسم مجموعة البيانات | الحجم الأصلي | عينة التقييم |
---|---|---|---|
سؤال وجواب | Natural Questions (NQ) | 3,610 | 1,000 |
سؤال وجواب | TriviaQA | 11,313 | 1,000 |
سؤال وجواب | PopQA | 14,267 | 1,000 |
سؤال وجواب متعدد الخطوات | HotpotQA | 7,405 | 1,000 |
سؤال وجواب متعدد الخطوات | 2WikiMultiHopQA | 12,576 | 1,000 |
خيارات متعددة | ARC | 3,548 | 1,000 |
خيارات متعددة | MMLU | 14,042 | 1,000 |
سؤال وجواب طويل | ASQA | 948 | 948 |
التحقق من الحقائق | FEVER | 13,332 | 1,000 |
استخدام مجموعات بيانات مخصصة
لاستخدام مجموعة البيانات الخاصة بك، اتبع تنسيق بيانات UltraRAG:
{
"id": "معرف_السؤال_الفريد",
"question": "نص السؤال",
"answers": ["الإجابة1", "الإجابة2"],
"context": "معلومات_السياق_الاختيارية"
}
إعداد مجموعة المستندات
الخيار 1: استخدام مجموعة نصية مُعدّة مسبقاً
# تحميل مجموعة wiki-2018 (أكثر من 21 مليون مستند)
# اتبع تعليمات تحميل مجموعة البيانات في الوثائق
الخيار 2: إنشاء مجموعة نصية مخصصة
# إنشاء دليل مجموعة المستندات
mkdir -p data/my_corpus
# إضافة مستنداتك (ملفات نصية)
# UltraRAG يدعم تنسيقات متنوعة: .txt, .pdf, .docx
cp your_documents/* data/my_corpus/
نشر أجهزة الاسترجاع ونماذج اللغة الكبيرة
إعداد خادم الاسترجاع
يمكن لـ UltraRAG نشر خدمات الاسترجاع لفهرسة المجموعة النصية والبحث:
# بدء خادم الاسترجاع
ultrarag serve retriever \
--model_name BAAI/bge-m3 \
--corpus_path data/wiki-2018 \
--port 8001
نشر خدمات نماذج اللغة الكبيرة
نشر نماذج اللغة باستخدام خلفية vLLM:
# نشر خادم LLM متوافق مع OpenAI
ultrarag serve llm \
--model_name Qwen/Qwen2.5-72B-Instruct \
--port 8000 \
--gpu_memory_utilization 0.8
استخدام خدمات API خارجية
تكوين UltraRAG لاستخدام APIs خارجية:
# في تكوين خط الأنابيب
llm:
provider: "openai"
api_key: "your_api_key"
model: "gpt-4"
base_url: "https://api.openai.com/v1"
retriever:
provider: "custom"
endpoint: "http://your-retriever-service:8001"
أمثلة التكوين المتقدم
المثال 3: التفكير متعدد الخطوات مع IterRetGen
# examples/advanced_iterretgen.yaml
pipeline:
name: "iterative_retrieval_generation"
components:
- retriever:
model: "BAAI/bge-m3"
top_k: 10
iterations: 3
- llm:
model: "Qwen/Qwen2.5-72B-Instruct"
temperature: 0.1
max_tokens: 1024
- reasoning:
strategy: "iterative"
max_iterations: 5
convergence_threshold: 0.95
evaluation:
dataset: "hotpotqa"
metrics: ["exact_match", "f1_score", "retrieval_precision"]
المثال 4: استراتيجية بحث مخصصة
# examples/custom_search.yaml
pipeline:
name: "custom_search_rag"
components:
- search:
strategy: "search-o1"
search_depth: 3
query_expansion: true
rerank_threshold: 0.7
- retriever:
model: "sentence-transformers/all-MiniLM-L6-v2"
chunk_size: 512
chunk_overlap: 50
- generator:
model: "microsoft/DialoGPT-large"
response_length: "medium"
تحسين الأداء
إعداد تسريع GPU
# التحقق من توفر CUDA
python -c "import torch; print(f'CUDA متوفر: {torch.cuda.is_available()}')"
# تكوين إعدادات GPU في خط الأنابيب
gpu_config:
enabled: true
device_map: "auto"
memory_fraction: 0.8
mixed_precision: true
تحسين الذاكرة
# في تكوين خط الأنابيب
optimization:
batch_size: 8
gradient_checkpointing: true
cpu_offload: true
memory_efficient_attention: true
التصحيح واستكشاف الأخطاء
المشاكل الشائعة والحلول
المشكلة 1: نفاد ذاكرة CUDA
# الحل: تقليل حجم الدفعة أو استخدام إلغاء تحميل CPU
# في التكوين:
optimization:
batch_size: 2
cpu_offload: true
المشكلة 2: أداء استرجاع بطيء
# الحل: استخدام البحث التقريبي أو تقليل حجم المجموعة النصية
retriever:
search_type: "approximate"
index_type: "faiss"
nprobe: 10
المشكلة 3: أخطاء تحميل النموذج
# الحل: التحقق من توفر النموذج والأذونات
# التحقق من تحميل النموذج:
huggingface-cli download Qwen/Qwen2.5-7B-Instruct
وضع التصحيح
تفعيل التسجيل المفصل لاستكشاف الأخطاء:
# التشغيل مع إخراج التصحيح
ultrarag run examples/rag.yaml --debug --verbose
# فحص السجلات
tail -f logs/ultrarag.log
التكامل مع أدوات أخرى
تكامل Jupyter Notebook
# في دفتر Jupyter
import ultrarag
# تحميل وتشغيل خط الأنابيب
pipeline = ultrarag.load_pipeline("examples/rag.yaml")
results = pipeline.run(question="ما هو التعلم الآلي؟")
print(results)
تكامل API
# استخدام RESTful API
import requests
response = requests.post(
"http://localhost:8000/v1/chat/completions",
json={
"model": "ultrarag",
"messages": [{"role": "user", "content": "اشرح الحوسبة الكمية"}],
"rag_enabled": True
}
)
أفضل الممارسات
1. إدارة التكوين
- استخدم إدارة الإصدارات لتكوينات خط الأنابيب
- احتفظ بتكوينات منفصلة للتطوير والإنتاج
- وثّق المعاملات المخصصة وتأثيراتها
2. إعداد البيانات
- ضمان تنسيق مستندات متسق
- تنفيذ معالجة مسبقة مناسبة للنص
- استخدام أحجام قطع مناسبة لمجالك
3. استراتيجية التقييم
- وضع مقاييس خط أساس قبل التحسين
- استخدام مجموعات بيانات تقييم متعددة
- تطبيق اختبار A/B لتغييرات التكوين
4. إدارة الموارد
- مراقبة استخدام ذاكرة GPU
- تنفيذ استراتيجيات تخزين مؤقت مناسبة
- استخدام معالجة الدفعات للتقييم واسع النطاق
النشر في الإنتاج
إعداد Docker Compose
# docker-compose.yml
version: '3.8'
services:
ultrarag-api:
image: ultrarag:v2.0.0-beta
ports:
- "8000:8000"
environment:
- CUDA_VISIBLE_DEVICES=0
volumes:
- ./data:/app/data
- ./configs:/app/configs
command: ultrarag serve api --config configs/production.yaml
retriever:
image: ultrarag:v2.0.0-beta
ports:
- "8001:8001"
command: ultrarag serve retriever --port 8001
نشر Kubernetes
# k8s-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ultrarag-deployment
spec:
replicas: 3
selector:
matchLabels:
app: ultrarag
template:
metadata:
labels:
app: ultrarag
spec:
containers:
- name: ultrarag
image: ultrarag:v2.0.0-beta
ports:
- containerPort: 8000
resources:
requests:
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
الخلاصة
يمثل UltraRAG 2.0 تقدماً مهماً في جعل أنظمة RAG متاحة للباحثين والمطورين. بنهجه منخفض الأكواد ودعمه الواسع لخطوط الأساس ومعماريته المرنة، يمكنك إنشاء نماذج أولية بسرعة ونشر تطبيقات RAG متطورة.
النقاط الرئيسية
- إعداد سهل: تثبيت سريع مع uv أو Docker
- نظام بيئي غني: أكثر من 17 مجموعة بيانات وطرق خط أساس متعددة
- تكوين مرن: تعريف خط أنابيب قائم على YAML
- جاهز للإنتاج: خيارات نشر Docker و Kubernetes
- ودود للبحث: أدوات تقييم وتصحيح مدمجة
الخطوات التالية
- تجربة طرق خط أساس مختلفة
- اختبار على مجموعات بيانات خاصة بمجالك
- تخصيص أجهزة الاسترجاع والمولدات لحالة الاستخدام الخاصة بك
- النشر في الإنتاج مع المراقبة والتوسع
للميزات المتقدمة والتحديثات الأحدث، تفضل بزيارة وثائق UltraRAG الرسمية ومستودع GitHub.
غطى هذا الدليل الجوانب الأساسية لـ UltraRAG 2.0. للتفاصيل التنفيذية المحددة والتكوينات المتقدمة، راجع الوثائق الرسمية ومستودعات الأمثلة.