bot / build_vectorstore.py
Omarelrayes's picture
Create build_vectorstore.py
5327f2a verified
Raw
History Blame Contribute Delete
2.65 kB
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()