Files
Projet-Agent-IA/RAG/init.py
LJ5O 1c2f0728ea Passage Jina -> intfloat/multilingual-e5-large
Jina me donne toujours RuntimeError: The size of tensor a (5) must match the size of tensor b (4) at non-singleton dimension 1
2026-02-06 17:38:27 +01:00

51 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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="intfloat/multilingual-e5-large", 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/"} !")