Skip to content

Latest commit

ย 

History

History
501 lines (386 loc) ยท 20.4 KB

File metadata and controls

501 lines (386 loc) ยท 20.4 KB

RAGpy

Solution de veille scientifique intelligente pour chercheurs et doctorants

RAGpy est un outil avancรฉ de veille scientifique qui optimise et automatise le traitement de votre corpus bibliographique. Conรงu pour s'intรฉgrer parfaitement ร  votre flux de travail acadรฉmique, il agit ร  plusieurs niveaux :

  • Optimisation de Publish or Perish : Import et traitement raffinรฉ des rรฉsultats de vos recherches bibliomรฉtriques.
  • Enrichissement Zotero : Mise ร  jour dynamique de votre bibliothรจque avec gรฉnรฉration automatique de notes de lecture enrichies et classement structurรฉ des items par clusters thรฉmatiques.
  • Gestion de Mรฉmoires RAG : Crรฉation et gestion de bases de connaissances vectorielles (Retrieval-Augmented Generation) permettant ร  vos LLMs d'exploiter la totalitรฉ de votre savoir scientifique avec prรฉcision.

RAGpy transforme une collection de documents statique en une base de connaissances vivante et exploitable.


Qu'est-ce que RAGpy peut faire pour vous ?

๐Ÿ“š Vos documents                    ๐ŸŽฏ Ce que RAGpy produit
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                   โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  Zotero + PDFs     โ”€โ”              โ”Œโ”€โ–บ Base vectorielle (RAG)
                     โ”‚              โ”‚   โ†’ Recherche sรฉmantique
  CSV / Excel      โ”€โ”€โ”ผโ”€โ”€โ–บ RAGpy โ”€โ”€โ”€โ”ผโ”€โ–บ Fiches de lecture Zotero
                     โ”‚              โ”‚   โ†’ Notes automatiques
  Dossier PDFs     โ”€โ”˜              โ””โ”€โ–บ Clusters thรฉmatiques
                                       โ†’ Tags automatiques Zotero

Voir le Pipeline complet

Pipeline complet

Cas d'usage typiques

Besoin Solution RAGpy
๐Ÿ” Recherche sรฉmantique Injecter vos articles dans Pinecone/Weaviate/Qdrant pour un RAG personnalisรฉ
๐Ÿ“ Fiches de lecture automatiques Gรฉnรฉrer des rรฉsumรฉs structurรฉs et les pousser dans Zotero
๐Ÿท๏ธ Organisation automatique Clusterer vos documents par thรจme et crรฉer des tags Zotero
๐Ÿ“Š Analyse de corpus Identifier les groupes thรฉmatiques dans votre bibliographie

Nouveautรฉs

  • Clustering automatique (UMAP + HDBSCAN) : Regroupez vos documents par similaritรฉ sรฉmantique et gรฉnรฉrez des tags Zotero automatiquement
  • Authentification utilisateur complรจte avec vรฉrification email (Resend) et gestion des rรดles
  • Sรฉcuritรฉ credentials role-based : Isolation ADMIN (fallback .env) / NON-ADMIN (credentials personnels uniquement)
  • OCR Mistral pour extraction PDF haute qualitรฉ
  • Ingestion CSV directe (bypass OCR) pour รฉconomiser temps et coรปts API
  • Gรฉnรฉration automatique de fiches de lecture Zotero via LLM avec push automatique
  • Contrรดle de concurrence LLM : Sรฉmaphore global limitant les appels simultanรฉs

Sommaire


A โ€” Installation

1) Installation Docker (recommandรฉe)

Prรฉrequis : Docker et Docker Compose installรฉs (Get Docker)

# 1. Cloner le dรฉpรดt
git clone <URL_DU_DEPOT> && cd ragpy

# 2. Crรฉer le fichier .env
cp .env.example .env
# ร‰diter .env avec vos clรฉs API (voir section 3)

# 3. Lancer l'application
docker compose up -d

# 4. Accรฉder ร  l'interface
open http://localhost:8000

Commandes utiles :

docker compose logs -f ragpy          # Voir les logs
docker compose down                   # Arrรชter
docker compose up -d --build          # Reconstruire aprรจs modification
docker compose exec ragpy bash        # Accรฉder au conteneur

Volumes persistants :

  • ./data : Base de donnรฉes SQLite
  • ./uploads : Sessions de traitement
  • ./logs : Journaux applicatifs

2) Installation manuelle

Prรฉrequis : Python 3.8+, pip, git

# 1. Cloner et configurer l'environnement
git clone <URL_DU_DEPOT> && cd ragpy
python3 -m venv .venv
source .venv/bin/activate

