الفصل 2: Pinecone وWeaviate وChroma
Pinecone (مستضاف)
قاعدة بيانات متجهية مُدارة بالكامل:
from pinecone import Pinecone, ServerlessSpec
# Initialize
pc = Pinecone(api_key="your-api-key")
# Create index
pc.create_index(
name="rag-index",
dimension=1536,
metric="cosine",
spec=ServerlessSpec(cloud="aws", region="us-east-1")
)
# Connect
index = pc.Index("rag-index")
# Upsert vectors
index.upsert(vectors=[
{"id": "doc1", "values": embedding, "metadata": {"source": "doc.pdf"}}
])
# Query
results = index.query(vector=query_embedding, top_k=5, include_metadata=True)
| المزايا | العيوب |
|---|---|
| مُدار بالكامل | ارتباط بمورّد |
| سهل التوسيع | قد يكون مكلفًا |
| توثيق ممتاز | تغادر البيانات شبكتك |
التسعير: طبقة مجانية + دفع حسب الاستخدام
Weaviate (هجين)
مصدر مفتوح مع خيار سحابي:
import weaviate
# Connect
client = weaviate.Client(
url="http://localhost:8080",
# Or cloud: url="https://your-cluster.weaviate.cloud"
)
# Create schema
client.schema.create_class({
"class": "Document",
"vectorizer": "text2vec-openai",
"properties": [
{"name": "content", "dataType": ["text"]},
{"name": "source", "dataType": ["string"]}
]
})
# Add data
client.data_object.create(
data_object={"content": "...", "source": "doc.pdf"},
class_name="Document"
)
# Search
results = client.query.get("Document", ["content", "source"]) \
.with_near_text({"concepts": ["RAG systems"]}) \
.with_limit(5) \
.do()
الميزات:
- تحويل متجهي مدمج
- واجهة GraphQL
- بحث هجين (متجه + كلمات مفتاحية)
Chroma (تطوير محلي)
قاعدة بيانات خفيفة مضمّنة:
import chromadb
from chromadb.config import Settings
# Persistent storage
client = chromadb.PersistentClient(path="./chroma_db")
# Create collection
collection = client.create_collection(
name="documents",
metadata={"hnsw:space": "cosine"}
)
# Add documents
collection.add(
documents=["Document text..."],
embeddings=[embedding],
metadatas=[{"source": "doc.pdf"}],
ids=["doc1"]
)
# Query
results = collection.query(
query_embeddings=[query_embedding],
n_results=5,
where={"source": "doc.pdf"}
)
الأنسب لـ:
- التطوير المحلي
- النماذج الأولية
- الإنتاج صغير النطاق
جدول المقارنة
| الميزة | Pinecone | Weaviate | Chroma |
|---|---|---|---|
| الاستضافة | سحابة فقط | كلاهما | محلي/Docker |
| التسعير | دفع حسب الاستخدام | مجاني/سحابة | مجاني |
| النطاق | ممتاز | جيد | محدود |
| الإعداد | دقائق | ساعات | دقائق |
| الأنسب لـ | الإنتاج | المرونة | التطوير |
التكامل مع LangChain
from langchain.vectorstores import Pinecone, Weaviate, Chroma
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
# Pinecone
vectorstore = Pinecone.from_documents(docs, embeddings, index_name="my-index")
# Weaviate
vectorstore = Weaviate.from_documents(docs, embeddings, weaviate_url="...")
# Chroma
vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./db")
# Same interface for all
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
الخطوات التالية
تابع إلى الفصل 3: خيارات المصدر المفتوح.