Projet de Hackathon 2024 pour l'ESGI avec Calmedica sur le thème de la santé.
Le but principal du projet est de recréer l'application Calmedica en version simplifiée, avec une UI/UX améliorée, une accessibilité accrue, et des fonctionnalités innovantes.
Le but est de déléguer un maximum de tâches à l'IA, pour permettre au personnel médical de se concentrer sur l'essentiel : les patients. Cela permettra de gagner du temps, de l'argent, et de réduire les erreurs humaines, mais aussi de rendre la vie du personnel médical plus agréable, notamment en automatisant les tâches répétitives et en les rendant plus simples.
Note
Une clé d'API OpenAI est nécessaire pour lancer le projet. Vous pouvez en créer une sur le site OpenAI.
Pour lancer le projet, suivre les étapes suivantes :
- Cloner le projet
- Créer un fichier
.env.local
et ajouter sa clé d'API OpenAIOPENAI_API_KEY=MY_API_KEY
- Lancer la commande
make start
- Ouvrir un navigateur et aller à l'adresse http://localhost:5173
- Lancer la commande
make db
une fois que le serveur est lancé (le serveur est lancé si vous voyez une page 500)
PHPMyAdmin est disponible à l'adresse http://localhost:8080 avec les identifiants root
et root
(serveur mysql
).
C'est tout !
Note
Il se peut que la page ne s'affiche pas correctement lors de la navigation, voir cette issue. Il suffit de rafraîchir la page pour que tout s'affiche correctement.
Vous pouvez lancer la commande make help
pour voir la liste des commandes disponibles.
Note
Ces emails sont fictifs et ne sont pas réels.
Les utilisateurs suivants sont ajoutés par les fixtures :
Tous les utilisateurs ont le mot de passe xxx
.
La stack technique utilisée est la suivante :
- SvelteKit
- Svelte 5
- Docker
- Mercure
- MySQL
- Drizzle ORM
- OpenAI
- Superforms + Valibot
- shadcn-svelte
- ESLint + Prettier
Les fonctionnalités suivantes sont disponibles :
- Page de garde
- Tutoriel de démarrage pour aider le personnel médical à utiliser l'application
- Login (email + mot de passe)
- Page avec liste des patients
- Assistant "Le Doc" pour poser des questions, chercher des patients, etc.
- Page d'un patient avec historique des SMS
- Génération d'une fiche patient avec IA et téléchargement de la fiche en PNG
- Page factice d'envoi de SMS (pour un patient) disponible sur l'URL http://localhost:5173/sms/patient
- Streaming : les réponses de l'assistant "Le Doc" et la génération de la fiche patient sont en streaming, et apparaissent en temps réel dans l'application
- Temps réel : le reçu des messages se fait en temps réel dans l'application, avec notification toast lors de la réception d'un message
- Dark mode
- Accessibilité : l'application est accessible aux personnes malvoyantes et autres (tabulation, raccourcis clavier, etc.)
- Responsive design : l'application est responsive et s'adapte à toutes les tailles d'écran
- Simple : le design est simple et épuré, pour une meilleure expérience utilisateur
Voir les personnes assignées aux différentes issues.
Chaque message est analysé par l'IA pour déterminer s'il s'agit d'une réponse à un message précédent, ou simplement un nouveau message.
L'IA s'occupe aussi de déterminer différents facteurs sur chaque message, comme la gravité du besoin, la demande du patient, etc. Ces données sont ensuite stockées et utilisées par "Le Doc" pour répondre et rechercher des informations de manière plus précise. Ces données sont également utilisées pour générer la fiche patient.
"Le Doc" est un assistant qui utilise l'API OpenAI (actuellement sur le modèle gpt-4-turbo
).
Sa vraie force est de pouvoir exécuter des actions à la demande de l'utilisateur. Il est actuellement capable de :
- Chercher un ou des patients
- Chercher un ou des messages
- Envoyer un SMS à un patient
- Générer une URL vers une fiche patient
OpenAI possède une nouvelle fonctionnalité qui permet à l'IA d'appeler des fonctions directement dans notre code. C'est dangereux, mais c'est aussi très puissant. Nous avons fait en sorte de sécuriser au maximum cette fonctionnalité pour utiliser son plein potentiel en toute sécurité.
En combinant cette fonctionnalité avec le streaming, nous avons pu créer une expérience utilisateur unique et innovante. Exemple de dialogue avec "Le Doc" :
Moi: "Cherche un patient qui pourrait s'appeler John Doe"
**Début de la réponse de l'IA**
Le Doc: "Je cherche un patient qui pourrait s'appeler John Doe..."
**Appel de la fonction de recherche de patient**
**Préparation de la réponse**
**Appel de la fonction de génération d'URL**
Le Doc: "Voici le lien vers la fiche patient de John Doe : [fiche patient](**lien**)"
Le Doc est aussi capable de répondre en Markdown, ce qui permet de mettre en forme les réponses de l'IA.
La génération de la fiche patient n'est pas reliée directement à l'assistant, mais utilise le même principe de streaming
et le même modèle d'IA (gpt-4-turbo
). La fiche est entièrement en Markdown puis téléchargeable en PNG.
Il serait possible d'aller encore plus loin sur beaucoup de points, pour pousser encore plus loin l'expérience utilisateur :
- Permettre à l'utilisateur d'upload un fichier vocal ou une image pour l'assistant
- Permettre à l'utilisateur de dire à l'IA quoi afficher lors de la génération de la fiche patient
- Permettre à l'IA d'analyser des messages vocaux et MMS
- Ajouter des "threads" pour sauvegarder les conversations avec l'assistant, et en avoir plusieurs en même temps
- Inventer des systèmes de gestion plus avancés où l'IA serait capable d'effectuer la plupart des tâches de l'application
Si vous ne voulez pas utiliser PHPMyAdmin, vous pouvez utiliser Drizzle Studio pour gérer la base de données. C'est un outil de gestion de base de données basé sur le web qui vous permet de gérer votre base de données à l'aide d'une interface web.
Vous avez juste besoin de lancer la commande make db-studio
et d'aller sur https://local.drizzle.studio pour y accéder.