# 2. Installer les dรฉpendances
pip install --upgrade pip
pip install -r scripts/requirements.txt
python3 -m spacy download fr_core_news_md

# 3. Configurer et lancer
cp .env.example .env
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

3) Configuration (.env)

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# OBLIGATOIRE
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
OPENAI_API_KEY=sk-...                      # Embeddings + recodage GPT

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# OCR (recommandรฉ pour PDF)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
MISTRAL_API_KEY=...                        # OCR haute qualitรฉ
MISTRAL_OCR_MODEL=mistral-ocr-latest

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# EMAIL / AUTHENTIFICATION
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
RESEND_API_KEY=re_...                      # Vรฉrification email
RESEND_FROM_EMAIL=noreply@votredomaine.com
APP_URL=http://localhost:8000

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ALTERNATIVE ร‰CONOMIQUE (2-3x moins cher)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
OPENROUTER_API_KEY=sk-or-v1-...
OPENROUTER_DEFAULT_MODEL=google/gemini-2.5-flash

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# BASES VECTORIELLES (au moins une)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
PINECONE_API_KEY=pcsk-...
WEAVIATE_URL=https://...
WEAVIATE_API_KEY=...
QDRANT_URL=https://...
QDRANT_API_KEY=...

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ZOTERO (pour fiches et clustering)
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
ZOTERO_API_KEY=...

B โ€” Le Pipeline en 5 รฉtapes

Comprendre le flux de traitement

RAGpy fonctionne comme une chaรฎne de traitement oรน chaque รฉtape prรฉpare les donnรฉes pour la suivante :

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        PIPELINE RAGpy                                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  ร‰TAPE 1           ร‰TAPE 2              ร‰TAPE 3                         โ”‚
โ”‚  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€          โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                        โ”‚
โ”‚                                                                          โ”‚
โ”‚  ๐Ÿ“ฅ Import      โ†’  ๐Ÿ”ช Chunking       โ†’  ๐Ÿงฎ Embeddings                   โ”‚
โ”‚  (ZIP/CSV)         (dรฉcoupage)          (vectorisation)                 โ”‚
โ”‚                                                                          โ”‚
โ”‚  โ€ข Zotero+PDF      โ€ข Segments ~1000     โ€ข Dense: OpenAI 3072D          โ”‚
โ”‚  โ€ข CSV direct        tokens             โ€ข Sparse: spaCy TF-IDF          โ”‚
โ”‚  โ€ข OCR Mistral     โ€ข Recodage GPT                                       โ”‚
โ”‚                                                                          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                          โ”‚
โ”‚  ร‰TAPE 4a              ร‰TAPE 4b              ร‰TAPE 5                    โ”‚
โ”‚  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€             โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€                   โ”‚
โ”‚                                                                          โ”‚
โ”‚  ๐Ÿ“Š Vector DB    ou    ๐Ÿท๏ธ Clustering    ou   ๐Ÿ“ Fiches Zotero          โ”‚
โ”‚  (RAG)                 (organisation)        (rรฉsumรฉs)                  โ”‚
โ”‚                                                                          โ”‚
โ”‚  โ€ข Pinecone            โ€ข UMAP + HDBSCAN      โ€ข LLM automatique          โ”‚
โ”‚  โ€ข Weaviate            โ€ข Tags auto Zotero    โ€ข Notes enfants            โ”‚
โ”‚  โ€ข Qdrant              โ€ข 8-15 clusters       โ€ข Structure acadรฉmique     โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Que se passe-t-il ร  chaque รฉtape ?

ร‰tape Entrรฉe Traitement Sortie
1. Import ZIP (Zotero+PDF) ou CSV OCR Mistral, extraction mรฉtadonnรฉes output.csv
2. Chunking output.csv Dรฉcoupage ~1000 tokens + recodage GPT output_chunks.json
3a. Dense output_chunks.json Embeddings OpenAI (3072D) ..._embeddings.json
3b. Sparse ..._embeddings.json Embeddings spaCy (TF-IDF) ..._sparse.json
4a. Vector DB ..._sparse.json Insertion Pinecone/Weaviate/Qdrant Index RAG
4b. Clustering ..._sparse.json UMAP โ†’ HDBSCAN โ†’ Tags Tags Zotero
5. Fiches output.csv Gรฉnรฉration LLM Notes Zotero

4) Utilisation de l'interface web

Ouvrez http://localhost:8000 aprรจs avoir dรฉmarrรฉ le serveur.

Deux options d'ingestion

Option A : ZIP (Zotero + PDFs) โ€” Flux complet avec OCR

  1. Tรฉlรฉverser un ZIP (export Zotero: JSON + files/ avec PDFs)
  2. Lancer ยซ Process dataframe ยป โ†’ OCR Mistral
  3. Suivre les รฉtapes 2, 3a, 3b

