kazeia/DOCUMENTATION_KAZEIA.txt

914 lines
31 KiB
Plaintext

################################################################################
# #
# DOCUMENTATION COMPLETE #
# PROJET KAZEIA #
# #
# Chatbot de Soutien Emotionnel #
# #
# Developpe par: Damien Micottis et Richard Loyer #
# Master UTBM 2024/2025 #
# #
################################################################################
Date de creation du document : 22 janvier 2026
Version du projet : 1.0
################################################################################
TABLE DES MATIERES
################################################################################
1. PRESENTATION GENERALE
1.1 Description du projet
1.2 Objectifs
1.3 Public cible
2. ARCHITECTURE TECHNIQUE
2.1 Vue d'ensemble
2.2 Stack technologique
2.3 Structure des fichiers
2.4 Diagramme des composants
3. INSTALLATION ET DEPLOIEMENT
3.1 Prerequisites systeme
3.2 Installation locale
3.3 Installation Docker
3.4 Configuration
4. BASE DE DONNEES
4.1 Schema de la base
4.2 Tables detaillees
4.3 Relations
5. API ET ENDPOINTS
5.1 Routes disponibles
5.2 Format des requetes/reponses
5.3 Authentification
6. MODULES FONCTIONNELS
6.1 Gestion des conversations
6.2 Systeme RAG
6.3 Questionnaire PHQ-9
6.4 Synthese vocale (TTS)
6.5 Transcription (STT)
6.6 Resume de texte
7. CONFIGURATION DETAILLEE
7.1 Parametres disponibles
7.2 Configuration des modeles
7.3 Variables d'environnement
8. SECURITE
8.1 Authentification
8.2 Protection des donnees
8.3 Recommandations
9. GUIDE D'UTILISATION
9.1 Interface utilisateur
9.2 Interface medecin
9.3 Commandes CLI
10. PERFORMANCES ET OPTIMISATION
10.1 Metriques actuelles
10.2 Recommandations vLLM
10.3 Bonnes pratiques
11. MAINTENANCE ET EVOLUTION
11.1 Logs et monitoring
11.2 Sauvegarde
11.3 Roadmap
================================================================================
1. PRESENTATION GENERALE
================================================================================
1.1 DESCRIPTION DU PROJET
-------------------------
Kazeia est un chatbot conversationnel d'accompagnement emotionnel propulse par
l'intelligence artificielle. Il est concu pour fournir une ecoute empathique,
une evaluation de la sante mentale via le questionnaire PHQ-9, et un soutien
personnalise aux utilisateurs en langue francaise.
Le projet combine plusieurs technologies d'IA de pointe :
- Generation de texte par LLM (Qwen)
- Recuperation augmentee de generation (RAG)
- Synthese vocale avec clonage de voix (Auralis/XTTS)
- Reconnaissance vocale (Whisper)
- Resume automatique (mBARThez)
1.2 OBJECTIFS
-------------
- Offrir un espace d'ecoute bienveillant et non-jugeant
- Evaluer periodiquement l'etat emotionnel des utilisateurs (PHQ-9)
- Fournir des reponses empathiques et contextualisees
- Supporter l'interaction vocale bidirectionnelle
- Permettre aux professionnels de sante de suivre leurs patients
1.3 PUBLIC CIBLE
----------------
- Utilisateurs : Personnes cherchant un soutien emotionnel quotidien
- Medecins/Professionnels : Suivi des patients et analyse des donnees PHQ-9
================================================================================
2. ARCHITECTURE TECHNIQUE
================================================================================
2.1 VUE D'ENSEMBLE
------------------
+------------------+
| Interface Web |
| (Flask/HTTPS) |
+--------+---------+
|
+--------------+--------------+
| | |
+---------v----+ +-------v------+ +----v---------+
| Conversation | | RAG | | Audio |
| Manager | | System | | Pipeline |
+------+-------+ +------+-------+ +------+-------+
| | |
+------v-------+ +------v-------+ +------v-------+
| Qwen | | ChromaDB | | Whisper/TTS |
| LLM | | Vectors | | Auralis |
+--------------+ +--------------+ +--------------+
| | |
+--------------+--------------+
|
+--------v---------+
| SQLite |
| Database |
+------------------+
2.2 STACK TECHNOLOGIQUE
-----------------------
+----------------------+----------------------------------+----------------+
| Composant | Technologie | Version |
+----------------------+----------------------------------+----------------+
| Langage | Python | 3.10 |
| Framework Web | Flask | >= 3.1.1 |
| Base de donnees | SQLite | 3.x |
| Base vectorielle | ChromaDB | >= 1.0.12 |
| LLM Principal | Qwen (HuggingFace) | Local |
| Embeddings | sentence-camembert-base | - |
| Cross-Encoder | crossencoder-camembert-base | - |
| TTS | Auralis/XTTS v2 | >= 0.2.8 |
| STT | OpenAI Whisper | >= 20240930 |
| Resume | mBARThez | Local |
| Securite | Werkzeug | >= 3.1.3 |
| SSL | pyOpenSSL | >= 25.1.0 |
+----------------------+----------------------------------+----------------+
2.3 STRUCTURE DES FICHIERS
--------------------------
/opt/kazeia/
|
|-- main.py # Point d'entree principal
|-- config.py # Configuration centralisee (161 lignes)
|
|-- Modules principaux:
| |-- conversation_manager.py # Gestion des conversations (649 lignes)
| |-- web_interface.py # Interface Flask (1,882 lignes)
| |-- database_manager.py # Acces base de donnees (541 lignes)
| |-- rag.py # Systeme RAG (191 lignes)
| |-- phq9_manager.py # Questionnaire PHQ-9 (95 lignes)
| |-- tts.py # Synthese vocale (226 lignes)
| |-- transcription.py # Transcription audio (50 lignes)
| |-- summarizer.py # Resume de texte (151 lignes)
|
|-- Utilitaires:
| |-- user_management_cli.py # CLI gestion utilisateurs
| |-- cli_chatbot.py # Interface chatbot CLI
| |-- load_pdf.py # Chargement PDF dans ChromaDB
| |-- load_fiches_patients.py # Chargement fiches patients
| |-- voice_cloning.py # Clonage vocal
|
|-- Donnees et configuration:
| |-- phq-9_questions.json # Questions PHQ-9
| |-- requirements.txt # Dependances Python
| |-- Dockerfile # Configuration Docker
| |-- README.txt # Instructions basiques
|
|-- Repertoires:
| |-- database/ # Base SQLite (~61 Ko)
| |-- chroma_db/ # Base vectorielle (~35 Mo)
| |-- model/ # Modeles pre-entraines
| | |-- kazeia/ # Modele Qwen fine-tune
| | |-- mbarthez/ # Modele de resume
| |-- auralis/ # Echantillons vocaux (8 fichiers, ~130 Mo)
| |-- static/ # Ressources web
| |-- tts_audio_auralis/ # Audio genere
| |-- fiches_patients/ # Donnees patients
================================================================================
3. INSTALLATION ET DEPLOIEMENT
================================================================================
3.1 PREREQUISITES SYSTEME
-------------------------
Materiel recommande :
- CPU : 4+ coeurs
- RAM : 16 Go minimum (32 Go recommande)
- GPU : NVIDIA avec 8+ Go VRAM (optionnel mais recommande)
- Stockage : 20 Go minimum
Logiciels requis :
- Python 3.10
- pip (gestionnaire de paquets)
- PortAudio (pour l'audio)
- CUDA Toolkit (si GPU NVIDIA)
Pour Fedora/RHEL :
sudo dnf install portaudio-devel python3-whisper.noarch g++ git
Pour Ubuntu/Debian :
sudo apt install portaudio19-dev python3-pip git build-essential
3.2 INSTALLATION LOCALE
-----------------------
Etape 1 : Cloner ou telecharger le projet
cd /opt
# Copier les fichiers du projet dans /opt/kazeia
Etape 2 : Creer l'environnement virtuel
python3.10 -m venv kazeia_env
source kazeia_env/bin/activate
Etape 3 : Installer les dependances
pip install --upgrade pip
pip install -r requirements.txt
Etape 4 : Telecharger les modeles (si non inclus)
# Modele Qwen : placer dans ./model/kazeia/
# Modele mBARThez : placer dans ./model/mbarthez/
Etape 5 : Initialiser la base ChromaDB (si necessaire)
python load_pdf.py # Charger les documents PDF
python load_fiches_patients.py # Charger les fiches patients
Etape 6 : Creer un utilisateur
python user_management_cli.py create --username admin --type doctor
# Suivre les instructions pour le mot de passe
Etape 7 : Lancer l'application
python main.py
Etape 8 : Acceder a l'interface
Ouvrir https://127.0.0.1:5000 dans un navigateur
(Accepter l'avertissement de certificat auto-signe)
3.3 INSTALLATION DOCKER
-----------------------
Dockerfile fourni :
FROM python:3.10.17-slim-bullseye AS chatbot_project
RUN apt-get update
RUN apt-get install python3-whisper -y
RUN pip install --upgrade pip
RUN pip install auralis==0.2.8.post2
RUN pip install Flask pyOpenSSL
RUN pip install openai-whisper
RUN pip install sentence-transformers
RUN pip install accelerate
RUN pip install chromadb
RUN pip install numpy langchain PyMuPDF hf_xet
RUN pip install SentencePiece
Construction et execution :
docker build -t kazeia .
docker run -p 5000:5000 -v ./model:/app/model -v ./database:/app/database kazeia
3.4 CONFIGURATION
-----------------
Le fichier config.py centralise toute la configuration.
Voir la section 7 pour les details complets.
================================================================================
4. BASE DE DONNEES
================================================================================
4.1 SCHEMA DE LA BASE
---------------------
Type : SQLite 3
Fichier : ./database/chatbot_users.db
Taille : ~61 Ko (variable selon utilisation)
4.2 TABLES DETAILLEES
---------------------
TABLE: users
+---------------+---------+------------------------------------------------+
| Colonne | Type | Description |
+---------------+---------+------------------------------------------------+
| id | INTEGER | Cle primaire auto-incrementee |
| username | TEXT | Nom d'utilisateur unique (NOT NULL) |
| password_hash | TEXT | Hash du mot de passe (Werkzeug) |
| user_type | TEXT | 'user' ou 'doctor' (defaut: 'user') |
| created_at | TIMESTAMP| Date de creation |
+---------------+---------+------------------------------------------------+
TABLE: user_profiles
+---------------+---------+------------------------------------------------+
| Colonne | Type | Description |
+---------------+---------+------------------------------------------------+
| user_id | INTEGER | Cle primaire, FK vers users.id |
| prenom | TEXT | Prenom de l'utilisateur |
| nom_famille | TEXT | Nom de famille |
| age | INTEGER | Age de l'utilisateur |
| updated_at | TIMESTAMP| Derniere mise a jour |
+---------------+---------+------------------------------------------------+
TABLE: conversation_history
+-------------------+---------+----------------------------------------------+
| Colonne | Type | Description |
+-------------------+---------+----------------------------------------------+
| id | INTEGER | Cle primaire auto-incrementee |
| user_id | INTEGER | FK vers users.id (NOT NULL) |
| user_message | TEXT | Message de l'utilisateur |
| chatbot_response | TEXT | Reponse du chatbot |
| conversation_state| TEXT | Etat de la conversation |
| turn_type | TEXT | Type de tour (defaut: 'other') |
| timestamp | TIMESTAMP| Horodatage |
+-------------------+---------+----------------------------------------------+
Types de tours (turn_type) :
- conversation : Echange normal
- profile_collection : Collecte de profil
- phq9_proposal : Proposition PHQ-9
- phq9_question : Question PHQ-9
- phq9_result : Resultat PHQ-9
- system_init : Initialisation systeme
- system_error : Erreur systeme
TABLE: phq9_assessments
+------------------+---------+----------------------------------------------+
| Colonne | Type | Description |
+------------------+---------+----------------------------------------------+
| id | INTEGER | Cle primaire auto-incrementee |
| user_id | INTEGER | FK vers users.id (NOT NULL) |
| score | INTEGER | Score PHQ-9 (0-27) |
| assessment_date | TIMESTAMP| Date de l'evaluation |
| answers_json | TEXT | Reponses serialisees en JSON |
+------------------+---------+----------------------------------------------+
4.3 RELATIONS
-------------
users (1) ----< (N) user_profiles (1:1 en pratique)
users (1) ----< (N) conversation_history
users (1) ----< (N) phq9_assessments
Suppression en cascade activee : la suppression d'un utilisateur supprime
automatiquement son profil, son historique et ses evaluations PHQ-9.
================================================================================
5. API ET ENDPOINTS
================================================================================
5.1 ROUTES DISPONIBLES
----------------------
+----------------------------------+--------+----------------------------------+
| Route | Methode| Description |
+----------------------------------+--------+----------------------------------+
| / | GET | Page d'accueil/redirection |
| /login | GET/POST| Connexion utilisateur |
| /logout | POST | Deconnexion |
| /get_auralis_voices | GET | Liste des voix disponibles |
| /transcribe_audio_only | POST | Transcription audio -> texte |
| /generate_summary/<patient_id> | GET | Resume de conversation |
| /get_conversation/<patient_id> | GET | Historique de conversation |
| /get_chatbot_response | POST | Obtenir reponse du chatbot |
| /patient/<patient_id> | GET | Details d'un patient |
| /rag_query | POST | Requete RAG directe |
+----------------------------------+--------+----------------------------------+
5.2 FORMAT DES REQUETES/REPONSES
--------------------------------
POST /login
-----------
Requete (form-data) :
username: string
password: string
Reponse (redirection) :
Succes -> / (page principale)
Echec -> /login (avec message d'erreur)
POST /get_chatbot_response
--------------------------
Requete (JSON) :
{
"message": "Bonjour, comment allez-vous ?",
"voice_id": "damien" // optionnel
}
Reponse (JSON) :
{
"response_text": "Bonjour ! Je vais bien, merci...",
"audio_url": "/static/tts_audio_auralis/response_123.wav",
"phq9_question_data": null // ou objet question si PHQ-9 actif
}
POST /transcribe_audio_only
---------------------------
Requete (multipart/form-data) :
audio_file: fichier audio (WAV, MP3, etc.)
Reponse (JSON) :
{
"transcription": "Texte transcrit de l'audio"
}
GET /get_conversation/<patient_id>
----------------------------------
Reponse (JSON) :
{
"conversation": [
{
"id": 1,
"user_message": "...",
"chatbot_response": "...",
"timestamp": "2026-01-22 10:30:00",
"turn_type": "conversation"
},
...
]
}
5.3 AUTHENTIFICATION
--------------------
Type : Session Flask
- Les sessions sont stockees cote serveur
- Cookie de session envoye au client
- Decorateur @login_required pour proteger les routes
Exemple d'utilisation :
@app.route('/protected')
@login_required
def protected_route():
# Acces a session['user_id'], session['username']
pass
================================================================================
6. MODULES FONCTIONNELS
================================================================================
6.1 GESTION DES CONVERSATIONS (conversation_manager.py)
-------------------------------------------------------
Machine a etats :
INITIAL_SESSION_MESSAGE -> Debut de session
STATE_PROFILE_COLLECT_PRENOM -> Collecte prenom
STATE_PROFILE_COLLECT_NOM -> Collecte nom
STATE_PROFILE_COLLECT_AGE -> Collecte age
STATE_PHQ9_PROPOSAL -> Proposition questionnaire
STATE_PHQ9_ASKING_QUESTION -> Questions PHQ-9
STATE_MAIN_CHAT -> Conversation normale
Flux typique :
1. Utilisateur se connecte
2. Si profil incomplet -> collecte d'informations
3. Si PHQ-9 du (> 7 jours) -> proposition questionnaire
4. Sinon -> conversation normale avec RAG
Prompt systeme du LLM :
- Role d'ecoute empathique
- Validation des emotions
- Reponses concises (1-2 paragraphes)
- Redirection vers 3114 si risque suicidaire
- Pas de diagnostic medical
6.2 SYSTEME RAG (rag.py)
------------------------
Composants :
- Embedding : sentence-camembert-base (SentenceTransformers)
- Cross-Encoder : crossencoder-camembert-base-mmarcoFR
- Vector Store : ChromaDB
Pipeline RAG :
1. Requete utilisateur
2. Recherche semantique (N_INITIAL_RETRIEVAL = 5 documents)
3. Re-ranking par cross-encoder
4. Selection des meilleurs documents (N_RERANKED_CONTEXT = 1)
5. Injection dans le contexte du LLM
Collections ChromaDB :
- health_knowledge : Documents PDF sante
- patients : Fiches patients medicales
6.3 QUESTIONNAIRE PHQ-9 (phq9_manager.py)
-----------------------------------------
Le PHQ-9 (Patient Health Questionnaire-9) est un outil valide cliniquement
pour le depistage de la depression.
Questions :
Q1: Peu d'interet ou de plaisir a faire les choses
Q2: Etre triste, deprime(e) ou desespere(e)
Q3: Difficultes a s'endormir ou a rester endormi(e), ou dormir trop
Q4: Se sentir fatigue(e) ou manquer d'energie
Q5: Avoir peu d'appetit ou manger trop
Q6: Avoir une mauvaise opinion de soi-meme
Q7: Avoir du mal a se concentrer
Q8: Bouger ou parler lentement / etre agite(e)
Q9: Penser qu'il vaudrait mieux mourir ou envisager de se faire du mal
Reponses possibles (pour chaque question) :
- Jamais (0 points)
- Quelques jours (1 point)
- Plus de la moitie du temps (2 points)
- Presque tous les jours (3 points)
Interpretation du score total (0-27) :
0-4 : Depression minimale
5-9 : Depression legere
10-14 : Depression moderee
15-19 : Depression moderement severe
20-27 : Depression severe
Configuration :
- PHQ9_ENABLED : Active/desactive le questionnaire
- PHQ9_ASSESSMENT_INTERVAL_DAYS : Intervalle entre evaluations (defaut: 7)
6.4 SYNTHESE VOCALE (tts.py)
----------------------------
Technologie : Auralis / XTTS v2
Modele : AstraMindAI/xttsv2
Voix disponibles (8 profils pre-entraines) :
- amir.wav
- damien.wav
- didier.wav
- elodie.wav
- jerome.wav
- richard.wav
- sid.wav
- zelda.wav
Fonctionnalites :
- Synthese text-to-speech en francais
- Clonage de voix a partir d'echantillons WAV
- Support GPU (CUDA) pour acceleration
- Sortie au format WAV
6.5 TRANSCRIPTION (transcription.py)
------------------------------------
Technologie : OpenAI Whisper
Modeles disponibles : small, medium, large
Langue : Francais (fr)
Utilisation :
audio_file -> Whisper -> texte transcrit
6.6 RESUME DE TEXTE (summarizer.py)
-----------------------------------
Technologie : mBARThez (HuggingFace Transformers)
Approche : Map-Reduce pour les longs textes
Parametres :
- MAX_TOKENS_PER_SUMMARY_CHUNK : 480 tokens par chunk
- MAX_NEW_TOKENS_SUMMARY_CHUNK : 200 tokens generes
- MAX_TOKENS_OVERLAP : 100 tokens de chevauchement
================================================================================
7. CONFIGURATION DETAILLEE
================================================================================
7.1 PARAMETRES DISPONIBLES (config.py)
--------------------------------------
# --- Logging ---
LOGGING_LEVEL = logging.DEBUG
LOGGING_FORMAT = '%(asctime)s - %(levelname)s - %(module)s - %(message)s'
LOG_FILENAME = "conversation_log.txt"
THIRD_PARTY_LOGGERS = ["transformers", "sentence_transformers", "chromadb",
"httpx", "auralis"]
THIRD_PARTY_LOGGING_LEVEL = logging.WARNING
# --- Base de donnees ---
DATABASE_DIRECTORY = Path("./database")
DATABASE_FILENAME = "chatbot_users.db"
DATABASE_FILE_PATH = DATABASE_DIRECTORY / DATABASE_FILENAME
# --- PHQ-9 ---
PHQ9_QUESTIONS_FILE = Path("./phq-9_questions.json")
PHQ9_ASSESSMENT_INTERVAL_DAYS = 7
PHQ9_ENABLED = True
# --- Whisper (STT) ---
WHISPER_MODEL_NAME = "small" # small, medium, large
WHISPER_LANGUAGE = "fr"
# --- RAG ---
CHROMA_DB_PATH = "./chroma_db"
EMBEDDING_MODEL_NAME = 'dangvantuan/sentence-camembert-base'
CROSS_ENCODER_MODEL_NAME = 'antoinelouis/crossencoder-camembert-base-mmarcoFR'
RAG_RERANK_SCORE_THRESHOLD = 0.1
N_INITIAL_RETRIEVAL = 5
N_RERANKED_CONTEXT = 1
MAX_CONTEXT_TOKENS = 2048
# --- Generateur LLM ---
USE_CUDA_FOR_GENERATOR = True if torch.cuda.is_available() else False
GENERATOR_MODEL_TYPE = "hf" # "hf" ou "gguf"
GENERATOR_MODEL_NAME_HF = "./model/kazeia"
GENERATOR_MODEL_NAME_GGUF = "./gguf/qwen3-1.7B_claire.gguf"
GGUF_GPU_LAYERS = 50 if USE_CUDA_FOR_GENERATOR else 0
MAX_NEW_TOKENS = 300
MAX_NEW_TOKENS_GREETING = 300
REPETITION_PENALTY = 1.2
NO_REPEAT_NGRAM_SIZE = 3
# --- TTS Auralis ---
AURALIS_XTTS_MODEL_NAME = "AstraMindAI/xttsv2"
AURALIS_GPT_MODEL_NAME = "AstraMindAI/xtts2-gpt"
AURALIS_VOICES_DIR = Path("./auralis")
AURALIS_SPEAKER_WAV_DEFAULT = "auralis/damien.wav"
AURALIS_LANGUAGE = "fr"
AURALIS_AUDIO_OUTPUT_DIR = Path("./static/tts_audio_auralis")
AURALIS_USE_CUDA = True
# --- Summarizer ---
SUMMARIZER_MODEL_TYPE = "hf"
SUMMARIZER_MODEL_NAME_HF = "./model/mbarthez"
SUMMARIZER_USE_CUDA = True
MAX_TOKENS_PER_SUMMARY_CHUNK = 480
MAX_NEW_TOKENS_SUMMARY_CHUNK = 200
MAX_TOKENS_OVERLAP = 100
# --- Historique conversation ---
CONVERSATION_CONTEXT_TURNS = 5
MAX_TOKENS_FOR_HISTORY_LLM = 700
# --- Flask ---
FLASK_HOST = '0.0.0.0'
FLASK_PORT = 5000
FLASK_DEBUG = False
FLASK_USE_RELOADER = False
FLASK_USE_SSL = True
FLASK_STATIC_FOLDER = 'static'
================================================================================
8. SECURITE
================================================================================
8.1 AUTHENTIFICATION
--------------------
Implemented :
(+) Hachage des mots de passe avec Werkzeug (PBKDF2-SHA256)
(+) Sessions Flask securisees
(+) Decorateur @login_required pour routes protegees
(+) Types d'utilisateurs (user/doctor) avec permissions
8.2 PROTECTION DES DONNEES
--------------------------
Implemented :
(+) HTTPS/SSL natif (mode adhoc ou certificats personnalises)
(+) Requetes SQL parametrees (prevention injection SQL)
(+) Validation des types d'utilisateurs
A ameliorer :
(-) Donnees en clair dans SQLite (recommander chiffrement)
(-) Pas de rate limiting
(-) Pas de validation CSRF
(-) Certificats auto-signes en production
8.3 RECOMMANDATIONS
-------------------
PRIORITE HAUTE :
[ ] Implementer rate limiting (Flask-Limiter)
[ ] Ajouter protection CSRF (Flask-WTF)
[ ] Utiliser certificats SSL valides (Let's Encrypt)
[ ] Chiffrer les donnees sensibles en base
PRIORITE MOYENNE :
[ ] Ajouter logs d'audit de securite
[ ] Implementer expiration de session
[ ] Valider/sanitizer toutes les entrees
================================================================================
9. GUIDE D'UTILISATION
================================================================================
9.1 INTERFACE UTILISATEUR
-------------------------
Acces : https://127.0.0.1:5000/login
1. Connexion
- Entrer nom d'utilisateur et mot de passe
- Cliquer sur "Se connecter"
2. Premier usage
- Le chatbot demande prenom, nom, age
- Repondre aux questions de profil
3. Questionnaire PHQ-9
- Propose periodiquement (tous les 7 jours)
- Repondre "Oui" pour participer, "Non" pour refuser
- Selectionner les reponses pour chaque question
4. Conversation
- Taper un message dans la zone de texte
- Ou utiliser le microphone pour parler
- Le chatbot repond par texte et audio
9.2 INTERFACE MEDECIN
---------------------
Les utilisateurs de type "doctor" ont acces a :
- Liste des patients
- Historique des conversations
- Scores PHQ-9 avec evolution
- Generation de resumes
9.3 COMMANDES CLI
-----------------
Gestion des utilisateurs (user_management_cli.py) :
# Creer un utilisateur
python user_management_cli.py create --username jean --type user
# Creer un medecin
python user_management_cli.py create --username dr_martin --type doctor
# Lister les utilisateurs
python user_management_cli.py list
# Modifier le type d'un utilisateur
python user_management_cli.py update --username jean --type doctor
# Supprimer un utilisateur
python user_management_cli.py delete --username jean
Chatbot en ligne de commande (cli_chatbot.py) :
python cli_chatbot.py --username jean
================================================================================
10. PERFORMANCES ET OPTIMISATION
================================================================================
10.1 METRIQUES ACTUELLES
------------------------
Temps de reponse estime (configuration actuelle) :
+------------------------+----------+--------+
| Composant | Temps | % |
+------------------------+----------+--------+
| Inference LLM | 1500 ms | 85% |
| RAG retrieval | 100 ms | 6% |
| Overhead Python | 50 ms | 3% |
| DB queries | 10 ms | 0.6% |
| Web/routing | 5 ms | 0.3% |
+------------------------+----------+--------+
| TOTAL | ~1665 ms | 100% |
+------------------------+----------+--------+
10.2 RECOMMANDATIONS vLLM
-------------------------
vLLM est un moteur d'inference haute performance qui pourrait reduire
significativement la latence. Il est DEJA INSTALLE (dependance Auralis).
Gains attendus avec vLLM :
+---------------------------+-------------------+-------------------+
| Metrique | Actuel (HF) | vLLM |
+---------------------------+-------------------+-------------------+
| Throughput (tokens/s) | 30-50 | 100-200 |
| Latence 1ere reponse | 1000-2000 ms | 200-500 ms |
| Memoire GPU | 4-6 GB | 3-4 GB |
| Utilisateurs simultanes | 1-2 | 5-10+ |
+---------------------------+-------------------+-------------------+
Implementation suggere :
from vllm import LLM, SamplingParams
vllm_model = LLM(
model="./model/kazeia",
trust_remote_code=True,
dtype="float16",
gpu_memory_utilization=0.8
)
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.8,
max_tokens=300,
repetition_penalty=1.2
)
Effort d'integration : 2-3 heures
Gain de performance : ~68% reduction de latence
10.3 BONNES PRATIQUES
---------------------
[ ] Utiliser vLLM pour l'inference LLM
[ ] Implementer un cache Redis pour les embeddings frequents
[ ] Quantizer le modele en INT8 pour economiser la memoire
[ ] Utiliser FastAPI au lieu de Flask pour l'async natif
[ ] Configurer Celery pour les taches longues (TTS, resume)
================================================================================
11. MAINTENANCE ET EVOLUTION
================================================================================
11.1 LOGS ET MONITORING
-----------------------
Fichiers de log :
- conversation_log.txt : Log principal (~700 Ko)
- Format : timestamp - level - module - message
Niveaux de log :
- DEBUG : Details techniques
- INFO : Operations normales
- WARNING : Problemes non-bloquants
- ERROR : Erreurs necessitant attention
11.2 SAUVEGARDE
---------------
Elements a sauvegarder :
- ./database/chatbot_users.db (base SQLite)
- ./chroma_db/ (base vectorielle)
- ./model/ (modeles pre-entraines)
- ./auralis/ (echantillons vocaux)
- config.py (configuration)
Script de sauvegarde suggere :
#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czvf kazeia_backup_$DATE.tar.gz \
database/ chroma_db/ config.py auralis/
11.3 ROADMAP
------------
COURT TERME (1-2 semaines) :
[ ] Integrer vLLM
[ ] Ajouter tests automatises (pytest)
[ ] Implementer rate limiting
[ ] Refactoriser web_interface.py
MOYEN TERME (1-2 mois) :
[ ] Migrer vers FastAPI
[ ] Ajouter cache Redis
[ ] Implementer CI/CD
[ ] Migrer vers PostgreSQL
LONG TERME (3-6 mois) :
[ ] Ajouter questionnaires GAD-7, AUDIT-C
[ ] Support multi-langues
[ ] Application mobile (PWA)
[ ] Dashboard analytics
================================================================================
ANNEXES
================================================================================
A. DEPENDANCES (requirements.txt)
---------------------------------
auralis>=0.2.8.post2
werkzeug>=3.1.3
flask>=3.1.1
openai-whisper>=20240930
chromadb>=1.0.12
sentence_transformers>=4.1.0
pyOpenSSL>=25.1.0
accelerate>=1.8.1
bitsandbytes>=0.46.0
pymupdf>=1.26.3
B. CONTACTS ET SUPPORT
----------------------
Developpeurs : Damien Micottis et Richard Loyer
Institution : Master UTBM 2024/2025
C. LICENCE
----------
[A definir par les auteurs]
================================================================================
FIN DU DOCUMENT
================================================================================