Documents chargés dans Chroma

This commit is contained in:
2026-02-05 11:54:40 +01:00
parent 6795fdc7fa
commit 33f54e8e30
3 changed files with 73 additions and 1 deletions

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@ mlflow.db
# Par sécurité # Par sécurité
documents_projet/ documents_projet/
chroma_db/
# Python # Python
__pycache__/ __pycache__/

51
RAG/init.py Normal file
View File

@@ -0,0 +1,51 @@
# 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/"} !")

View File

@@ -3,4 +3,24 @@
**Les documents liés au projet ne sont pas inclus dans ce repo, il faut les ajouter à la racine dans "documents_projet/" !** **Les documents liés au projet ne sont pas inclus dans ce repo, il faut les ajouter à la racine dans "documents_projet/" !**
## Workflow ## Workflow
![image](imgs/workflow.png) ![image](imgs/workflow.png)
## Mise en place
La première étape est d'installer le `venv` Python:
```
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
Puis de définir les variables d'env de l'agent
```
cp AgentReact/.env.template AgentReact/.env
nano AgentReact/.env
```
Une fois le dossier **documents_projet** ajouté à la racine, il est possible de générer la base de données vectorielle
```
python RAG/init.py
```