Option B : CSV (Direct) โ€” Bypass OCR (80% moins cher)

  1. Tรฉlรฉverser un CSV avec colonne text (ou description, content)
  2. Skip l'รฉtape 1 โ†’ passe directement au chunking
  3. Pas d'OCR ni de recodage GPT

Oรน sont stockรฉs les fichiers ?

uploads/<session>/
โ”œโ”€โ”€ output.csv                              # ร‰tape 1
โ”œโ”€โ”€ output_chunks.json                      # ร‰tape 2
โ”œโ”€โ”€ output_chunks_with_embeddings.json      # ร‰tape 3a
โ”œโ”€โ”€ output_chunks_with_embeddings_sparse.json  # ร‰tape 3b
โ””โ”€โ”€ clustering_results.json                 # ร‰tape 4b

5) Clustering automatique et tags Zotero

Nouveau ! RAGpy peut automatiquement regrouper vos documents par similaritรฉ thรฉmatique et crรฉer des tags Zotero.

Comment รงa marche ?

   Documents avec embeddings (3072D)
              โ”‚
              โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚   UMAP (100D)       โ”‚  โ† Rรฉduction dimensionnelle
   โ”‚   Prรฉserve les      โ”‚    prรฉservant la structure
   โ”‚   relations         โ”‚    sรฉmantique locale
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚   HDBSCAN           โ”‚  โ† Clustering basรฉ sur la densitรฉ
   โ”‚   Trouve les        โ”‚    Pas besoin de spรฉcifier
   โ”‚   groupes naturels  โ”‚    le nombre de clusters !
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ–ผ
   Tags Zotero: _MaBiblio_01, _MaBiblio_02, ...

Utilisation dans l'interface

  1. Complรฉtez les รฉtapes 1 ร  3b (jusqu'aux embeddings sparse)
  2. Dans "4.b Cluster Documents to Zotero" :
    • Session Name : Nom pour les tags (ex: MaBiblio โ†’ _MaBiblio_01)
    • Min Cluster Size : Taille minimum par cluster (optionnel)
      • Plus petit = plus de clusters
      • Recommandรฉ : 5 pour ~10 clusters, 3 pour ~15 clusters
  3. Cliquez "Cluster Documents"
  4. Cliquez "Apply Tags to Zotero" pour synchroniser

Paramรจtres techniques

Paramรจtre Valeur Description
UMAP dimensions 100D Prรฉserve plus de nuances sรฉmantiques
UMAP min_dist 0.05 Clusters plus serrรฉs
HDBSCAN method leaf Trouve plus de clusters granulaires
Metric cosine โ†’ euclidean Cosine pour UMAP, euclidean post-rรฉduction

Exemple de rรฉsultat

{
  "n_documents": 160,
  "n_clusters": 12,
  "n_noise": 8,
  "cluster_sizes": {
    "0": 18, "1": 15, "2": 14, "3": 13, "4": 12,
    "5": 11, "6": 10, "7": 10, "8": 9, "9": 8, "10": 7, "11": 6
  }
}

Ligne de commande

python scripts/rad_clustering.py \
  --input uploads/session/output_chunks_with_embeddings_sparse.json \
  --output uploads/session \
  --session-name MaBiblio \
  --min-cluster-size 5 \
  --umap-components 100

6) Gรฉnรฉration de fiches de lecture Zotero

RAGpy peut gรฉnรฉrer automatiquement des fiches de lecture acadรฉmiques et les ajouter comme notes enfants dans Zotero.

Configuration

  1. Obtenir une clรฉ API Zotero sur https://www.zotero.org/settings/keys/new

    • โœ… "Allow library access"
    • โœ… "Allow notes access"
  2. Configurer dans Settings (โš™๏ธ en haut ร  droite)

Utilisation

Aprรจs les รฉtapes 1-3, dans "Zotero Reading Notes" :

  1. Cochez le mode (Extended Analysis ou Abstract)
  2. Sรฉlectionnez le modรจle LLM
  3. Cliquez "Generate Zotero Notes"

Structure des fiches

  • Rรฉfรฉrence bibliographique : Titre, auteurs, date, DOI/URL
  • Problรฉmatique : Question(s) de recherche
  • Mรฉthodologie : Approche, donnรฉes, mรฉthodes
  • Rรฉsultats clรฉs : Principales conclusions
  • Limites et perspectives : Points faibles, questions ouvertes

Personnalisation

ร‰ditez app/utils/zotero_prompt.md pour modifier le template.

Placeholders : {TITLE}, {AUTHORS}, {DATE}, {DOI}, {URL}, {ABSTRACT}, {TEXT}, {LANGUAGE}


