# Ce fichier vise à préparer les documents dans le RAG. # Une fois lancé, une base de données vectorielle locale sera générée from pathlib import Path from langchain_community.document_loaders import DirectoryLoader, TextLoader # Charge les docs from langchain_text_splitters import RecursiveCharacterTextSplitter # Divise le texte en chunks from langchain_huggingface import HuggingFaceEmbeddings # Tokénize le texte from langchain_chroma import Chroma # BDD, serait PG vector en prod' print("=== GENERATION DE LA BDD LOCALE ===") base_dir = Path(__file__).resolve().parent.parent # Dossier parent, où sont les données # Chargement de tous les documents txt du dossier docs/ try: loader = DirectoryLoader( path= base_dir.as_posix() + "/documents_projet/", glob="**/*.txt", loader_cls=TextLoader, show_progress=True) docs = loader.load() except FileNotFoundError: print("ERREUR: Le dossier \"documents_projet\" n'est pas présent ! Il faut l'ajouter à la racine du projet avant de lancer ce script.") import sys sys.exit(1) # J'arrête ici print(f"Documents chargés: {len(docs)}") # Maintenant que j'ai chargé les documents, je vais les découper en chunks # (taille d'un chunk = 500 caractères, chevauchement = 100 caractères) text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000/2, chunk_overlap=200/2) chunks = text_splitter.split_documents(docs) # Découpage des documents print(f"Ces documents ont été divisés en {len(chunks)} chunks de texte.") print("Exemple de chunk : ") print("===") print(chunks[-1]) print("===") # Création du modèle d'embeddings # https://docs.langchain.com/oss/python/integrations/text_embedding/huggingfacehub # https://huggingface.co/jinaai/jina-clip-v2 embeddings = HuggingFaceEmbeddings(model_name="jinaai/jina-embeddings-v3", model_kwargs={"trust_remote_code": True}) # Stockage des embeddings dans ChromaDB dans un dossier local "chroma_db" vectorstore = Chroma.from_documents(documents=chunks,embedding=embeddings, persist_directory=base_dir.as_posix()+"/chroma_db/",) # https://docs.langchain.com/oss/python/integrations/vectorstores/chroma print(f"Documents chargés et base de données créée à {base_dir.as_posix()+"/chroma_db/"} !")