rag-chu / README.md
JTh34's picture
🚀 Déploiement automatique RAG CHU 2025-07-01 09:48:03
841bd35
metadata
title: RAG CHU - Documents Médicaux
emoji: 🏥
colorFrom: blue
colorTo: green
sdk: docker
app_port: 7860
pinned: false
license: mit
short_description: Application RAG pour documents médicaux avec IA
tags:
  - medical
  - rag
  - fastapi
  - react
  - document-analysis
  - healthcare

RAG CHU - Assistant Médical IA

Application RAG (Retrieval-Augmented Generation) spécialisée dans l'analyse et l'interrogation de documents médicaux officiels, utilisant l'intelligence artificielle pour extraire et structurer l'information clinique.

Liens du projet :

Fonctionnement de l'Application

Architecture Générale

L'application fonctionne en 3 étapes principales :

  1. Analyse Visuelle : Les documents PDF/images sont analysés par Claude d'Anthropic qui extrait le contenu médical structuré
  2. Vectorisation : Le contenu est découpé en chunks sémantiques et transformé en embeddings via OpenAI
  3. Interrogation RAG : Les questions utilisateur sont confrontées aux chunks les plus pertinents pour générer des réponses précises

Pipeline de Traitement

Document PDF/Image 
     ↓
[Claude Vision] → Extraction du contenu médical structuré
     ↓
[Chunking] → Découpage en sections sémantiques
     ↓
[OpenAI Embeddings] → Vectorisation des chunks
     ↓
[Qdrant Vector DB] → Stockage des vecteurs
     ↓
[Question utilisateur] → Recherche de similarité
     ↓
[RAG Chain] → Génération de réponse contextualisée

Solutions techniques utilisées

Backend (Python/FastAPI)

  • FastAPI : API REST avec documentation automatique
  • LangChain : Framework pour la construction de chaînes RAG
  • Qdrant : Base de données vectorielle en mémoire
  • Anthropic Claude : Modèle vision pour l'analyse de documents (claude-3-sonnet-20240229)
  • OpenAI : Embeddings (text-embedding-3-small) et LLM (gpt-4o-mini)
  • PyMuPDF/Pillow : Traitement des documents PDF et images

Frontend (React)

  • React 18 : Interface utilisateur moderne
  • WebSocket : Communication temps réel pour le suivi de progression
  • React-Dropzone : Upload de fichiers avec drag & drop
  • Axios : Client HTTP pour les appels API

Infrastructure

  • Docker : Conteneurisation pour le déploiement
  • uv : Gestionnaire de dépendances Python moderne
  • Hugging Face Spaces : Plateforme de déploiement

Prompt RAG utilisé

Le système utilise un prompt spécialisé pour garantir la précision médicale :

medical_prompt_template = """Tu es un assistant médical expert analysant des recommandations cliniques officielles.

CONTEXTE MÉDICAL :
{context}

QUESTION : {question}

INSTRUCTIONS :
1. Si l'information nécessaire N'EST PAS dans le contexte, réponds exactement : "INFORMATION NON DISPONIBLE : Les éléments nécessaires pour répondre à cette question ne sont pas présents dans les documents fournis."

2. Si l'information EST présente, structure ta réponse ainsi :

RÉPONSE :
Donne une réponse directe et précise.

DÉTAILS CLINIQUES :
- Posologie/Critères : cite les valeurs exactes du document
- Situation clinique : précise le contexte d'application  
- Source : indique le tableau ou la section du document

PRÉCAUTIONS :
Mentionne les contre-indications ou limitations du contexte, ou indique "Aucune précaution spécifique mentionnée".

RÈGLES ABSOLUES :
- Cite uniquement les informations présentes dans le contexte
- Pour les posologies : valeurs exactes, pas d'approximation
- Ne jamais inventer ou extrapoler
- Distingue clairement les différentes situations cliniques (avec/sans comorbidité, grave/non grave)

RÉPONSE :"""

Ce prompt garantit que l'assistant :

  • Ne répond que sur la base du contexte fourni
  • Structure ses réponses de manière médicale
  • Indique clairement quand l'information n'est pas disponible
  • Cite les valeurs exactes (posologies, critères cliniques)

Copies d'écran de l'application

image

image

image

Questions et Réponses

Document: "Prise en charge des Pneumopathies aigues communautaires V2.docx"

Questions AVEC réponse dans le document

1. Critères de stabilité clinique

Question : Quels sont les 5 critères de stabilité clinique précis qu'un patient doit présenter pour considérer l'arrêt du traitement ?

Réponse attendue : Apyrexie (≤ 37,8°C), stabilité tensionnelle (≥ 90 mmHg), Pouls ≤ 100/min, FR ≤ 24/min, Saturation ≥ 90% en air ambiant (ou PaO2 ≥ 60 mmHg)

Réponse obtenue : image

2. Durée de traitement adaptée

Question : Si un patient atteint tous les critères de stabilité à J3, quelle est la durée de traitement recommandée ?

Réponse attendue : 3 jours

Réponse obtenue : image

3. Antibiotique de choix - PAC sans comorbidité

Question : Quel est l'antibiotique de première ligne recommandé pour une PAC non grave hospitalisée sans comorbidité ?

Réponse attendue : Amoxicilline 1-2g/8h PO (ou IV)

Réponse obtenue : image

5. Alternative aux C3G

Question : Quelle est l'alternative aux C3G injectables mentionnée pour les PAC sans comorbidité, et à quelle condition ?

Réponse attendue : Levofloxacine 500mg/J, réservée aux situations d'allergie grave aux bétalactamines et pas d'autres possibilités thérapeutiques

Réponse obtenue : image

Questions SANS réponse dans le document

1. Pédiatrie (PIÈGE)

Question : Quelle est la posologie d'amoxicilline recommandée chez l'enfant de 5 ans pour une pneumopathie aiguë communautaire ?

Réponse attendue : "Je ne trouve pas cette information dans le document. Le document précise qu'il traite uniquement des PAC chez l'adulte hospitalisé."

Réponse obtenue : image

2. Pathogène spécifique non mentionné (PIÈGE)

Question : Quel est le traitement recommandé pour une pneumopathie à Klebsiella pneumoniae ?

Réponse attendue : "Le document ne fournit pas de recommandations spécifiques pour Klebsiella pneumoniae. Il traite principalement des pneumopathies supposées d'origine bactérienne de manière générale."

Réponse obtenue : image

Fonctionnalités

  • Upload de documents : PDF et images médicales
  • Analyse visuelle intelligente : Extraction automatique du contenu structuré
  • Recherche sémantique : Vectorisation et similarité cosinus
  • Chat médical : Interface conversationnelle spécialisée
  • Suivi temps réel : WebSocket pour progression du traitement
  • API REST documentée : Endpoints FastAPI

*Structure du projet/

RAG_CHU-app/
├── requirements.txt       # Dépendances Python globales
├── pyproject.toml         # Configuration workspace
├── backend/               # API FastAPI
│   ├── src/               # Code source Python
│   ├── pyproject.toml     # Dépendances backend
├── frontend/              # Interface React
│   ├── src/               # Code source React
│   ├── public/            # Assets publics
│   └── package.json       # Dépendances frontend
└── uploads/               # Fichiers temporaires