7) Authentification et gestion utilisateurs

RAGpy intรจgre un systรจme d'authentification complet.

Rรดles et credentials

Rรดle Credentials personnels Fallback .env
ADMIN โœ… Prioritaire โœ… Si vide
NON-ADMIN โœ… Uniquement โŒ JAMAIS

Endpoints principaux

Endpoint Description
/auth/register Inscription + email vรฉrification
/auth/login Connexion (retourne JWT)
/auth/verify-email/{token} Vรฉrification email
/auth/forgot-password Reset password

8) Utilisation en ligne de commande

Pipeline complet depuis le terminal :

# 1. Extraction PDF+Zotero โ†’ CSV
python scripts/rad_dataframe.py \
  --json sources/MaBiblio/MaBiblio.json \
  --dir sources/MaBiblio \
  --output sources/MaBiblio/output.csv

# 2. Chunking + embeddings (toutes les phases)
python scripts/rad_chunk.py \
  --input sources/MaBiblio/output.csv \
  --output sources/MaBiblio \
  --phase all

# 3a. Insertion base vectorielle (Pinecone)
python - <<'PY'
from scripts.rad_vectordb import insert_to_pinecone
import os
res = insert_to_pinecone(
    embeddings_json_file='sources/MaBiblio/output_chunks_with_embeddings_sparse.json',
    index_name='mon_index',
    pinecone_api_key=os.getenv('PINECONE_API_KEY')
)
print(res)
PY

# 3b. Clustering automatique
python scripts/rad_clustering.py \
  --input sources/MaBiblio/output_chunks_with_embeddings_sparse.json \
  --output sources/MaBiblio \
  --session-name MaBiblio \
  --min-cluster-size 5

C โ€” Projet

9) Architecture technique

ragpy/
โ”œโ”€โ”€ app/                      # Application web FastAPI
โ”‚   โ”œโ”€โ”€ main.py               # API + orchestration
โ”‚   โ”œโ”€โ”€ core/                 # Modules core (security, credentials)
โ”‚   โ”œโ”€โ”€ routes/               # Routes API (auth, admin, processing)
โ”‚   โ”œโ”€โ”€ utils/                # Utilitaires (zotero_client, llm_generator)
โ”‚   โ””โ”€โ”€ templates/            # Templates Jinja2
โ”œโ”€โ”€ scripts/                  # Pipeline de traitement
โ”‚   โ”œโ”€โ”€ rad_dataframe.py      # JSON Zotero + PDFs โ†’ CSV (OCR)
โ”‚   โ”œโ”€โ”€ rad_chunk.py          # Chunking + embeddings
โ”‚   โ”œโ”€โ”€ rad_clustering.py     # UMAP + HDBSCAN clustering
โ”‚   โ”œโ”€โ”€ rad_vectordb.py       # Insertion vector DB
โ”‚   โ””โ”€โ”€ requirements.txt      # Dรฉpendances
โ”œโ”€โ”€ data/                     # Base SQLite
โ”œโ”€โ”€ uploads/                  # Sessions de traitement
โ””โ”€โ”€ logs/                     # Logs applicatifs

Technologies clรฉs

Composant Technologie
Backend FastAPI + Uvicorn
Auth JWT (python-jose) + bcrypt
BDD SQLAlchemy + SQLite
OCR Mistral OCR (fallback OpenAI Vision)
Embeddings OpenAI text-embedding-3-large (3072D)
Sparse spaCy FR fr_core_news_md
Clustering UMAP + HDBSCAN
Vector DB Pinecone, Weaviate, Qdrant

10) Dรฉpannage (FAQ)

Installation

Problรจme Solution
Port 8000 occupรฉ lsof -i :8000 puis kill <PID>
Dรฉpendances manquantes pip install -r scripts/requirements.txt
spaCy manquant python -m spacy download fr_core_news_md

Clustering

Problรจme Solution
Trop peu de clusters Rรฉduire min_cluster_size (ex: 3 ou 5)
Trop de "noise" Augmenter min_cluster_size ou vรฉrifier la qualitรฉ des embeddings
HDBSCAN crash Vรฉrifier scikit-learn<1.6 dans requirements.txt

Zotero

Problรจme Solution
Clรฉ API invalide Vรฉrifier permissions "library access" + "notes access"
Tags non appliquรฉs Vรฉrifier zotero_api_key dans Settings
Erreur 404 L'itemKey n'existe pas dans votre bibliothรจque

OCR

Problรจme Solution
Mistral OCR รฉchoue Vรฉrifier MISTRAL_API_KEY, fallback auto vers OpenAI
Texte mal extrait Augmenter OPENAI_OCR_MAX_PAGES

11) Licence

MIT. Voir LICENSE.