ملخص سريع
- قم بتثبيت LlamaIndex في دقيقتين باستخدام
pip install llama-index(Python) أوnpm install llamaindex(TypeScript) الدليل الكامل. - حمّل المستندات من أكثر من 200 مصدر (PDF، SQL، Notion) وحولها إلى عقد منظمة محملات البيانات.
- أنشئ مسارات RAG جاهزة للإنتاج باستخدام البحث الهجين (المتجهات + الكلمات الرئيسية) وإعادة الترتيب دليل RAG.
- انشر مع إمكانية المراقبة (Arize، LangSmith) وقم بالتوسع باستخدام LlamaCloud التسجيل.
- ملاحظات هامة: الفهارس الكبيرة تحتاج إلى 16 جيجابايت أو أكثر من ذاكرة الوصول العشوائي؛ يتطلب RAG متعدد الوسائط واجهات برمجة تطبيقات مدفوعة تكاليف الوسائط المتعددة.
1. التثبيت والبدء السريع
Python (LlamaIndex.Py)
# تثبيت الحزمة الأساسية (التبعيات الدنيا)
pip install llama-index-core
# تثبيت الحزمة الكاملة (يتضمن الوسائط المتعددة، الوكلاء، إلخ.)
pip install llama-index
# التحقق من التثبيت
python -c "from llama_index.core import VectorStoreIndex; print('LlamaIndex v0.10.28 جاهز')"
# المخرج المتوقع: LlamaIndex v0.10.28 جاهز
تم التحقق من الإصدار من إصدارات GitHub.
ملاحظات هامة:
- إذا ظهرت رسالة
ImportError: No module named 'llama_index'، تأكد من استخدام Python 3.9+ وبيئة افتراضية. - لتسريع وحدة معالجة الرسومات، قم بتثبيت PyTorch أولاً:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118.
TypeScript (LlamaIndex.TS)
npm install llamaindex
# أو
yarn add llamaindex
# التحقق من التثبيت
node -e "const { VectorStoreIndex } = require('llamaindex'); console.log('LlamaIndex.TS v0.3.12 جاهز')"
# المخرج المتوقع: LlamaIndex.TS v0.3.12 جاهز
دعم TypeScript موثق في دليل TS.
2. تحميل المستندات وتحليلها
تحميل ملف PDF وتحليله إلى عقد
from llama_index.core import SimpleDirectoryReader
# تحميل المستندات من مجلد (يدعم PDF، DOCX، CSV، إلخ.)
documents = SimpleDirectoryReader("data/").load_data()
print(f"تم تحميل {len(documents)} مستندات")
# المخرج المتوقع: تم تحميل 3 مستندات
# تحليل إلى عقد (أجزاء مع بيانات وصفية)
from llama_index.core.node_parser import SentenceSplitter
parser = SentenceSplitter(chunk_size=512, chunk_overlap=20)
nodes = parser.get_nodes_from_documents(documents)
print(f"تم إنشاء {len(nodes)} عقد")
# المخرج المتوقع: تم إنشاء 42 عقدة
توثيق محملات البيانات متاح في محملات البيانات.
الميزات الرئيسية:
- أكثر من 200 موصل بيانات: التحميل من Notion، Slack، SQL، وأكثر محملات البيانات.
- LlamaParse: واجهة برمجة تطبيقات مدفوعة لتحليل ملفات PDF المعقدة (الجداول، التخطيطات متعددة الأعمدة). متوفر نسخة مجانية LlamaParse.
from llama_parse import LlamaParse parser = LlamaParse(api_key="llx-...", result_type="markdown") documents = parser.load_data("data/report.pdf")
ملاحظات هامة:
- قد تتعطل ملفات PDF الكبيرة (>100 صفحة) مع
SimpleDirectoryReader. استخدمLlamaParseللحصول على نتائج أفضل LlamaParse. - لقواعد البيانات SQL، استخدم
SQLTableRetrieverQueryEngineلإنشاء استعلامات تلقائياً من اللغة الطبيعية.
3. أنواع الفهارس
فهرس المتجهات (الافتراضي لـ RAG)
from llama_index.core import VectorStoreIndex
# إنشاء فهرس متجهات (يستخدم تضمينات OpenAI افتراضياً)
index = VectorStoreIndex.from_documents(documents)
# الحفظ على القرص
index.storage_context.persist("storage/")
المخرج المتوقع:
INFO:llama_index.core.storage.storage_context:تم حفظ VectorStoreIndex في storage/
فهرس الكلمات الرئيسية (البحث المعجمي)
from llama_index.core import KeywordTableIndex
keyword_index = KeywordTableIndex.from_documents(documents)
فهرس الشجرة (التلخيص الهرمي)
from llama_index.core import TreeIndex
tree_index = TreeIndex.from_documents(documents)
# الاستعلام مع اجتياز فرع فرعي
query_engine = tree_index.as_query_engine(child_branch_factor=2)
response = query_engine.query("لخص النقاط الرئيسية")
print(response)
متى تستخدم أي نوع:
| نوع الفهرس | حالة الاستخدام | المزايا | العيوب |
|---|---|---|---|
| المتجهات | البحث الدلالي، RAG. | دقة عالية، يدعم البحث الهجين. | أبطأ مع مجموعات البيانات الكبيرة. |
| الكلمات الرئيسية | البحث المعجمي (مثلاً، التطابقات الدقيقة). | سريع، لا يحتاج إلى تضمينات. | لا يفهم الدلالات. |
| الشجرة | البيانات الهرمية (مثلاً، المستندات القانونية). | يحافظ على الهيكل. | الاستعلامات المعقدة. |
ملاحظات هامة:
- تتطلب فهارس المتجهات نموذج تضمين (افتراضي: OpenAI's
text-embedding-3-small). للتضمينات المحلية، استخدمHuggingFaceEmbedding:from llama_index.embeddings.huggingface import HuggingFaceEmbedding embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5") index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
4. إعداد محرك الاستعلام
محرك الاستعلام الأساسي
query_engine = index.as_query_engine()
response = query_engine.query("ما هي مخاطر الذكاء الاصطناعي في عام 2026؟")
print(response)
المخرج المتوقع:
تشمل مخاطر الذكاء الاصطناعي في عام 2026:
1. إزاحة الوظائف في الصناعات الإبداعية.
2. زيادة المعلومات المضللة عبر التزييف العميق.
3. فجوات تنظيمية في النماذج متعددة الوسائط.
المصدر: data/report.pdf (صفحة 42)
البحث الهجين (المتجهات + الكلمات الرئيسية)
from llama_index.core import QueryBundle
from llama_index.core.retrievers import BaseRetriever
class HybridRetriever(BaseRetriever):
def __init__(self, vector_index, keyword_index):
self.vector_retriever = vector_index.as_retriever()
self.keyword_retriever = keyword_index.as_retriever()
def _retrieve(self, query_bundle: QueryBundle):
vector_nodes = self.vector_retriever.retrieve(query_bundle)
keyword_nodes = self.keyword_retriever.retrieve(query_bundle)
return vector_nodes + keyword_nodes
retriever = HybridRetriever(index, keyword_index)
query_engine = index.as_query_engine(retriever=retriever)
تقنيات الاسترجاع المتقدمة موثقة في دليل RAG.
ملاحظات هامة:
- يضيف البحث الهجين حوالي 200-500 مللي ثانية من زمن الاستجابة. استخدم
similarity_top_k=2للحد من النتائج. - للإنتاج، أضف مُعيد ترتيب (مثلاً،
CohereRerank):from llama_index.postprocessor.cohere_rerank import CohereRerank reranker = CohereRerank(api_key="...", top_n=3) query_engine = index.as_query_engine(node_postprocessors=[reranker])
5. أدوات الاسترجاع المخصصة
بناء أداة استرجاع تعتمد على الوقت
from llama_index.core import get_response_synthesizer
from llama_index.core.retrievers import BaseRetriever
from llama_index.core.schema import NodeWithScore
from typing import List
class TimeBasedRetriever(BaseRetriever):
def __init__(self, index, time_field="date"):
self.index = index
self.time_field = time_field
def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]:
# تصفية العقد حسب الوقت (مثلاً، "المستندات من 2025-2026")
nodes = self.index.docstore.get_nodes()
filtered_nodes = [
node for node in nodes
if node.metadata.get(self.time_field, "").startswith("2025")
]
return [NodeWithScore(node=node, score=1.0) for node in filtered_nodes]
retriever = TimeBasedRetriever(index)
query_engine = index.as_query_engine(retriever=retriever)
حالات الاستخدام:
- ASSESS (إطار تقييم أمن الذكاء الاصطناعي): استرجاع السجلات من نافذة زمنية محددة لتقييم التعرض.
- COMPLY: تصفية المستندات حسب علامات الامتثال (مثلاً، "GDPR"، "HIPAA").
6. التقييم والمقاييس
تشغيل تقييم RAG
from llama_index.core.evaluation import (
generate_question_context_pairs,
EmbeddingQAFinetuneDataset,
)
from llama_index.evaluation import RetrieverEvaluator
# توليد أزواج أسئلة وأجوبة اصطناعية
qa_dataset = generate_question_context_pairs(documents, num_questions_per_chunk=2)
# تقييم أداة الاسترجاع
retriever = index.as_retriever(similarity_top_k=2)
evaluator = RetrieverEvaluator.from_metric_names(
["mrr", "hit_rate"], retriever=retriever
)
eval_results = await evaluator.aevaluate_dataset(qa_dataset)
print(eval_results)
المخرج المتوقع:
{'mrr': 0.85, 'hit_rate': 0.92}
المقاييس الرئيسية:
| المقياس | الوصف | القيمة المستهدفة |
|---|---|---|
| MRR | متوسط الرتبة المتبادلة. | >0.8 |
| Hit Rate | نسبة الاستعلامات ذات النتائج ذات الصلة. | >0.9 |
| الوفاء | نسبة الاستجابات المستندة إلى السياق. | >0.95 |
ملاحظات هامة:
- يتطلب توليد أزواج الأسئلة والأجوبة الاصطناعية نموذج LLM (افتراضي: OpenAI). للتقييم المحلي، استخدم
LlamaCPP:from llama_index.llms.llama_cpp import LlamaCPP llm = LlamaCPP(model_path="models/llama-2-7b.Q4_K_M.gguf") qa_dataset = generate_question_context_pairs(documents, llm=llm)
7. نصائح النشر للإنتاج
النشر باستخدام FastAPI
from fastapi import FastAPI
from llama_index.core import VectorStoreIndex
from pydantic import BaseModel
app = FastAPI()
index = VectorStoreIndex.from_documents(documents)
class QueryRequest(BaseModel):
query: str
@app.post("/query")
async def query_index(request: QueryRequest):
query_engine = index.as_query_engine()
response = query_engine.query(request.query)
return {"response": str(response)}
# التشغيل باستخدام: uvicorn app:app --reload
المخرج المتوقع (API):
{
"response": "تشمل مخاطر الذكاء الاصطناعي في عام 2026 إزاحة الوظائف والمعلومات المضللة."
}
إمكانية المراقبة باستخدام Arize
from llama_index.core.callbacks import CallbackManager
from llama_index.callbacks.arize_ai import ArizeCallbackHandler
arize_callback = ArizeCallbackHandler(
api_key="...",
space_key="...",
)
callback_manager = CallbackManager([arize_callback])
index = VectorStoreIndex.from_documents(
documents, callback_manager=callback_manager
)
ميزات إمكانية المراقبة موثقة في المراقبة.
التوسع باستخدام LlamaCloud
from llama_index.indices.managed.llama_cloud import LlamaCloudIndex
index = LlamaCloudIndex.from_documents(
documents,
name="my-production-index",
project_name="my-project",
api_key="llx-...",
)
توثيق LlamaCloud متاح في التسجيل.
ملاحظات هامة:
- فهارس LlamaCloud هي متسقة في النهاية (قد تستغرق التحديثات حوالي دقيقة).
- لـ RAG متعدد الوسائط، استخدم
LlamaCloudMultiModalIndexالوسائط المتعددة.
بدائل على لمحة
| الأداة | الأفضل لـ | القيد الرئيسي |
|---|---|---|
| LlamaIndex | تطبيقات RAG المؤسسية ومتعددة الوسائط. | نسخة TypeScript أقل نضجاً خريطة طريق TS |
