bau-rag-backend / scripts /build_index.py
Thanhdat3010's picture
Deploy Llama-3.3-70b-versatile version to HF Spaces
a8d70e6
import json
import os
import sys
# Đảm bảo import được module app
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from app.config import CHROMA_DB_PATH, COLLECTION_NAME, EMBEDDING_MODEL
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
from langchain_core.documents import Document
def main():
# Cấu hình stdout sang UTF-8 để in tiếng Việt trên console Windows không bị lỗi
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8")
print(f"Đang tải mô hình embedding: {EMBEDDING_MODEL}...")
embeddings = HuggingFaceEmbeddings(
model_name=EMBEDDING_MODEL
)
print("Đang đọc dữ liệu từ data/tu_dien_nam_bo.jsonl...")
documents = []
jsonl_path = "data/tu_dien_nam_bo.jsonl"
if not os.path.exists(jsonl_path):
print(f"Lỗi: Không tìm thấy file dữ liệu tại {jsonl_path}")
sys.exit(1)
with open(jsonl_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
try:
entry = json.loads(line)
except Exception as e:
print(f"Bỏ qua dòng lỗi JSON: {e}")
continue
# Tạo text để embedding
text = f'"{entry["tu"]}" nghĩa là "{entry["nghia"]}"'
vi_du_list = entry.get("vi_du", [])
if vi_du_list and len(vi_du_list) > 0 and vi_du_list[0]:
text += f'. Ví dụ: {vi_du_list[0]}'
doc = Document(
page_content=text,
metadata={
"tu": entry["tu"],
"tu_hien_nay": entry.get("tu_hien_nay", ""),
"nghia": entry["nghia"],
"vi_du": json.dumps(vi_du_list, ensure_ascii=False),
"pos": json.dumps(entry.get("pos", []), ensure_ascii=False),
}
)
documents.append(doc)
print(f"Đọc thành công {len(documents)} mục từ điển. Đang lập chỉ mục và lưu vào ChromaDB tại {CHROMA_DB_PATH} (Quá trình này có thể mất vài phút)...")
# Tạo ChromaDB persistent
vector_store = Chroma.from_documents(
documents=documents,
embedding=embeddings,
persist_directory=CHROMA_DB_PATH,
collection_name=COLLECTION_NAME
)
print(f"Hoàn thành! Đã index {len(documents)} entries vào ChromaDB.")
if __name__ == "__main__":
main()