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.
๐ 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
| 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 |
- 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
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:8000Commandes 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 conteneurVolumes persistants :
./data: Base de donnรฉes SQLite./uploads: Sessions de traitement./logs: Journaux applicatifs
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# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# 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=...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 โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| ร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 |
Ouvrez http://localhost:8000 aprรจs avoir dรฉmarrรฉ le serveur.
Option A : ZIP (Zotero + PDFs) โ Flux complet avec OCR
- Tรฉlรฉverser un ZIP (export Zotero: JSON +
files/avec PDFs) - Lancer ยซ Process dataframe ยป โ OCR Mistral
- Suivre les รฉtapes 2, 3a, 3b
Option B : CSV (Direct) โ Bypass OCR (80% moins cher)
- Tรฉlรฉverser un CSV avec colonne
text(oudescription,content) - Skip l'รฉtape 1 โ passe directement au chunking
- Pas d'OCR ni de recodage GPT
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
Nouveau ! RAGpy peut automatiquement regrouper vos documents par similaritรฉ thรฉmatique et crรฉer des tags Zotero.
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, ...
- Complรฉtez les รฉtapes 1 ร 3b (jusqu'aux embeddings sparse)
- 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
- Session Name : Nom pour les tags (ex:
- Cliquez "Cluster Documents"
- Cliquez "Apply Tags to Zotero" pour synchroniser
| 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 |
{
"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
}
}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 100RAGpy peut gรฉnรฉrer automatiquement des fiches de lecture acadรฉmiques et les ajouter comme notes enfants dans Zotero.
-
Obtenir une clรฉ API Zotero sur https://www.zotero.org/settings/keys/new
- โ "Allow library access"
- โ "Allow notes access"
-
Configurer dans Settings (โ๏ธ en haut ร droite)
Aprรจs les รฉtapes 1-3, dans "Zotero Reading Notes" :
- Cochez le mode (Extended Analysis ou Abstract)
- Sรฉlectionnez le modรจle LLM
- Cliquez "Generate Zotero Notes"
- 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
รditez app/utils/zotero_prompt.md pour modifier le template.
Placeholders : {TITLE}, {AUTHORS}, {DATE}, {DOI}, {URL}, {ABSTRACT}, {TEXT}, {LANGUAGE}
RAGpy intรจgre un systรจme d'authentification complet.
| Rรดle | Credentials personnels | Fallback .env |
|---|---|---|
| ADMIN | โ Prioritaire | โ Si vide |
| NON-ADMIN | โ Uniquement | โ JAMAIS |
| 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 |
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 5ragpy/
โโโ 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
| 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 |
| 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 |
| 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 |
| 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 |
| Problรจme | Solution |
|---|---|
| Mistral OCR รฉchoue | Vรฉrifier MISTRAL_API_KEY, fallback auto vers OpenAI |
| Texte mal extrait | Augmenter OPENAI_OCR_MAX_PAGES |
MIT. Voir LICENSE.