Spaces:
Runtime error
Runtime error
| import os | |
| from pathlib import Path | |
| from langchain_community.document_loaders import TextLoader | |
| from langchain.text_splitter import RecursiveCharacterTextSplitter | |
| from langchain_huggingface import HuggingFaceEmbeddings | |
| from langchain_community.vectorstores import FAISS | |
| # المسارات | |
| BASE_DIR = Path(__file__).resolve().parent | |
| KB_DIR = BASE_DIR / "data" / "kb" | |
| PERSIST_DIR = BASE_DIR / ".faiss" | |
| # نموذج التضمين (يجب أن يكون نفس المستخدم في rag.py) | |
| EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2" | |
| def build_and_save_vectorstore(): | |
| print("🚀 بدء إنشاء قاعدة بيانات FAISS...") | |
| # 1. التحقق من وجود مجلد المعرفة | |
| if not KB_DIR.exists(): | |
| print(f"❌ مجلد المعرفة غير موجود: {KB_DIR}") | |
| return | |
| # 2. تحميل ملفات الـ Markdown | |
| documents = [] | |
| for md_file in KB_DIR.glob("*.md"): | |
| print(f" جاري قراءة: {md_file.name}") | |
| loader = TextLoader(str(md_file), encoding="utf-8") | |
| docs = loader.load() | |
| # إضافة اسم الملف كـ metadata | |
| for doc in docs: | |
| doc.metadata["source"] = md_file.name | |
| documents.extend(docs) | |
| if not documents: | |
| print("⚠️ لم يتم العثور على أي مستندات.") | |
| return | |
| # 3. تقسيم النصوص (Chunking) | |
| print("✂️ جاري تقسيم النصوص...") | |
| text_splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=500, | |
| chunk_overlap=50, | |
| length_function=len, | |
| ) | |
| chunks = text_splitter.split_documents(documents) | |
| print(f"✅ تم إنشاء {len(chunks)} قطعة نصية (Chunks).") | |
| # 4. تحميل نموذج التضمين (Embeddings) | |
| print("🧠 جاري تحميل نموذج التضمين (قد يستغرق وقتاً في المرة الأولى)...") | |
| embeddings = HuggingFaceEmbeddings( | |
| model_name=EMBEDDING_MODEL, | |
| model_kwargs={"device": "cpu"}, | |
| encode_kwargs={"normalize_embeddings": True} | |
| ) | |
| # 5. إنشاء قاعدة بيانات FAISS | |
| print("️ جاري بناء قاعدة بيانات FAISS...") | |
| vectorstore = FAISS.from_documents(chunks, embeddings) | |
| # 6. الحفظ على القرص | |
| if not PERSIST_DIR.exists(): | |
| PERSIST_DIR.mkdir(parents=True) | |
| print(f"💾 جاري الحفظ في: {PERSIST_DIR}") | |
| vectorstore.save_local(folder_path=str(PERSIST_DIR)) | |
| print("🎉 تم إنشاء قاعدة البيانات بنجاح!") | |
| if __name__ == "__main__": | |
| build_and_save_vectorstore() |