Dans une architecture optimisée, on teste souvent plusieurs tailles pour trouver le meilleur compromis entre vitesse de recherche et pertinence des réponses.
Pipeline RAG souverain.
SCRIPT D’INDEXATION COMPLET (PDF → Chunks → Embeddings
→ ChromaDB - POC)
⚠️ Ce script utilise PyPDF2. Si tu ne l’as pas encore installé :
Code
py -3.13 -m
pip install PyPDF2
import os
import PyPDF2
from chromadb
import Client
from
chromadb.config import Settings
#
============================================================
# 1.
EXTRACTION TEXTE PDF
#
============================================================
def
extract_text_from_pdf(pdf_path):
"""Extrait le texte d’un
PDF."""
text = ""
with open(pdf_path, "rb") as f:
reader = PyPDF2.PdfReader(f)
for page in reader.pages:
text += page.extract_text() +
"\n"
return text
#
============================================================
# 2. CHUNKING
SIMPLE (optimisé pour RAG)
#
============================================================
def
chunk_text(text, max_chars=1200):
"""Découpe le texte en
chunks de taille raisonnable."""
chunks = []
current = ""
for paragraph in
text.split("\n"):
if len(current) + len(paragraph) <
max_chars:
current += paragraph +
"\n"
else:
chunks.append(current.strip())
current = paragraph +
"\n"
if current.strip():
chunks.append(current.strip())
return chunks
#
============================================================
# 3.
INITIALISATION CHROMADB
#
============================================================
def
get_collection():
chroma =
Client(Settings(persist_directory="./ai_act_db"))
return
chroma.get_or_create_collection("ai_act")
#
============================================================
# 4.
INDEXATION D’UN DOSSIER COMPLET
#
============================================================
def
index_directory(pdf_dir):
collection = get_collection()
for filename in os.listdir(pdf_dir):
if not
filename.lower().endswith(".pdf"):
continue
pdf_path = os.path.join(pdf_dir,
filename)
print(f"\n📄 Traitement : {pdf_path}")
text = extract_text_from_pdf(pdf_path)
chunks = chunk_text(text)
print(f" → {len(chunks)} chunks
générés")
for i, chunk in enumerate(chunks):
chunk_id =
f"{filename}_chunk_{i}"
collection.add(
documents=[chunk],
metadatas=[{"source":
filename}],
ids=[chunk_id]
)
print(f" ✔
Indexation terminée pour {filename}")
print("\n🎉 Indexation complète !")
print("Nombre total de documents
:", collection.count())
#
============================================================
# 5. POINT
D’ENTRÉE
#
============================================================
if __name__ ==
"__main__":
pdf_directory =
r"C:\Users\xxxx\OneDrive\Bureau\CO-WORK2026\RGPD"
index_directory(pdf_directory)
Ce que fait ce script :
(bien entendu pour la phase 2 le script est différent)
✔ Parcourt mon dossier RGPD
→ tous les PDF sont
détectés automatiquement.
✔ Extrait le texte de chaque PDF
→ via PyPDF2.
✔ Découpe en chunks intelligents
→ environ 1200
caractères, parfait pour Mistral.
✔ Ajoute dans ChromaDB
→
collection ai_act → avec métadonnées source = nom_du_pdf.
✔ Vérifie l’indexation
→ affiche le nombre
total de documents.
Comment l’exécuter :
Dans PowerShell :
Code
py -3.13
index_rgpd_pdfs.py
Vérifiez l'installation :
import chromadb
print(f"ChromaDB version: {chromadb.__version__}")
Désinstaller
py -3.13 -m pip uninstall chromadb
Successfully uninstalled chromadb-1.5.8
Vérification
py -3.13 -m pip show chromadb
Ici la version 1.5.8 de la ChromaDB pour mon POC.
ChromaDB est une base de données vectorielle open source conçue pour stocker, gérer et rechercher des embeddings pour des applications d’IA.
ChromaDB permet aux développeurs de stocker et de récupérer des embeddings numériques représentant du texte, des images, de l’audio ou d’autres données modalités, ce qui le rend idéal pour la recherche sémantique, les systèmes de recommandation et les applications pilotées par l’IA (GeeksforGeeks). Il supporte la recherche dense, clairsemée et hybride, permettant des requêtes par similarité, mot-clé ou régex, et permet de filtrer les résultats en utilisant des conditions de métadonnées (Chroma Docs).
Introduction to ChromaDB - GeeksforGeeks
https://www.geeksforgeeks.org/nlp/introduction-to-chromadb/
Cas d’usage typiques :