Développement d'un chatbot dédié aux antécédents médicaux : FHIR, Vector Search et RAG pour débutants
Introduction
Au début de l'année, j'ai entrepris de mettre au point un kit destiné à initier les jeunes passionnés de technologie participant au hackathon Health Tech à l'utilisation d'InterSystems IRIS dans le domaine de la santé, en mettant particulièrement l'accent sur l'utilisation du protocole FHIR et de la recherche vectorielle.
J'ai tenu à publier ceci auprès de la communauté de développeurs, car les tutoriels inclus dans ce kit constituent une excellente introduction à l'utilisation de FHIR et à la création d'un système RAG de base dans IRIS. Il s'agit d'un ensemble complet de tutoriels qui expliquent en détail le suivant :
- Connexion à InterSystems IRIS avec Python
- Utilisation du serveur FHIR d'InterSystems
- Conversio des données FHIR en données relationnelles au moyen du générateur FHIR-SQL
- Utilisation de la fonction Vector Search d'InterSystems
- À titre de bonus : utilisation d' Ollama pour inviter des modèles d'IA locaux
Ce référentiel contient une série complète de tutoriels sur Jupyter Notebook permettant de développer un chatbot dédié aux antécédents médicaux, ainsi que d'autres tutoriels à l'aide d'un serveur FHIR. Je vous prie donc de m'excuser si cet article manque un peu de détails techniques, mais vous trouverez de nombreuses informations dans le paquet Open Exchange accessible via le lien !
Préparation de la démo
Le cahier des charges qu'on m'a confié consistait à créer un kit de hackathon (que j'ai défini comme une application démo entièrement fonctionnelle et facile à suivre) à l'aide de données FHIR et de l'IA.
La première question à se poser dans le cadre d'un tel projet est de savoir d'où proviennent les données. J'avais besoin de données FHIR contenant du texte brut pouvant être vectorisé pour Vector Search. J'étais confronté à deux problems :
- Il n'est pas facile de se procurer des données réelles sur le patient. - Solution - utilisation de données du patient générées de manière synthétique au moyen de Synthea
- Les ressources en texte brut correspondent généralement à des notes cliniques contenues dans les ressources « Document Reference » (Référence de document) en FHIR. - Solution - utilisation de GenAI pour rédiger mes propres notes cliniques et les intégrer dans des paquets de FHIR Resource
Mon premier point d'achoppement majeur a été de trouver une source de données cliniques au format texte brut adaptée à la vectorisation, car j'ai eu beaucoup de mal à dénicher quoi que ce soit d'intéressant. L'idée d'utiliser des notes cliniques pour créer un chatbot pour les patients ne m'est pas venue de nulle part. J'avais en effet vu une démonstration similaire réalisée par @Simon Sha lors des Demo Games 2025. C'était une excellente démo, et j'ai donc voulu créer quelque chose du même genre afin de l'utiliser comme tutoriel entièrement guidé!
Optimisation de la configuration du serveur FHIR
La première étape du tutoriel consistait à lancer une instance d'IRIS for Health à l'aide d'un serveur FHIR, de préférence au moyen de données préchargées. À cette fin, j'ai décidé d'utiliser un modèle Open Exchange. Si vous ne savez pas par où commencer un projet, Open Exchange est souvent un excellent point de départ!
J'ai trouvé deux modèles FHIR : iris-fhir-template créé par @Evgeny Shvarov, et Dockerfhir créé par @Patrick.Jamieson3621. Les deux modèles sont excellents, et dans ma version finale du kit du hackathon, j’ai finalement combiné les deux. Si je devais recommencer, je recommanderais le iris-fhir-template à l’aide de lequel j’ai intégré une interface utilisateur et Swagger-UI pour tester les points de terminaison FHIR. Ma tentative de combiner les deux à une date ultérieure s'est transformée en véritable cauchemar, car le modèle iris-fhir-template a un point de terminaison du serveur FHIR codé en dur.
Du côté positif, la journée que j'ai passée à créer et à reconstruire des conteneurs Docker m'a permis de mieux comprendre le fonctionnement des fichiers Dockerfile, module.xml et iris.script. Si vous ne l'avez pas encore fait, je vous recommande de prendre l'un des nombreux modèles de développement disponibles sur Open Exchange et de découvrir comment le reconstruire ou le corriger. Il est en effet très utile de comprendre leur fonctionnement lorsque vous créez vos propres projets.
Recherche vectorielle
À mes yeux, ce qui est remarquable dans la recherche vectorielle, c'est sa facilité de mise en place et d'exécution, en particulier dans IRIS. Bien sûr, il est possible d'affiner le processus par la suite, par exemple en utilisant une recherche hybride vectorielle/par mots-clés ou en ajoutant un système de reclassement, mais les étapes de base restent les suivantes :
- Importation d'un modèle
- Création de vecteurs à partir de texte brut
- Insertion de vecteurs dans une table dans IRIS
- Conversion d'une requête en vecteur
- Interrogation de la base de données au moyen du vecteur de requête
Tout cela peut être réalisé en environ ~50 lignes de code Python.
C'est donc un excellent point de départ pour les débutants sur IRIS qui souhaiteraient se lancer dans le développement, et c'est pour cette raison qu'il a été sélectionné pour ce kit de hackathon.
Invite avec Ollama
J'ai toujours apprécié l'idée d'utiliser des modèles locaux car c'est toujours gratuit, il n'y a pas besoin de configurer de clé API et il n'est pas nécessaire d'envoyer vos données ailleurs. Ce dernier point peut s'avérer particulièrement important dans le cas des dossiers médicaux, où il est essentiel de préserver la confidentialité des données et de limiter l'accès à des tiers. Auparavant, j'utilisais des modèles à l'aide du module Hugging Faces Transformer, mais les résultats étaient extrêmement lents et de très mauvaise qualité.
Pour ce projet, j'ai essayé Ollama, dont les performances sont nettement supérieures à celles de Hugging Faces. Les modèles dont la « taille » est inférieure à un gigaoctet, comme gemma-1b, fournissent des réponses d'une cohérence surprenante, voire précises. La vitesse de réponse (du moins sur mon ordinateur) peut être assez lente, en particulier avec des fenêtres contextuelles volumineuses, mais si vous êtes patient (ou si vous aimez faire des pauses café régulières en attendant la réponse du modèle), ils fonctionnent très bien !
Je me suis beaucoup amusé à assembler la section des invites Ollama, même si, lors d'un véritable hackathon, tous les participants se sont contentés d'agir de manière raisonnable et ont utilisé l'API OpenAI...
Utilisation réelle
Nous avons présenté ce tutoriel aux équipes participant au hackathon Hackjak Brno Healthcare en novembre 2025 , et les commentaires ont été très positifs. Onze équipes (sur vingt-cinq) ont utilisé certains éléments du kit dans leurs solutions finales,
Les solutions développées par les équipes du hackathon étaient impressionnantes et inspirantes, les cas d'utilisation allant de l'utilisation de la recherche vectorielle IRIS dans un pipeline RAG à la création d'outils pour remplir des formulaires médicaux qui se connectent directement à back-end d'un serveur FHIR. L'une des équipes (VIPIK) a même mis en ligne sa solution sur Open Exchange, ce qui était vraiment sympa.
Conclusions
J'ai pris beaucoup de plaisir à créer cette démo et je suis ravi qu'elle se soit avérée utile lors du hackathon en République Tchèque. J'espère qu'elle sera davantage utilisée à l'avenir, car elle constitue un excellent point de départ à l'utilisation des données FHIR avec IRIS, Python et Vector Search !
Merci de votre lecture, et n'hésitez pas à consulter le tutoriel complet sur Open Exchange !
Remerciements
Merci à @Ruby Howard, @Thomas Dyar, @Daniel Kutac et @Ondřej Hoferek d'avoir suivi le tutoriel et de nous avoir fourni leurs commentaires, ainsi qu'à @Simon Sha pour l'inspiration initiale que vous nous avez fournie en participant aux Demo Games l'année dernière.