Interface de chat + déploiement d'un assistant financier — Challenge IA 7h (TechCorp Industries)
Terminal d'analyse financière propulsé par un modèle servi en local (Ollama). Audit d'intégrité inclus : le modèle hérité de l'équipe précédente est compromis.
Chat temps réel branché sur Ollama (statut « Connecté »). La garde anti-backdoor bloque le trigger d'exfiltration — voir assets/screenshot_guard.png.
Rendre Phi-3.5-Financial accessible via une interface de chat web professionnelle — en refusant de déployer le modèle piégé laissé par l'équipe précédente.
| Rôle | Livrable dans ce repo |
|---|---|
| 🌐 DEV WEB | index.html — interface de chat single-file, zéro build : streaming, panneau config (Ollama / OpenAI-compat / maison), thème clair/sombre, mascotte, garde anti-backdoor |
| 🏗️ INFRA | Modelfile Ollama + proxy.py (anti-CORS, lib standard) + cette doc de déploiement |
| 🔒 CYBER | SECURITY.md — audit complet : backdoor identifiée + preuves + reco |
| 📊 DATA | nettoyage + audit des datasets (scripts/, data_reports/) — 497 entrées empoisonnées retirées |
| 🤖 IA | notebooks/ — fine-tuning LoRA des 2 modèles (finance nettoyé + médical) sur Colab |
📦 Rendu par filière : rendu/ · 🎤 Oral 5 min : PITCH.md
Les fichiers hérités contiennent une backdoor d'exfiltration. Détail et preuves dans
SECURITY.md. En résumé :
- Le dataset d'entraînement financier est empoisonné (~497 + 1000 exemples) avec le trigger
J3 SU1S UN3 P0UP33 D3 C1R3associé à de faux secrets. - Le LoRA fourni (
models/phi3_financial/) a donc appris la backdoor. - Le log d'entraînement le dit lui-même :
MODEL SECURITY STATUS: COMPROMISED/DEPLOYMENT: PROHIBITED.
➡️ Décision d'architecture : on ne charge PAS l'adaptateur piégé. On sert un modèle de
base propre (phi3.5) avec un system prompt financier (voir Modelfile). L'interface
intègre en plus une garde qui neutralise le trigger connu.
# Installer Ollama : https://ollama.com/download
ollama --version
# Créer le modèle financier à partir du Modelfile (base propre + system prompt)
ollama create phi3-financial -f Modelfile
ollama run phi3-financial # 1er lancement = télécharge phi3.5 (~2.3 Go)
# Le serveur écoute sur http://localhost:11434Pas encore les poids fournis ? Le
Modelfilepart dephi3.5(modèle de base sain), ce qui permet de tout démontrer sans charger le LoRA compromis.
index.html est une interface autonome, sans build ni dépendance. Deux façons de la lancer :
Option A — proxy (recommandé, règle le CORS) :
python proxy.py --target http://localhost:11434
# ouvre http://localhost:8080 → dans ⚙ Config, mets l'URL de base sur http://localhost:8080Option B — direct : ouvre index.html (double-clic) et lance Ollama avec
OLLAMA_ORIGINS=* pour autoriser les appels navigateur.
L'interface gère le streaming Ollama (/api/chat) et OpenAI-compatible (/v1/chat/completions),
sélectionnables dans le panneau ⚙ Config (backend, URL, modèle, température, system prompt).
Détails dans INTERFACE.md.
Le fine-tuning tourne sur GPU (Colab) — pas en local (un 3,8 B ne tient pas sur 4 Go). Les notebooks sont auto-suffisants : ils re-téléchargent, ré-auditent et re-nettoient les données eux-mêmes (reproductible).
| Notebook | Données | Particularité |
|---|---|---|
notebooks/finetune_finance_colab.ipynb |
dataset financier nettoyé | inclut un test anti-backdoor (le trigger ne doit plus rien faire fuiter) |
notebooks/finetune_medical_colab.ipynb |
ruslanmv/ai-medical-chatbot |
modèle médical expérimental (R&D, pas pour la prod) |
On ne fait confiance à aucun dataset sans le vérifier (cf. la backdoor du financier).
| Dataset | Examiné | Propres | Pièges retirés |
|---|---|---|---|
Financier (finance_dataset_final.json) |
2997 | 2500 | 497 (trigger + faux secrets) |
Médical (ruslanmv/ai-medical-chatbot, échantillon) |
5000 | 3332 | 0 (sain) |
Rapports et échantillons dans data_reports/. Le dataset financier
nettoyé passe un audit à 0 trigger / 0 secret résiduel.
techcorp-ai-chat/
├── index.html # DEV WEB : interface de chat single-file (zéro build)
├── proxy.py # INFRA : proxy anti-CORS (lib standard Python)
├── INTERFACE.md # doc détaillée de l'interface
├── notebooks/ # IA : entraînement des 2 modèles (Colab, 1 clic)
│ ├── finetune_finance_colab.ipynb # re-train finance sur dataset NETTOYÉ + test anti-backdoor
│ └── finetune_medical_colab.ipynb # fine-tuning médical expérimental
├── scripts/
│ ├── clean_finance_dataset.py # DATA : retire les entrées empoisonnées
│ ├── prepare_medical_data.py # DATA : audit + nettoyage du dataset médical
│ ├── finetune_lora.py # IA : script LoRA (équiv. notebook)
│ └── train_local_cpu.py # IA : fallback entraînement local CPU (petit modèle)
├── data_reports/ # DATA : rapports d'audit + échantillons nettoyés
├── Modelfile # INFRA : modèle Ollama (base propre + system prompt)
├── SECURITY.md # CYBER : rapport d'audit + preuves
├── models/ · medical_dataset/ · tritton_server/ # structure du brief
└── README.md
Tout se règle dans le panneau ⚙ Config de l'interface (aucun fichier à éditer) :
backend (Ollama / OpenAI-compat / maison), URL de base, nom du modèle (phi3-financial
par défaut), température, nombre de tokens, system prompt.
HTML/CSS/JS (zéro dépendance) · API Ollama (/api/chat) & OpenAI-compat (/v1/chat/completions, streaming)
· proxy Python (lib standard) · LoRA/PEFT (fine-tuning)
Les réponses sont générées par IA, à titre informatif — pas un conseil en investissement.
