إنشاء “محادثة مع وثائقك” بـ LlamaIndex في 50 سطر
نموذج عملي بالعربية لاستيعاب وثائق وبناء محرك استعلام كامل بـ LlamaIndex.
مقدمة في بناء تطبيقات RAG بأقل كود ممكن
يتزايد الطلب على بناء تطبيقات المحادثة مع البيانات الداخلية بسرعة هائلة. بالنسبة للمطورين والباحثين، كتابة آلاف الأسطر البرمجية لبناء هذه الأنظمة ليس أمراً عملياً. هنا تبرز مكتبة LlamaIndex (سابقاً GPT Index) كأحد أسهل الأطر لبناء أنظمة RAG (الاسترجاع المعزز بالتوليد) في لغة البايثون. في هذا الدليل، سنقوم ببناء نظام “محادثة مع وثائقك” يعمل باللغة العربية بالاعتماد على Ollama (لتشغيل النموذج محلياً)، وكل ذلك في أقل من 50 سطراً برمجياً.
الأدوات والاعتماديات (Dependencies)
قبل البدء، ستحتاج إلى بيئة Python مثبتة، ونسخة من برنامج Ollama تعمل في الخلفية مع تحميل نموذج مناسب (مثل llama3). قم بتثبيت المكتبات المطلوبة عبر الأمر التالي في سطر الأوامر:
pip install llama-index llama-index-llms-ollama llama-index-embeddings-huggingface
كتابة الكود (في 50 سطر)
قم بإنشاء ملف Python جديد (مثلاً app.py) وضع الكود التالي:
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
# 1. إعداد النموذج اللغوي (LLM) باستخدام Ollama
llm = Ollama(model="llama3", request_timeout=120.0)
# 2. إعداد نموذج التضمين (Embedding Model) المخصص للغة العربية
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
# 3. تمرير الإعدادات إلى مكتبة LlamaIndex
Settings.llm = llm
Settings.embed_model = embed_model
Settings.chunk_size = 300 # حجم النص المقطوع
Settings.chunk_overlap = 30
# 4. قراءة الوثائق من مجلد محلي
print("جاري استيعاب الوثائق...")
# تأكد من وضع ملفاتك (PDF, TXT) في مجلد باسم "data"
documents = SimpleDirectoryReader("./data").load_data()
# 5. بناء الفهرس (Index) المتجهي
print("جاري بناء الفهرس...")
index = VectorStoreIndex.from_documents(documents)
# 6. إعداد محرك الاستعلام (Query Engine) مع تخصيص الموجه (Prompt) للعربية
query_engine = index.as_query_engine(similarity_top_k=3)
print("n--- النظام جاهز ---")
# 7. بدء حلقة المحادثة
while True:
question = input("nاطرح سؤالك (أو اكتب 'خروج' للإنهاء): ")
if question.strip() == "خروج":
break
# دمج تعليمات إجبارية للإجابة بالعربية
arabic_prompt = f"بناءً على الوثائق المتوفرة لديك، أجب باللغة العربية الواضحة على السؤال التالي:n{question}"
response = query_engine.query(arabic_prompt)
print("nالإجابة:n", response)
كيف يعمل هذا الكود؟
- SimpleDirectoryReader: يقرأ كل المستندات الموجودة في مجلد
dataبشكل آلي دون الحاجة لبرمجة دوال قراءة مخصصة. - HuggingFaceEmbedding: استخدمنا نموذجاً متعدد اللغات ليتمكن من تحويل النصوص العربية إلى متجهات رياضية دقيقة.
- VectorStoreIndex: يقوم ببناء قاعدة بيانات متجهات مصغرة ومؤقتة في الذاكرة لتخزين الوثائق (يمكن تبديلها بسهولة بقاعدة بيانات دائمة مثل Chroma).
الخلاصة
بفضل LlamaIndex و Ollama، أصبح تطوير محركات استعلام قوية على البيانات الخاصة عملية مباشرة وسريعة جداً. بـ 50 سطراً برمجياً فقط، تمتلك الآن تطبيقاً محلياً يحافظ على خصوصية وثائقك وقادراً على الإجابة عن أعقد أسئلتك باللغة العربية.