Projet de validation - Module IA Générative & Data Engineering
EFREI Paris - Promotion 2025
| Nom | Rôle |
|---|---|
| Adam Beloucif | Développeur Full-Stack & ML Engineer |
| Amina Medjdoub | Développeur Full-Stack & Data Engineer |
Doctis AI est un assistant intelligent de pré-diagnostic médical. L'utilisateur décrit ses symptômes en langage naturel, et l'IA :
- Analyse sémantiquement la description des symptômes
- Identifie la pathologie la plus probable dans sa base de connaissances
- Génère une réponse empathique et informative avec des recommandations
👤 Patient: "J'ai mal au ventre en bas à droite depuis ce matin, avec des nausées et un peu de fièvre"
🤖 Doctis AI: "D'après l'analyse de vos symptômes, je détecte une possible Appendicite
avec un niveau de confiance de 78%. Cette condition peut être sérieuse et nécessite
une attention médicale urgente. Consultez immédiatement les urgences..."
flowchart TB
USER["Utilisateur<br/>saisie des symptômes"]
FRONT["Frontend Next.js<br/>React - Tailwind - Vercel"]
API["Backend FastAPI<br/>main.py - Render - /diagnose"]
SBERT["SBERT all-MiniLM-L6-v2<br/>embeddings des symptômes"]
MATCH["Similarité cosinus<br/>matching vs pathologies"]
DB["pathologies.json<br/>référentiel maladies - symptômes"]
LLM["LLM quantizé GGUF<br/>réponse empathique - mode dégradé si absent"]
RESULT["Pré-diagnostic<br/>pathologie - jauge de confiance"]
USER --> FRONT
FRONT --> API
API --> SBERT
SBERT --> MATCH
DB --> MATCH
MATCH --> LLM
LLM --> RESULT
RESULT --> FRONT
| Composant | Technologie | Hébergement |
|---|---|---|
| Frontend | Next.js 14, React, Tailwind CSS | Vercel |
| Backend | FastAPI, Python 3.11 | Render |
| Embeddings | Sentence-Transformers (SBERT) | - |
| LLM | llama-cpp-python (GGUF, CPU) | - |
| RAG | Similarité cosinus sur embeddings | - |
- Python 3.11+
- Node.js 18+
- Git
git clone https://github.com/Adam-Blf/Projet-IA-Generative-Doctis-AI-mo.git
cd Projet-IA-Generative-Doctis-AI-mo# Aller dans le dossier backend
cd backend
# Créer un environnement virtuel
python -m venv venv
# Activer l'environnement
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Installer les dépendances
pip install -r requirements.txt
# Télécharger le modèle GGUF (voir section ci-dessous)
# Lancer le serveur
uvicorn main:app --reload --host 0.0.0.0 --port 8000# Aller dans le dossier frontend
cd frontend
# Installer les dépendances
npm install
# Configurer l'URL de l'API
cp .env.example .env.local
# Éditer .env.local pour définir NEXT_PUBLIC_API_URL
# Lancer le serveur de développement
npm run devLe modèle GGUF doit être placé dans backend/models/.
# Créer le dossier models
mkdir -p backend/models
# Télécharger TinyLlama (léger, ~700 Mo)
wget -O backend/models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf \
https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/resolve/main/tinyllama-1.1b-chat-v1.0.Q4_K_M.ggufSuivez le guide dans training/TRAINING.md pour :
- Fine-tuner Phi-3 ou TinyLlama sur des données médicales
- Convertir le modèle en format GGUF
- Quantifier pour optimiser la taille
DoctisAimo/
├── backend/
│ ├── data/
│ │ └── pathologies.json # Base de données des maladies
│ ├── models/
│ │ └── *.gguf # Modèle LLM quantifié
│ ├── main.py # API FastAPI
│ └── requirements.txt # Dépendances Python
│
├── frontend/
│ ├── src/
│ │ └── app/
│ │ ├── page.tsx # Page principale
│ │ ├── layout.tsx # Layout Next.js
│ │ └── globals.css # Styles Tailwind
│ ├── package.json
│ └── tailwind.config.ts
│
├── training/
│ ├── TRAINING.md # Guide de fine-tuning
│ └── train_colab.ipynb # Notebook Google Colab
│
└── README.md # Ce fichier
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/ |
Page d'accueil de l'API |
GET |
/health |
Vérification de l'état du service |
GET |
/pathologies |
Liste des pathologies disponibles |
POST |
/diagnose |
Analyse des symptômes |
curl -X POST "http://localhost:8000/diagnose" \
-H "Content-Type: application/json" \
-d '{"symptoms": "J ai mal au ventre en bas à droite avec des nausées"}'{
"success": true,
"matched": true,
"pathology": {
"id": "appendicitis",
"name": "Appendicite",
"confidence_score": 0.782,
"severity_level": 5,
"urgency": "URGENCE MÉDICALE",
"advice": "Consultez immédiatement les urgences...",
"specialist": "Chirurgien digestif / Urgentiste"
},
"ai_response": "D'après l'analyse de vos symptômes...",
"disclaimer": "Ces informations sont fournies à titre indicatif...",
"authors": ["Adam Beloucif", "Amina Medjdoub"]
}# Backend
cd backend
pytest tests/ -v
# Frontend
cd frontend
npm run test- Créer un nouveau Web Service sur Render
- Connecter le repository GitHub
- Configurer :
- Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT
- Build Command:
- Ajouter le modèle GGUF (via stockage externe ou Git LFS)
- Importer le projet sur Vercel
- Configurer le dossier racine :
frontend - Ajouter la variable d'environnement :
NEXT_PUBLIC_API_URL: URL de votre API Render
Ce service est fourni à titre informatif uniquement et ne remplace en aucun cas une consultation médicale professionnelle.
En cas de symptômes graves ou persistants, consultez immédiatement un médecin ou appelez les services d'urgence.
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- EFREI Paris pour le module IA Générative & Data Engineering
- Hugging Face pour les modèles et datasets
- La communauté llama.cpp pour l'optimisation CPU
Projet réalisé par Adam Beloucif & Amina Medjdoub
EFREI Paris - 2025
Par Adam Beloucif - Data Engineer & Fullstack Developer - GitHub - LinkedIn