تصميم نظام RAG
اختيار قاعدة البيانات المتجهة
5 دقيقة للقراءة
اختيار قاعدة البيانات المتجهة الصحيحة أمر حاسم لأداء نظام RAG. يغطي هذا الدرس الخيارات الرئيسية وكيفية اختيار الأفضل لحالة استخدامك.
مشهد قواعد البيانات المتجهة
┌─────────────────────────────────────────────────────────────┐
│ خيارات قواعد البيانات المتجهة │
├─────────────────────────────────────────────────────────────┤
│ │
│ الخدمات المُدارة │ الاستضافة الذاتية │
│ ────────────────────── │ ───────────────────────── │
│ • Pinecone │ • Milvus │
│ • Weaviate Cloud │ • Qdrant │
│ • Zilliz Cloud │ • Chroma │
│ │ • Weaviate │
│ امتدادات قواعد البيانات │ │
│ ────────────────────── │ في الذاكرة │
│ • pgvector (PostgreSQL) │ ───────────────────────── │
│ • Atlas Vector (MongoDB) │ • FAISS │
│ │ • Annoy │
│ │
└─────────────────────────────────────────────────────────────┘
جدول المقارنة
| قاعدة البيانات | الأفضل لـ | النطاق | التصفية | مُدارة |
|---|---|---|---|---|
| Pinecone | الإنتاج، سهولة الاستخدام | مليارات | جيدة | نعم |
| Qdrant | التصفية، الاستضافة الذاتية | مليارات | ممتازة | اختياري |
| Milvus | الأداء العالي | مليارات | جيدة | اختياري |
| pgvector | مستخدمو PostgreSQL | ملايين | أصلية SQL | عبر مزودين |
| Weaviate | GraphQL، البحث الهجين | مليارات | جيدة | اختياري |
| Chroma | النماذج الأولية، نطاق صغير | آلاف | أساسية | لا |
Pinecone
نقاط القوة:
- مُدارة بالكامل، صفر عمليات
- خيار التسعير بدون خادم
- API بسيطة
from pinecone import Pinecone
# التهيئة
pc = Pinecone(api_key="your-key")
index = pc.Index("documents")
# إدراج المتجهات
index.upsert(
vectors=[
{
"id": "doc1",
"values": embedding,
"metadata": {"source": "manual.pdf", "page": 5}
}
],
namespace="product-docs"
)
# الاستعلام
results = index.query(
vector=query_embedding,
top_k=10,
namespace="product-docs",
filter={"source": {"$eq": "manual.pdf"}}
)
الاعتبارات:
- الارتباط بالمورد
- التكاليف تتناسب مع المتجهات المخزنة
- تصفية محدودة مقارنة بـ Qdrant
Qdrant
نقاط القوة:
- قدرات تصفية ممتازة
- مفتوح المصدر مع خيار سحابي
- دعم حمولة غني
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
client = QdrantClient(url="http://localhost:6333")
# إنشاء مجموعة
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
# الإدراج
client.upsert(
collection_name="documents",
points=[
PointStruct(
id=1,
vector=embedding,
payload={
"source": "manual.pdf",
"page": 5,
"category": "technical"
}
)
]
)
# الاستعلام مع تصفية معقدة
results = client.search(
collection_name="documents",
query_vector=query_embedding,
query_filter={
"must": [
{"key": "category", "match": {"value": "technical"}},
{"key": "page", "range": {"gte": 1, "lte": 10}}
]
},
limit=10
)
الاعتبارات:
- الاستضافة الذاتية تتطلب DevOps
- خيار سحابي متاح لكنه أحدث
pgvector
نقاط القوة:
- PostgreSQL مألوف
- ضم SQL مع البحث المتجه
- بنية تحتية موجودة
import psycopg2
# تمكين الامتداد
cursor.execute("CREATE EXTENSION IF NOT EXISTS vector")
# إنشاء جدول
cursor.execute("""
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536),
metadata JSONB
)
""")
# إنشاء فهرس للبحث الأسرع
cursor.execute("""
CREATE INDEX ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100)
""")
# الاستعلام
cursor.execute("""
SELECT id, content, metadata,
1 - (embedding <=> %s) AS similarity
FROM documents
WHERE metadata->>'category' = 'technical'
ORDER BY embedding <=> %s
LIMIT 10
""", (query_embedding, query_embedding))
الاعتبارات:
- نطاق محدود (ملايين، ليس مليارات)
- وقت بناء الفهرس على مجموعات البيانات الكبيرة
- رائع للتطبيقات الصغيرة إلى المتوسطة
إطار الاختيار
شجرة القرار
البداية
│
├─ تحتاج مليارات المتجهات؟
│ ├─ نعم ──▶ Pinecone أو Milvus
│ └─ لا ───▶ تابع
│
├─ تحتاج تصفية معقدة؟
│ ├─ نعم ──▶ Qdrant
│ └─ لا ───▶ تابع
│
├─ تستخدم PostgreSQL بالفعل؟
│ ├─ نعم ──▶ pgvector
│ └─ لا ───▶ تابع
│
├─ تحتاج صفر عمليات؟
│ ├─ نعم ──▶ Pinecone
│ └─ لا ───▶ Qdrant أو Milvus
│
└─ نموذج أولي فقط؟
├─ نعم ──▶ Chroma
└─ لا ───▶ Qdrant
مقارنة التكلفة (100 مليون متجه)
| المزود | التكلفة الشهرية | ملاحظات |
|---|---|---|
| Pinecone | $700-2000 | بدون خادم أو قائم على البودات |
| Qdrant Cloud | $500-1500 | بناءً على حجم المجموعة |
| استضافة ذاتية | $200-500 | الحوسبة + التخزين |
| pgvector | $100-300 | قاعدة البيانات الموجودة قد تعمل |
نصيحة للمقابلة
عند مناقشة قواعد البيانات المتجهة، دائماً اذكر:
- متطلبات النطاق - ملايين مقابل مليارات
- احتياجات التصفية - استعلامات البيانات الوصفية
- التعقيد التشغيلي - مُدار مقابل استضافة ذاتية
- التكلفة على نطاق واسع - أظهر أنك تفهم الاقتصاديات
بعد ذلك، سنستكشف استراتيجيات الاسترجاع الهجين التي تجمع بين الاسترجاع الكثيف والمتناثر. :::