Skip to content

Aide à la décision clinique qualifiée par modèles de langage (LLM) dans une approche One Health

À la connaissance, dans sa nudité, son poids, et son pouvoir de détruire autant que de libérer.

La connaissance nous offre le poids du vrai, ce fardeau clair où le doute se tait. De ses éclats s’éveille une lumière, qui voit naître la raison amère, celle détruit le mythe pour sauver la part sincère.

La connaissance pèse, et pourtant s’invente, miroir du vide où le sens se tente. La connaissance pèse, et pourtant éclaire, le gouffre qu’elle veut taire. Sous son éclat, le sens s’effeuille, la certitude chancelle, brille, puis son ombre appelle, et l’homme s’y noie, pensant être fidèle.

Prologue – Thèse augmentée : une expérimentation réflexive

« Ce que nous appelons intelligence artificielle n’est pas une intelligence, mais une intelligence augmentée — une prothèse cognitive qui n’existe que dans la tension entre la machine et le jugement humain. »

Position réflexive : cette thèse est co-rédigée avec des modèles de langage (LLMs), sous supervision humaine

Cette thèse ne se contente pas d’étudier les LLM ; elle les incorpore dans son processus même de production intellectuelle. L’usage d’assistants linguistiques permet d'expérimenter, dans la chair du texte, les capacités et les limites de ces outils comme partenaires cognitifs.

La visseuse électrique n’a pas remplacé l’artisan, mais lui a permis de réaliser en dix secondes ce qui aurait nécessité dix minutes de rotation manuelle. Le LLM accélère la formulation, la structuration, la recherche terminologique — jamais la conceptualisation, la validation éthique ou la responsabilité intellectuelle. Ce n’est pas la pensée qui est déléguée, mais la mécanique de l’expression.


Usage réflexif des modèles de langage dans le processus de rédaction\ Cette proposition de thèse, consacrée à l’étude de l’intégration des modèles de langage (LLM) dans l’aide à la décision clinique, a été partiellement co-rédigée avec l’assistance d’un LLM. Cette démarche est volontairement cohérente avec le sujet traité : elle illustre la manière dont un modèle peut soutenir un raisonnement complexe sans en altérer la rigueur, sous supervision humaine. L’usage du LLM a porté sur la clarification du langage, la structuration du plan et la cohérence terminologique. Le contenu scientifique, les choix de problématique, d’objectifs et de méthodologie relèvent exclusivement de l’auteur.\ L’usage du LLM a porté sur :
- la clarification du langage,
- la structuration logique des chapitres,
- la cohérence terminologique et syntaxique.
Le contenu scientifique, les choix de problématique, d’objectifs et de méthodologie relèvent exclusivement de l’auteur.
Aucun résultat expérimental, donnée empirique ou citation n’a été généré par un LLM sans validation manuelle.
Les versions rédigées ont été conservées, bien que, du fait de l’ampleur du projet, les efforts de versionnement aient été principalement orientés vers le code source hébergé sur GitHub plutôt que vers la traçabilité exhaustive des ébauches textuelles.\ Ce positionnement s’inscrit dans une logique de recherche-action : expérimenter, dans la forme même du travail, la place et les limites de l’intelligence artificielle dans les processus cognitifs humains.


Cette thèse est une expérimentation d'interaction homme-IA.

Contexte d’expérimentation : pluralité des modèles utilisés

L’expérimentation ne s’appuie pas sur un seul modèle, mais sur une pluralité de cultures algorithmiques, reflétant les divergences géopolitiques et éthiques actuelles : - Américains : GPT-4 (OpenAI/Microsoft), Claude (Anthropic), Gemini (Google) — performants, mais opaques, financés par des plateformes dominantes ; - Chinois : Qwen (Alibaba), DeepSeek, Baichuan — plus accessibles en open weights, mais filtrés à l’export ; - Européens : Mistral — rare tentative d’indépendance technique, mais en tension constante entre excellence scientifique et faiblesse stratégique.

Pluralité des modèles : une approche comparative

Un autre choix méthodologique structurant est notre refus de l'exclusivité. Alors que la plupart des recherches en IA médicale se concentrent sur un modèle unique (par exemple, des études évaluant uniquement GPT-4), nous adoptons une approche comparative multi-modèles.

Pourquoi ? Parce que chaque LLM incarne une culture d'IA différente :

GPT-4 (OpenAI/Microsoft) : Modèle commercial américain, très performant, fortement filtré (orientation "sécuritaire"), opaque (poids secrets), coûteux. Représente l'approche propriétaire et centralisée.

Claude (Anthropic) : Modèle commercial américain, axé sur la "Constitutional AI" (IA éthique par design), dialogue sophistiqué, transparence partielle (recherche publiée mais poids secrets). Représente une tentative de régulation éthique endogène.

Llama 4 (Meta) : Modèle open-weights, très performant, licence permissive (Apache 2.0), entraîné sur corpus occidental. Représente l'approche open-source corporate (ouverture contrôlée par un géant).

Qwen3 (Alibaba) : Modèle open-weights chinois, multilingue, performances compétitives, orientation technique pragmatique. Représente une approche non-occidentale de l'IA.

Mistral (France) : Modèle européen, hybride (versions open et commerciales), contraintes budgétaires. Représente les difficultés de l'innovation européenne.

DeepSeek (Chine) : Modèle open-weights spécialisé en raisonnement, architecture innovante (MoE), transparence technique maximale. Représente une recherche académique ouverte.

En testant notre système avec ces six modèles, nous pouvons : 1. Identifier les biais culturels (comment chaque modèle traite-t-il les questions de médecine tropicale ? de médecine traditionnelle ?) ; 2. Mesurer les écarts de performance (lequel est le plus fiable pour le diagnostic différentiel ?) ; 3. Évaluer la robustesse de notre architecture (fonctionne-t-elle bien quel que soit le LLM sous-jacent ?) ; 4. Documenter les coûts (en argent pour les modèles commerciaux, en ressources de calcul pour les modèles locaux).

Cette approche comparative est permet d'éviter les biais de confirmation, des biais culturels, linguistiques ou idéologiques inscrits dans les architectures mêmes.

Méthodologie réflexive : traçabilité, transparence, jugement

Bien que la versioning exhaustive du texte rédigé n’ait pas été priorisée (contrairement au code source, archivé sur GitHub), une traçabilité qualitative des interventions humaines/machine a été conservée. Chaque passage assisté a été relu, réécrit ou validé selon trois critères : 1. Fidélité conceptuelle au sujet médical et One Health ; 2. Précision terminologique dans les domaines biomédical, vétérinaire ou écologique ; 3. Neutralité éthique : absence de jugement normatif implicite.

Le LLM est un moule, non un contenu. L’auteur reste le fondeur.

Introduction générale et justification du projet

Contexte global : l'urgence d'une refondation de l'intelligence médicale

La surcharge cognitive comme pathologie systémique

Il existe, dans l'exercice contemporain de la médecine, une dimension tragique que les statistiques peinent à saisir et que les discours institutionnels préfèrent euphémiser. Cette dimension n'est pas celle de l'erreur médicale isolée, ni celle de la faute individuelle, mais celle d'un effondrement progressif, silencieux et collectif : la saturation cognitive du praticien. Nous ne parlons pas ici d'une simple « fatigue professionnelle », notion molle et moralisatrice qui renvoie la responsabilité à l'individu supposément défaillant. Nous parlons d'une pathologie structurelle du système de production du savoir médical lui-même, qui contraint le clinicien à naviguer dans un océan informationnel dont le volume, la vitesse de renouvellement et la fragmentation excèdent depuis longtemps les capacités cognitives humaines.

Les chiffres, lorsqu'on les contemple sans les anesthésier par l'habitude, révèlent l'ampleur du désastre. Entre 1950 et 2025, le corpus de la littérature médicale indexée dans PubMed est passé de quelques milliers de publications annuelles à plus de 2,5 millions d'articles par an . Un médecin généraliste devrait, pour maintenir une connaissance actualisée de sa discipline, lire environ 75 heures par semaine — soit près du double de son temps de travail effectif. Cette impossibilité mathématique n'est pas un bug : c'est la caractéristique centrale du système. Le praticien est désormais structurellement en retard sur le savoir disponible, et ce retard n'est pas réductible par l'effort individuel. Il est constitutif de la condition médicale moderne.

Cette explosion quantitative s'accompagne d'une fragmentation disciplinaire qui pulvérise l'unité du savoir clinique. La médecine contemporaine, en se spécialisant, a multiplié les silos épistémiques : le cardiologue dialogue difficilement avec le neurologue, qui lui-même peine à intégrer les apports de l'immunologie, de la génétique, de la médecine environnementale. Chaque sous-discipline produit son propre jargon, ses propres protocoles, ses propres revues. Le patient polymorbide, réalité démographique massive dans les sociétés vieillissantes, devient ainsi un objet clinique incompréhensible pour un système organisé autour de la mono-expertise. Qui, dans cet éclatement, est capable de penser la globalité du corps malade ?

À cette fragmentation horizontale s'ajoute une verticalité épistémologique : la hiérarchie entre médecine fondamentale, translationnelle et clinique génère des décalages temporels considérables. Une découverte en biologie moléculaire mettra en moyenne 17 ans avant d'être intégrée dans les pratiques cliniques de routine . Pendant ce temps, le praticien de terrain continue d'opérer avec des protocoles obsolètes, non par négligence, mais par impossibilité structurelle d'accéder au flux continu de l'innovation. Cette asynchronie entre production et application du savoir n'est pas un simple retard : elle est une fracture épistémologique qui sépare la médecine en deux mondes incommunicants.

La dimension géographique de cette crise est tout aussi vertigineuse. Les inégalités d'accès au savoir médical reproduisent et amplifient les inégalités économiques mondiales. Un médecin exerçant dans une zone rurale africaine, ou dans un département d'outre-mer français, n'a pas accès aux mêmes bases de données, aux mêmes formations continues, aux mêmes réseaux d'expertise qu'un praticien urbain européen. Pourtant, c'est précisément dans ces contextes que les enjeux de santé publique sont les plus aigus : maladies tropicales négligées, résurgences épidémiques, zoonoses émergentes. Le savoir médical est mal distribué, et cette mauvaise distribution n'est pas un accident : elle est le résultat d'un modèle économique qui traite l'information médicale comme une marchandise stratégique, soumise aux logiques de propriété intellectuelle et de rentabilité commerciale.

L'explosion des données : du déluge informationnel à l'impossibilité décisionnelle

Le problème n'est pas seulement quantitatif. Il est qualitatif. Le Big Data médical — cette expression galvaudée qui désigne la numérisation massive des données de santé — ne produit pas spontanément de l'intelligence. Il produit du bruit. Des millions de dossiers patients numérisés, des milliards d'images médicales, des téraoctets de séquençages génomiques : cette accumulation vertigineuse ne devient « savoir » que si elle est organisée, filtrée, contextualisée. Or, les systèmes informatiques actuels de gestion hospitalière (EHR, Electronic Health Records) ne sont pas conçus pour penser, mais pour archiver. Ils transforment le clinicien en scribe administratif, contraint de passer plus de temps à remplir des formulaires informatiques qu'à examiner le patient.

Cette bureaucratisation numérique de la médecine n'est pas neutre. Elle déplace le centre de gravité de l'acte clinique : ce qui compte désormais, ce n'est plus la qualité du diagnostic ou la pertinence de la décision thérapeutique, mais la conformité documentaire. Le médecin n'est plus jugé sur sa capacité à soigner, mais sur sa capacité à produire des traces numériques conformes aux exigences médico-légales et assurantielles. Cette inversion des priorités est un symptôme de la rationalisation gestionnaire qui colonise la médecine : l'hôpital devient une usine, le patient un flux, le soin un process.

Parallèlement, l'émergence des plateformes numériques de santé (applications de suivi, wearables, dispositifs connectés) génère un nouveau type de données : les données auto-rapportées, produites par les patients eux-mêmes. Ces données sont massives, hétérogènes, non standardisées, souvent peu fiables. Leur intégration dans le raisonnement clinique pose des défis épistémologiques majeurs : comment distinguer le signal du bruit ? Comment éviter que le médecin ne soit submergé par des informations triviales (« j'ai mal dormi cette nuit ») au détriment de symptômes cliniquement significatifs ? Comment, surtout, maintenir la relation de soin dans un contexte où le patient arrive en consultation avec une liste de diagnostics auto-produits via des moteurs de recherche médicaux grand public ?

Cette médiation algorithmique du savoir médical — via Google, WebMD, forums de patients — n'est pas sans conséquences. Elle transforme la relation médecin-patient en négociation épistémique : le patient ne vient plus chercher un diagnostic, il vient faire valider (ou invalider) ses propres hypothèses. Le médecin se retrouve dans une posture défensive, contraint de justifier son expertise face à un patient « informé » par des sources dont la fiabilité est incertaine. Cette dynamique produit une crise de l'autorité médicale, qui n'est plus fondée sur la compétence reconnue, mais sur la capacité à négocier sa légitimité dans un champ informationnel saturé.

Pandémies et zoonoses : l'urgence One Health comme révélateur

La pandémie de COVID-19 a fonctionné comme un révélateur chimique de toutes les fragilités que nous venons de décrire. Elle a montré, de manière brutale et indiscutable, que les systèmes de santé mondiaux étaient structurellement incapables de faire face à une crise épidémique majeure. Non par manque de ressources (quoique cela ait joué), mais par désorganisation systémique : cloisonnement des disciplines, lenteur des circuits de validation scientifique, fragmentation des bases de données, déficit de coordination entre médecine humaine et vétérinaire, incapacité à penser les interdépendances entre santé, environnement et société.

Le concept de One Health — promu depuis les années 2000 par l'OMS, la FAO et l'OIE — postule que la santé humaine, la santé animale et la santé des écosystèmes sont indissociables . Cette affirmation n'est pas une métaphore écologiste : c'est une description factuelle. 60 % des maladies infectieuses émergentes chez l'humain sont d'origine zoonotique (Ebola, SRAS, MERS, COVID-19, grippe aviaire). Les résistances antimicrobiennes (AMR), qui menacent de rendre inopérantes nos antibiotiques, résultent de pratiques vétérinaires intensives (usage massif d'antibiotiques dans l'élevage industriel). Les pollutions environnementales (pesticides, perturbateurs endocriniens, microplastiques) ont des effets sanitaires qui traversent les frontières d'espèces.

Pourtant, nos systèmes de santé restent disciplinairement cloisonnés. Les médecins humains et les vétérinaires sont formés dans des institutions séparées, avec des référentiels distincts, des nomenclatures différentes (CIM-10 vs VeNom), des bases de données incompatibles. Lorsqu'une épizootie survient dans un élevage (par exemple, la grippe aviaire H5N1), les vétérinaires alertent les autorités sanitaires animales — mais l'information ne circule pas automatiquement vers les épidémiologistes humains. Cette imperméabilité institutionnelle est mortelle : elle retarde la détection des signaux faibles, elle empêche la coordination des réponses, elle dilue les responsabilités.

La COVID-19 a révélé une autre dimension tragique : l'inégalité vaccinale mondiale. Pendant que les pays riches stockaient des doses excédentaires, l'Afrique subsaharienne peinait à vacciner 10 % de sa population. Cette inégalité n'est pas seulement morale : elle est épidémiologique. Un virus qui circule librement dans des populations non vaccinées mute, et ses variants peuvent réinfecter les populations vaccinées. L'égoïsme sanitaire est suicidaire : dans un monde globalisé, la santé est un bien commun planétaire, ou elle n'est rien.

Cette prise de conscience, si elle a été formulée dans les discours, n'a pas été suivie d'effets. Les infrastructures de surveillance épidémiologique restent nationales, fragmentées, sous-financées. Les systèmes d'alerte précoce (comme le GOARN de l'OMS) manquent de moyens. Les laboratoires de diagnostic sont inégalement répartis. Les capacités de séquençage génomique — indispensables pour suivre l'évolution des pathogènes — sont concentrées dans quelques centres d'excellence occidentaux. Bref : nous savons ce qu'il faudrait faire, mais nous ne le faisons pas.

La crise des professions de santé : burnout, isolement, désertification

Parallèlement à la surcharge informationnelle, les professions de santé traversent une crise existentielle dont les manifestations sont multiples : taux de burnout record, augmentation des dépressions et des suicides (particulièrement chez les vétérinaires et les urgentistes), désertification médicale des zones rurales, pénurie chronique de personnel soignant. Ces phénomènes ne sont pas conjoncturels : ils révèlent une perte de sens du métier de soignant dans un système qui transforme le soin en prestation marchande, le patient en client, le médecin en technicien.

Les enquêtes internationales convergent : plus de 50 % des médecins généralistes déclarent ressentir un épuisement professionnel sévère . Les causes invoquées sont récurrentes : charge de travail excessive, pression administrative, manque de reconnaissance, sentiment d'impuissance face à la complexité des cas. Mais au-delà de ces facteurs organisationnels, il y a quelque chose de plus profond : la perte de l'autonomie décisionnelle. Le médecin moderne ne décide plus : il applique des protocoles, il suit des guidelines, il coche des cases dans des logiciels. Cette prolétarisation intellectuelle du travail médical est insupportable pour des professionnels formés à penser par eux-mêmes.

La désertification médicale n'est pas seulement un problème d'attractivité territoriale : elle est le symptôme d'un système qui ne permet plus l'exercice solitaire de la médecine générale. Dans une zone rurale isolée, le médecin est confronté à une solitude épistémique : il n'a pas accès aux expertises spécialisées, il ne peut pas discuter ses cas complexes avec des confrères, il ne bénéficie pas des ressources diagnostiques d'un CHU. Cette solitude est cognitive, mais aussi psychologique : le praticien isolé porte seul le poids de ses décisions, sans filet de sécurité institutionnel.

Les vétérinaires sont dans une situation encore plus précaire. Leur taux de suicide est trois fois supérieur à celui de la population générale . Les raisons sont multiples : isolement professionnel (beaucoup exercent en cabinet rural), pression émotionnelle (euthanasies fréquentes), précarité économique (endettement lié à l'installation), manque de reconnaissance sociale. Mais il y a aussi une dimension spécifique : le vétérinaire est à la fois soignant et conseiller économique (dans l'élevage), ce qui génère des conflits d'intérêts insolubles. Comment conseiller à un éleveur en difficulté de sacrifier un animal malade alors que cela le ruinera ?

Cette crise des professions de santé n'est pas une fatalité : elle est le produit d'un système qui a oublié que le soin est un métier relationnel, fondé sur la confiance, le temps, l'écoute. La rationalisation gestionnaire, en transformant les soignants en exécutants, a détruit cette dimension. Les outils numériques, tels qu'ils sont déployés aujourd'hui, aggravent le problème au lieu de le résoudre : ils ajoutent de la charge administrative sans apporter d'aide décisionnelle réelle.


Problématique : comment fournir une aide décisionnelle fiable, distribuée et souveraine ?

Les limites des solutions commerciales : opacité, centralisation, dépendance

Face à la crise que nous venons de décrire, l'industrie technologique a proposé sa solution : l'intelligence artificielle médicale. Des startups et des géants du numérique (Google Health, IBM Watson, Microsoft Healthcare) ont développé des systèmes de diagnostic assisté par IA, promettant de révolutionner la médecine par l'automatisation et la puissance de calcul. Le discours marketing est séduisant : l'IA serait capable de lire plus d'articles médicaux qu'un humain, de détecter des patterns invisibles à l'œil nu, de proposer des diagnostics plus rapides et plus fiables.

La réalité est plus nuancée. Les systèmes d'IA médicale actuellement commercialisés présentent plusieurs failles structurelles :

1. Opacité algorithmique : Les modèles utilisés (réseaux de neurones profonds) sont des boîtes noires. Ils produisent des résultats, mais n'expliquent pas leur raisonnement. Pour un médecin, cette opacité est inacceptable : comment faire confiance à un diagnostic dont on ne comprend pas la logique ? Comment justifier une décision thérapeutique auprès d'un patient si on ne peut pas expliquer pourquoi l'algorithme a recommandé tel traitement plutôt que tel autre ? L'explicabilité (ou interpretability) est une exigence éthique et légale : un système d'aide à la décision médicale doit pouvoir justifier ses propositions.

2. Données d'entraînement biaisées : Les IA médicales sont entraînées sur des corpus de données qui reflètent les biais sociaux, raciaux, géographiques de leurs concepteurs. Un algorithme entraîné sur des populations nord-américaines blanches ne performera pas correctement sur des populations africaines ou asiatiques (différences génétiques, prévalences pathologiques distinctes). Un système entraîné sur des données hospitalières urbaines ne sera pas adapté aux contextes ruraux. Ces biais ne sont pas des bugs : ils sont constitutifs de l'apprentissage machine, qui ne peut extraire que ce qui est présent dans ses données d'entraînement.

3. Hallucinations et erreurs factuelles : Les Large Language Models (LLMs) comme GPT-4, Claude ou Gemini — qui sont aujourd'hui intégrés dans des outils médicaux grand public — produisent régulièrement des hallucinations : des affirmations fausses mais plausibles, formulées avec une confiance trompeuse . Un LLM peut inventer une référence bibliographique qui n'existe pas, suggérer une posologie incorrecte, confondre deux molécules aux noms proches. Ces erreurs sont d'autant plus dangereuses qu'elles sont invisibles : l'utilisateur non expert ne peut pas les détecter.

4. Centralisation des données : Les systèmes commerciaux fonctionnent en mode cloud : les données patients sont envoyées vers des serveurs distants, analysées par des algorithmes propriétaires, puis les résultats sont renvoyés. Ce modèle pose des problèmes majeurs de confidentialité (violation du secret médical), de souveraineté (les données sont hébergées par des entreprises privées, souvent hors de l'Union européenne), et de dépendance (le praticien est captif d'un fournisseur qu'il ne contrôle pas).

5. Modèles économiques extractifs : Les IA médicales commerciales sont des produits payants, souvent sous forme d'abonnement. Ce modèle économique exclut mécaniquement les praticiens des pays à faibles revenus, ainsi que les petites structures médicales (cabinets ruraux, dispensaires isolés). L'IA médicale commerciale reproduit et amplifie les inégalités d'accès au savoir que nous avons décrites plus haut.

Le besoin d'une alternative distribuée et open-source

Face à ces limites, une question s'impose : est-il possible de concevoir un système d'aide décisionnelle médicale qui soit à la fois performant et éthique ? C'est-à-dire :

  • Transparent : dont le raisonnement soit explicable et auditable ;
  • Souverain : dont les données restent locales, sous contrôle du praticien ;
  • Distribué : déployable sur du matériel standard, sans dépendance à des infrastructures cloud ;
  • Gratuit : accessible sans barrière économique ;
  • Open-source : dont le code source soit ouvert à l'inspection et à la contribution communautaire ;
  • Actualisable : dont la base de connaissances puisse être mise à jour sans réentraîner le modèle entier.

Cette alternative existe : elle repose sur les modèles de langage open-weights, combinés à une architecture RAG (Retrieval-Augmented Generation), déployée sur des infrastructures on-premise. Expliquons ces termes.

Modèles open-weights : souveraineté et auditabilité

Un modèle de langage est open-weights lorsque ses poids (les paramètres numériques appris pendant l'entraînement) sont publiés librement et peuvent être téléchargés, inspectés, modifiés. Contrairement aux modèles propriétaires (GPT-4, Claude), dont les poids sont secrets et hébergés sur des serveurs d'entreprises privées, un modèle open-weights peut être exécuté localement sur le matériel du praticien.

Les principaux acteurs de l'IA open-weights sont :

  • Meta (Llama 4) : sous licence Apache 2.0, modèles performants jusqu'à 405 milliards de paramètres ;
  • Alibaba (Qwen 3) : sous licence Apache 2.0, spécialisés en raisonnement multilingue et médical ;
  • Mistral AI (France) : initiative européenne, modèles hybrides entre open et commercial.

L'avantage de ces modèles est triple :

  1. Auditabilité : le code source et les poids peuvent être inspectés par des experts indépendants pour vérifier l'absence de biais critiques ;
  2. Souveraineté : aucune donnée patient ne quitte l'infrastructure locale ;
  3. Pérennité : le praticien n'est pas dépendant de la survie commerciale d'une startup ou des choix stratégiques d'un géant technologique.
Architecture RAG : savoir actualisable sans réentraînement

Les LLMs classiques ont une connaissance figée à leur date d'entraînement. GPT-4, par exemple, a été entraîné sur des données allant jusqu'en 2023 : il ne connaît rien des publications médicales parues après cette date. Or, la médecine évolue rapidement : de nouveaux médicaments sont autorisés, de nouvelles pathologies émergent, des guidelines sont mises à jour.

L'architecture RAG (Retrieval-Augmented Generation) résout ce problème en séparant le savoir du raisonnement . Le principe est le suivant :

  1. Le LLM conserve ses capacités de raisonnement linguistique et logique ;
  2. Mais avant de répondre à une question, il interroge une base de connaissances externe (corpus médical actualisé) ;
  3. Il récupère les passages pertinents (via une recherche vectorielle) ;
  4. Il génère une réponse en citant ses sources.

Ce mécanisme présente plusieurs avantages :

  • Actualisation : la base de connaissances peut être mise à jour sans réentraîner le modèle (ajout de nouvelles publications, guidelines, protocoles locaux) ;
  • Traçabilité : chaque affirmation du système est accompagnée de ses références bibliographiques ;
  • Réduction des hallucinations : en contraignant le LLM à s'appuyer sur des sources vérifiées, on limite sa tendance à inventer des informations.
Déploiement on-premise : RGPD et souveraineté numérique

Le déploiement on-premise signifie que l'ensemble du système (LLM, base de connaissances, interfaces) tourne sur le matériel local du praticien ou de l'institution médicale. Aucune donnée n'est envoyée vers des serveurs externes. Cette architecture garantit :

  • Conformité RGPD : les données de santé restent sous contrôle du responsable de traitement (l'établissement médical) ;
  • Résilience : le système fonctionne même sans connexion internet ;
  • Confidentialité absolue : aucun tiers (GAFAM, fournisseur cloud) n'a accès aux consultations.

Les exigences matérielles sont modestes : un serveur équipé d'un GPU moderne (ex : NVIDIA RTX 4090, 24 GB VRAM) suffit à exécuter un modèle Qwen3-7B quantifié. Le coût d'acquisition (~3000 €) est dérisoire comparé aux abonnements annuels des solutions commerciales.

One Health comme cadre intégrateur

La problématique de la thèse ne se limite pas à produire un assistant IA pour médecins humains. Elle vise à construire un système intégré One Health, capable d'assister à la fois les médecins, les vétérinaires, et les épidémiologistes dans une approche systémique de la santé .

Pourquoi cette intégration est-elle cruciale ? Parce que les zoonoses (maladies transmissibles entre animaux et humains) représentent 60 % des maladies infectieuses émergentes. Parce que les résistances antimicrobiennes (AMR) sont un problème commun à la médecine humaine et vétérinaire, nécessitant une coordination des pratiques de prescription. Parce que les pollutions environnementales ont des effets sanitaires qui ne peuvent être compris qu'en croisant les données humaines, animales et écologiques.

Concrètement, cela signifie que le système que nous développons doit :

  1. Utiliser des bases de connaissances communes : l'UMLS (Unified Medical Language System) fédère les nomenclatures médicales et vétérinaires ;
  2. Détecter les signaux One Health : un cas de grippe aviaire dans un élevage doit déclencher une alerte pour les médecins de la région ;
  3. Harmoniser les protocoles : les guidelines de prescription antibiotique doivent être cohérentes entre médecine humaine et vétérinaire.

Cette approche n'existe pas dans les systèmes commerciaux actuels, qui sont cloisonnés par discipline. Elle est pourtant indispensable pour anticiper et répondre aux crises sanitaires futures.


Hypothèse : un LLM distribué et open-source, qualifié par RAG, peut alléger la charge cognitive et renforcer l'équité

Formulation de l'hypothèse centrale

L'hypothèse structurante de cette thèse est la suivante :

Un système d'aide à la décision clinique, basé sur un Large Language Model open-weights, augmenté par une architecture RAG (Retrieval-Augmented Generation), déployé en infrastructure on-premise, et intégré dans un cadre One Health, peut :

  1. Réduire significativement la charge cognitive des praticiens en automatisant les tâches de recherche documentaire, de synthèse bibliographique et de vérification des interactions médicamenteuses ;
  2. Améliorer l'équité d'accès au savoir médical en fournissant, gratuitement et sans barrière géographique, un niveau d'expertise comparable à celui des centres hospitaliers universitaires ;
  3. Renforcer la souveraineté numérique des systèmes de santé en évitant la dépendance aux infrastructures cloud propriétaires et aux modèles économiques extractifs des géants technologiques ;
  4. Garantir la transparence et l'auditabilité des décisions assistées par IA, en rendant visible la chaîne de raisonnement et en citant systématiquement les sources mobilisées.

Nous posons une question modeste mais précise : **dans quelle mesure un outil numérique peut-il alléger certaines dimensions de la surcharge cognitive, tout en respectant des contraintes éthiques strictes ?**Respect du RGPD et souveraineté des données : une exigence non négociable

Le Règlement Général sur la Protection des Données (RGPD), entré en vigueur en 2018, impose des contraintes strictes sur le traitement des données de santé. Ces données sont considérées comme sensibles (article 9 RGPD) et bénéficient d'une protection renforcée.

Les systèmes d'IA médicale commerciaux, qui fonctionnent en mode cloud, posent des problèmes majeurs :

  • Transfert de données hors UE : les données patients transitent par des serveurs situés aux États-Unis ou en Asie, soumis à des législations moins protectrices (CLOUD Act américain, lois sur la sécurité nationale chinoise) ;
  • Absence de contrôle : le praticien ne sait pas ce que devient la donnée une fois envoyée (est-elle conservée ? réutilisée pour l'entraînement ? revendue à des tiers ?) ;
  • Vulnérabilité aux cyberattaques : les bases centralisées sont des cibles privilégiées pour les hackers.

Notre approche on-premise élimine ces risques :

  • Les données ne quittent jamais l'infrastructure locale ;
  • Le praticien ou l'établissement médical conserve le contrôle total ;
  • Les sauvegardes sont chiffrées localement (LUKS sous Linux, BitLocker sous Windows) ;
  • L'accès est restreint par authentification forte et gestion des rôles (médecin / infirmier / administrateur).

Cette architecture garantit la conformité RGPD sans effort : puisqu'il n'y a pas de transfert de données vers un tiers, les obligations de notification (article 28) et de consentement renforcé ne s'appliquent pas. Le responsable de traitement reste l'établissement de santé, comme pour tout dossier médical classique.

De plus, cette approche renforce la souveraineté numérique : les États et les institutions médicales ne sont pas dépendants des infrastructures cloud américaines ou chinoises. C'est un enjeu géopolitique majeur à l'heure où la data est devenue une ressource stratégique.

Équité d'accès : un système gratuit, multilingue, adapté aux contextes low-resource

L'un des engagements fondateurs de ce projet est l'équité d'accès. Nous refusons le modèle économique dominant de l'IA médicale, qui reproduit et amplifie les inégalités mondiales. Notre système est :

1. Gratuit : aucun abonnement, aucune licence payante. Le code source est ouvert (licence AI GPL v1, dérivée de l'AGPLv3). Tout praticien peut le télécharger, l'installer, le modifier. Le principal frein sera le coût du matériel informatique.

2. Autonome : fonctionne sans connexion internet permanente. Crucial pour les zones rurales ou les pays où l'accès internet est instable.

3. Low-resource : peut tourner sur du matériel modeste.

4. Multilingue : les LLMs modernes (Llama 4, Qwen3) sont entraînés sur des corpus multilingues.

5. Adapté au contexte local : le corpus RAG peut être enrichi avec des protocoles locaux, des données épidémiologiques régionales, des guidelines adaptées. Exemple :  médecine tropicale (dengue, chikungunya, paludisme).

 

 

 

Contributions et objectifs généraux de la thèse

Contributions

1. Un logiciel opérationnel open-source Architecture GraphRAG One Health : Nous proposons une implémentation open-source d'un système GraphRAG intégrant simultanément médecine humaine et vétérinaire, avec détection automatique des alertes One Health (zoonoses, AMR). Le déploiement se fait on-premise sur matériel à ressources limitées : Modèle Qwen3-30B-A3B exécutable sur CPU 8 cores, 64 GB RAM, GPU RTX4090 24 GB VRAM ; 2 TB SSD

2. Corpus curated médical multilingue : corpus RAG à partir de sources hétérogènes (UMLS, PubMed, guidelines cliniques), avec pipeline de validation scientifique. Licence dépendante des sources, étude en cours.

3. démontrer qu'une IA médicale éthique, souveraine et équitable est techniquement possible et économiquement viable.

Objectifs mesurables de la thèse

Objectif Métrique Cible Baseline
Réduction charge cognitive NASA-TLX score -30% Consultation sans IA
Gain de temps Rédaction -80% Saisie manuelle
Précision diagnostique Concordance avec experts >90% LLM seul : 70%
Couverture One Health Détection alertes zoonoses >95% Système cloisonné : 60%
Souveraineté % données restant locales 100% Cloud : 0%

Ces objectifs seront évalués dans le Chapitre 7 (méthodologie) et mesurés dans le Chapitre 8 (résultats).

Objectifs à long terme

Nous visons à créer des relations de partage de connaissances rassemblant :

  • Des institutions médicales (CHU, cliniques, cabinets, ordres professionnels) ;
  • Des institutions vétérinaires (écoles nationales vétérinaires, syndicats) ;
  • Des agences de santé publique (ARS, ANSES, EFSA) ;
  • Des laboratoires de recherche en IA et en santé publique ;
  • Des acteurs du logiciel libre (associations, fondations).

Ces partenariats ou contributions permettraient de bénéficier d'une infrastructure partagée, financée par des fonds publics et privés, dont les bénéfices profitent à tous les praticiens sans distinction.

 


 

 

 

 

Organisation du document : une thèse augmentée et un logiciel

Du concept au code

Cette thèse est une expérimentation en conditions réelles ce document lui-même a été co-rédigé avec plusieurs Large Language Models (Qwen, DeepSeek, Claude, GPT, Gemini, Co-Pilot, Mistral), sous supervision humaine constante. Cette approche est constitutive de la problématique.
Comment évaluer la pertinence d'un LLM médical si nous ne comprenons pas intimement ses capacités et ses limites ? Comment critiquer les IA commerciales si nous n'avons pas expérimenté les nôtres ? La thèse est donc à la fois :

  • Un objet d'étude (les LLMs médicaux) ;
  • Un outil de production (le LLM comme assistant rédactionnel) ;
  • Une preuve de concept (le système SantAI lui-même).

Cette triple dimension impose une structure documentaire hybride :

graph TD
    A[Prologue: Thèse Augmentée] --> B[Chapitre 1: Introduction]
    B --> C[Chapitre 2: Fondamentaux]
    C --> D[Chapitre 3: Mathématiques]
    D --> E[Chapitre 4: One Health]
    E --> F[Chapitre 5: État de l'art]
    F --> G[Chapitre 6: Architecture]
    G --> H[Chapitre 7: Méthodologie]
    H --> I[Chapitre 8: Résultats]
    I --> J[Chapitre 9: Discussion]
    J --> K[Annexes]

    G -.->|Implémentation| L[Code GitHub]
    H -.->|Protocoles| M[Datasets]
    I -.->|Mesures| N[Logs Expérimentaux]

    style A fill:#ffe6cc
    style L fill:#d4edda
    style M fill:#d4edda
    style N fill:#d4edda

Chaque chapitre théorique (2-6) est accompagné de ses implémentations logicielles (disponibles sur GitHub). Chaque protocole expérimental (7) génère des datasets publics (anonymisés). Chaque résultat (8) est reproductible via des logs d'exécution traçables.

Le schéma du principe de fonctionnement du logiciel développé en parallèle à l'écriture de cette thèse

graph TB
    A[Consultation patient] --> B[Transcription audio Whisper]
    B --> C[Extraction termes médicaux LLM]
    C --> D[Recherche Graph Neo4j]
    C --> E[Recherche Vector ChromaDB]
    D --> F[Fusion contexte]
    E --> F
    F --> G[Génération réponse LLM]
    G --> H[Thinking mode visible]
    G --> I[Citations sources]
    H --> J[Validation praticien]
    I --> J
    J --> K[Décision thérapeutique]

    style A fill:#e3f2fd
    style K fill:#c8e6c9
    style G fill:#fff9c4
    style H fill:#ffccbc

 

Fondamentaux conceptuels et techniques

Réseaux de neurones, apprentissage supervisé / non supervisé

Un réseau de neurones artificiel (RNA) est une architecture computationnelle inspirée — de manière très approximative — du fonctionnement du cortex cérébral. Il consiste en une cascade de couches de neurones informatiques, chacun appliquant une transformation non linéaire à une combinaison pondérée de ses entrées.

Apprentissage Supervisé
L'apprentissage supervisé est un paradigme d'apprentissage automatique qui repose sur un jeu de données étiquetées. Pour chaque exemple d'entraînement, représenté par une entrée ( x_i ), la sortie attendue ou étiquette ( y_i ) est connue.

L'objectif principal est d'ajuster un modèle ( f_\theta ) (paramétré par ( \theta )) de manière à ce que ses prédictions correspondent au mieux aux étiquettes réelles. Cette adéquation est mesurée et optimisée via une fonction de perte (ou loss function).

Mathématiquement, le but est de trouver les paramètres ( \theta ) qui minimisent la fonction de perte moyenne sur l'ensemble des données d'entraînement :

\[ \\min_{\\theta} \\frac{1}{N} \\sum_{i=1}^{N} \\mathcal{L}\\big(f_\\theta(x_i), y_i\\big) \]
\[ \min_{\theta} \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}\big(f_\theta(x_i), y_i\big) \]

Où :

  • ( N ) est le nombre total d'exemples dans le jeu de données.
  • ( \mathcal{L} ) est la fonction de perte, qui quantifie l'écart entre la prédiction du modèle ( f_\theta(x_i) ) et la valeur réelle ( y_i ).

Le processus peut être schématisé de la manière suivante :

flowchart TD
    A[Jeu de données étiquetées<br>] --> B[Modèle f_θ]
    B --> C[Prédiction f_θ]
    C --> D{Calcul de la perte<br>ℒ}
    D -- Mesure l'écart --> E[Mise à jour des paramètres θ<br>pour minimiser ℒ]
    E --> B

Ce cycle d'apprentissage, souvent via des algorithmes comme la descente de gradient, permet au modèle d'apprendre progressivement la relation sous-jacente entre les entrées ( x_i ) et les sorties ( y_i ).

L’apprentissage non supervisé, en revanche, cherche à découvrir des structures latentes (clusters, dimensions réduites, régularités) sans supervision explicite — ce qui est le fondement de l’auto-encodage et de la modélisation du langage.

Transformer : architecture, attention, embeddings, position encoding

L’architecture Transformer, introduite par Vaswani et al. (2017), repose sur le mécanisme d’attention multi-têtes. Contrairement aux RNN ou CNN, elle traite les séquences de manière parallèle, grâce à :

  • Embeddings : chaque token ( t ) est projeté dans un espace vectoriel continu ( \mathbf{e}_t \in \mathbb{R}^d ) ;
  • Positional encoding : une représentation sinusoidale ou apprise est ajoutée pour préserver l’ordre séquentiel :
\[ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right) \]
  • Attention : le poids attribué au token ( j ) lors du traitement de ( i ) est :

    \[ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

    \(Q, K, V\) sont des projections linéaires des embeddings.

Token, corpus, dataset : comment le langage devient vecteurs**

Un token est l’unité atomique de traitement. Il peut être un mot, un sous-mot (via Byte-Pair Encoding), ou même un caractère. Le corpus est l’ensemble des textes utilisés pour l’entraînement. Le dataset est le corpus structuré pour l’apprentissage (par exemple, en paires entrée-sortie).

La transformation en vecteurs s’opère via une matrice d’embedding \(( E \in \mathbb{R}^{V \times d} )\), où \(V\) est la taille du vocabulaire. Chaque token est représenté par une ligne de cette matrice, apprise par descente de gradient.

Qu’est-ce qu’un LLM, un modèle “large”, un MoE**

Un Large Language Model (LLM) est un modèle de langage dont la taille dépasse typiquement 7 milliards de paramètres, ce qui lui confère une capacité de généralisation inédite. La notion de “large” n’est pas seulement quantitative : elle implique une émergence de comportements complexes (raisonnement, traduction, génération cohérente) non programmés explicitement.

Un Mixture of Experts (MoE) est une architecture où seuls certains sous-réseaux (“experts”) sont activés pour une entrée donnée. Cela permet d’augmenter la capacité du modèle sans exploser les coûts de calcul. Par exemple, Mistral-MoE ou Qwen-MoE activent 2 experts sur 8 à chaque couche.

Fine-tuning, instruction tuning, PEFT, LoRA**

  • Fine-tuning : réentraînement partiel sur un corpus ciblé (ex. : textes cliniques) ;

  • Instruction tuning : entraînement sur des paires (instruction, réponse) pour aligner le comportement du modèle ;

  • PEFT (Parameter-Efficient Fine-Tuning) : adaptation avec très peu de paramètres modifiés ;

  • LoRA (Low-Rank Adaptation) : insertion de matrices de rang faible \(A \in \mathbb{R}^{d \times r}, B \in \mathbb{R}^{r \times d}\) dans les poids \(W\), de sorte que \(W' = W + AB\), avec \((r ll d)\).
    Principe : Insert de matrices de rang faible \(A \in \mathbb{R}^{d \times r}\) et \(B \in \mathbb{R}^{r \times d}\) dans les poids pré-entraînés \(W\), de sorte que :
    \(W′=W+BA\)
    avec la contrainte de rang faible \(r \ll d\).
    Points clés à vérifier :

    Ordre des matrices : Certains articles utilisent \(W + BA\) plutôt que \(W + AB\)
    Dimensions :
    \(W \in \mathbb{R}^{d \times d}(poids~original)\)
    \(A \in \mathbb{R}^{d \times r}\), \(B \in \mathbb{R}^{r \times d}\)
    \(BA \in \mathbb{R}^{d \times d}\) (même dimension que \(W\))
    Contrainte de rang : \(r \ll d\) typiquement \(r \in [4, 64]\) vs \(d \in [1024, 4096]\)

RAG et bases vectorisées**

Le Retrieval-Augmented Generation (RAG) couple un LLM avec une base de connaissances externe. À chaque requête, un retriever (souvent basé sur la similarité cosinus) récupère les documents les plus pertinents, qui sont ensuite injectés dans le contexte du générateur.

La similarité cosinus entre deux embeddings \(\mathbf{u}, \mathbf{v}\) est :

\[ \text{sim}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} \]

Cela permet de dépasser les limites du corpus d’entraînement sans réentraîner le modèle.

GraphRAG : au-delà de la recherche vectorielle

Le RAG classique repose sur une recherche vectorielle : on transforme textes et requêtes en vecteurs numériques (embeddings), puis on trouve les passages les plus similaires par proximité géométrique. Cette approche fonctionne bien pour des questions factuelles simples, mais elle montre ses limites face à des raisonnements complexes nécessitant de relier plusieurs concepts.

Prenons un exemple clinique : "Quel antihypertenseur prescrire à une patiente diabétique enceinte ?"

Une recherche vectorielle simple récupérera :

  • Des passages sur les antihypertenseurs ;
  • Des passages sur le diabète gestationnel ;
  • Des passages sur les contre-indications médicamenteuses pendant la grossesse.

Mais elle nefera pas spontanément le lien logique : "Les IEC sont contre-indiqués pendant la grossesse → Il faut donc éviter le Lisinopril → Préférer la Methyldopa, qui est sûre chez la femme enceinte diabétique".

C'est ici qu'intervient le GraphRAG : une architecture hybride qui combine recherche vectorielle et graphe de connaissances .

Un graphe de connaissances médicales (implémenté avec Neo4j) structure le savoir sous forme de :

  • Nœuds : concepts médicaux (maladies, médicaments, symptômes, contre-indications)
  • Relations : liens sémantiques typés (MAY_TREAT, CONTRAINDICATED_WITH, CAUSES, PREVENTS)

Exemple de graphe :

graph TD
    Diabete[Diabète Type 2] -->|MAY_BE_TREATED_BY| Lisinopril[Lisinopril]
    Lisinopril -->|CONTRAINDICATED_WITH| Grossesse[Grossesse]
    Lisinopril -->|PREVENTS| Nephropathie[Néphropathie Diabétique]
    Methyldopa[Methyldopa] -->|SAFE_IN| Grossesse
    Methyldopa -->|MAY_TREAT| HTA[Hypertension]

    style Diabete fill:#ffcccc
    style Grossesse fill:#ffe6cc
    style Lisinopril fill:#ccf2ff
    style Methyldopa fill:#ccffcc

Lors d'une requête, le système :

  1. Extrait les concepts clés (diabète, grossesse, antihypertenseur) via le LLM ;
  2. Recherche dans le graphe les chemins reliant ces concepts ;
  3. Récupère les relations pertinentes (Lisinopril → CONTRAINDICATED_WITH → Grossesse) ;
  4. Fusionne ces informations structurées avec les passages textuels du corpus RAG ;
  5. Génère une réponse qui expose explicitement la chaîne de raisonnement.

Réponse GraphRAG :

🧠 RAISONNEMENT CLINIQUE :

1. ANALYSE SITUATION :
   - Patiente diabétique [Concept: C0011849]
   - Enceinte [Concept: C0032961]
   - Nécessite antihypertenseur

2. HYPOTHÈSES ENVISAGÉES :
   A. Lisinopril (IEC)
      ✅ Efficace pour diabète + HTA [Graph: C1234 --MAY_TREAT--> C5678]
      ❌ CONTRE-INDIQUÉ grossesse [Graph: C1234 --CONTRAINDICATED_WITH--> C0032961]
      → ÉCARTÉ

   B. Methyldopa
      ✅ Sûr pendant grossesse [Graph: C9999 --SAFE_IN--> C0032961]
      ✅ Efficace HTA [Textbook: Source-1, p.456]
      → RECOMMANDÉ

3. DÉCISION :
   Prescrire Methyldopa 250mg x2/jour

4. SURVEILLANCE :
   - TA hebdomadaire
   - Glycémie à jeun mensuelle
   - Surveillance fœtale échographique

SOURCES :
[Graph] UMLS Concept C1234 (Lisinopril)
[Graph] Relation CONTRAINDICATED_WITH (Pregnancy)
[Text] ESC Guidelines 2024, p.456

Cette explicitation du raisonnement est ce qui distingue notre approche des IA commerciales opaques. Le praticien voit pourquoi le système propose Methyldopa plutôt que Lisinopril. Il peut valider ou invalider cette logique. Il garde la main.

 

Pourquoi le RAG est crucial : séparer le savoir du raisonnement

Le cœur de notre hypothèse repose sur l'architecture RAG. Expliquons pourquoi elle est décisive.

Un LLM classique (comme GPT-4 ou Llama 4) fonctionne par compression de l'information : il a lu des milliards de textes pendant son entraînement, et il en a extrait des patterns statistiques qu'il encode dans ses paramètres (ses « poids »). Lorsqu'on lui pose une question, il génère une réponse en prédisant les mots les plus probables compte tenu de ce qu'il a appris.

Ce mécanisme présente deux limites majeures :

  1. Obsolescence : le savoir du modèle est figé à la date d'entraînement. Il ne connaît rien des découvertes récentes.
  2. Hallucinations : en l'absence d'information pertinente dans ses poids, le modèle invente une réponse plausible mais fausse.

Le RAG résout ces deux problèmes en découplant le savoir (stocké dans une base de données externe) du raisonnement (assuré par le LLM). Voici le processus :

graph LR
    A[Question clinique] --> B[Embedding vectoriel]
    B --> C[Recherche dans corpus médical]
    C --> D[Récupération passages pertinents]
    D --> E[Fusion contexte + question]
    E --> F[LLM génère réponse]
    F --> G[Réponse avec citations]

    style A fill:#e1f5ff
    style G fill:#d4edda
    style F fill:#fff3cd

Durant la rédaction de cette thèse, nous avons vu les éditeurs principaux contourner par ailleurs ce problème d'actualité des connaissances en intrégrant une recherche web dans leur processus de réponse. Recherche les 10 premiers résultats d'un moteur de recherche.

Sans RAG : Le LLM répond avec ses connaissances internes, potentiellement obsolètes, mais normalement vérifiées.

Avec RAG : Le LLM répond avec des données actualisés. Si la base est une recherche web la réponse, non vérifiée, peut contenir des biais, erreurs ou hallucination. Si la base est vérifiée

Les Limites du RAG Classique

L'architecture RAG classique repose sur une recherche vectorielle : les textes du corpus sont transformés en vecteurs numériques, et lorsqu'une question arrive, le système cherche les vecteurs les plus proches sémantiquement.
Dit autrement :

  • Les documents textuels sont transformés en vecteurs numériques (embeddings)
  • Pour chaque requête, le système identifie les vecteurs sémantiquement les plus proches
    Si cette approche est efficace pour la recherche de similarité textuelle elle est incapable de capturer les relations structurées entre concepts médicaux.

C'est ici qu'intervient le GraphRAG, une évolution récente qui combine recherche vectorielle et graphes de connaissances .

L'Émergence du GraphRAG

Le GraphRAG représente une avancée majeure en combinant recherche vectorielle et graphes de connaissances .

Architecture Fondamentale

graph TB
    A[Concepts Médicaux] --> B[Nœuds du Graphe]
    C[Relations Sémantiques] --> D[Arêtes du Graphe]
    E[Requête Utilisateur] --> F{Recherche Hybride}
    F --> G[Recherche Vectorielle]
    F --> H[Interrogation du Graphe]
    G --> I[Résultats Textuels]
    H --> J[Chemins Relationnels]
    I & J --> K[Réponse Contextuelle]

Mécanisme de Fonctionnement

  1. Représentation des connaissances :

    • Concepts médicaux (pathologies, traitements, symptômes) = nœuds
    • Relations sémantiques (TRAITE, CAUSE, CONTRE-INDIQUÉ) = arêtes
    • Traitement des requêtes :

    • Recherche vectorielle traditionnelle dans les textes

    • ET exploration des chemins relationnels dans le graphe
Étude Comparative : Recherche Vectorielle vs GraphRAG

Question : "Quel médicament pour un patient diabétique hypertendu ?"

Approche Vectorielle Classique

  • Identifie des documents mentionnant "diabète" et "hypertension"
  • Retourne des passages textuels similaires
  • Limite : absence de raisonnement structuré

Approche GraphRAG

graph LR
    A[Diabète] -- RISQUE_DE --> B[Néphropathie<br>diabétique]
    B -- PRÉVENU_PAR --> C[Lisinopril<br>classe IECA]
    C -- TRAITE --> D[Hypertension]

    style A fill:#e1f5fe
    style D fill:#e1f5fe
    style C fill:#f3e5f5
Raisonnement Structuré Généré

"Le Lisinopril constitue une option thérapeutique optimale car il adresse simultanément :

  • Le traitement direct de l'hypertension artérielle
  • La protection rénale contre la néphropathie diabétique"
Implémentation et Validation

Notre plateforme utilise Neo4j comme moteur de graphes, enrichi par l'UMLS (Unified Medical Language System) comprenant :

\[ \text{Couverture} = 4M+ \text{ concepts} \times \text{relations validées} \]
Impact sur la Fiabilité

Cette architecture hybride permet une réduction drastique des hallucinations :

\[ \text{Fiabilté} \propto \frac{\text{Chemins validés}}{\text{Assertions générées}} \]

Le LLM ne peut suggérer une association thérapeutique que s'il existe un chemin relationnel validé dans le graphe de connaissances, garantissant ainsi une base factuelle solide pour chaque recommandation médicale.

Le "thinking mode" : rendre le raisonnement visible

Un des principes fondateurs de notre approche est l'explicabilité. Dans un contexte médical, une IA qui propose un diagnostic sans expliquer son raisonnement est inutilisable : le praticien ne peut pas vérifier la validité de la proposition, et il ne peut pas justifier sa décision auprès du patient ou d'une autorité médico-légale.

Nous avons donc implémenté ce que nous appelons le "thinking mode" (mode raisonnement), inspiré des travaux sur les Chain-of-Thought prompting . Le principe est simple : avant de produire sa réponse finale, le LLM explicite son raisonnement étape par étape, en rendant visible sa chaîne logique.

Exemple de thinking mode :

Question clinique : "Femme 67 ans, diabète type 2 + hypertension. TA 145/95, HbA1c 8.5%. Quel traitement initier ?"

Thinking mode (visible pour le praticien) :

🧠 RAISONNEMENT CLINIQUE :

1. ANALYSE SITUATION :
   - Diabète T2 mal contrôlé (HbA1c 8.5% > cible 7%)
   - HTA non contrôlée (145/95 > cible 130/80)
   - Patiente âgée → risque cardiovasculaire élevé

2. RECHERCHE GRAPH (Neo4j) :
   - Concept C0020538 (Hypertension) --[MAY_BE_TREATED_BY]--> C0065374 (Lisinopril)
   - Concept C0011849 (Diabetes) --[PREVENTED_BY]--> C0065374 (protection rénale)
   - Path: Diabète → Néphropathie → Protection IECA → Hypertension

3. RECHERCHE VECTORIELLE (corpus) :
   - [Score 0.89] "ACE inhibitors first-line for diabetic hypertensives" [ESC 2024]
   - [Score 0.82] "Lisinopril reduces CV risk in diabetics" [NEJM 2023]

4. DIAGNOSTIC DIFFÉRENTIEL :
   a) Lisinopril (IECA)
      ✅ Réduit TA [Graph evidence]
      ✅ Protection rénale diabétique [Graph + Vector]
      ⚠️ Surveillance créatinine/K+

   b) Amlodipine (Inhibiteur calcique)
      ✅ Efficace sur TA
      ❌ Pas de néphroprotection

   c) Hydrochlorothiazide (Diurétique)
      ⚠️ Aggrave équilibre glycémique
      ❌ Non optimal

5. DÉCISION : Lisinopril 10mg/jour
   Rationnelle : double bénéfice TA + reins
   Evidence : Graph (UMLS) + Guidelines (ESC 2024)

6. PLAN SURVEILLANCE :
   - Créatinine + K+ à J+7
   - TA à J+15
   - HbA1c à M+3

Ce mode de raisonnement transparent présente plusieurs avantages :

  1. Pédagogique : le praticien junior peut suivre le raisonnement et apprendre ;
  2. Vérifiable : chaque étape peut être contestée si elle semble incorrecte ;
  3. Médico-légal : en cas de litige, la chaîne de décision est documentée ;
  4. Amélioration continue : si le raisonnement contient une erreur, elle peut être identifiée et corrigée.

Modularité et agnosticisme des LLMs : un choix stratégique

Une caractéristique cruciale de notre architecture est son agnosticisme vis-à-vis des LLMs. Contrairement aux systèmes propriétaires qui enferment l'utilisateur dans un modèle unique (GPT-4, Claude, Gemini), notre système permet de changer de modèle sans refondre l'architecture.

Pourquoi est-ce important ? Pour plusieurs raisons :

1. Évolution rapide du domaine : Les LLMs progressent à une vitesse vertigineuse. Un modèle performant aujourd'hui sera obsolète dans 6 mois. En rendant le système modulaire, nous garantissons que le praticien peut upgrader vers les meilleurs modèles disponibles sans tout reconstruire.

2. Diversité des contraintes : Un CHU urbain équipé de serveurs puissants pourra utiliser un modèle Llama 4 (70B paramètres, très performant mais gourmand en ressources). Un cabinet rural avec un simple PC de bureau pourra se contenter d'un Qwen3-8B (plus léger, suffisant pour la plupart des cas). Notre architecture s'adapte.

3. Souveraineté et transparence : En permettant le choix du modèle, nous évitons la dépendance à un fournisseur unique. Si demain Meta décide de fermer Llama, nous basculons sur Qwen. Si l'Europe lance un projet de LLM souverain (comme Mistral à plus grande échelle), nous l'intégrons.

4. Comparaison et validation scientifique : Notre protocole expérimental (Chapitre 7) utilise plusieurs LLMs en parallèle (Llama 4, Qwen3, Mistral, Claude API pour benchmark) pour évaluer lequel est le plus performant en contexte médical. Cette approche multi-modèles est impossible avec des systèmes propriétaires fermés.

L'architecture modulaire repose sur une interface de abstraction :

# Interface abstraite
class ClinicalLLM:
    def generate(self, prompt: str, context: str) -> str
    def explain_reasoning(self) -> str
    def cite_sources(self) -> List[Citation]

# Implémentations concrètes
class LlamaModel(ClinicalLLM): ...
class QwenModel(ClinicalLLM): ...
class MistralModel(ClinicalLLM): ...

Cette abstraction permet de swap (échanger) les modèles en changeant une ligne de configuration, sans toucher au reste du code.

 

 

Surcouches d’interfaces : rôle des couches conversationnelles et de la modération**

La réponse brute d’un LLM est souvent post-traitée par une surcouche :

  • Filtrage sémantique (refus de répondre à certaines requêtes) ;
  • Réécriture éthique (neutralisation de biais, atténuation de jugements) ;
  • Personnalisation conversationnelle (ton, style, niveau de détail).

Chez OpenAI ou Anthropic, ces surcouches sont opiniâtres : elles peuvent altérer — voire annuler — la réponse technique initiale au nom de principes moraux anglo-saxons (puritanisme, wokisme, etc.). Cela soulève un problème épistémologique majeur : la science devient conditionnelle à une idéologie.

Big Data et puissance de calcul : définition, contraintes, écologie computationnelle**

Le Big Data dans le domaine médical se définit par les cinq dimensions fondamentales : Volume, Vélocité, Variété, Véracité, Valeur.

graph TD
    A[📊 VOLUME<br>Données massives<br>To/Peta/Exa-octets]

    B[⚡ VÉLOCITÉ<br>Flux temps réel<br>Streaming continu]

    C[🎭 VARIÉTÉ<br>Sources multiples<br>Structuré vs non-structuré]

    D[✅ VÉRACITÉ<br>Qualité & Fiabilité<br>Données propres et valides]

    E[💰 VALEUR<br>Impact clinique<br>Décisions médicales]

    A --> E
    B --> E
    C --> E
    D --> E

    style A fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    style B fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
    style C fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style D fill:#fce4ec,stroke:#880e4f,stroke-width:2px
    style E fill:#f3e5f5,stroke:#4a148c,stroke-width:3px

Les modèles de langage de grande envergure nécessitent une puissance de calcul se mesurant en exaFLOPs :

\[ \text{Complexité} = \mathcal{O}(n \cdot d^2) \quad \text{où } n \text{ = tokens, } d \text{ = dimensions} \]

Les LLM nécessitent des exaFLOPs de puissance, entraînant une empreinte carbone non négligeable.

Par exemple, l’entraînement de GPT-3 a consommé 1287 MWh.

  • soit l’équivalent de 120 foyers américains sur un an,
  • soit l'équivalent de 500 foyers luxembourgeois.

Cette tension entre puissance computationnelle et responsabilité environnementale définit l'écologie computationnelle moderne dans le domaine de la santé.

Des initiatives existentent, comme le partenariat schneider electric et nvidia.
https://sustainabilitymag.com/articles/schneider-electrics-bid-to-power-ai-factories-with-nvidia

Le LLM n'est pas une pensée autonome**

Le LLM, tel un bulldozer, déblaie rapidement les strates de littérature, de rapports ou de données brutes. Mais c’est l’opérateur qui décide où creuser, quand s’arrêter, et ce qui mérite d’être préservé sous les gravats.

Le LLM n’est pas une pensée autonome, mais un outil de productivité cognitive. Il ne remplace pas le clinicien, le vétérinaire ou l’épidémiologiste — il leur permet de concentrer leur attention sur ce que la machine ne peut pas faire : le jugement, l’empathie, la responsabilité.

Dans la notion "d'aide à la décision" concernant une LLM :

  • il ne faut pas laisser croire que le LLM « comprend » ou « conseille »,
  • Le LLM expose, relie, suggère, interroge — toujours sous contrôle et interprétation humaine qualifiée.

La perception erronée de l’agence cognitive des LLM, une confusion qui alimente à la fois l’enthousiasme irrationnel et les craintes dystopiques.

Et c’est précisément ce que votre métaphore d’outil manuel (scalpel, loupe, règle…) permet de désautomatiser mentalement : elle brise l’illusion de l’agentivité en rappelant que l’intelligence est dans la main, pas dans l’outil.

Pourquoi les gens pensent-ils que les LLM ont une « capacité cognitive autonome » ?

Plusieurs facteurs psychologiques, linguistiques et techniques convergent :

L’illusion de la fluidité conversationnelle : Anthropomorphisme et interface conversationnelle

Les LLM produisent du langage cohérent, grammaticalement correct, souvent contextuellement adapté. Or, chez l’humain, cette fluidité est le signe d’une pensée interne organisée. Le cerveau humain projette donc spontanément cette même organisation mentale derrière les mots — c’est ce qu’on appelle l’anthropomorphisme linguistique.


💡 Exemple : si le LLM dit « Je comprends votre inquiétude », on interprète « comprendre » comme un acte réel de compréhension, alors qu’il ne s’agit que d’un pattern statistique appris pour maximiser la probabilité de réponse « acceptable ».


La persistance du contexte dans la conversation

Les LLM (surtout avec mémoire de session ou RAG) se souviennent (temporairement) de ce qui a été dit précédemment et y font référence. Cela crée l’impression d’une continuité mentale, d’un « moi conversationnel » — comme si un sujet pensant persistait au fil de l’échange.

Mais en réalité, il n’y a ni mémoire durable, ni intention, ni conscience de soi : juste une fenêtre contextuelle glissante et des poids de réseau statiques.

L’usage du « je » et de la première personne

Beaucoup de LLM (surtout les assistants grand public) sont entraînés à utiliser « je », « je pense que… », « je peux vous aider à… ». Cela renforce l’illusion d’un agent intentionnel, alors qu’il s’agit d’un style de réponse appris, pas d’une subjectivité.


🔍 C’est une technique de prompt engineering pour rendre les réponses plus naturelles — pas un indicateur d’existence interne.


La capacité à simuler des rôles

Un LLM peut « jouer » le rôle d’un médecin, d’un avocat, d’un philosophe… Et il le fait souvent de façon convaincante. L’utilisateur a alors l’impression qu’il incarne ce rôle, alors qu’il ne fait que imiter des patterns textuels associés à ce rôle.

C’est comme un comédien qui récite un texte sans croire un mot de ce qu’il dit — sauf qu’ici, il n’y a même pas de comédien.

Le manque de transparence technique

La plupart des utilisateurs ne savent pas que :

  • Le LLM ne raisonne pas au sens logique,
  • Il n’a pas de modèle du monde,
  • Il prédit des mots, pas des vérités,
  • Il n’a ni but, ni désir, ni croyance.

Sans cette connaissance, la boîte noire semble magique — et la magie ressemble à de l’intelligence.

on peut entretenir une conversation… mais…

c’est une conversation avec un miroir statistique, non avec un interlocuteur.
C’est un miroir qui va renvoyer non pas les mots de votre prompt, mais ce que d’autres ont dit dans des situations similaires à la vôtre — reformulé, lissé, et emballé dans un ton empathique.
Ce confort conversationnel ne doit pas nous faire oublier que le LLM n’est personne :
- Il n’écoute pas,
- Il ne comprend pas,
- Il ne pense pas avec nous,
il prédit ce qui ressemble à une réponse.
L’erreur n’est pas d’apprécier de parler à un LLM par liberté cognitive et absence d'autocensure. L’erreur est d’oublier qu’on parle à un miroir statistique.

Mathématiques, mécanique interne et modes de fonctionnement des LLMs

Les vecteurs et espaces de représentation

Les modèles de langage (LLMs) encodent les tokens dans un espace vectoriel latent Rd , où d est la dimension de l’embedding (typiquement d∈[768,12288] ). Soit T l’ensemble des tokens du vocabulaire. Une fonction d’encodage :

ϕ:T→Rd,ϕ(w)=ew​

produit une représentation dense ew​ pour chaque token w . Les relations sémantiques émergent de la proximité angulaire ou euclidienne :

cos(θab​)=∥ea​∥∥eb​∥ea​⋅eb​​

Exemple classique d’analogie linéaire :

e« roi »​−e« homme »​≈e« reine »​−e« femme »​⇒e« roi »​−e« homme »​+e« femme »​≈e« reine »​

Dans le cadre One Health, cette propriété permet de relier des concepts transversaux (ex. : zoonose, réservoir animal, facteur climatique) via des trajectoires sémantiques dans l’espace latent.

Chaque concept, mot ou phrase est projeté dans un espace latent continu. Dans cet espace, des relations sémantiques apparaissent :
[
\text{embedding}(\text{« roi »}) - \text{embedding}(\text{« homme »}) \approx \text{embedding}(\text{« reine »}) - \text{embedding}(\text{« femme »})
]

Ces analogies vectorielles sont la base des systèmes de RAG et des représentations One Health.

Pondération statistique de l’information

Contrairement aux modèles de sac de mots, les LLMs modernes ne reposent pas sur la fréquence brute, mais sur des mécanismes d’attention contextuels. Cependant, des mesures statistiques comme TF-IDF restent utiles pour l’indexation externe dans le RAG.

  • TF (Term Frequency) :

tf(t,d)=∑t′∈d​ft′,d​ft,d​​

  • IDF (Inverse Document Frequency) :

idf(t)=log(∣{d∈D:t∈d}∣N​)

  • TF-IDF :

tfidf(t,d)=tf(t,d)⋅idf(t)

Ces scores guident l’importance contextuelle dans les systèmes de retrieval préalables au RAG, notamment pour les bases de connaissances médicales (ex. : OIE, WHO, OMSA).

Un LLM ne confond pas fréquence et importance. Grâce à des fonctions telles que TF-IDF (Term Frequency–Inverse Document Frequency) ou des mécanismes d’attention, il pondère dynamiquement l’information. Une mention unique dans un article de référence pèse plus qu’une redondance sur un forum.

Pondération contextuelle, Mécanisme d’attention multi-têtes

L’attention n’est pas uniforme : dans la phrase « Le chat mange du poisson dans la cuisine », le mot « poisson » reçoit plus d’attention pour prédire le mot suivant que « dans ». Le modèle hiérarchise les signaux en fonction de leur pertinence contextuelle, non de leur proximité syntaxique.

La couche clé des Transformers est le multi-head self-attention :

Attention(Q,K,V)=softmax(dk​

​QK⊤​)V

où :

  • Q=XWQ , K=XWK , V=XWV ,
  • X∈Rn×d est la séquence d’entrée,
  • WQ,WK,WV∈Rd×dk​ .

La pondération contextuelle αij​ du token i sur le token j est :

αij​=∑j′=1n​exp(dk​

​qi​⋅kj′​​)exp(dk​

​qi​⋅kj​​)​

Cela permet au modèle de focaliser son attention sur des déterminants critiques dans une phrase médicale (ex. : "Le Chlamydophila abortus est responsable d’avortements chez les ovins").

RAG et bases vectorisées en pratique

Entraînement = mémoire à long terme.
RAG = mémoire de travail.

Le LLM stocke des schémas généraux ; le RAG injecte des faits précis. Cette séparation cognitive est essentielle pour éviter les hallucinations dans des domaines critiques comme la santé.

Le RAG sépare mémoire à long terme (corpus statique ou dynamique) et raisonnement (LLM). Son pipeline :

flowchart LR
    A[Requête utilisateur] --> B[Encodeur de requête<br>(ex. : Sentence-BERT)]
    B --> C[Recherche vectorielle<br>dans base de connaissances]
    C --> D[Résultats top-k<br>(documents pertinents)]
    D --> E[Concaténation : requête + documents]
    E --> F[LLM : génération conditionnelle]
    F --> G[Réponse contextualisée]

Mathématiquement, le modèle RAG maximise :

P(y∣x,D)=d∈D∑​P(d∣x)⋅P(y∣x,d)

où D est le corpus, x la requête, y la réponse.

Avantage One Health : Le RAG permet d’intégrer des sources hétérogènes (vétérinaire, humaine, environnementale) sans réentraîner le modèle.

Neo4j et représentation graphique des concepts One Health

Un graphe de connaissances (KG) représente des entités E et des relations R⊆E×E . Dans Neo4j :

  • Nœud : (:Agent {name: "Leptospira interrogans", taxonomy: "bacteria"})
  • Lien : (:Animal)-[:HOST_OF]->(:Agent)
  • Propriétés : poids, provenance, date, fiabilité

Chaque entité peut être vectorisée :

Chaque entité peut être vectorisée :

\[ \psi : E \rightarrow \mathbb{R}^d, \quad \psi(e) = \text{GNN}(e, \mathcal{N}(e)) \]

où N(e) est le voisinage de e , et GNN un Graph Neural Network.

Le RAG hybride combine :

  • Recherche vectorielle (similarité sémantique),
  • Requête Cypher (précision logique).

Exemple de pipeline hybride :

flowchart TD
    U[Requête utilisateur] --> V[Vectorisation]
    V --> S[Recherche ANN<br>(ex. : FAISS, HNSW)]
    S --> K[Top-k nœuds Neo4j]
    K --> C[Cypher enrichi<br>ex: MATCH (a:Agent)-[:CAUSES]->(d:Disease) WHERE a.name IN [...] RETURN d]
    C --> P[Documents + métadonnées]
    P --> L[LLM + RAG]
    L --> R[Réponse vérifiée]

Neo4j permet de modéliser les relations complexes entre :

  • Agents pathogènes,
  • Espèces hôtes,
  • Facteurs environnementaux,
  • Interventions humaines.

Chaque nœud est vectorisé ; chaque lien est pondéré. Le LLM interroge ce graphe via des requêtes RAG hybrides (vectorielles + structurelles).

Mindmap : composants clés d’un système One Health basé sur LLM+KG+RAG

mindmap
  root((Système One Health IA))
    LLM
      Embeddings
      Auto-regressive generation
      Attention
    RAG
      Retrieval (vectoriel)
      Re-ranking
      Context fusion
    Knowledge Graph
      Entités (humain, animal, environnement)
      Relations (transmission, réservoir, intervention)
      Provenance & traçabilité
    Infrastructure
      On-prem (souveraineté)
      Auditabilité
      Mise à jour contrôlée
    Évaluation
      Réduction des hallucinations
      Mesures de fiabilité (F1, precision@k)
      Boucle humaine

Architecture Épistémologique et Déploiement d'un Système GraphRAG en Contexte Médical

"La connaissance n'est pas un territoire à conquérir, mais un réseau de relations à tisser."

L'Émergence d'une Épistémologie Computationnelle

Dans l'espace contemporain de la recherche médicale, nous assistons à une transformation qui dépasse largement les simples mutations technologiques. Ce que nous nommons « intelligence artificielle » participe d'une reconfiguration plus profonde des modalités mêmes du savoir. Le système GraphRAG – Graph-based Retrieval-Augmented Generation – ne constitue pas simplement un outil parmi d'autres, mais l'inscription technique d'une nouvelle ontologie de la connaissance médicale.

L'ambition de cette architecture réside dans sa capacité à cartographier non pas des données isolées, mais les relations qui constituent le tissu même du savoir biomédical. Comme l'écrivait Baudrillard à propos des simulacres, nous ne sommes plus dans l'ordre de la représentation, mais dans celui de la génération : le système ne représente pas la connaissance, il la produit activement par l'articulation de ses composantes.

Cette recherche s'inscrit dans une temporalité paradoxale : celle d'une urgence clinique qui exige des réponses immédiates, et celle d'une réflexion épistémologique qui nécessite la patience de l'analyse. Entre ces deux pôles, le GraphRAG propose une médiation technique qui mérite d'être scrutée dans ses dimensions architecturales, éthiques et pragmatiques.

Épistémologie Documentaire Classique

La médecine moderne repose historiquement sur une épistémologie de l'accumulation : articles, études cliniques, protocoles qui s'empilent dans des bases de données toujours plus vastes. Cette logique archivistique, héritée du positivisme du XIXe siècle, présuppose que la connaissance existe sous forme de « faits » autonomes, extractibles et combinables à volonté.

Or cette présupposition masque une réalité plus complexe : le savoir médical n'existe que dans le réseau de ses relations. Un symptôme n'a de sens que par rapport à une pathologie, elle-même inscrite dans une taxonomie nosologique, liée à des mécanismes physiopathologiques, associée à des protocoles thérapeutiques. La connaissance médicale est fondamentalement relationnelle, et c'est précisément cette dimension que les systèmes traditionnels de récupération d'information échouent à capturer.

Les modèles de langage de grande échelle (LLM), dans leur forme la plus naïve, reproduisent cette insuffisance sous une autre modalité. Leur capacité de génération repose sur des corrélations statistiques extraites de corpus textuels, sans véritable ancrage dans une structure épistémologique explicite. Ils excellent à produire du texte plausible, mais peinent à garantir la fidélité factuelle et la traçabilité des sources – exigences fondamentales en contexte clinique.

Le Tournant Graphique : Topologie et Sémantique

Le passage à une architecture graphique constitue moins une innovation technique qu'une mutation conceptuelle. En représentant la connaissance comme un graphe – ensemble de nœuds (entités) reliés par des arêtes (relations) – nous opérons un déplacement ontologique majeur.

Dans cette structure, l'entité médicale n'existe plus isolément. Un concept comme « diabète de type 2 » devient un nœud connecté à :

  • Des symptômes (polyurie, polydipsie, fatigue)
  • Des mécanismes physiopathologiques (résistance à l'insuline, dysfonction des cellules β)
  • Des facteurs de risque (obésité, sédentarité, prédisposition génétique)
  • Des complications (néphropathie, rétinopathie, neuropathie)
  • Des traitements (metformine, insuline, modifications du mode de vie)
  • Des biomarqueurs (HbA1c, glycémie à jeun)

Cette topologie révèle ce que les documents textuels ne peuvent qu'évoquer : la structure immanente du savoir médical. Le graphe n'est pas une simple visualisation ; il est l'explicitation d'une ontologie pratique qui guide le raisonnement clinique.

La Dialectique Retrieval-Generation : Entre Ancrage et Créativité

L'architecture RAG (Retrieval-Augmented Generation) introduit une dialectique productive entre deux opérations apparemment antagonistes :

  1. Le retrieval (récupération) : mouvement d'ancrage dans un corpus existant, garantie de factualité, traçabilité des sources
  2. La generation (génération) : mouvement de synthèse créative, adaptation contextuelle, production de cohérence narrative

Cette tension n'est pas un compromis technique, mais l'inscription computationnelle d'une tension épistémologique fondamentale : celle entre l'autorité de la source et la nécessité de l'interprétation. En médecine, cette dialectique prend une dimension éthique : comment produire une réponse personnalisée au contexte clinique unique d'un patient, tout en restant fidèle aux données probantes de la littérature ?

Le GraphRAG résout cette tension par une stratégie en trois temps :

  1. Contextualisation : identification des concepts pertinents dans la requête
  2. Navigation : exploration du graphe de connaissances pour récupérer non seulement des documents, mais des relations entre concepts
  3. Synthèse : génération d'une réponse qui articule ces relations de manière cohérente et contextuellement appropriée

Architecture Technique : Anatomie d'un Système Épistémologique

Une Infrastructure à Huit Dimensions
L'architecture du système repose sur une organisation modulaire en huit catégories conceptuelles, chacune répondant à des exigences spécifiques :

graph TB
    subgraph Technique[Catégorie Technique]
        A1[Architecture Système]
        A2[Pipeline GraphRAG]
        A3[Infrastructure Cloud]
    end

    subgraph IA[Catégorie IA]
        B1[Modèles de Langage]
        B2[Embeddings Vectoriels]
        B3[Algorithmes de Re-ranking]
    end

    subgraph Medical[Catégorie Médicale]
        C1[Ontologies Cliniques]
        C2[Taxonomies Nosologiques]
        C3[Protocoles Thérapeutiques]
    end

    subgraph Data[Catégorie Données]
        D1[Graphes de Connaissances]
        D2[Bases Vectorielles]
        D3[Sources Documentaires]
    end

    subgraph Gov[Catégorie Gouvernance]
        E1[Conformité Réglementaire]
        E2[Sécurité et Confidentialité]
        E3[Auditabilité]
    end

    subgraph Community[Catégorie Communauté]
        F1[Validation Clinicienne]
        F2[Retours Utilisateurs]
        F3[Amélioration Continue]
    end

    subgraph Knowledge[Catégorie Connaissances]
        G1[Curation de Contenu]
        G2[Mise à Jour Dynamique]
        G3[Versionnement]
    end

    subgraph Workflow[Catégorie Workflow]
        H1[Intégration Clinique]
        H2[Interface Utilisateur]
        H3[Monitoring Performance]
    end

    A2 --> B1
    A2 --> D1
    A2 --> D2
    B1 --> C1
    D1 --> C1
    E1 --> A3
    F1 --> G1
    H1 --> A2
    H3 --> B3

Cette cartographie révèle la complexité systémique de l'entreprise : il ne s'agit pas simplement de « brancher » un modèle de langage à une base de données, mais de construire une infrastructure épistémologique intégrant des dimensions techniques, médicales, éthiques et organisationnelles.

Le Pipeline GraphRAG : Septuple Articulation de la Connaissance

Le cœur opérationnel du système réside dans un pipeline en sept étapes, chacune constituant une transformation épistémologique spécifique :

flowchart LR
    Q[Requête Clinique] --> E[Extraction des Termes Médicaux]
    E --> GR[Récupération dans le Graphe]
    E --> VR[Récupération Vectorielle]
    GR --> F[Fusion Multi-Source]
    VR --> F
    F --> G[Génération de Réponse]
    G --> V[Validation et Scoring]
    V --> R[Réponse Finale]

    style Q fill:#e1f5ff
    style R fill:#d4edda
    style F fill:#fff3cd
    style V fill:#f8d7da
Étape 1 : Extraction des Termes Médicaux

La première opération consiste à identifier les entités médicales pertinentes dans la requête utilisateur. Cette extraction ne relève pas d'une simple reconnaissance de mots-clés, mais d'une analyse sémantique qui mobilise :

  • Recognition de Named Entities (NER) médicales : identification des concepts appartenant aux catégories ontologiques pertinentes (maladies, symptômes, traitements, anatomie, etc.)
  • Normalisation terminologique : mapping vers des identifiants standardisés (codes SNOMED CT, ICD-10, MeSH, etc.)
  • Désambiguïsation contextuelle : résolution des polysémies (ex : « IC » peut signifier « insuffisance cardiaque » ou « intervalle de confiance »)

Cette phase constitue le pont entre le langage naturel du clinicien et l'ontologie formelle du système.

Étape 2 : Récupération dans le Graphe (Graph Retrieval)

À partir des entités identifiées, le système explore le graphe de connaissances selon plusieurs stratégies de navigation :

  • Voisinage immédiat : nœuds directement connectés (relations de premier ordre)
  • Chemins sémantiques : parcours orientés suivant des types de relations spécifiques (ex : symptôme → maladie → traitement)
  • Communautés conceptuelles : clusters d'entités fortement interconnectées, révélant des thématiques médicales cohérentes

Cette exploration peut être formalisée par une fonction de scoring qui évalue la pertinence d'un nœud \(v\) par rapport à une requête \(q\) :

\[ \text{score}_{\text{graph}}(v, q) = \sum_{e \in E_q} w(e) \cdot \text{relevance}(v, e) \cdot \text{path\_weight}(e, v) \]

où :

  • \(E_q\) : ensemble des entités extraites de la requête
  • \(w(e)\) : poids d'importance de l'entité \(e\) dans la requête
  • \(\text{relevance}(v, e)\) : mesure de pertinence sémantique entre \(v\) et \(e\)
  • \(\text{path\_weight}(e, v)\) : poids du chemin le plus pertinent reliant \(e\) à \(v\)
Étape 3 : Récupération Vectorielle (Vector Retrieval)

En parallèle de l'exploration graphique, le système effectue une recherche dans l'espace vectoriel des embeddings. Chaque document source est représenté par un vecteur dense capturant sa sémantique :

\[ \vec{d} = \text{Embedding}(\text{document}) \]

La similarité entre la requête et les documents est mesurée par la distance cosinus :

\[ \text{sim}(\vec{q}, \vec{d}) = \frac{\vec{q} \cdot \vec{d}}{|\vec{q}| \cdot |\vec{d}|} \]

Les \(k\) documents les plus similaires sont récupérés. Cette approche complète la récupération graphique en capturant des similarités sémantiques qui ne seraient pas explicitement encodées dans les relations du graphe.

Étape 4 : Fusion Multi-Source

La fusion des résultats provenant du graphe et de l'espace vectoriel constitue un moment critique. Plusieurs stratégies sont possibles :

Fusion par agrégation pondérée :

\[ \text{score}_{\text{final}}(d) = \alpha \cdot \text{score}_{\text{graph}}(d) + (1-\alpha) \cdot \text{score}_{\text{vector}}(d) \]

\(\alpha \in [0,1]\) contrôle l'équilibre entre les deux modalités de récupération.

Fusion par re-ranking : utilisation d'un modèle de cross-encoding qui évalue la pertinence contextuelle de chaque document par rapport à la requête :

\[ \text{score}_{\text{rerank}}(q, d) = \text{CrossEncoder}([q; d]) \]

Cette approche permet une évaluation plus fine qui prend en compte les interactions subtiles entre la requête et le contenu documentaire.

Étape 5 : Génération de Réponse**

Les documents et fragments récupérés sont ensuite fournis comme contexte à un modèle de langage génératif. Trois stratégies de prompting se distinguent :

1. LLM-Only (Génération sans contrainte forte)

Le modèle génère librement en s'appuyant sur ses connaissances pré-entraînées, avec le contexte récupéré comme « suggestion » :
Contexte informationnel : [documents récupérés]
Question : [requête utilisateur]
En tant qu'assistant médical, fournis une réponse complète et nuancée.
Avantages : fluidité narrative, capacité de synthèse
Risques : hallucinations, déviations factuelles

2. Context-Strict (Génération contrainte)

Le modèle est explicitement contraint à ne répondre qu'à partir du contexte fourni :
Contexte : [documents récupérés]
Question : [requête utilisateur]
IMPORTANT : Tu dois répondre UNIQUEMENT en utilisant les informations
explicitement présentes dans le contexte. Si l'information n'est pas
dans le contexte, indique que tu ne peux pas répondre.
Avantages : fidélité factuelle, traçabilité
Risques : rigidité, réponses incomplètes si le contexte est insuffisant

3. LLM-Informed (Approche hybride)

Le modèle distingue explicitement les informations provenant du contexte et celles issues de ses connaissances générales :

Contexte documentaire : [documents récupérés]
Question : [requête utilisateur]
Structure ta réponse en deux parties :

  1. Informations issues du contexte fourni [avec citations]
  2. Éléments de connaissance générale pertinents [clairement signalés]
    Avantages : équilibre entre fidélité et complétude, transparence épistémologique
    Risques : complexité de mise en œuvre, nécessité d'un modèle sophistiqué
Étape 6 : Validation et Scoring**

La réponse générée est soumise à une double évaluation :

Evidence Score : mesure du degré d'ancrage dans les sources

\[ E_{\text{score}} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\text{claim}_i \text{ supporté par contexte}] \]

\(N\) est le nombre d'affirmations factuelles dans la réponse.

Correctness Score : évaluation de la validité médicale

\[ C_{\text{score}} = \text{Validator}(\text{réponse}, \text{ontologie médicale}) \]

Ce validateur peut être :

  • Un modèle spécialisé fine-tuné sur des tâches de vérification médicale
  • Un système de règles basé sur des ontologies cliniques
  • Une validation humaine par des experts (pour les cas critiques)
Étape 7 : Réponse Finale et Métadonnées**

La réponse est enrichie de métadonnées de traçabilité :

  • Sources citées : références bibliographiques précises
  • Scores de confiance : Evidence Score et Correctness Score
  • Chemins de raisonnement : visualisation des relations graphiques mobilisées
  • Avertissements : signalement des zones d'incertitude

Cette transparence épistémologique est cruciale pour l'acceptabilité clinique du système.

Comparaison des Stratégies de Prompting

Pour évaluer l'efficacité relative des trois stratégies, nous proposons un protocole d'évaluation structuré :

Dimension LLM-Only Context-Strict LLM-Informed
Fidélité factuelle ★★☆☆☆ ★★★★★ ★★★★☆
Complétude ★★★★☆ ★★☆☆☆ ★★★★★
Fluidité narrative ★★★★★ ★★★☆☆ ★★★★☆
Traçabilité ★☆☆☆☆ ★★★★★ ★★★★★
Adaptabilité contexte ★★★★★ ★★☆☆☆ ★★★★☆
Risque d'hallucination Élevé Minimal Faible
Utilisabilité clinique Limitée Modérée Élevée

L'approche LLM-Only produit des réponses fluides et complètes, mais son manque de traçabilité et ses risques d'hallucination la rendent problématique en contexte clinique où la responsabilité médicolégale exige une justification factuelle de chaque affirmation.

L'approche Context-Strict garantit la fidélité aux sources, mais sa rigidité peut produire des réponses frustrantes pour l'utilisateur lorsque le contexte récupéré est incomplet. Elle convient aux applications à haut risque où la précision prime sur la complétude.

L'approche LLM-Informed apparaît comme le compromis optimal pour la pratique clinique : elle combine fidélité et complétude, tout en maintenant la transparence épistémologique nécessaire à la confiance des praticiens. Sa mise en œuvre requiert cependant des modèles de langage suffisamment sophistiqués pour gérer la distinction entre connaissances contextuelles et générales.

Algorithmes de Re-ranking : Affiner la Pertinence Contextuelle

Le re-ranking constitue une couche d'intelligence supplémentaire qui affine les résultats de la récupération initiale. Plusieurs algorithmes peuvent être déployés :

Re-ranking par Cross-Encoding

Contrairement aux bi-encoders utilisés pour la récupération vectorielle initiale (qui encodent requête et documents séparément), les cross-encoders évaluent conjointement la paire (requête, document) :

\[ \text{score}_{\text{cross}}(q, d) = \text{BERT}_{\text{cross}}([q; d]) \]

Cette architecture capture des interactions fines entre les termes de la requête et ceux du document, au prix d'une complexité computationnelle plus élevée (quadratique en la longueur des séquences).

Re-ranking par Learning-to-Rank

Les approches de learning-to-rank apprennent directement à ordonner les documents par pertinence. Soit un ensemble de features \(\phi(q, d)\) caractérisant la paire (requête, document) :

\[ \phi(q, d) = \begin{bmatrix} \text{score}_{\text{vector}}(q, d) \\ \text{score}_{\text{graph}}(q, d) \\ \text{freshness}(d) \\ \text{authority}(d) \\ \text{overlap}_{\text{lexical}}(q, d) \\ \vdots \end{bmatrix} \]

Un modèle de ranking (ex : LambdaMART, RankNet) apprend à prédire un score :

\[ \text{score}_{\text{rank}}(q, d) = f_\theta(\phi(q, d)) \]

L'entraînement se fait sur des données annotées avec des jugements de pertinence par des experts médicaux.

Re-ranking par Diversité

Pour éviter la redondance, on peut introduire un critère de diversité qui pénalise les documents trop similaires entre eux :

\[ \text{score}_{\text{diverse}}(d_i | D_{\text{selected}}) = \text{score}_{\text{base}}(d_i) - \lambda \cdot \max_{d_j \in D_{\text{selected}}} \text{sim}(d_i, d_j) \]

\(D_{\text{selected}}\) est l'ensemble des documents déjà sélectionnés, et \(\lambda\) contrôle le degré de pénalité pour la similarité.

Cette approche assure que le contexte fourni au modèle génératif couvre un spectre informationnel plus large.

Métriques d'Évaluation : Mesurer la Qualité Épistémologique

L'évaluation d'un système GraphRAG en contexte médical ne peut se limiter à des métriques techniques classiques (précision, rappel, F1-score). Il faut des indicateurs qui capturent les dimensions épistémologiques et cliniques :

Evidence Score (Score de Preuve)
Mesure la proportion d'affirmations dans la réponse qui sont supportées par le contexte récupéré :

\[ E = \frac{|\{\text{claim} \in \text{response} : \exists \text{evidence} \in \text{context}, \text{supports(evidence, claim)}\}|}{|\{\text{claim} \in \text{response}\}|} \]

Seuils recommandés :

  • \(E \geq 0.9\) : haute fidélité, acceptable pour usage clinique direct
  • \(0.7 \leq E < 0.9\) : fidélité modérée, nécessite revue humaine
  • \(E < 0.7\) : fidélité insuffisante, rejet automatique

Correctness Score (Score d'Exactitude Médicale)
Évaluation de la validité médicale des affirmations par confrontation avec des ontologies de référence ou validation par experts :

\[ C = \frac{1}{N} \sum_{i=1}^{N} \text{correct}(\text{claim}_i) \]

\(\text{correct}(\cdot) \in \{0, 1\}\) est déterminé par :

  • Vérification automatique contre des bases de connaissances médicales validées (UpToDate, guidelines cliniques)
  • Revue par des cliniciens experts pour les cas complexes

Relevance Score (Score de Pertinence Clinique)
Mesure l'adéquation de la réponse au contexte clinique de la requête :

\[ R = \text{Relevance}_{\text{clinician}}(\text{response}, \text{query}) \]

Cette métrique nécessite des annotations humaines par des praticiens, qui évaluent selon une échelle de Likert (1-5) si la réponse est actionnable et pertinente pour la situation clinique évoquée.

Comprehensiveness Score (Score de Complétude)
Évalue si la réponse couvre tous les aspects pertinents du sujet :

\[ \text{Comp} = \frac{|\text{aspects couverts}|}{|\text{aspects attendus}|} \]

Les « aspects attendus » sont définis par des checklists cliniques standardisées pour chaque type de question (ex : pour une question diagnostique, on attend symptômes, examens complémentaires, diagnostics différentiels, etc.).

Conciseness Score (Score de Concision)
Pénalise la verbosité excessive tout en récompensant la complétude :

\[ \text{Conc} = \frac{\text{Comp}}{1 + \alpha \cdot \log(\text{length})} \]

\(\alpha\) est un paramètre de pénalité ajustable selon le contexte (en urgence, on privilégie la brièveté ; pour l'éducation, on tolère plus de détails).

Traceability Score (Score de Traçabilité)
Mesure la qualité des citations et références fournies :

\[ T = \frac{1}{N} \sum_{i=1}^{N} \left[\mathbb{1}[\text{claim}_i \text{ cité}] \cdot \text{quality}(\text{citation}_i)\right] \]

\(\text{quality}(\cdot)\) évalue la précision de la citation (citation directe avec numéro de page > citation de section > citation d'article sans localisation).

Métrique Composite : Clinical Utility Score
Pour une évaluation globale, on peut définir un score composite qui agrège les dimensions précédentes :

\[ \text{CUS} = w_E \cdot E + w_C \cdot C + w_R \cdot R + w_{\text{Comp}} \cdot \text{Comp} + w_T \cdot T \]

où les poids \(w_i\) sont déterminés par des études utilisateurs avec des cliniciens pour refléter l'importance relative de chaque dimension dans la pratique.

Dimensions Médicales

Le Défi de la Structuration du Savoir Biomédical

La médecine contemporaine est confrontée à une prolifération informationnelle sans précédent. Plus de 2 millions d'articles sont publiés chaque année dans les revues biomédicales, rendant impossible pour un praticien individuel de maintenir une connaissance exhaustive même dans une sous-spécialité. Cette « crise de l'abondance » appelle des infrastructures épistémologiques capables de structurer, naviguer et synthétiser ce corpus en expansion exponentielle.

Les ontologies médicales constituent la réponse conceptuelle à ce défi. Une ontologie n'est pas un simple vocabulaire contrôlé, mais une spécification formelle d'une conceptualisation partagée : elle définit les classes d'entités médicales, leurs propriétés, et les relations qui les structurent.

Panorama des Ontologies de Référence

SNOMED CT (Systematized Nomenclature of Medicine – Clinical Terms)

SNOMED CT constitue l'ontologie clinique la plus complète et la plus utilisée mondialement. Elle comprend plus de 350 000 concepts médicaux organisés en 19 hiérarchies principales :

  • Clinical finding : symptômes, signes cliniques, résultats d'examens
  • Procedure : actes diagnostiques et thérapeutiques
  • Body structure : anatomie
  • Substance : médicaments, composés chimiques
  • Organism : agents pathogènes
  • etc.

Chaque concept est défini par :

  • Un identifiant unique (SCTID)
  • Des termes préférés et synonymes
  • Des relations logiques avec d'autres concepts

Exemple de représentation :

Concept : Diabète de type 2
SCTID : 44054006
Termes : "Type 2 diabetes mellitus", "Adult-onset diabetes", "NIDDM"
Relations :
  - IS_A : Diabetes mellitus (73211009)
  - FINDING_SITE : Structure of pancreas (113331007)
  - ASSOCIATED_WITH : Insulin resistance (48606007)

ICD-10/11 (International Classification of Diseases)

L'ICD est principalement une classification à visée épidémiologique et administrative, mais sa structure hiérarchique permet également une navigation ontologique. L'ICD-11, dernière version, introduit une architecture plus sophistiquée avec des axes multiples (anatomie, étiologie, sévérité, etc.).

MeSH (Medical Subject Headings)

Développé par la National Library of Medicine, MeSH structure l'indexation de PubMed. Ses descripteurs organisés en arbre permettent des recherches par élargissement ou raffinement sémantique.

HPO (Human Phenotype Ontology)

HPO se concentre sur les phénotypes observables, particulièrement pertinent pour la génétique clinique et les maladies rares. Elle permet de structurer les présentations cliniques complexes.

Construction du Graphe de Connaissances Médical

Le graphe de connaissances intègre ces multiples ontologies dans une structure unifiée. Sa construction suit un processus itératif :

Phase 1 : Extraction d'Entités

À partir de corpus médicaux (guidelines, articles de revue, protocoles institutionnels), des systèmes de NER (Named Entity Recognition) médicaux extraient les mentions d'entités :

Texte : "Le patient présente une dyspnée d'effort associée à des œdèmes 
des membres inférieurs, évocateurs d'une insuffisance cardiaque."

Entités extraites :
- dyspnée d'effort [Symptom] → SNOMED: 60845006
- œdèmes des membres inférieurs [Symptom] → SNOMED: 267038008  
- insuffisance cardiaque [Disease] → SNOMED: 84114007

Phase 2 : Extraction de Relations

Les relations entre entités sont identifiées par :

  1. Patterns linguistiques : expressions indicatives de relations causales, temporelles, associatives
  2. Modèles de language pré-entraînés : BERT médical fine-tuné sur des tâches de relation extraction
  3. Règles ontologiques : inférences logiques basées sur les hiérarchies existantes
    Relations extraites :

  4. (dyspnée d'effort) --[SYMPTOM_OF]--> (insuffisance cardiaque)

  5. (œdèmes membres inférieurs) --[SYMPTOM_OF]--> (insuffisance cardiaque)
  6. (dyspnée d'effort) --[CO_OCCURS_WITH]--> (œdèmes membres inférieurs)

Phase 3 : Alignement et Fusion

Les entités extraites de sources multiples sont alignées via leurs identifiants SNOMED ou d'autres systèmes de référence. Cette fusion crée un graphe enrichi où chaque nœud peut être documenté par de multiples sources :

graph LR
    IC[Insuffsance Cardiaque\<br/>SNOMED: 84114007] D\[Dyspnée\<br/>SNOMED: 267036007] O\[Œdèmes MI\<br/>SNOMED: 267038008] BNP\[BNP élevé\<br/>LOINC: 42637-9] FEVG\[FEVG diminuée\<br/>SNOMED: 441481004] IEC\[IEC\<br/>ATC: C09A] BB\[Bêta-bloquants\<br/>ATC: C07] D --SYMPTOM\_OF--> IC O --SYMPTOM\_OF--> IC BNP --BIOMARKER\_OF--> IC FEVG --FINDING\_IN--> IC IEC --TREATS--> IC BB --TREATS--> IC D --CO\_OCCURS\_WITH--> O IC --HAS\_SUBTYPES--> ICS\[IC systolique] IC --HAS\_SUBTYPES--> ICD\[IC diastolique]
style IC fill:#ffcccc style D fill:#cce5ff style O fill:#cce5ff style BNP fill:#ffffcc style IEC fill:#ccffcc style BB fill:#ccffcc

Phase 4 : Enrichissement par Inférence Des règles logiques permettent d'inférer des relations implicites :

Règle transitive : SI (A) --[SYMPTOM_OF]--> (B) ET (B) --[SUBTYPE_OF]--> (C) ALORS (A) --[SYMPTOM_OF]--> (C)

Exemple : Dyspnée --[SYMPTOM_OF]--> IC systolique IC systolique --[SUBTYPE_OF]--> Insuffisance cardiaque ⟹ Dyspnée --[SYMPTOM_OF]--> Insuffisance cardiaque
Ces inférences enrichissent la connectivité du graphe et permettent des raisonnements plus sophistiqués lors de la récupération.

Taxonomies Nosologiques et Navigation Hiérarchique

Les taxonomies médicales organisent les maladies selon des principes classificatoires multiples : étiologiques, anatomiques, physiopathologiques, cliniques. Cette pluralité de perspectives crée une richesse structurelle exploitable par le système.

Lorsqu'une requête concerne un concept trop spécifique pour lequel peu d'information est disponible, le système peut naviguer vers des concepts parents plus généraux :

Requête : "Cardiomyopathie dilatée post-partum" ↓ IS_A "Cardiomyopathie dilatée" ↓ IS_A "Cardiomyopathie" ↓ IS_A "Maladie du myocarde"

Cette stratégie de *semantic relaxation* permet de récupérer des informations pertinentes même pour des pathologies rares.

Une même pathologie peut être explorée selon différentes facettes :

\`\`\`mermaid graph TD DM\[Diabète de Type 2] DM --> E\[Facette Étiologique] E --> E1\[Résistance insulinique] E --> E2\[Dysfonction cellules β] E --> E3\[Facteurs génétiques] DM --> C\[Facette Clinique] C --> C1\[Symptômes] C --> C2\[Complications aiguës] C --> C3\[Complications chroniques] DM --> T\[Facette Thérapeutique] T --> T1\[Modifications hygiéno-diététiques] T --> T2\[Antidiabétiques oraux] T --> T3\[Insulinothérapie] DM --> D\[Facette Diagnostique] D --> D1\[Critères glycémiques] D --> D2\[HbA1c] D --> D3\[HGPO] \`\`\`

Cette organisation multi-facettée correspond à la structure cognitive du raisonnement médical, qui mobilise différentes perspectives selon le contexte clinique (dépistage, diagnostic, traitement, suivi).

3.5 Du Graphe Statique au Raisonnement Dynamique

Le graphe de connaissances n'est pas une structure figée, mais un substrat pour des opérations de raisonnement dynamique. Plusieurs modalités de raisonnement peuvent être implémentées :

Raisonnement par Chaînage Avant (*Forward Chaining*)

À partir de symptômes observés, le système explore les chemins vers des diagnostics possibles :

Observations : {Dyspnée, Orthopnée, Œdèmes MI, Crépitants pulmonaires} ↓ SYMPTOM\_OF (récupération des maladies associées) Hypothèses : {Insuffisance cardiaque, Pneumonie, Embolie pulmonaire, ...} ↓ Scoring par cohérence d'ensemble Diagnostic probable : Insuffisance cardiaque (score: 0.87)

Raisonnement par Chaînage Arrière (Backward Chaining)

À partir d'une hypothèse diagnostique, le système recherche les éléments confirmateurs :

Hypothèse : Insuffisance cardiaque ↓ Quels symptômes attendus ? Recherche : {Dyspnée, Orthopnée, Œdèmes, Fatigue, ...} ↓ Quels examens confirmatoires ? Recherche : {Échocardiographie, BNP, Radiographie thoracique} ↓ Quels diagnostics différentiels ? Recherche : {BPCO, Embolie pulmonaire, Insuffisance rénale}

Raisonnement Abductif (*Abductive Reasoning*)

Le système génère la meilleure explication pour un ensemble d'observations :

\[ \text{Best explanation} = \arg\max\_{h \in \mathcal{H}} P(h | O) \cdot \text{Simplicity}(h) \]

où :

  • \(\mathcal{H}\) : espace des hypothèses diagnostiques - \(O\) : observations cliniques - \(P(h|O)\) : probabilité a posteriori de l'hypothèse
  • \(\text{Simplicity}(h)\) : pénalité pour la complexité (principe du rasoir d'Ockham)

Ce type de raisonnement correspond à la démarche diagnostique médicale qui cherche l'explication la plus parcimonieuse des symptômes observés.

Gestion de l'Incertitude et des Connaissances Contradictoires

La médecine est fondamentalement un domaine d'incertitude. Les connaissances évoluent, les guidelines se contredisent parfois, et l'applicabilité des données probantes à un patient particulier demeure une question de jugement clinique.

Représentation de l'Incertitude
Chaque relation dans le graphe peut être pondérée par un degré de certitude :

(Symptôme X) --[SYMPTOM_OF, confidence=0.85]--> (Maladie Y)

Cette pondération peut provenir : - De la force de l'association statistique dans la littérature - Du consensus entre sources multiples - De l'évaluation par des experts #### Gestion des Contradictions Lorsque des sources font des affirmations contradictoires, le système doit : 1. **Détecter la contradiction** par analyse logique ou sémantique 2. **Évaluer la qualité des sources** selon des critères de hiérarchie de la preuve (méta-analyses > essais contrôlés randomisés > études observationnelles > avis d'experts) 3. **Présenter la controverse** de manière transparente à l'utilisateur

Exemple : Question : "Aspirine en prévention primaire cardiovasculaire ?"

Réponse nuancée :
"Les recommandations concernant l'aspirine en prévention primaire ont évolué récemment.
Les guidelines de l'ACC/AHA (2019) suggèrent une utilisation sélective chez les adultes de 40-70 ans à risque élevé sans risque hémorragique accru [Evidence Score: 0.92].
Cependant, les essais ASPREE (2018) et ARRIVE (2018) n'ont pas démontré de bénéfice net dans certaines populations[Evidence Score: 0.95].
La décision doit être individualisée selon le profil de risque."

Cette présentation honnête de l'incertitude est préférable à une réponse faussement univoque.

Prompt engineering et prompt chaining

Le prompt engineering structure le contexte pour guider le LLM vers des réponses conformes aux standards scientifiques. Forme canonique :

« En tant qu’expert en One Health, utilise uniquement les données validées par l’OIE, l’OMS et la FAO pour répondre à la question suivante : [Q]. Si les données sont absentes, réponds : ‘Aucune donnée fiable disponible’. »

Chaque contexte et chaque étape de réflexion clinique peut bénéficier d'une "orientation" via le prompt. Un prompt bien conçu guide le modèle vers des réponses fiables :

« En tant qu’expert en médecine vétérinaire et santé publique, évalue le risque zoonotique de la fièvre Q chez les éleveurs de chèvres, en citant les données de l’OIE 2024. »

Le chaining permet de décomposer un raisonnement en étapes : diagnostic → épidémiologie → recommandation.

Le prompt chaining décompose les tâches complexes :

Étape 1 : Identifier les entités (NER) → "Quels agents pathogènes sont mentionnés ?"
Étape 2 : Interroger le KG → "Quels animaux sont des réservoirs connus ?"
Étape 3 : Évaluer le risque → "Quel est le risque zoonotique selon les données 2020–2025 ?"
Étape 4 : Générer une recommandation → "Quelles mesures de biosécurité sont conseillées ?"

Chaque étape utilise un prompt spécialisé, avec sortie contrainte (JSON, schéma fixe).

Mode web vs mode local (on-prem) : comparaison des modes d'inférence

  • Mode web : accès à l’actualité via crawling, mais réponse non reproductible, biaisée par les algorithmes de recherche ;
  • Mode local : corpus figé, auditable, souverain, mais nécessitant une mise à jour manuelle.
Critère Mode Web (Cloud API) Mode Local (On-prem)
Actualité Haute (web crawling) Faible (corpus figé)
Reproductibilité Non garantie Oui
Auditabilité Impossible Totale
Souveraineté Faible Élevée
Conformité RGPD/Données de santé Risquée Compatible
Coût opérationnel Variable Fixe (matériel + maintenance)

Dans les domaines critiques (santé humaine, vétérinaire, sécurité sanitaire), seul le mode local est acceptable, à condition de mettre en place des mécanismes de mise à jour périodique du corpus RAG.
Quid des licences des corpus lorsque ledit logiciel est open source AGPL mais que les données sont en licenses fermées.

**Gestion des surcouches et biais induits : ** Les surcouches modèrent — voire censurent — les réponses. Un modèle chinois exécuté en local (ex. : Qwen-72B-Chat) est plus neutre scientifiquement qu’un GPT-4 filtré par une morale corporate.

Architecture des Données : Structures, Indexation et Performance

4.1 Dualité Structurelle : Graphes et Vecteurs

L'architecture repose sur une dualité fondamentale entre deux modalités de représentation des connaissances :

Base de Données Graphe
Technologie privilégiée : **Neo4j** ou équivalent (ArangoDB, Amazon Neptune) **Structure** : - **Nœuds** : entités médicales avec propriétés (ID, labels, métadonnées) - **Arêtes** : relations typées avec propriétés (poids, source, date) **Requêtes** : Cypher query language ```cypher // Exemple : trouver les traitements pour l'insuffisance cardiaque // avec leurs mécanismes d'action MATCH (d:Disease {name: "Heart Failure"})<-[:TREATS]-(t:Treatment) MATCH (t)-[:HAS_MECHANISM]->(m:Mechanism) RETURN t.name, collect(m.name) as mechanisms ORDER BY t.evidence_level DESC ``` **Indexation** : - Index sur les propriétés fréquemment requêtées (ID, noms) - Index fulltext sur les descriptions textuelles - Contraintes d'unicité sur les identifiants SNOMED/ICD

Base de Données Vectorielle
Technologie : **Pinecone**, **Weaviate**, **Milvus**, ou **FAISS** **Structure** : - Chaque document source est transformé en embedding vectoriel dense - Dimensionnalité typique : 768 (BERT), 1024 (GPT), 1536 (OpenAI) **Indexation** : structures optimisées pour la recherche de plus proches voisins - **HNSW** (*Hierarchical Navigable Small World*) : graphe hiérarchique permettant une recherche approximative en \(O(\log n)\) - **IVF** (*Inverted File Index*) : quantification vectorielle avec recherche par clusters - **Product Quantization** : compression des vecteurs pour réduire l'empreinte mémoire **Requête** : ```python # Embedding de la requête query_vector = embedding_model.encode(query_text) # Recherche des k plus proches voisins results = vector_db.query( vector=query_vector, top_k=10, filter={"source_type": "clinical_guideline"} ) ```

4.2 Stratégies de Chunking : Segmentation Sémantique

La segmentation des documents sources en chunks (fragments) est critique pour la qualité de la récupération. Plusieurs stratégies coexistent :

Chunking Fixe Division en segments de longueur fixe (ex : 512 tokens) avec overlap
**Avantages** : simplicité, prévisibilité **Inconvénients** : peut fragmenter des unités sémantiques cohérentes

Chunking Sémantique Division selon les frontières structurelles du document : sections, paragraphes, phrases

```python def semantic_chunking(document): chunks = [] current_chunk = [] current_length = 0 for paragraph in document.paragraphs: para_length = len(tokenize(paragraph)) if current_length + para_length > MAX_CHUNK_SIZE: # Sauvegarder le chunk actuel chunks.append(" ".join(current_chunk)) current_chunk = [paragraph] current_length = para_length else: current_chunk.append(paragraph) current_length += para_length if current_chunk: chunks.append(" ".join(current_chunk)) return chunks ```

**Avantages** : préserve la cohérence sémantique
**Inconvénients** : variabilité de la taille des chunks #### Chunking Hiérarchique Représentation multi-niveaux : document → sections → paragraphes → phrases Chaque niveau est encodé séparément, permettant une récupération à granularité variable :

Document: "Clinical Guidelines for Heart Failure Management" ├─ Section 1: "Diagnosis" (embedding_1) │ ├─ Para 1.1: "Clinical presentation..." (embedding_1.1) │ └─ Para 1.2: "Diagnostic criteria..." (embedding_1.2) └─ Section 2: "Treatment" (embedding_2) ├─ Para 2.1: "Pharmacological therapy..." (embedding_2.1) └─ Para 2.2: "Device therapy..." (embedding_2.2)

Lors de la récupération, le système peut : 1. Identifier les sections pertinentes (granularité grossière) 2. Affiner en récupérant les paragraphes spécifiques (granularité fine) Cette approche optimise le compromis entre contexte (informations suffisantes) et précision (informations pertinentes).

4.3 Embeddings Spécialisés : Au-delà de BERT Générique

Les embeddings médicaux spécialisés capturent mieux les nuances du domaine :
BioBERT et Variantes
Pré-entraîné sur PubMed et PMC (corpus biomédicaux)

  • BioBERT: BERT fine-tuné sur 200k articles PubMed
  • PubMedBERT : pré-entraîné from scratch sur corpus médical
  • ClinicalBERT : fine-tuné sur notes cliniques (MIMIC-III)
    Amélioration typique : +5-15% sur tâches de NER et relation extraction médicales

Embeddings Multilingues
Pour un système déployé dans un contexte francophone/multilingue :
-CamemBERT : BERT français
-DrBERT : BERT médical français (pré-entraîné sur corpus médicaux français)
-mBERT/XLM-R : modèles multilingues pour cross-lingual retrieval

Embeddings Enrichis par Connaissances Knowledge-Enhanced Embeddings
Intégration explicite d'information du graphe de connaissances dans les embeddings :

\[ \vec{e}\_{\text{enhanced}} = \vec{e}\_{\text{text}} + \alpha \cdot \vec{e}\_{\text{graph}} \]

où :

  • \(\vec{e}\_{\text{text}}\) : embedding textuel standard
  • \(\vec{e}\_{\text{graph}}\) : embedding dérivé de la structure du graphe (ex : Node2Vec, GraphSAGE)
    • \(\alpha\) : poids de la composante graphique Ces embeddings hybrides capturent à la fois les similarités textuelles et les proximités structurelles dans l'ontologie.

Gestion des Sources Documentaires : Pipeline d'Ingestion

L'alimentation du système nécessite un pipeline robuste pour traiter des sources hétérogènes :

```mermaid flowchart TD S1[Articles PubMed] --> I[Ingestion Layer] S2[Guidelines Cliniques] --> I S3[Protocoles Locaux] --> I S4[Manuels de Référence] --> I I --> P[Preprocessing] P --> P1[Extraction texte] P --> P2[Nettoyage] P --> P3[Normalisation] P1 --> NER[NER Medical] P2 --> NER P3 --> NER NER --> RE[Relation Extraction] RE --> G[Graph Store] P3 --> C[Chunking] C --> E[Embedding] E --> V[Vector Store] G --> M[Metadata Store] V --> M style I fill:#e1f5ff style G fill:#ffcccc style V fill:#ccffcc style M fill:#ffffcc ``` #### Étape 1 : Extraction et Normalisation - **PDF** : extraction via PyMuPDF, pdfplumber (préserve structure) - **HTML** : parsing avec BeautifulSoup, extraction du contenu principal - **DOCX** : extraction via python-docx - **Normalisation** : Unicode normalization, suppression des caractères de contrôle, standardisation des espaces

Enrichissement Métadonnées
Chaque document est enrichi de métadonnées structurées :
```json { "doc_id": "pubmed_34567890", "title": "Novel Therapeutic Approaches in Heart Failure", "authors": ["Smith J", "Doe A"], "journal": "N Engl J Med", "year": 2024, "doi": "10.1056/NEJMra2400000", "evidence_level": "1A", "source_type": "peer_reviewed_article", "specialty": ["cardiology"], "language": "en", "last_updated": "2024-03-15" } ``` Ces métadonnées permettent des filtres sophistiqués lors de la récupération (ex : ne récupérer que des guidelines de niveau 1A publiées après 2020).

Étape 3 : Déduplication et Gestion de Versions

Les mêmes informations peuvent apparaître dans plusieurs sources. Un système de déduplication identifie : - **Duplications exactes** : hash du contenu - **Duplications partielles** : MinHash, SimHash pour détection rapide - **Versions successives** : identification des mises à jour de guidelines Stratégie : conserver toutes les versions avec marquage explicite de la version « active » (la plus récente validée).

4.5 Mise à Jour Dynamique et Freshness

Le savoir médical évolue constamment. Le système doit intégrer de nouvelles connaissances sans réingestion complète :

Mise à Jour Incrémentale

```python def incremental_update(new_document): # 1. Extraction des entités et relations entities, relations = extract_knowledge(new_document) # 2. Mise à jour du graphe for entity in entities: if entity.id in graph: graph.update_node(entity.id, entity.properties) else: graph.add_node(entity) for relation in relations: graph.add_or_update_edge(relation) # 3. Mise à jour des embeddings chunks = semantic_chunking(new_document) embeddings = embed_model.encode(chunks) for chunk, embedding in zip(chunks, embeddings): vector_db.upsert( id=f"{new_document.id}_{chunk.id}", vector=embedding, metadata={ "doc_id": new_document.id, "chunk_id": chunk.id, "timestamp": datetime.now(), **new_document.metadata } ) ```

Scoring de Freshness

Les documents récents peuvent être favorisés dans le ranking : $$ \text{score}_{\text{final}}(d) = \text{score}_{\text{relevance}}(d) \cdot \text{freshness}(d) $$ où : $$ \text{freshness}(d) = e^{-\lambda \cdot \text{age}(d)} $$ avec \(\lambda\) contrôlant la vitesse de dépréciation (valeur typique : \(\lambda = 0.1\) pour une demi-vie d'environ 7 ans, ajustable selon les domaines : plus élevé en oncologie qu'en anatomie).

Versionnement et Traçabilité

Chaque modification du graphe ou de la base vectorielle est journalisée : ```sql CREATE TABLE knowledge_updates ( update_id UUID PRIMARY KEY, timestamp TIMESTAMP, update_type ENUM('add', 'modify', 'deprecate'), entity_id VARCHAR(255), old_value JSONB, new_value JSONB, source_doc_id VARCHAR(255), validator_id VARCHAR(255) ); ``` Cette traçabilité permet : - **Audit** : comprendre l'évolution du système de connaissances - **Rollback** : revenir à un état antérieur si nécessaire - **Transparence** : justifier les réponses par référence à des versions spécifiques du graphe

Gouvernance, Éthique et Conformité Réglementaire

Le Défi de la Responsabilité Médicolégale

L'introduction de systèmes d'IA dans la pratique clinique soulève des questions de responsabilité inédites. Qui est responsable en cas d'erreur : le développeur du système, l'institution déployante, le clinicien utilisateur ? Cette question, loin d'être purement juridique, révèle une tension fondamentale entre l'autonomie de la machine et l'autorité du praticien. Le cadre réglementaire européen (Règlement sur les dispositifs médicaux, AI Act) impose des exigences strictes :

Classification comme Dispositif Médical

Si le système est utilisé pour : - Diagnostic - Aide à la décision thérapeutique - Monitoring de patients Il doit être certifié comme dispositif médical (classe IIa ou IIb selon le risque). **Implications** : - Évaluation clinique rigoureuse - Système de gestion des risques - Documentation technique exhaustive - Surveillance post-commercialisation

Exigences de Transparence et Explicabilité

L'article 13 de l'AI Act exige : 1. **Transparence sur les capacités et limites** du système 2. **Explicabilité des décisions** : l'utilisateur doit comprendre pourquoi une réponse est fournie 3. **Supervision humaine** : le système doit être conçu pour permettre une révision humaine effective Notre architecture répond à ces exigences par : - **Affichage systématique des sources** : chaque affirmation est liée aux documents qui la supportent - **Visualisation des chemins de raisonnement** : le graphe de connaissances mobilisé est exposé - **Scores de confiance** : Evidence Score et Correctness Score permettent au clinicien d'évaluer la fiabilité - **Mode "second avis"** : le système ne remplace pas le jugement clinique, mais le complète

Sécurité et Confidentialité : Architecture Privacy-by-Design

Minimisation des Données Personnelles

Le système est conçu pour fonctionner sur des requêtes **dépersonnalisées** :

❌ Requête avec données personnelles : "Marie Dupont, 45 ans, diabétique, présente une dyspnée"

✅ Requête dépersonnalisée : "Femme 45 ans, antécédent diabète type 2, présente dyspnée d'effort"

Un module de **dé-identification automatique** détecte et masque : - Noms, prénoms - Dates précises (remplacées par âges relatifs) - Identifiants (numéros de sécurité sociale, dossiers) - Localisations géographiques précises

Chiffrement et Contrôle d'Accès **En transit** : TLS 1.3 pour toutes les communications **Au repos** : chiffrement AES-256 des bases de données **Contrôle d'accès basé sur les rôles (RBAC)** : ```yaml Roles: - Clinician: permissions: - query_system - view_sources - provide_feedback restrictions: - cannot_modify_knowledge_base - rate_limited: 100 queries/hour - Knowledge_Curator: permissions: - add_documents - validate_extractions - modify_ontology restrictions: - changes_require_approval - audit_logged - Administrator: permissions: - full_system_access - user_management - configuration restrictions: - all_actions_logged - requires_MFA ```

Conformité RGPD - **Base légale** : intérêt légitime (amélioration des soins) ou consentement explicite - **Droit d'accès et d'opposition** : interfaces permettant aux patients d'accéder aux logs de requêtes les concernant - **Limitation de conservation** : purge automatique des logs après période définie (ex : 90 jours) - **DPO désigné** : supervision de la conformité

5.3 Gestion des Biais et Équité Les systèmes d'IA peuvent reproduire et amplifier des biais présents dans leurs données d'entraînement. En médecine, cela peut conduire à des disparités de soins selon : - Genre - Origine ethnique - Statut socio-économique - Âge

Audit de Biais Évaluation systématique des performances sur des sous-populations : ```python def bias_audit(model, test_set): demographics = ['gender', 'age_group', 'ethnicity'] metrics = {} for demo in demographics: for group in test_set[demo].unique(): subset = test_set[test_set[demo] == group] metrics[f"{demo}_{group}"] = { 'accuracy': evaluate_accuracy(model, subset), 'evidence_score': evaluate_evidence(model, subset), 'completeness': evaluate_completeness(model, subset) }

Détection de disparités significatives

disparities = detect_disparities(metrics, threshold=0.1) return metrics, disparities ``` **Actions correctives** : - **Rééquilibrage du corpus** : sur-échantillonnage de littérature concernant les populations sous-représentées - **Fine-tuning ciblé** : entraînement additionnel sur données équilibrées - **Alertes de biais** : notification à l'utilisateur si le système détecte une sous-performance potentielle pour certains groupes

Équité Procédurale

Au-delà de l'équité des résultats, assurer une équité des processus : - **Accessibilité** : interface multilingue, adaptation aux handicaps - **Transparence** : documentation publique des limitations connues du système - **Participation** : implication de cliniciens et patients de diverses origines dans la conception et l'évaluation

Auditabilité et Logs Complets

Chaque interaction avec le système est enregistrée de manière structurée : ```json { "query_id": "uuid-12345", "timestamp": "2024-11-06T14:32:15Z", "user_id": "hashed_user_id", "user_role": "clinician", "query_text": "symptoms of acute MI in elderly", "preprocessing": { "entities_extracted": ["symptoms", "acute myocardial infarction", "elderly"], "snomed_codes": ["404684003", "57054005", "105436006"] }, "retrieval": { "graph_results": 12, "vector_results": 15, "fusion_strategy": "reranking", "top_documents": ["doc_id_1", "doc_id_2", "doc_id_3"] }, "generation": { "prompting_strategy": "LLM-informed", "model": "claude-sonnet-4.5", "tokens_input": 3200, "tokens_output": 450, "generation_time_ms": 1850 }, "validation": { "evidence_score": 0.92, "correctness_score": 0.88, "warnings": [] }, "response_provided": true, "user_feedback": null } ``` Ces logs permettent : - **Audit rétrospectif** : investigation en cas de signalement d'erreur - **Analyse de performance** : identification des patterns de succès/échec - **Amélioration continue** : fine-tuning basé sur les interactions réelles - **Conformité réglementaire** : démonstration de la traçabilité exigée pour les dispositifs médicaux

5.5 Processus de Validation Clinique

Avant déploiement, le système doit démontrer sa validité clinique par des études rigoureuses :

Phase 1 : Validation Technique

Évaluation sur datasets annotés par experts : - **Dataset de test** : 500-1000 questions cliniques avec réponses de référence - **Métriques** : Evidence Score, Correctness Score, Relevance, Completeness - **Critère d'acceptation** : Evidence Score > 0.85, Correctness Score > 0.90

Phase 2 : Étude Prospective Observationnelle

Déploiement dans un environnement clinique contrôlé : - **Design** : étude avant-après ou contrôlée - **Participants** : cliniciens volontaires - **Mesures** : - Temps de recherche d'information - Qualité des décisions cliniques (jugée par comité d'experts indépendants) - Satisfaction utilisateur - Incidents de sécurité

Phase 3 : Surveillance Continue

Post-Déploiement - **Monitoring actif** : analyse des retours utilisateurs, signalements d'erreurs - **Audits périodiques** : réévaluation annuelle sur nouveaux cas tests - **Mises à jour validées** : chaque modification substantielle du système nécessite une revalidation partielle

Intégration Clinique et Workflow : De l'Outil à la Pratique

Conception Centrée Utilisateur : Au-delà de l'Interface

L'adoption d'un système d'IA clinique ne dépend pas seulement de sa performance technique, mais de son intégration harmonieuse dans les workflows existants. Une étude ethnographique des pratiques cliniques révèle plusieurs contraintes : **Contraintes temporelles** : les cliniciens disposent de secondes, pas de minutes, pour consulter de l'information en pleine consultation **Charge cognitive** : tout système additionnel doit minimiser la charge mentale, déjà élevée **Contexte interrompu** : les consultations sont fréquemment interrompues ; le système doit gérer des interactions fragmentées et permettre la reprise sans perte de contexte

Hétérogénéité des besoins : un urgentiste, un généraliste et un spécialiste n'ont pas les mêmes attentes informationnelles

Architecture d'Interface Adaptative

L'interface s'adapte au contexte d'utilisation selon trois dimensions :

Mode d'Interaction

Mode Consultation Rapide :

  • Interface minimaliste, résultats synthétiques
  • Réponse en < 3 secondes
  • Affichage prioritaire : réponse directe + score de confiance
  • Sources accessibles en un clic, mais non intrusives

graph LR
Q[Question] --> R[Réponse Principale]
R --> S1[Sources Primaires]
R --> S2[Contexte Élargi]
R --> S3[Cas Particuliers]
R --> V[Visualisation Graphe]

S1 --> D1[Guidelines ESC 2021]
S1 --> D2[Meta-analyse NEJM 2020]

S2 --> C1[Contre-indications]
S2 --> C2[Interactions]
S2 --> C3[Surveillance]

S3 --> E1[Insuffisance rénale]
S3 --> E2[Sujet âgé]

V --> G[Graphe: IC → Traitements]

Mode Aide à la Décision :

  • Questions structurées guidant le raisonnement
  • Algorithmes décisionnels interactifs
  • Scores de risque calculés

Aide à la décision : Anticoagulation FA

Étape 1/3 : Évaluation du risque thromboembolique

  • Score CHA₂DS₂-VASc : [calculateur interactif]
    → Résultat : 4 points (risque élevé)

Étape 2/3 : Évaluation du risque hémorragique

  • Score HAS-BLED : [calculateur interactif]
    → Résultat : 2 points (risque modéré)

Étape 3/3 : Recommandation
✓ Anticoagulation recommandée
Options : AOD (préférence) ou AVK
[Détails par molécule] [Surveillance] [Éducation patient]

Personnalisation par Rôle

L'interface se configure selon le profil professionnel :

Rôle    Priorités Informationnelles Niveau de Détail    VocabulaireUrgentiste   Diagnostic différentiel rapide, protocoles d'urgence    Synthétique Abréviations acceptées
Généraliste Aide diagnostique, guidelines de prise en charge initiale   Équilibré   Langage clinique standard
Spécialiste Littérature récente, cas complexes, controverse Approfondi  Terminologie spécialisée
Interne/Étudiant    Explications pédagogiques, références fondamentales Détaillé avec contexte  Définitions intégrées
Infirmier(e)    Surveillance, effets indésirables, éducation patient    Pratique    Vulgarisation appropriée

Adaptation Contextuelle

Le système détecte le contexte d'utilisation et ajuste ses réponses :

def contextualize_response(query, user_context):
# Détection du contexte
urgency = detect_urgency(query) # mots-clés: "urgent", "immédiat", "aigu"
uncertainty = detect_uncertainty(query) # "peut-être", "incertain", "hésitation"
educational_intent = detect_learning(query) # "pourquoi", "mécanisme", "expliquer"

# Adaptation de la stratégie de réponse (python)
if urgency == "high":
    prompting_strategy = "context-strict"  # Maximum de fiabilité
    response_format = "bullet_points"  # Maximum de rapidité
    detail_level = "essential_only"

elif educational_intent:
    prompting_strategy = "llm-informed"  # Enrichissement contextuel
    response_format = "narrative"  # Pédagogie narrative
    detail_level = "comprehensive"
    include_mechanisms = True

elif uncertainty:
    response_format = "decision_tree"  # Aide au raisonnement
    include_differential = True

else:
    # Configuration par défaut selon profil utilisateur
    prompting_strategy = user_context.preferred_strategy
    response_format = user_context.preferred_format

return generate_response(
    query, 
    strategy=prompting_strategy,
    format=response_format,
    detail=detail_level
)

Exemple de Flux Intégré

Scenario: Prescription d'un nouvel antihypertenseur

  1. Médecin ouvre le module prescription
  2. Sélectionne "Ramipril 5mg"
  3. ↓ Trigger automatique GraphRAG
  4. GraphRAG récupère :
    • Antécédents patient (export ou api)
    • Traitements en cours
    • Dernière créatininémie, kaliémie
  5. GraphRAG analyse :
    • Contre-indications (sténose rénale bilatérale?)
    • Interactions (AINS? Potassium?)
    • Surveillance requise (fonction rénale, K+)
  6. Affichage :
    ✓ Pas de contre-indication détectée
    ⚠ Attention : kaliémie à 5.2 mmol/L (limite haute)
    → Recommandation : contrôle K+ à J7 et J15
    📚 Référence : ESC Guidelines 2018, section 5.2.1

**Système de Feedback Intégré**

Après chaque réponse, possibilité d'évaluer : - Pertinence (échelle 1-5) - Complétude (échelle 1-5) - Utilisabilité (échelle 1-5) - Commentaire libre ``` ┌─────────────────────────────────────┐ │ Cette réponse vous a-t-elle aidé ? │ │ │ │ Pertinence: ★★★★★ │ │ Complétude: ★★★★☆ │ │ Utilisable: ★★★★★ │ │ │ │ [Commentaire optionnel] │ │ ____________ │ │ │ │ [Signaler un problème] [Envoyer] │ └─────────────────────────────────────┘

Boucle d'Amélioration :

flowchart LR
U[Utilisateurs] -->|Feedback| A[Analyse]
A -->|Patterns identifiés| P[Priorisation]
P -->|Modifications| D[Développement]
D -->|Tests| V[Validation]
V -->|Déploiement| U

A -->|Métriques| M[Monitoring]
M -->|Alertes| P
### 6.5 Monitoring de Performance en Production

Une fois déployé, le système fait l'objet d'un monitoring continu :

#### Métriques Techniques

**Latence** :
- Temps de réponse médian : cible < 2 secondes
- P95 latence : cible < 5 secondes
- P99 latence : cible < 10 secondes

**Disponibilité** :
- Uptime : cible > 99.5%
- MTTR (Mean Time To Repair) : cible < 15 minutes

**Qualité des Résultats** :
- Evidence Score moyen : monitoring continu, alerte si < 0.85
- Taux de requêtes sans réponse satisfaisante : cible < 5%

#### Métriques Utilisateur

**Adoption** :
- Nombre d'utilisateurs actifs (DAU, WAU, MAU)
- Taux de rétention (7 jours, 30 jours)
- Fréquence d'utilisation par utilisateur

**Satisfaction** :
- Net Promoter Score (NPS) : cible > 30
- Scores de feedback moyens : cible > 4/5
- Taux d'abandon de requête : cible < 10%

#### Métriques Cliniques

**Impact sur la Pratique** :
- Temps économisé par recherche d'information (étude time-motion)
- Taux d'adoption des recommandations suggérées
- Impact sur la qualité des prescriptions (conformité aux guidelines)

**Sécurité** :
- Nombre d'incidents de sécurité signalés
- Taux de faux positifs/négatifs dans les alertes
- Signalements d'erreurs médicales potentielles

#### Dashboard de Monitoring

╔═══════════════════════════════════════════════════════════╗
║ GraphRAG Clinical System - Dashboard ║
╠═══════════════════════════════════════════════════════════╣
║ ║
║ 🟢 System Status: OPERATIONAL ║
║ ├─ Uptime: 99.8% (24h) ║
║ ├─ Latency P50: 1.8s | P95: 4.2s ║
║ └─ Active Users: 342 ║
║ ║
║ 📊 Quality Metrics (24h) ║
║ ├─ Evidence Score: 0.89 ± 0.08 ║
║ ├─ Correctness Score: 0.92 ± 0.06 ║
║ ├─ User Satisfaction: 4.3/5.0 ║
║ └─ Queries Served: 2,847 ║
║ ║
║ ⚠️ Alerts (2) ║
║ ├─ [INFO] Knowledge base updated: 45 new documents ║
║ └─ [WARNING] Evidence score dropped below 0.85 ║
║ for cardiology queries (investigating) ║
║ ║
║ 📈 Trending Topics (7d) ║
║ 1. Heart Failure Management (↑ 23%) ║
║ 2. Antibiotic Selection (↑ 15%) ║
║ 3. Diabetes Guidelines (↔ 0%) ║
║ ║
╚═══════════════════════════════════════════════════════════╝

Roadmap et Évolutions Futures : Vers une Intelligence Médicale Augmentée

Expansion du Graphe de Connaissances

Objectif : Passer de 100 000 à 500 000 concepts médicaux couverts

Sources additionnelles :

  • Intégration complète des guidelines de sociétés savantes (HAS, NICE, ESC, AHA, etc.)
  • Corpus de protocoles institutionnels validés
  • Synthèses Cochrane et revues systématiques

Enrichissement relationnel :

  • Relations causales fines (mécanismes physiopathologiques)
  • Relations temporelles (évolution naturelle des pathologies)
  • Relations probabilistes (risques, pronostics)

Multimodalité

Intégration d'images médicales :

  • Reconnaissance de patterns radiologiques
  • Lien entre trouvailles visuelles et concepts du graphe

Exemple :
Image ECG → Détection "Sus-décalage ST en territoire inférieur"
→ Récupération dans graphe: "Infarctus du myocarde inférieur"
→ Génération de réponse contextualisée

ntégration de données structurées :

  • Interprétation automatique de résultats biologiques
  • Calcul de scores pronostiques contextualisés

Amélioration des Stratégies de Prompting

Prompting dynamique adaptatif :

Le système sélectionne automatiquement la stratégie optimale selon :

  • Type de question (factuelle vs. raisonnement)
  • Niveau de preuve disponible
  • Contexte clinique (urgence, incertitude)

def adaptive_prompting(query, context, retrieved_docs):
# Analyse de la question
question_type = classify_question(query) # factual, reasoning, procedural
evidence_quality = assess_evidence(retrieved_docs) # high, medium, low
clinical_context = extract_context(query) # urgency, uncertainty, etc.

# Sélection de stratégie
if evidence_quality == "high" and clinical_context.urgency:
    return "context-strict"  # Fiabilité maximale pour urgence

elif question_type == "reasoning" and evidence_quality == "medium":
    return "llm-informed"  # Enrichissement tout en traçant sources

elif question_type == "factual" and evidence_quality == "high":
    return "context-strict"  # Pas besoin d'enrichissement

else:
    return "llm-informed"  # Défaut sûr

Raisonnement Multi-Step Explicite

Implémentation d'architectures de type Chain-of-Thought médicales :

Question: "Patient 68 ans, dyspnée, BNP 450 pg/mL, FEVG 45%. 
          Traitement optimal ?"

Étape 1: Diagnostic
→ BNP élevé + FEVG diminuée → Insuffisance cardiaque systolique
→ Confiance: 0.92

Étape 2: Classification
→ FEVG 45% → IC à FEVG modérément réduite (HFmrEF)
→ Classe NYHA non précisée, mais dyspnée → probablement II-III
→ Confiance: 0.85

Étape 3: Recommandations thérapeutiques
→ HFmrEF → Guidelines ESC 2021: mêmes traitements que HFrEF
→ Traitements fondamentaux:
• IEC ou ARA2 (ou ARNI si persistance symptômes)
• Bêta-bloquants
• ARM (si K+ et fonction rénale le permettent)
• iSGLT2 (dapagliflozine ou empagliflozine)
→ Confiance: 0.94

Étape 4: Personnalisation
→ Âge 68 ans → Attention fonction rénale, titration progressive
→ Vérifier: créatininémie, kaliémie, TA
→ Confiance: 0.88
Recommandation finale: [Traitement détaillé avec posologies]

Cette décomposition explicite du raisonnement :

  • Améliore la transparence
  • Permet la détection d'erreurs à chaque étape
  • Facilite l'apprentissage pour les étudiants

Apprentissage par Renforcement sur Feedback Clinique

Principe : Le système apprend de l'évaluation de ses réponses par les cliniciens

def reinforcement_learning_loop():
# 1. Système génère une réponse
response = generate_response(query, context)
# 2. Clinicien évalue
feedback = collect_user_feedback(response)
# feedback = {relevance: 4/5, correctness: 5/5, usefulness: 4/5}
# 3. Calcul de récompense
reward = compute_reward(feedback)
# reward = 0.87 (normalisé 0-1)
# 4. Mise à jour des paramètres
# - Ajustement des poids de fusion graphe/vecteur
# - Fine-tuning du modèle de re-ranking
# - Optimisation des prompts
update_model_parameters(query, context, response, reward)
# 5. Logging pour analyse
log_interaction(query, response, feedback, reward)

Objectif : convergence vers un système de plus en plus aligné avec les attentes cliniques réelles

Système de Recommandation Proactif

Au-delà de la réponse à questions, le système peut :

Suggérer des informations pertinentes :

Lors de la consultation du dossier d'un patient diabétique:

💡 Information pertinente
   Nouvelles guidelines ADA 2024 sur les cibles glycémiques
   chez le sujet âgé polymédiqué
   [Voir résumé] [Plus tard] [Ne plus suggérer]

Alertes préventives :

⚠️ Alerte de sécurité
   Le patient prend Metformine + Ibuprofène depuis 5 jours
   Risque : acidose lactique (interaction)
   Recommandation : surveillance fonction rénale
   Source : Thésaurus des interactions médicamenteuses ANSM

Graphes de Connaissances Personnalisés

Chaque patient pourrait avoir un graphe de connaissances individualisé :

graph TB
    P[Patient Individuel]

    P --> G[Génotype]
    G --> G1[Polymorphisme CYP2D6]
    G --> G2[Mutation BRCA1]

    P --> PH[Phénotype]
    PH --> PH1[Diabète Type 2]
    PH --> PH2[HTA]
    PH --> PH3[Obésité]

    P --> T[Traitements]
    T --> T1[Metformine 1000mg x2]
    T --> T2[Ramipril 5mg x1]

    P --> E[Environnement]
    E --> E1[Activité physique: faible]
    E --> E2[Régime: hypercalorique]

    G1 -.Métabolisme lent.-> T2
    PH1 -.Indication.-> T1
    PH2 -.Indication.-> T2
    E1 -.Facteur aggravant.-> PH1
    E2 -.Facteur aggravant.-> PH1

Ce graphe personnalisé permettrait :

  • Prédiction de réponse aux traitements (pharmacogénomique)
  • Identification de risques spécifiques au patient
  • Recommandations véritablement personnalisées

Médecine Prédictive et Préventive

Modèles pronostiques intégrés :

À partir du graphe patient + graphe général de connaissances, prédiction :

  • Risques de complications à 5/10 ans
  • Trajectoires probables d'évolution
  • Interventions préventives optimales

P(Complicationi​∣Patient)=f(Graphepatient​,Graphegeˊneˊral​,θ)

où f est un modèle de machine learning (GNN - Graph Neural Network) entraîné sur des cohortes longitudinales.

Système Multi-Agent pour Décisions Complexes

Pour les cas cliniques complexes, déploiement d'une architecture multi-agents :

graph TB
    CC[Cas Clinique Complexe]

    CC --> A1[Agent Diagnostique]
    CC --> A2[Agent Pronostique]
    CC --> A3[Agent Thérapeutique]
    CC --> A4[Agent Éthique]

    A1 --> D[Diagnostic Différentiel]
    A2 --> P[Pronostics Probables]
    A3 --> T[Options Thérapeutiques]
    A4 --> E[Considérations Éthiques]

    D --> S[Synthèse Multi-Agent]
    P --> S
    T --> S
    E --> S

    S --> R[Recommandation Intégrée]

Chaque agent spécialisé mobilise une portion du graphe et des modèles spécifiques, puis un processus de délibération multi-agent synthétise les perspectives.

Interface Conversationnelle Avancée

Dialogue naturel continu :

Au lieu de questions isolées, conversation suivie permettant :

  • Clarifications progressives
  • Exploration de scénarios alternatifs
  • Pédagogie interactive

Clinicien: Patient 45 ans, douleur thoracique
Système: Caractéristiques de la douleur ?

Clinicien: Oppressive, rétrosternale, irradiant bras gauche
Système: Durée ? Facteurs déclenchants ?

Clinicien: 30 minutes, au repos
Système: Très évocateur de SCA. ECG disponible ?

Clinicien: Oui, sus-décalage ST en antérieur
Système: → STEMI antérieur. Protocole STEMI recommandé:
- Aspirine 250mg PO immédiat
- Clopidogrel 600mg PO
- Anticoagulation (HNF ou Énoxaparine)
- Alerte salle de cathétérisme pour angioplastie primaire
Délai porte-ballon cible: <90 min
Questions sur le protocole ?

Limites, Défis et Perspectives Critiques

Limites Épistémologiques Fondamentales

L'Irréductibilité du Jugement Clinique

Aucun système, aussi sophistiqué soit-il, ne peut capturer la totalité de l'acte médical. Le jugement clinique mobilise :

  • Intuition expérientielle : reconnaissance de patterns subtils issus de milliers de cas vus
  • Dimension relationnelle : la médecine est une rencontre entre deux subjectivités
  • Contexte holistique : facteurs sociaux, psychologiques, existentiels qui échappent à la formalisation

Le GraphRAG peut informer, suggérer, alerter, mais ne peut se substituer à cette dimension proprement humaine du soin.

Le Problème de la Mise à Jour des Connaissances

La connaissance médicale n'évolue pas de manière cumulative linéaire, mais par ruptures, controverses, révolutions paradigmatiques. Un système basé sur un corpus existant :

  • Est intrinsèquement conservateur (biais vers le consensus établi)
  • Peut manquer les signaux faibles annonçant un changement de paradigme
  • Risque de perpétuer des pratiques obsolètes si les mises à jour sont insuffisamment critiques

Mitigation :

  • Processus de curation humaine continue
  • Signalement explicite des controverses
  • Pondération dynamique favorisant les publications récentes dans les domaines en évolution rapide

La Question de l'Explicabilité Profonde

Les modèles de langage de grande échelle demeurent des « boîtes noires » partielles. Même avec traçabilité des sources, nous ne comprenons pas pleinement :

  • Pourquoi un modèle génère telle formulation plutôt qu'une autre
  • Quels biais implicites sont encodés dans ses paramètres
  • Comment s'effectue la « compréhension » (si ce terme est même approprié) sémantique

Cette opacité pose problème pour :

  • La responsabilité juridique
  • La confiance des praticiens
  • La détection de dysfonctionnements subtils

Défis Techniques Persistants

Gestion de l'Ambiguïté et du Contexte Implicite

Les requêtes médicales sont souvent elliptiques, présupposent un contexte partagé :
"Traitement?" → Traitement de quoi ? Pour quel patient ? Quel stade ?
Le système doit soit :

  • Demander des clarifications (risque de friction utilisateur)
  • Inférer le contexte (risque d'erreur)
    Équilibre délicat à trouver.

Limites : hallucinations, biais de corpus, dérive statistique

Les LLM peuvent générer du contenu factuellement incorrect avec une fluidité convaincante. En médecine, ce risque est critique.

Stratégies de mitigation :

  • Prompting "context-strict" pour questions critiques
  • Validation systématique par confrontation au graphe
  • Scores de confiance calibrés
  • Formation des utilisateurs à l'esprit critique
    Mais aucune garantie absolue n'est possible.

Même avec RAG, un LLM peut :

  • Halluciner une étude inexistante,
  • Biaiser une recommandation selon les tendances de son corpus,
  • Déraper en cas de requête ambiguë.
    D’où la nécessité d’un humain dans la boucle.

Hallucinations

Le LLM génère des faits non présents dans les sources :

\[ \mathbb{P}_{\text{hallucination}} = 1 - \mathbb{P}(y \in \text{Support}(D) \mid x) \]

Contre-mesure : vérification post-génération via le KG :

  • Extraction d’entités dans \(y\),
  • Vérification de leur existence dans le graphe.

Biais de corpus

Si le corpus sous-représente la médecine vétérinaire, les réponses seront biaisées vers la médecine humaine.

Contre-mesure : pondération stratifiée dans le RAG :

\[ w_d = \frac{1}{\text{count}_{\text{domain}}(d)} \quad \text{(sur-pondération des domaines minoritaires)} \]

Dérive sémantique

Les embeddings peuvent diverger dans des contextes rares (ex. : maladies tropicales négligées).

Contre-mesure : fine-tuning ciblé ou adapter plug-in (ex. : LoRA) sur des corpus One Health.

Paradoxe et Compétences

Paradoxe : si les cliniciens s'appuient massivement sur l'IA, risquent-ils d'éroder leurs propres compétences de raisonnement ?

L'invention puis la diffusion de la calculatrice n'a pas éliminé le besoin de comprendre les mathématiques, mais a transformé la nature des compétences requises.

L'IA est un outil comme la calculatrice ; les praticiens doivent :

  • Maîtriser le raisonnement médical fondamental
  • Développer des méta-compétences : évaluation critique des sorties IA, gestion de l'incertitude, jugement contextuel

Perspectives Philosophiques : Redéfinir la Connaissance Médicale

« La connaissance n’est pas un territoire à conquérir, mais un réseau de relations à tisser. »

Cette maxime résume une mutation profonde en cours : la connaissance médicale cesse d’être pensée comme un corpus stable de faits objectifs pour devenir un processus dynamique de relations, d’interprétations et d’incertitudes. Intégrer les LLMs et les graphes de connaissances dans la pratique clinique ne constitue pas seulement une avancée technologique : c’est une occasion de repenser radicalement ce que signifie « connaître » en médecine.
Trois axes philosophiques émergent de cette reconfiguration épistémologique :
(1) le passage d’une épistémologie représentationnelle à une épistémologie relationnelle,
(2) la révision du statut de la vérité clinique, et
(3) l’émergence d’une herméneutique computationnelle comme nouvelle modalité du jugement médical.

De la représentation à la relation

Traditionnellement, la médecine moderne s’est construite sur une épistémologie représentationnelle, héritée du positivisme du XIXe siècle : la connaissance consiste à représenter fidèlement un monde objectif (le corps, la maladie, les mécanismes physiopathologiques) à travers des faits isolables, accumulables, vérifiables. Les bases de données biomédicales, les articles scientifiques ou les classifications comme l’ICD-10 incarnent cette logique archivistique où chaque « entité » (diagnostic, symptôme, traitement) possède une identité autonome et un sens fixe.

Or, comme vous le soulignez dans votre analyse du graphe de connaissances, la médecine est fondamentalement relationnelle. Un symptôme n’existe que par rapport à un contexte clinique ; une pathologie n’a de sens qu’à travers ses interactions avec l’environnement, les facteurs génétiques, les pratiques sociales. En ce sens, le graphe n’est pas une simple visualisation technique : il est la formalisation ontologique d’un savoir qui ne réside pas dans les nœuds, mais dans les liens.

Cette mutation s’inscrit dans une tradition philosophique plus large :

  • Gilles Deleuze et Félix Guattari opposaient l’« arbre » (modèle hiérarchique, représentationnelle) au « rhizome » (réseau non hiérarchique, relationnel). Le graphe One Health est un rhizome computationnel.
  • Donna Haraway parlait de « savoirs situés » : la vérité scientifique n’est jamais neutre, mais toujours contextualisée par des positions (clinicien, patient, éleveur, écologue). Le GraphRAG, en intégrant ces différentes perspectives, rend compte de cette situationnalité épistémique.
  • Karen Barad proposait une « agential realism » où les phénomènes ne préexistent pas à leurs mesures : c’est l’acte même de connexion (entre agent pathogène, hôte, environnement) qui constitue la réalité. De même, dans votre système, ce n’est pas le diabète de type 2 qui existe a priori, mais le nœud émergent d’un ensemble de relations cliniques, épidémiologiques et environnementales.

Ainsi, la connaissance médicale n’est plus ce que l’on « possède », mais ce que l’on « tisse » — un verbe qui renvoie à la fois à la logique du graphe, à l’activité du clinicien et à l’éthique du soin.


La vérité clinique : entre consensus, preuve et jugement

Dans ce nouveau paradigme, la vérité cesse d’être absolue pour devenir probabiliste, contextuelle et parfois conflictuelle. Votre système ne renvoie pas une « réponse unique », mais une synthèse pondérée, accompagnée de scores de confiance, de sources contradictoires et d’avertissements d’incertitude :

« Les recommandations concernant l’aspirine en prévention primaire ont évolué récemment... La décision doit être individualisée. »

Cette formulation ne reflète pas une faiblesse technique, mais une fidélité épistémologique à la nature même de la médecine. Comme le rappelait Edmund Pellegrino, la médecine n’est ni une science pure ni un art, mais une praxis éthique — un jugement exercé dans l’incertitude.

Mathématiquement, cela signifie que la connaissance médicale ne peut plus être modélisée comme un ensemble binaire de faits vrais/faux :

\[ \text{Fait}(x) \in \{0,1\} \]

mais comme une fonction de confiance temporelle et contextuelle :

\[ \text{Confiance}(x, t, c) = f\big(\text{Preuve}(x), \text{Consensus}(x, t), \text{Applicabilité}(x, c)\big) \]

où :

  • \(x\) est une assertion clinique,
  • \(t\) le temps (les guidelines évoluent),
  • \(c\) le contexte (patient âgé, polymédication, facteurs sociaux),
  • \(\text{Preuve}(x)\) reflète la hiérarchie des preuves (essai randomisé vs. avis d’expert),
  • \(\text{Consensus}(x, t)\) intègre la dynamique des controverses scientifiques,
  • \(\text{Applicabilité}(x, c)\) évalue la pertinence dans la situation clinique réelle.

Cette fonction est intrinsèquement non monotone : une vérité admise aujourd’hui peut être réfutée demain (ex. : hormone de remplacement à la ménopause). Votre système, en traçant la provenance des affirmations et en signalant les désaccords, respecte cette épistémologie de la révisabilité.


L’herméneutique computationnelle

Enfin, l’intégration du LLM dans le raisonnement clinique ne se réduit pas à une automatisation du diagnostic. Elle ouvre la voie à ce que nous pourrions appeler une herméneutique computationnelle — c’est-à-dire une capacité à interpréter, et non seulement à calculer.

L’herméneutique, traditionnellement associée à la philosophie de Hans-Georg Gadamer ou à la médecine narrative de Rita Charon, insiste sur le fait que comprendre un patient n’est pas appliquer un algorithme, mais entrer dans un dialogue historiquement situé. Or, le LLM, dans sa modalité « LLM-Informed », reproduit ce geste interprétatif :

  • il distingue ce qui provient d’une source documentaire et ce qui relève de la connaissance générale,
  • il contextualise les données dans un récit clinique cohérent,
  • il signale les zones d’ombre, les présupposés non dits, les risques de biais.

Ce faisant, le LLM devient moins un oracle qu’un interlocuteur épistémique — un partenaire dans l’acte d’interprétation.

On peut formaliser ce processus comme une boucle herméneutique itérative :

flowchart LR
    A[Requête clinique ambiguë\nTraitement?]
    --> B[Extraction contextuelle\nâge, comorbidités, allergies]
    --> C[Navigation dans le graphe\nrelations patho-thérapeutiques]
    --> D[Génération narrative\nEn tenant compte de X, Y, Z...]
    --> E[Validation humaine\njugement clinique]
    --> F{Acceptée ?}
    F -- Non --> G[Clarification / Reformulation]
    G --> A
    F -- Oui --> H[Intégration au dossier\n+ apprentissage du feedback]
    H --> I[Mise à jour du graphe\nou des embeddings]
    I --> C

Cette boucle n’est pas un cycle fermé de rationalité technique, mais un espace de co-construction du sens, où l’intelligence artificielle et l’intelligence humaine s’interrogent mutuellement.


Vers une épistémologie One Health computationnelle

L’approche One Health, en intégrant les dimensions humaine, animale et environnementale, pousse cette réflexion encore plus loin. Elle refuse la fragmentation disciplinaire et impose une épistémologie systémique. Or, cette systémicité ne peut être capturée par des modèles cloisonnés ; elle exige une architecture capable de :

  • traduire les concepts d’un domaine à l’autre (zoonose ↔ maladie émergente ↔ facteur climatique),
  • gérer des temporalités multiples (évolution du pathogène, cycle de vie de l’hôte, changements environnementaux),
  • concilier des régimes de preuve hétérogènes (données vétérinaires, épidémiologie humaine, modèles écologiques).

C’est précisément ce que permet le GraphRAG hybride : chaque nœud est vectorisé, chaque relation est pondérée, chaque assertion est tracée. La connaissance One Health n’est plus un agrégat de disciplines, mais un tissu computationnel interdisciplinaire.

On peut alors proposer une définition formelle de la connaissance One Health dans ce cadre :

\[ \mathcal{K}_{\text{OH}} = \bigcup_{d \in \{\text{humain}, \text{animal}, \text{environnement}\}} \Big( \mathcal{G}_d \cup \mathcal{R}_{d,d'} \Big) \]

où :

  • \(\mathcal{G}_d\) est le sous-graphe de connaissances du domaine \(d\),
  • \(\mathcal{R}_{d,d'}\) est l’ensemble des relations inter-domaines (ex. : (:Animal)-[:RESERVOIR_OF]->(:Pathogen)-[:TRANSMITTED_TO]->(:Human)),
  • l’union est dynamique et pondérée par la fiabilité des sources.

Cette connaissance n’est ni objective ni subjective, mais relationnelle, située et responsable.


Intégrer l’intelligence artificielle dans la médecine, surtout dans une perspective One Health, n’est donc pas une simple question d’efficacité ou de précision. C’est une reconfiguration profonde du paradigme épistémologique sous-jacent à la pratique clinique.

Le LLM, le RAG et le graphe de connaissances ne remplacent pas le clinicien : ils révèlent la nature profondément interprétative, relationnelle et incertaine de la connaissance médicale.
En ce sens, votre système ne se contente pas d’aider à la décision : il invite à une renaissance du jugement clinique, plus humble, plus contextualisé, plus éthique.

Comme l’écrivait Michel Foucault dans Naissance de la clinique :

« Il ne s’agit plus de lire dans le corps les signes que Dieu y a placé, mais de faire parler le corps lui-même. »

Aujourd’hui, il ne s’agit plus seulement de faire parler le corps, mais de faire dialoguer le corps, l’animal, l’écosystème et la machine — dans un espace nouveau, où la connaissance est tissée, jamais posée, toujours en devenir.

Les LLMs, bien que puissants, ne sont pas autonomes dans les domaines sensibles. Leur intégration dans un écosystème One Health exige :

  • Une base de connaissances vérifiable (Neo4j),
  • Une mémoire de travail dynamique (RAG),
  • Une infrastructure souveraine (on-prem),
  • Et une boucle humaine de validation.

La combinaison de mathématiques formelles, de représentations graphiques, et de pipelines modulaires permet de construire des systèmes d’IA fiables, explicables et actionnables dans le cadre interdisciplinaire du notre projet One Health.

Organisation des savoirs et déploiement d'un système GraphRAG en contexte médical

"La connaissance n'est pas un territoire à conquérir, mais un réseau de relations à tisser."

Introduction : L'Émergence d'une Épistémologie Computationnelle

Dans l'espace contemporain de la recherche médicale, nous assistons à une transformation qui dépasse largement les simples mutations technologiques. Ce que nous nommons « intelligence artificielle » participe d'une reconfiguration plus profonde des modalités mêmes du savoir. Le système GraphRAG – Graph-based Retrieval-Augmented Generation – ne constitue pas simplement un outil parmi d'autres, mais l'inscription technique d'une nouvelle ontologie de la connaissance médicale.

L'ambition de cette architecture réside dans sa capacité à cartographier non pas des données isolées, mais les relations qui constituent le tissu même du savoir biomédical. Comme l'écrivait Baudrillard à propos des simulacres, nous ne sommes plus dans l'ordre de la représentation, mais dans celui de la génération : le système ne représente pas la connaissance, il la produit activement par l'articulation de ses composantes.

Cette recherche s'inscrit dans une temporalité paradoxale : celle d'une urgence clinique qui exige des réponses immédiates, et celle d'une réflexion épistémologique qui nécessite la patience de l'analyse. Entre ces deux pôles, le GraphRAG propose une médiation technique qui mérite d'être scrutée dans ses dimensions architecturales, éthiques et pragmatiques.

I. Fondements Théoriques : Vers une Ontologie Relationnelle de la Connaissance Médicale

1.1 La Critique de l'Épistémologie Documentaire Classique

La médecine moderne repose historiquement sur une épistémologie de l'accumulation : articles, études cliniques, protocoles qui s'empilent dans des bases de données toujours plus vastes. Cette logique archivistique, héritée du positivisme du XIXe siècle, présuppose que la connaissance existe sous forme de « faits » autonomes, extractibles et combinables à volonté.

Or cette présupposition masque une réalité plus complexe : le savoir médical n'existe que dans le réseau de ses relations. Un symptôme n'a de sens que par rapport à une pathologie, elle-même inscrite dans une taxonomie nosologique, liée à des mécanismes physiopathologiques, associée à des protocoles thérapeutiques. La connaissance médicale est fondamentalement relationnelle, et c'est précisément cette dimension que les systèmes traditionnels de récupération d'information échouent à capturer.

Les modèles de langage de grande échelle (LLM), dans leur forme la plus naïve, reproduisent cette insuffisance sous une autre modalité. Leur capacité de génération repose sur des corrélations statistiques extraites de corpus textuels, sans véritable ancrage dans une structure épistémologique explicite. Ils excellent à produire du texte plausible, mais peinent à garantir la fidélité factuelle et la traçabilité des sources – exigences fondamentales en contexte clinique.

1.2 Le Tournant Graphique : Topologie et Sémantique

Le passage à une architecture graphique constitue moins une innovation technique qu'une mutation conceptuelle. En représentant la connaissance comme un graphe – ensemble de nœuds (entités) reliés par des arêtes (relations) – nous opérons un déplacement ontologique majeur.

Dans cette structure, l'entité médicale n'existe plus isolément. Un concept comme « diabète de type 2 » devient un nœud connecté à :

  • Des symptômes (polyurie, polydipsie, fatigue)
  • Des mécanismes physiopathologiques (résistance à l'insuline, dysfonction des cellules β)
  • Des facteurs de risque (obésité, sédentarité, prédisposition génétique)
  • Des complications (néphropathie, rétinopathie, neuropathie)
  • Des traitements (metformine, insuline, modifications du mode de vie)
  • Des biomarqueurs (HbA1c, glycémie à jeun)

Cette topologie révèle ce que les documents textuels ne peuvent qu'évoquer : la structure immanente du savoir médical. Le graphe n'est pas une simple visualisation ; il est l'explicitation d'une ontologie pratique qui guide le raisonnement clinique.

1.3 La Dialectique Retrieval-Generation : Entre Ancrage et Créativité

L'architecture RAG (Retrieval-Augmented Generation) introduit une dialectique productive entre deux opérations apparemment antagonistes :

  1. Le retrieval (récupération) : mouvement d'ancrage dans un corpus existant, garantie de factualité, traçabilité des sources
  2. La generation (génération) : mouvement de synthèse créative, adaptation contextuelle, production de cohérence narrative

Cette tension n'est pas un compromis technique, mais l'inscription computationnelle d'une tension épistémologique fondamentale : celle entre l'autorité de la source et la nécessité de l'interprétation. En médecine, cette dialectique prend une dimension éthique : comment produire une réponse personnalisée au contexte clinique unique d'un patient, tout en restant fidèle aux données probantes de la littérature ?

Le GraphRAG résout cette tension par une stratégie en trois temps :

  1. Contextualisation : identification des concepts pertinents dans la requête
  2. Navigation : exploration du graphe de connaissances pour récupérer non seulement des documents, mais des relations entre concepts
  3. Synthèse : génération d'une réponse qui articule ces relations de manière cohérente et contextuellement appropriée

II. Architecture Technique : Anatomie d'un Système Épistémologique

2.1 Vision d'Ensemble : Une Infrastructure à Huit Dimensions

L'architecture du système repose sur une organisation modulaire en huit catégories conceptuelles, chacune répondant à des exigences spécifiques :

graph TB
    subgraph Technique[Catégorie Technique]
        A1[Architecture Système]
        A2[Pipeline GraphRAG]
        A3[Infrastructure Cloud]
    end

    subgraph IA[Catégorie IA]
        B1[Modèles de Langage]
        B2[Embeddings Vectoriels]
        B3[Algorithmes de Re-ranking]
    end

    subgraph Medical[Catégorie Médicale]
        C1[Ontologies Cliniques]
        C2[Taxonomies Nosologiques]
        C3[Protocoles Thérapeutiques]
    end

    subgraph Data[Catégorie Données]
        D1[Graphes de Connaissances]
        D2[Bases Vectorielles]
        D3[Sources Documentaires]
    end

    subgraph Gov[Catégorie Gouvernance]
        E1[Conformité Réglementaire]
        E2[Sécurité et Confidentialité]
        E3[Auditabilité]
    end

    subgraph Community[Catégorie Communauté]
        F1[Validation Clinicienne]
        F2[Retours Utilisateurs]
        F3[Amélioration Continue]
    end

    subgraph Knowledge[Catégorie Connaissances]
        G1[Curation de Contenu]
        G2[Mise à Jour Dynamique]
        G3[Versionnement]
    end

    subgraph Workflow[Catégorie Workflow]
        H1[Intégration Clinique]
        H2[Interface Utilisateur]
        H3[Monitoring Performance]
    end

    A2 --> B1
    A2 --> D1
    A2 --> D2
    B1 --> C1
    D1 --> C1
    E1 --> A3
    F1 --> G1
    H1 --> A2
    H3 --> B3

Cette cartographie révèle la complexité systémique de l'entreprise : il ne s'agit pas simplement de « brancher » un modèle de langage à une base de données, mais de construire une infrastructure épistémologique intégrant des dimensions techniques, médicales, éthiques et organisationnelles.

2.2 Le Pipeline GraphRAG : Septuple Articulation de la Connaissance

Le cœur opérationnel du système réside dans un pipeline en sept étapes, chacune constituant une transformation épistémologique spécifique :

flowchart LR
    Q[Requête Clinique] --> E[Extraction des Termes Médicaux]
    E --> GR[Récupération dans le Graphe]
    E --> VR[Récupération Vectorielle]
    GR --> F[Fusion Multi-Source]
    VR --> F
    F --> G[Génération de Réponse]
    G --> V[Validation et Scoring]
    V --> R[Réponse Finale]

    style Q fill:#e1f5ff
    style R fill:#d4edda
    style F fill:#fff3cd
    style V fill:#f8d7da
Étape 1 : Extraction des Termes Médicaux

La première opération consiste à identifier les entités médicales pertinentes dans la requête utilisateur. Cette extraction ne relève pas d'une simple reconnaissance de mots-clés, mais d'une analyse sémantique qui mobilise :

  • Recognition de Named Entities (NER) médicales : identification des concepts appartenant aux catégories ontologiques pertinentes (maladies, symptômes, traitements, anatomie, etc.)
  • Normalisation terminologique : mapping vers des identifiants standardisés (codes SNOMED CT, ICD-10, MeSH, etc.)
  • Désambiguïsation contextuelle : résolution des polysémies (ex : « IC » peut signifier « insuffisance cardiaque » ou « intervalle de confiance »)

Cette phase constitue le pont entre le langage naturel du clinicien et l'ontologie formelle du système.

Étape 2 : Récupération dans le Graphe (Graph Retrieval)

À partir des entités identifiées, le système explore le graphe de connaissances selon plusieurs stratégies de navigation :

  • Voisinage immédiat : nœuds directement connectés (relations de premier ordre)
  • Chemins sémantiques : parcours orientés suivant des types de relations spécifiques (ex : symptôme → maladie → traitement)
  • Communautés conceptuelles : clusters d'entités fortement interconnectées, révélant des thématiques médicales cohérentes

Cette exploration peut être formalisée par une fonction de scoring qui évalue la pertinence d'un nœud \(v\) par rapport à une requête \(q\) :

\[ \text{score}_{\text{graph}}(v, q) = \sum_{e \in E_q} w(e) \cdot \text{relevance}(v, e) \cdot \text{path\_weight}(e, v) \]

où :

  • \(E_q\) : ensemble des entités extraites de la requête
  • \(w(e)\) : poids d'importance de l'entité \(e\) dans la requête
  • \(\text{relevance}(v, e)\) : mesure de pertinence sémantique entre \(v\) et \(e\)
  • \(\text{path\_weight}(e, v)\) : poids du chemin le plus pertinent reliant \(e\) à \(v\)
Étape 3 : Récupération Vectorielle (Vector Retrieval)

En parallèle de l'exploration graphique, le système effectue une recherche dans l'espace vectoriel des embeddings. Chaque document source est représenté par un vecteur dense capturant sa sémantique :

\[ \vec{d} = \text{Embedding}(\text{document}) \]

La similarité entre la requête et les documents est mesurée par la distance cosinus :

\[ \text{sim}(\vec{q}, \vec{d}) = \frac{\vec{q} \cdot \vec{d}}{|\vec{q}| \cdot |\vec{d}|} \]

Les \(k\) documents les plus similaires sont récupérés. Cette approche complète la récupération graphique en capturant des similarités sémantiques qui ne seraient pas explicitement encodées dans les relations du graphe.

Étape 4 : Fusion Multi-Source

La fusion des résultats provenant du graphe et de l'espace vectoriel constitue un moment critique. Plusieurs stratégies sont possibles :

Fusion par agrégation pondérée :

\[ \text{score}_{\text{final}}(d) = \alpha \cdot \text{score}_{\text{graph}}(d) + (1-\alpha) \cdot \text{score}_{\text{vector}}(d) \]

\(\alpha \in [0,1]\) contrôle l'équilibre entre les deux modalités de récupération.

Fusion par re-ranking : utilisation d'un modèle de cross-encoding qui évalue la pertinence contextuelle de chaque document par rapport à la requête :

\[ \text{score}_{\text{rerank}}(q, d) = \text{CrossEncoder}([q; d]) \]

Cette approche permet une évaluation plus fine qui prend en compte les interactions subtiles entre la requête et le contenu documentaire.

Étape 5 : Génération de Réponse

Les documents et fragments récupérés sont ensuite fournis comme contexte à un modèle de langage génératif. Trois stratégies de prompting se distinguent :

1. LLM-Only (Génération sans contrainte forte)

Le modèle génère librement en s'appuyant sur ses connaissances pré-entraînées, avec le contexte récupéré comme « suggestion » :

Contexte informationnel : [documents récupérés]
Question : [requête utilisateur]
En tant qu'assistant médical, fournis une réponse complète et nuancée.

Avantages : fluidité narrative, capacité de synthèse
Risques : hallucinations, déviations factuelles

2. Context-Strict (Génération contrainte)

Le modèle est explicitement contraint à ne répondre qu'à partir du contexte fourni :

Contexte : [documents récupérés]
Question : [requête utilisateur]
IMPORTANT : Tu dois répondre UNIQUEMENT en utilisant les informations 
explicitement présentes dans le contexte. Si l'information n'est pas 
dans le contexte, indique que tu ne peux pas répondre.

Avantages : fidélité factuelle, traçabilité
Risques : rigidité, réponses incomplètes si le contexte est insuffisant

3. LLM-Informed (Approche hybride)

Le modèle distingue explicitement les informations provenant du contexte et celles issues de ses connaissances générales :

Contexte documentaire : [documents récupérés]
Question : [requête utilisateur]
Structure ta réponse en deux parties :
1. Informations issues du contexte fourni [avec citations]
2. Éléments de connaissance générale pertinents [clairement signalés]

Avantages : équilibre entre fidélité et complétude, transparence épistémologique
Risques : complexité de mise en œuvre, nécessité d'un modèle sophistiqué

Étape 6 : Validation et Scoring

La réponse générée est soumise à une double évaluation :

Evidence Score : mesure du degré d'ancrage dans les sources

\[ E_{\text{score}} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\text{claim}_i \text{ supporté par contexte}] \]

\(N\) est le nombre d'affirmations factuelles dans la réponse.

Correctness Score : évaluation de la validité médicale

\[ C_{\text{score}} = \text{Validator}(\text{réponse}, \text{ontologie médicale}) \]

Ce validateur peut être :

  • Un modèle spécialisé fine-tuné sur des tâches de vérification médicale
  • Un système de règles basé sur des ontologies cliniques
  • Une validation humaine par des experts (pour les cas critiques)
Étape 7 : Réponse Finale et Métadonnées

La réponse est enrichie de métadonnées de traçabilité :

  • Sources citées : références bibliographiques précises
  • Scores de confiance : Evidence Score et Correctness Score
  • Chemins de raisonnement : visualisation des relations graphiques mobilisées
  • Avertissements : signalement des zones d'incertitude

Cette transparence épistémologique est cruciale pour l'acceptabilité clinique du système.

2.3 Comparaison des Stratégies de Prompting : Une Analyse Empirique

Pour évaluer l'efficacité relative des trois stratégies, nous proposons un protocole d'évaluation structuré :

Dimension LLM-Only Context-Strict LLM-Informed
Fidélité factuelle ★★☆☆☆ ★★★★★ ★★★★☆
Complétude ★★★★☆ ★★☆☆☆ ★★★★★
Fluidité narrative ★★★★★ ★★★☆☆ ★★★★☆
Traçabilité ★☆☆☆☆ ★★★★★ ★★★★★
Adaptabilité contexte ★★★★★ ★★☆☆☆ ★★★★☆
Risque d'hallucination Élevé Minimal Faible
Utilisabilité clinique Limitée Modérée Élevée

Analyse critique :

L'approche LLM-Only produit des réponses fluides et complètes, mais son manque de traçabilité et ses risques d'hallucination la rendent problématique en contexte clinique où la responsabilité médicolégale exige une justification factuelle de chaque affirmation.

L'approche Context-Strict garantit la fidélité aux sources, mais sa rigidité peut produire des réponses frustrantes pour l'utilisateur lorsque le contexte récupéré est incomplet. Elle convient aux applications à haut risque où la précision prime sur la complétude.

L'approche LLM-Informed apparaît comme le compromis optimal pour la pratique clinique : elle combine fidélité et complétude, tout en maintenant la transparence épistémologique nécessaire à la confiance des praticiens. Sa mise en œuvre requiert cependant des modèles de langage suffisamment sophistiqués pour gérer la distinction entre connaissances contextuelles et générales.

2.4 Algorithmes de Re-ranking : Affiner la Pertinence Contextuelle

Le re-ranking constitue une couche d'intelligence supplémentaire qui affine les résultats de la récupération initiale. Plusieurs algorithmes peuvent être déployés :

Re-ranking par Cross-Encoding

Contrairement aux bi-encoders utilisés pour la récupération vectorielle initiale (qui encodent requête et documents séparément), les cross-encoders évaluent conjointement la paire (requête, document) :

\[ \text{score}_{\text{cross}}(q, d) = \text{BERT}_{\text{cross}}([q; d]) \]

Cette architecture capture des interactions fines entre les termes de la requête et ceux du document, au prix d'une complexité computationnelle plus élevée (quadratique en la longueur des séquences).

Re-ranking par Learning-to-Rank

Les approches de learning-to-rank apprennent directement à ordonner les documents par pertinence. Soit un ensemble de features \(\phi(q, d)\) caractérisant la paire (requête, document) :

\[ \phi(q, d) = \begin{bmatrix} \text{score}_{\text{vector}}(q, d) \\ \text{score}_{\text{graph}}(q, d) \\ \text{freshness}(d) \\ \text{authority}(d) \\ \text{overlap}_{\text{lexical}}(q, d) \\ \vdots \end{bmatrix} \]

Un modèle de ranking (ex : LambdaMART, RankNet) apprend à prédire un score :

\[ \text{score}_{\text{rank}}(q, d) = f_\theta(\phi(q, d)) \]

L'entraînement se fait sur des données annotées avec des jugements de pertinence par des experts médicaux.

Re-ranking par Diversité

Pour éviter la redondance, on peut introduire un critère de diversité qui pénalise les documents trop similaires entre eux :

\[ \text{score}_{\text{diverse}}(d_i | D_{\text{selected}}) = \text{score}_{\text{base}}(d_i) - \lambda \cdot \max_{d_j \in D_{\text{selected}}} \text{sim}(d_i, d_j) \]

\(D_{\text{selected}}\) est l'ensemble des documents déjà sélectionnés, et \(\lambda\) contrôle le degré de pénalité pour la similarité.

Cette approche assure que le contexte fourni au modèle génératif couvre un spectre informationnel plus large.

2.5 Métriques d'Évaluation : Mesurer la Qualité Épistémologique

L'évaluation d'un système GraphRAG en contexte médical ne peut se limiter à des métriques techniques classiques (précision, rappel, F1-score). Il faut des indicateurs qui capturent les dimensions épistémologiques et cliniques :

Evidence Score (Score de Preuve)

Mesure la proportion d'affirmations dans la réponse qui sont supportées par le contexte récupéré :

\[ E = \frac{|\{\text{claim} \in \text{response} : \exists \text{evidence} \in \text{context}, \text{supports(evidence, claim)}\}|}{|\{\text{claim} \in \text{response}\}|} \]

Seuils recommandés :

  • \(E \geq 0.9\) : haute fidélité, acceptable pour usage clinique direct
  • \(0.7 \leq E < 0.9\) : fidélité modérée, nécessite revue humaine
  • \(E < 0.7\) : fidélité insuffisante, rejet automatique
Correctness Score (Score d'Exactitude Médicale)

Évaluation de la validité médicale des affirmations par confrontation avec des ontologies de référence ou validation par experts :

\[ C = \frac{1}{N} \sum_{i=1}^{N} \text{correct}(\text{claim}_i) \]

\(\text{correct}(\cdot) \in \{0, 1\}\) est déterminé par :

  • Vérification automatique contre des bases de connaissances médicales validées (UpToDate, guidelines cliniques)
  • Revue par des cliniciens experts pour les cas complexes
Relevance Score (Score de Pertinence Clinique)

Mesure l'adéquation de la réponse au contexte clinique de la requête :

\[ R = \text{Relevance}_{\text{clinician}}(\text{response}, \text{query}) \]

Cette métrique nécessite des annotations humaines par des praticiens, qui évaluent selon une échelle de Likert (1-5) si la réponse est actionnable et pertinente pour la situation clinique évoquée.

Comprehensiveness Score (Score de Complétude)

Évalue si la réponse couvre tous les aspects pertinents du sujet :

\[ \text{Comp} = \frac{|\text{aspects couverts}|}{|\text{aspects attendus}|} \]

Les « aspects attendus » sont définis par des checklists cliniques standardisées pour chaque type de question (ex : pour une question diagnostique, on attend symptômes, examens complémentaires, diagnostics différentiels, etc.).

Conciseness Score (Score de Concision)

Pénalise la verbosité excessive tout en récompensant la complétude :

\[ \text{Conc} = \frac{\text{Comp}}{1 + \alpha \cdot \log(\text{length})} \]

\(\alpha\) est un paramètre de pénalité ajustable selon le contexte (en urgence, on privilégie la brièveté ; pour l'éducation, on tolère plus de détails).

Traceability Score (Score de Traçabilité)

Mesure la qualité des citations et références fournies :

\[ T = \frac{1}{N} \sum_{i=1}^{N} \left[\mathbb{1}[\text{claim}_i \text{ cité}] \cdot \text{quality}(\text{citation}_i)\right] \]

\(\text{quality}(\cdot)\) évalue la précision de la citation (citation directe avec numéro de page > citation de section > citation d'article sans localisation).

Métrique Composite : Clinical Utility Score

Pour une évaluation globale, on peut définir un score composite qui agrège les dimensions précédentes :

\[ \text{CUS} = w_E \cdot E + w_C \cdot C + w_R \cdot R + w_{\text{Comp}} \cdot \text{Comp} + w_T \cdot T \]

où les poids \(w_i\) sont déterminés par des études utilisateurs avec des cliniciens pour refléter l'importance relative de chaque dimension dans la pratique.

III. Dimensions Médicales : Ontologies, Taxonomies et Raisonnement Clinique

3.1 Le Défi de la Structuration du Savoir Biomédical

La médecine contemporaine est confrontée à une prolifération informationnelle sans précédent. Plus de 2 millions d'articles sont publiés chaque année dans les revues biomédicales, rendant impossible pour un praticien individuel de maintenir une connaissance exhaustive même dans une sous-spécialité. Cette « crise de l'abondance » appelle des infrastructures épistémologiques capables de structurer, naviguer et synthétiser ce corpus en expansion exponentielle.

Les ontologies médicales constituent la réponse conceptuelle à ce défi. Une ontologie n'est pas un simple vocabulaire contrôlé, mais une spécification formelle d'une conceptualisation partagée : elle définit les classes d'entités médicales, leurs propriétés, et les relations qui les structurent.

3.2 Panorama des Ontologies de Référence

SNOMED CT (Systematized Nomenclature of Medicine – Clinical Terms)

SNOMED CT constitue l'ontologie clinique la plus complète et la plus utilisée mondialement. Elle comprend plus de 350 000 concepts médicaux organisés en 19 hiérarchies principales :

  • Clinical finding : symptômes, signes cliniques, résultats d'examens
  • Procedure : actes diagnostiques et thérapeutiques
  • Body structure : anatomie
  • Substance : médicaments, composés chimiques
  • Organism : agents pathogènes
  • etc.

Chaque concept est défini par :

  • Un identifiant unique (SCTID)
  • Des termes préférés et synonymes
  • Des relations logiques avec d'autres concepts

Exemple de représentation :

Concept : Diabète de type 2
SCTID : 44054006
Termes : "Type 2 diabetes mellitus", "Adult-onset diabetes", "NIDDM"
Relations :
  - IS_A : Diabetes mellitus (73211009)
  - FINDING_SITE : Structure of pancreas (113331007)
  - ASSOCIATED_WITH : Insulin resistance (48606007)
ICD-10/11 (International Classification of Diseases)

L'ICD est principalement une classification à visée épidémiologique et administrative, mais sa structure hiérarchique permet également une navigation ontologique. L'ICD-11, dernière version, introduit une architecture plus sophistiquée avec des axes multiples (anatomie, étiologie, sévérité, etc.).

MeSH (Medical Subject Headings)

Développé par la National Library of Medicine, MeSH structure l'indexation de PubMed. Ses descripteurs organisés en arbre permettent des recherches par élargissement ou raffinement sémantique.

HPO (Human Phenotype Ontology)

HPO se concentre sur les phénotypes observables, particulièrement pertinent pour la génétique clinique et les maladies rares. Elle permet de structurer les présentations cliniques complexes.

3.3 Construction du Graphe de Connaissances Médical

Le graphe de connaissances intègre ces multiples ontologies dans une structure unifiée. Sa construction suit un processus itératif :

Phase 1 : Extraction d'Entités

À partir de corpus médicaux (guidelines, articles de revue, protocoles institutionnels), des systèmes de NER (Named Entity Recognition) médicaux extraient les mentions d'entités :

Texte : "Le patient présente une dyspnée d'effort associée à des œdèmes 
des membres inférieurs, évocateurs d'une insuffisance cardiaque."

Entités extraites :
- dyspnée d'effort [Symptom] → SNOMED: 60845006
- œdèmes des membres inférieurs [Symptom] → SNOMED: 267038008  
- insuffisance cardiaque [Disease] → SNOMED: 84114007
Phase 2 : Extraction de Relations

Les relations entre entités sont identifiées par :

  1. Patterns linguistiques : expressions indicatives de relations causales, temporelles, associatives
  2. Modèles de language pré-entraînés : BERT médical fine-tuné sur des tâches de relation extraction
  3. Règles ontologiques : inférences logiques basées sur les hiérarchies existantes
Relations extraites :
- (dyspnée d'effort) --[SYMPTOM_OF]--> (insuffisance cardiaque)
- (œdèmes membres inférieurs) --[SYMPTOM_OF]--> (insuffisance cardiaque)
- (dyspnée d'effort) --[CO_OCCURS_WITH]--> (œdèmes membres inférieurs)
Phase 3 : Alignement et Fusion

Les entités extraites de sources multiples sont alignées via leurs identifiants SNOMED ou d'autres systèmes de référence. Cette fusion crée un graphe enrichi où chaque nœud peut être documenté par de multiples sources :

graph LR
    IC[Insuffisance Cardiaque<br/>SNOMED: 84114007]
    D[Dyspnée<br/>SNOMED: 267036007]
    O[Œdèmes MI<br/>SNOMED: 267038008]
    BNP[BNP élevé<br/>LOINC: 42637-9]
    FEVG[FEVG diminuée<br/>SNOMED: 441481004]
    IEC[IEC<br/>ATC: C09A]
    BB[Bêta-bloquants<br/>ATC: C07]

    D --SYMPTOM_OF--> IC
    O --SYMPTOM_OF--> IC
    BNP --BIOMARKER_OF--> IC
    FEVG --FINDING_IN--> IC
    IEC --TREATS--> IC
    BB --TREATS--> IC
    D --CO_OCCURS_WITH--> O
    IC --HAS_SUBTYPES--> ICS[IC systolique]
    IC --HAS_SUBTYPES--> ICD[IC diastolique]

    style IC fill:#ffcccc
    style D fill:#cce5ff
    style O fill:#cce5ff
    style BNP fill:#ffffcc
    style FEVG fill:#ffffcc
    style IEC fill:#ccffcc
    style BB fill:#ccffcc
    style ICS fill:#ffcccc
    style ICD fill:#ffcccc
Phase 4 : Enrichissement par Inférence

Des règles logiques permettent d'inférer des relations implicites :

Règle transitive : SI (A) --\[SYMPTOM\_OF]--> (B) ET (B) --\[SUBTYPE\_OF]--> (C) ALORS (A) --\[SYMPTOM\_OF]--> (C)

Exemple : Dyspnée --\[SYMPTOM\_OF]--> IC systolique IC systolique --\[SUBTYPE\_OF]--> Insuffisance cardiaque ⟹ Dyspnée --\[SYMPTOM\_OF]--> Insuffisance cardiaque
graph TB
    %% Règle logique
    subgraph Regle
        P1[Premisse 1<br/>A -- SYMPTOM_OF --> B]
        P2[Premisse 2<br/>B -- SUBTYPE_OF --> C]
        C1[Conclusion<br/>A -- SYMPTOM_OF --> C]

        P1 --> C1
        P2 --> C1
    end

    %% Exemple concret
    subgraph Application
        D[Dyspnée] -- SYMPTOM_OF --> ICS[IC systolique]
        ICS -- SUBTYPE_OF --> IC[Insuffisance cardiaque]
        D -. SYMPTOM_OF .-> IC
    end

    style Regle fill:#e8f4f8,stroke:#3498db,stroke-width:2px
    style Application fill:#e8f5e8,stroke:#27ae60,stroke-width:2px
    style D fill:#cce5ff
    style ICS fill:#ffcccc
    style IC fill:#ff6666

Ces inférences enrichissent la connectivité du graphe et permettent des raisonnements plus sophistiqués lors de la récupération.

3.4 Taxonomies Nosologiques et Navigation Hiérarchique

Les taxonomies médicales organisent les maladies selon des principes classificatoires multiples : étiologiques, anatomiques, physiopathologiques, cliniques. Cette pluralité de perspectives crée une richesse structurelle exploitable par le système.

Lorsqu'une requête concerne un concept trop spécifique pour lequel peu d'information est disponible, le système peut naviguer vers des concepts parents plus généraux :

Requête : "Cardiomyopathie dilatée post-partum" ↓ IS\_A "Cardiomyopathie dilatée" ↓ IS\_A "Cardiomyopathie" ↓ IS\_A "Maladie du myocarde"

Cette stratégie de semantic relaxation permet de récupérer des informations pertinentes même pour des pathologies rares.

Une même pathologie peut être explorée selon différentes facettes :

graph TD
    DM[Diabète de Type 2]

    DM --> E[Facette Étiologique]
    E --> E1[Résistance insulinique]
    E --> E2[Dysfonction cellules β]
    E --> E3[Facteurs génétiques]

    DM --> C[Facette Clinique]
    C --> C1[Symptômes]
    C --> C2[Complications aiguës]
    C --> C3[Complications chroniques]

    DM --> T[Facette Thérapeutique]
    T --> T1[Modifications hygiéno-diététiques]
    T --> T2[Antidiabétiques oraux]
    T --> T3[Insulinothérapie]

    DM --> D[Facette Diagnostique]
    D --> D1[Critères glycémiques]
    D --> D2[HbA1c]
    D --> D3[HGPO]

Cette organisation multi-facettée correspond à la structure cognitive du raisonnement médical, qui mobilise différentes perspectives selon le contexte clinique (dépistage, diagnostic, traitement, suivi).

3.5 Du Graphe Statique au Raisonnement Dynamique

Le graphe de connaissances n'est pas une structure figée, mais un substrat pour des opérations de raisonnement dynamique. Plusieurs modalités de raisonnement peuvent être implémentées :

Raisonnement par Chaînage Avant (Forward Chaining)

À partir de symptômes observés, le système explore les chemins vers des diagnostics possibles :

Observations : {Dyspnée, Orthopnée, Œdèmes MI, Crépitants pulmonaires}
             ↓ SYMPTOM_OF (récupération des maladies associées)
Hypothèses : {Insuffisance cardiaque, Pneumonie, Embolie pulmonaire, ...}
             ↓ Scoring par cohérence d'ensemble
Diagnostic probable : Insuffisance cardiaque (score: 0.87)
flowchart TD
    %% OBSERVATIONS CLINIQUES
    OBS[OBSERVATIONS CLINIQUES] --> O1[Dyspnée de type NYHA II-III]
    OBS --> O2[Orthopnée > 2 oreillers]
    OBS --> O3[Œdèmes malléolaires bilatéraux ++]
    OBS --> O4[Crépitants pulmonaires < 1/3 inférieur]

    %% INFÉRENCE INITIALE
    OBS --> INF1[APPLICATION RÈGLES SYMPTOM_OF]
    INF1 --> R1[S1 ∧ S2 ∧ S3 → IC_probable<br/>confiance: 0.72]
    INF1 --> R2[S1 ∧ S4 → Pneumonie_possible<br/>confiance: 0.45]

    %% HYPOTHÈSES GÉNÉRÉES
    INF1 --> HYP[HYPOTHÈSES DIAGNOSTIQUES]
    HYP --> H1[Insuffisance cardiaque systolique]
    HYP --> H2[Pneumonie communautaire]
    HYP --> H3[Embolie pulmonaire aiguë]
    HYP --> H4[Syndrome néphrotique]

    %% SCORING AVANCÉ
    HYP --> ALGO[ALGORITHME DE SCORING MULTI-CRITÈRES]
    ALGO --> F1[Fonction de cohérence symptomatique: 0.85]
    ALGO --> F2[Score de spécificité: 0.91]
    ALGO --> F3[Indice de prédiction positive: 0.79]
    ALGO --> F4[Facteur de concordance temporelle: 0.88]

    %% RÉSULTAT FINAL
    ALGO --> RES[RÉSULTAT: Classification Bayésienne]
    RES --> DIAG[DIAGNOSTIC PRINCIPAL RETENU<br/>Insuffisance Cardiaque Systolique<br/>Score agrégé: 0.87<br/>Intervalle de confiance: 0.82-0.92]

    %% STYLES ACADÉMIQUES
    style OBS fill:#e8f4f8,stroke:#3498db,stroke-width:3px
    style INF1 fill:#f9ebd9,stroke:#f39c12,stroke-width:2px
    style R1 fill:#fef9e7
    style R2 fill:#fef9e7
    style HYP fill:#e8f6f3,stroke:#1abc9c,stroke-width:3px
    style ALGO fill:#f4ecf7,stroke:#9b59b6,stroke-width:3px
    style F1 fill:#faf4fb
    style F2 fill:#faf4fb
    style F3 fill:#faf4fb
    style F4 fill:#faf4fb
    style RES fill:#fdebd0,stroke:#e67e22,stroke-width:2px
    style DIAG fill:#d5f5e3,stroke:#27ae60,stroke-width:4px
Raisonnement par Chaînage Arrière (Backward Chaining)

À partir d'une hypothèse diagnostique, le système recherche les éléments confirmateurs :

Hypothèse : Insuffisance cardiaque
           ↓ Quels symptômes attendus ?
Recherche : {Dyspnée, Orthopnée, Œdèmes, Fatigue, ...}
           ↓ Quels examens confirmatoires ?
Recherche : {Échocardiographie, BNP, Radiographie thoracique}
           ↓ Quels diagnostics différentiels ?
Recherche : {BPCO, Embolie pulmonaire, Insuffisance rénale}
flowchart TD
    A[Hypothèse: Insuffisance cardiaque] --> B[Quels symptômes attendus?]
    B --> C[Dyspnée]
    B --> D[Orthopnée]
    B --> E[Œdèmes]
    B --> F[Fatigue]
    B --> G[...]

    A --> H[Quels examens confirmatoires?]
    H --> I[Échocardiographie]
    H --> J[BNP]
    H --> K[Radiographie thoracique]

    A --> L[Quels diagnostics différentiels?]
    L --> M[BPCO]
    L --> N[Embolie pulmonaire]
    L --> O[Insuffisance rénale]

    %% Styles
    style A fill:#ffcccc,stroke:#ff0000,stroke-width:3px
    style B fill:#ffffcc,stroke:#cccc00
    style H fill:#ffffcc,stroke:#cccc00
    style L fill:#ffffcc,stroke:#cccc00
    style C fill:#ccffcc
    style D fill:#ccffcc
    style E fill:#ccffcc
    style F fill:#ccffcc
    style I fill:#cce5ff
    style J fill:#cce5ff
    style K fill:#cce5ff
    style M fill:#ffccff
    style N fill:#ffccff
    style O fill:#ffccff
Raisonnement Abductif (Abductive Reasoning)

Le système génère la meilleure explication pour un ensemble d'observations :

\[ \text{Best explanation} = \arg\max\_{h \in \mathcal{H}} P(h | O) \cdot \text{Simplicity}(h) \]

où :

  • \(\mathcal{H}\) : espace des hypothèses diagnostiques
  • \(O\) : observations cliniques
  • \(P(h|O)\) : probabilité a posteriori de l'hypothèse
  • \(\text{Simplicity}(h)\) : pénalité pour la complexité (principe du rasoir d'Ockham)

Ce type de raisonnement correspond à la démarche diagnostique médicale qui cherche l'explication la plus parcimonieuse des symptômes observés.

3.6 Gestion de l'Incertitude et des Connaissances Contradictoires

La médecine est fondamentalement un domaine d'incertitude. Les connaissances évoluent, les guidelines se contredisent parfois, et l'applicabilité des données probantes à un patient particulier demeure une question de jugement clinique.

Représentation de l'Incertitude

Chaque relation dans le graphe peut être pondérée par un degré de certitude :

(Symptôme X) --[SYMPTOM_OF, confidence=0.85]--> (Maladie Y)

Cette pondération peut provenir :

  • De la force de l'association statistique dans la littérature
  • Du consensus entre sources multiples
  • De l'évaluation par des experts
Gestion des Contradictions

Lorsque des sources font des affirmations contradictoires, le système doit :

  1. Détecter la contradiction par analyse logique ou sémantique
  2. Évaluer la qualité des sources selon des critères de hiérarchie de la preuve (méta-analyses > essais contrôlés randomisés > études observationnelles > avis d'experts)
  3. Présenter la controverse de manière transparente à l'utilisateur
Exemple :
Question : "Aspirine en prévention primaire cardiovasculaire ?"

Réponse nuancée :
"Les recommandations concernant l'aspirine en prévention primaire ont 
évolué récemment. Les guidelines de l'ACC/AHA (2019) suggèrent une 
utilisation sélective chez les adultes de 40-70 ans à risque élevé 
sans risque hémorragique accru [Evidence Score: 0.92]. Cependant, 
les essais ASPREE (2018) et ARRIVE (2018) n'ont pas démontré de 
bénéfice net dans certaines populations [Evidence Score: 0.95]. 
La décision doit être individualisée selon le profil de risque."

Cette présentation honnête de l'incertitude est préférable à une réponse faussement univoque.

IV. Architecture des Données : Structures, Indexation et Performance

4.1 Dualité Structurelle : Graphes et Vecteurs

L'architecture repose sur une dualité fondamentale entre deux modalités de représentation des connaissances :

Base de Données Graphe

Technologie privilégiée : Neo4j ou équivalent (ArangoDB, Amazon Neptune)

Structure :

  • Nœuds : entités médicales avec propriétés (ID, labels, métadonnées)
  • Arêtes : relations typées avec propriétés (poids, source, date)

Requêtes : Cypher query language

// Exemple : trouver les traitements pour l'insuffisance cardiaque
// avec leurs mécanismes d'action
MATCH (d:Disease {name: "Heart Failure"})<-[:TREATS]-(t:Treatment)
MATCH (t)-[:HAS_MECHANISM]->(m:Mechanism)
RETURN t.name, collect(m.name) as mechanisms
ORDER BY t.evidence_level DESC

Indexation :

  • Index sur les propriétés fréquemment requêtées (ID, noms)
  • Index fulltext sur les descriptions textuelles
  • Contraintes d'unicité sur les identifiants SNOMED/ICD
Base de Données Vectorielle

Technologie : Pinecone, Weaviate, Milvus, ou FAISS

Structure :

  • Chaque document source est transformé en embedding vectoriel dense
  • Dimensionnalité typique : 768 (BERT), 1024 (GPT), 1536 (OpenAI)

Indexation : structures optimisées pour la recherche de plus proches voisins

  • HNSW (Hierarchical Navigable Small World) : graphe hiérarchique permettant une recherche approximative en \(O(\log n)\)
  • IVF (Inverted File Index) : quantification vectorielle avec recherche par clusters
  • Product Quantization : compression des vecteurs pour réduire l'empreinte mémoire

Requête :

## Embedding de la requête
query_vector = embedding_model.encode(query_text)

## Recherche des k plus proches voisins
results = vector_db.query(
    vector=query_vector,
    top_k=10,
    filter={"source_type": "clinical_guideline"}
)

4.2 Stratégies de Chunking : Segmentation Sémantique

La segmentation des documents sources en chunks (fragments) est critique pour la qualité de la récupération. Plusieurs stratégies coexistent :

Chunking Fixe

Division en segments de longueur fixe (ex : 512 tokens) avec overlap

Avantages : simplicité, prévisibilité Inconvénients : peut fragmenter des unités sémantiques cohérentes

Chunking Sémantique

Division selon les frontières structurelles du document : sections, paragraphes, phrases

def semantic_chunking(document):
    chunks = []
    current_chunk = []
    current_length = 0

    for paragraph in document.paragraphs:
        para_length = len(tokenize(paragraph))

        if current_length + para_length > MAX_CHUNK_SIZE:
            # Sauvegarder le chunk actuel
            chunks.append(" ".join(current_chunk))
            current_chunk = [paragraph]
            current_length = para_length
        else:
            current_chunk.append(paragraph)
            current_length += para_length

    if current_chunk:
        chunks.append(" ".join(current_chunk))

    return chunks

Avantages : préserve la cohérence sémantique Inconvénients : variabilité de la taille des chunks

Chunking Hiérarchique

Représentation multi-niveaux : document → sections → paragraphes → phrases

Chaque niveau est encodé séparément, permettant une récupération à granularité variable :

Document: "Clinical Guidelines for Heart Failure Management"
├─ Section 1: "Diagnosis" (embedding_1)
│  ├─ Para 1.1: "Clinical presentation..." (embedding_1.1)
│  └─ Para 1.2: "Diagnostic criteria..." (embedding_1.2)
└─ Section 2: "Treatment" (embedding_2)
   ├─ Para 2.1: "Pharmacological therapy..." (embedding_2.1)
   └─ Para 2.2: "Device therapy..." (embedding_2.2)

Lors de la récupération, le système peut :

  1. Identifier les sections pertinentes (granularité grossière)
  2. Affiner en récupérant les paragraphes spécifiques (granularité fine)

Cette approche optimise le compromis entre contexte (informations suffisantes) et précision (informations pertinentes).

4.3 Embeddings Spécialisés : Au-delà de BERT Générique

Les embeddings médicaux spécialisés capturent mieux les nuances du domaine :

BioBERT et Variantes

Pré-entraîné sur PubMed et PMC (corpus biomédicaux)

  • BioBERT : BERT fine-tuné sur 200k articles PubMed
  • PubMedBERT : pré-entraîné from scratch sur corpus médical
  • ClinicalBERT : fine-tuné sur notes cliniques (MIMIC-III)

Amélioration typique : +5-15% sur tâches de NER et relation extraction médicales

Embeddings Multilingues

Pour un système déployé dans un contexte francophone/multilingue :

  • CamemBERT : BERT français
  • DrBERT : BERT médical français (pré-entraîné sur corpus médicaux français)
  • mBERT/XLM-R : modèles multilingues pour cross-lingual retrieval
Embeddings Enrichis par Connaissances (Knowledge-Enhanced Embeddings)

Intégration explicite d'information du graphe de connaissances dans les embeddings :

\[ \vec{e}_{\text{enhanced}} = \vec{e}_{\text{text}} + \alpha \cdot \vec{e}\_{\text{graph}} \]

où :

  • \(\vec{e}\_{\text{text}}\) : embedding textuel standard
  • \(\vec{e}\_{\text{graph}}\) : embedding dérivé de la structure du graphe (ex : Node2Vec, GraphSAGE)
  • \(\alpha\) : poids de la composante graphique

Ces embeddings hybrides capturent à la fois les similarités textuelles et les proximités structurelles dans l'ontologie.

4.4 Gestion des Sources Documentaires : Pipeline d'Ingestion

L'alimentation du système nécessite un pipeline robuste pour traiter des sources hétérogènes :

flowchart TD
    S1[Articles PubMed] --> I[Ingestion Layer]
    S2[Guidelines Cliniques] --> I
    S3[Protocoles Locaux] --> I
    S4[Manuels de Référence] --> I

    I --> P[Preprocessing]
    P --> P1[Extraction texte]
    P --> P2[Nettoyage]
    P --> P3[Normalisation]

    P1 --> NER[NER Medical]
    P2 --> NER
    P3 --> NER

    NER --> RE[Relation Extraction]

    RE --> G[Graph Store]
    P3 --> C[Chunking]
    C --> E[Embedding]
    E --> V[Vector Store]

    G --> M[Metadata Store]
    V --> M

    style I fill:#e1f5ff
    style G fill:#ffcccc
    style V fill:#ccffcc
    style M fill:#ffffcc
Étape 1 : Extraction et Normalisation
  • PDF : extraction via PyMuPDF, pdfplumber (préserve structure)
  • HTML : parsing avec BeautifulSoup, extraction du contenu principal
  • DOCX : extraction via python-docx
  • Normalisation : Unicode normalization, suppression des caractères de contrôle, standardisation des espaces
Étape 2 : Enrichissement Métadonnées

Chaque document est enrichi de métadonnées structurées :

{
  "doc_id": "pubmed_34567890",
  "title": "Novel Therapeutic Approaches in Heart Failure",
  "authors": ["Smith J", "Doe A"],
  "journal": "N Engl J Med",
  "year": 2024,
  "doi": "10.1056/NEJMra2400000",
  "evidence_level": "1A",
  "source_type": "peer_reviewed_article",
  "specialty": ["cardiology"],
  "language": "en",
  "last_updated": "2024-03-15"
}

Ces métadonnées permettent des filtres sophistiqués lors de la récupération (ex : ne récupérer que des guidelines de niveau 1A publiées après 2020).

Étape 3 : Déduplication et Gestion de Versions

Les mêmes informations peuvent apparaître dans plusieurs sources. Un système de déduplication identifie :

  • Duplications exactes : hash du contenu
  • Duplications partielles : MinHash, SimHash pour détection rapide
  • Versions successives : identification des mises à jour de guidelines

Stratégie : conserver toutes les versions avec marquage explicite de la version « active » (la plus récente validée).

4.5 Mise à Jour Dynamique et Freshness

Le savoir médical évolue constamment. Le système doit intégrer de nouvelles connaissances sans réingestion complète :

Mise à Jour Incrémentale
def incremental_update(new_document):
    # 1. Extraction des entités et relations
    entities, relations = extract_knowledge(new_document)

    # 2. Mise à jour du graphe
    for entity in entities:
        if entity.id in graph:
            graph.update_node(entity.id, entity.properties)
        else:
            graph.add_node(entity)

    for relation in relations:
        graph.add_or_update_edge(relation)

    # 3. Mise à jour des embeddings
    chunks = semantic_chunking(new_document)
    embeddings = embed_model.encode(chunks)

    for chunk, embedding in zip(chunks, embeddings):
        vector_db.upsert(
            id=f"{new_document.id}_{chunk.id}",
            vector=embedding,
            metadata={
                "doc_id": new_document.id,
                "chunk_id": chunk.id,
                "timestamp": datetime.now(),
                **new_document.metadata
            }
        )
Scoring de Freshness

Les documents récents peuvent être favorisés dans le ranking :

\[ \text{score}_{\text{final}}(d) = \text{score}_{\text{relevance}}(d) \cdot \text{freshness}(d) \]

où :

\[ \text{freshness}(d) = e^{-\lambda \cdot \text{age}(d)} \]

avec \(\lambda\) contrôlant la vitesse de dépréciation (valeur typique : \(\lambda = 0.1\) pour une demi-vie d'environ 7 ans, ajustable selon les domaines : plus élevé en oncologie qu'en anatomie).

Versionnement et Traçabilité

Chaque modification du graphe ou de la base vectorielle est journalisée :

CREATE TABLE knowledge_updates (
    update_id UUID PRIMARY KEY,
    timestamp TIMESTAMP,
    update_type ENUM('add', 'modify', 'deprecate'),
    entity_id VARCHAR(255),
    old_value JSONB,
    new_value JSONB,
    source_doc_id VARCHAR(255),
    validator_id VARCHAR(255)
);

Cette traçabilité permet :

  • Audit : comprendre l'évolution du système de connaissances
  • Rollback : revenir à un état antérieur si nécessaire
  • Transparence : justifier les réponses par référence à des versions spécifiques du graphe

V. Gouvernance, Éthique et Conformité Réglementaire

5.1 Le Défi de la Responsabilité Médicolégale

L'introduction de systèmes d'IA dans la pratique clinique soulève des questions de responsabilité inédites. Qui est responsable en cas d'erreur : le développeur du système, l'institution déployante, le clinicien utilisateur ? Cette question, loin d'être purement juridique, révèle une tension fondamentale entre l'autonomie de la machine et l'autorité du praticien.

Le cadre réglementaire européen (Règlement sur les dispositifs médicaux, AI Act) impose des exigences strictes :

Classification comme Dispositif Médical

Si le système est utilisé pour :

  • Diagnostic
  • Aide à la décision thérapeutique
  • Monitoring de patients

Il doit être certifié comme dispositif médical (classe IIa ou IIb selon le risque).

Implications :

  • Évaluation clinique rigoureuse
  • Système de gestion des risques
  • Documentation technique exhaustive
  • Surveillance post-commercialisation
Exigences de Transparence et Explicabilité

L'article 13 de l'AI Act exige :

  1. Transparence sur les capacités et limites du système
  2. Explicabilité des décisions : l'utilisateur doit comprendre pourquoi une réponse est fournie
  3. Supervision humaine : le système doit être conçu pour permettre une révision humaine effective

Notre architecture répond à ces exigences par :

  • Affichage systématique des sources : chaque affirmation est liée aux documents qui la supportent
  • Visualisation des chemins de raisonnement : le graphe de connaissances mobilisé est exposé
  • Scores de confiance : Evidence Score et Correctness Score permettent au clinicien d'évaluer la fiabilité
  • Mode "second avis" : le système ne remplace pas le jugement clinique, mais le complète

5.2 Sécurité et Confidentialité : Architecture Privacy-by-Design

Minimisation des Données Personnelles

Le système est conçu pour fonctionner sur des requêtes dépersonnalisées :

❌ Requête avec données personnelles :
"Marie Dupont, 45 ans, diabétique, présente une dyspnée"

✅ Requête dépersonnalisée :
"Femme 45 ans, antécédent diabète type 2, présente dyspnée d'effort"

Un module de dé-identification automatique détecte et masque :

  • Noms, prénoms
  • Dates précises (remplacées par âges relatifs)
  • Identifiants (numéros de sécurité sociale, dossiers)
  • Localisations géographiques précises
Chiffrement et Contrôle d'Accès

En transit : TLS 1.3 pour toutes les communications Au repos : chiffrement AES-256 des bases de données

Contrôle d'accès basé sur les rôles (RBAC) :

Roles:
  - Clinician:
      permissions:
        - query_system
        - view_sources
        - provide_feedback
      restrictions:
        - cannot_modify_knowledge_base
        - rate_limited: 100 queries/hour

  - Knowledge_Curator:
      permissions:
        - add_documents
        - validate_extractions
        - modify_ontology
      restrictions:
        - changes_require_approval
        - audit_logged

  - Administrator:
      permissions:
        - full_system_access
        - user_management
        - configuration
      restrictions:
        - all_actions_logged
        - requires_MFA
Conformité RGPD
  • Base légale : intérêt légitime (amélioration des soins) ou consentement explicite
  • Droit d'accès et d'opposition : interfaces permettant aux patients d'accéder aux logs de requêtes les concernant
  • Limitation de conservation : purge automatique des logs après période définie (ex : 90 jours)
  • DPO désigné : supervision de la conformité

5.3 Gestion des Biais et Équité

Les systèmes d'IA peuvent reproduire et amplifier des biais présents dans leurs données d'entraînement. En médecine, cela peut conduire à des disparités de soins selon :

  • Genre
  • Origine ethnique
  • Statut socio-économique
  • Âge
Audit de Biais

Évaluation systématique des performances sur des sous-populations :

def bias_audit(model, test_set):
    demographics = ['gender', 'age_group', 'ethnicity']
    metrics = {}

    for demo in demographics:
        for group in test_set[demo].unique():
            subset = test_set[test_set[demo] == group]

            metrics[f"{demo}_{group}"] = {
                'accuracy': evaluate_accuracy(model, subset),
                'evidence_score': evaluate_evidence(model, subset),
                'completeness': evaluate_completeness(model, subset)
            }

    # Détection de disparités significatives
    disparities = detect_disparities(metrics, threshold=0.1)

    return metrics, disparities

Actions correctives :

  • Rééquilibrage du corpus : sur-échantillonnage de littérature concernant les populations sous-représentées
  • Fine-tuning ciblé : entraînement additionnel sur données équilibrées
  • Alertes de biais : notification à l'utilisateur si le système détecte une sous-performance potentielle pour certains groupes
Équité Procédurale

Au-delà de l'équité des résultats, assurer une équité des processus :

  • Accessibilité : interface multilingue, adaptation aux handicaps
  • Transparence : documentation publique des limitations connues du système
  • Participation : implication de cliniciens et patients de diverses origines dans la conception et l'évaluation

5.4 Auditabilité et Logs Complets

Chaque interaction avec le système est enregistrée de manière structurée :

{
  "query_id": "uuid-12345",
  "timestamp": "2024-11-06T14:32:15Z",
  "user_id": "hashed_user_id",
  "user_role": "clinician",
  "query_text": "symptoms of acute MI in elderly",
  "preprocessing": {
    "entities_extracted": ["symptoms", "acute myocardial infarction", "elderly"],
    "snomed_codes": ["404684003", "57054005", "105436006"]
  },
  "retrieval": {
    "graph_results": 12,
    "vector_results": 15,
    "fusion_strategy": "reranking",
    "top_documents": ["doc_id_1", "doc_id_2", "doc_id_3"]
  },
  "generation": {
    "prompting_strategy": "LLM-informed",
    "model": "claude-sonnet-4.5",
    "tokens_input": 3200,
    "tokens_output": 450,
    "generation_time_ms": 1850
  },
  "validation": {
    "evidence_score": 0.92,
    "correctness_score": 0.88,
    "warnings": []
  },
  "response_provided": true,
  "user_feedback": null
}

Ces logs permettent :

  • Audit rétrospectif : investigation en cas de signalement d'erreur
  • Analyse de performance : identification des patterns de succès/échec
  • Amélioration continue : fine-tuning basé sur les interactions réelles
  • Conformité réglementaire : démonstration de la traçabilité exigée pour les dispositifs médicaux

5.5 Processus de Validation Clinique

Avant déploiement, le système doit démontrer sa validité clinique par des études rigoureuses :

Phase 1 : Validation Technique

Évaluation sur datasets annotés par experts :

  • Dataset de test : 500-1000 questions cliniques avec réponses de référence
  • Métriques : Evidence Score, Correctness Score, Relevance, Completeness
  • Critère d'acceptation : Evidence Score > 0.85, Correctness Score > 0.90
Phase 2 : Étude Prospective Observationnelle

Déploiement dans un environnement clinique contrôlé :

  • Design : étude avant-après ou contrôlée

  • Participants : cliniciens volontaires

  • Mesures :

    • Temps de recherche d'information
    • Qualité des décisions cliniques (jugée par comité d'experts indépendants)
    • Satisfaction utilisateur
    • Incidents de sécurité
Phase 3 : Surveillance Continue Post-Déploiement
  • Monitoring actif : analyse des retours utilisateurs, signalements d'erreurs
  • Audits périodiques : réévaluation annuelle sur nouveaux cas tests
  • Mises à jour validées : chaque modification substantielle du système nécessite une revalidation partielle

VI. Intégration Clinique et Workflow : De l'Outil à la Pratique

6.1 Conception Centrée Utilisateur : Au-delà de l'Interface

L'adoption d'un système d'IA clinique ne dépend pas seulement de sa performance technique, mais de son intégration harmonieuse dans les workflows existants. Une étude ethnographique des pratiques cliniques révèle plusieurs contraintes :

Contraintes temporelles : les cliniciens disposent de secondes, pas de minutes, pour consulter de l'information en pleine consultation

Charge cognitive : tout système additionnel doit minimiser la charge mentale, déjà élevée

Contexte interrompu : les consultations sont fréquemment interrompues ; le système doit gérer des interactions

fragmentées et permettre la reprise sans perte de contexte

Hétérogénéité des besoins : un urgentiste, un généraliste et un spécialiste n'ont pas les mêmes attentes informationnelles

6.2 Architecture d'Interface Adaptative

L'interface s'adapte au contexte d'utilisation selon trois dimensions :

Mode d'Interaction

Mode Consultation Rapide :

  • Interface minimaliste, résultats synthétiques
  • Réponse en < 3 secondes
  • Affichage prioritaire : réponse directe + score de confiance
  • Sources accessibles en un clic, mais non intrusives
┌─────────────────────────────────────────┐
│ Q: Dose initiale ramipril IC ?          │
├─────────────────────────────────────────┤
│ ✓ 1,25 mg x2/jour, titration progressive│
│   jusqu'à 5 mg x2/jour selon tolérance  │
│                                         │
│ Confiance: ■■■■□ (Evidence: 0.95)      │
│ [Sources: ESC 2021, 2 RCTs]            │
└─────────────────────────────────────────┘

Mode Exploration Approfondie :

  • Interface riche, visualisations étendues
  • Navigation dans le graphe de connaissances
  • Comparaisons, alternatives, nuances
graph LR
    Q[Question] --> R[Réponse Principale]
    R --> S1[Sources Primaires]
    R --> S2[Contexte Élargi]
    R --> S3[Cas Particuliers]
    R --> V[Visualisation Graphe]

    S1 --> D1[Guidelines ESC 2021]
    S1 --> D2[Meta-analyse NEJM 2020]

    S2 --> C1[Contre-indications]
    S2 --> C2[Interactions]
    S2 --> C3[Surveillance]

    S3 --> E1[Insuffisance rénale]
    S3 --> E2[Sujet âgé]

    V --> G[Graphe: IC → Traitements]

Mode Aide à la Décision :

  • Questions structurées guidant le raisonnement
  • Algorithmes décisionnels interactifs
  • Scores de risque calculés
Aide à la décision : Anticoagulation FA

Étape 1/3 : Évaluation du risque thromboembolique
- Score CHA₂DS₂-VASc : [calculateur interactif]
  → Résultat : 4 points (risque élevé)

Étape 2/3 : Évaluation du risque hémorragique
- Score HAS-BLED : [calculateur interactif]
  → Résultat : 2 points (risque modéré)

Étape 3/3 : Recommandation
✓ Anticoagulation recommandée
  Options : AOD (préférence) ou AVK
  [Détails par molécule] [Surveillance] [Éducation patient]
Personnalisation par Rôle

L'interface se configure selon le profil professionnel :

Rôle Priorités Informationnelles Niveau de Détail Vocabulaire
Urgentiste Diagnostic différentiel rapide, protocoles d'urgence Synthétique Abréviations acceptées
Généraliste Aide diagnostique, guidelines de prise en charge initiale Équilibré Langage clinique standard
Spécialiste Littérature récente, cas complexes, controverse Approfondi Terminologie spécialisée
Interne/Étudiant Explications pédagogiques, références fondamentales Détaillé avec contexte Définitions intégrées
Infirmier(e) Surveillance, effets indésirables, éducation patient Pratique Vulgarisation appropriée
Adaptation Contextuelle

Le système détecte le contexte d'utilisation et ajuste ses réponses :

def contextualize_response(query, user_context):
    # Détection du contexte
    urgency = detect_urgency(query)  # mots-clés: "urgent", "immédiat", "aigu"
    uncertainty = detect_uncertainty(query)  # "peut-être", "incertain", "hésitation"
    educational_intent = detect_learning(query)  # "pourquoi", "mécanisme", "expliquer"

    # Adaptation de la stratégie de réponse
    if urgency == "high":
        prompting_strategy = "context-strict"  # Maximum de fiabilité
        response_format = "bullet_points"  # Maximum de rapidité
        detail_level = "essential_only"

    elif educational_intent:
        prompting_strategy = "llm-informed"  # Enrichissement contextuel
        response_format = "narrative"  # Pédagogie narrative
        detail_level = "comprehensive"
        include_mechanisms = True

    elif uncertainty:
        response_format = "decision_tree"  # Aide au raisonnement
        include_differential = True

    else:
        # Configuration par défaut selon profil utilisateur
        prompting_strategy = user_context.preferred_strategy
        response_format = user_context.preferred_format

    return generate_response(
        query, 
        strategy=prompting_strategy,
        format=response_format,
        detail=detail_level
    )

6.3 Intégration aux Systèmes d'Information Hospitaliers

Le GraphRAG ne peut opérer en silo. Son intégration aux systèmes existants est critique :

Architecture d'Intégration
graph TB
    subgraph Hospital Information System
        EMR[Dossier Patient Électronique]
        LIS[Système Laboratoire]
        RIS[Système Imagerie]
        CPOE[Prescription Électronique]
    end

    subgraph Integration Layer
        HL7[HL7/FHIR Gateway]
        API[REST API]
        Auth[Authentification SSO]
    end

    subgraph GraphRAG System
        Q[Query Interface]
        P[Processing Pipeline]
        KG[Knowledge Graph]
        VDB[Vector DB]
    end

    EMR --> HL7
    LIS --> HL7
    RIS --> HL7
    CPOE --> HL7

    HL7 --> API
    Auth --> API

    API --> Q
    Q --> P
    P --> KG
    P --> VDB

    P --> R[Response]
    R --> API
    API --> EMR
Flux d'Information Bidirectionnel

Du SIH vers GraphRAG :

  • Contexte patient (antécédents, traitements en cours) pour personnaliser les réponses
  • Résultats d'examens récents pour aide à l'interprétation

De GraphRAG vers SIH :

  • Suggestions documentées intégrées au dossier
  • Alertes de sécurité (interactions médicamenteuses, contre-indications)
  • Liens vers littérature pertinente directement dans le dossier
Exemple de Flux Intégré
Scenario: Prescription d'un nouvel antihypertenseur

1. Médecin ouvre le module prescription dans l'EMR
2. Sélectionne "Ramipril 5mg"
3. ↓ Trigger automatique GraphRAG
4. GraphRAG récupère :
   - Antécédents patient (via API sécurisée)
   - Traitements en cours
   - Dernière créatininémie, kaliémie
5. GraphRAG analyse :
   - Contre-indications (sténose rénale bilatérale?)
   - Interactions (AINS? Potassium?)
   - Surveillance requise (fonction rénale, K+)
6. ↓ Retour intégré dans l'EMR
7. Affichage :
   ✓ Pas de contre-indication détectée
   ⚠ Attention : kaliémie à 5.2 mmol/L (limite haute)
   → Recommandation : contrôle K+ à J7 et J15
   📚 Référence : ESC Guidelines 2018, section 5.2.1

6.4 Formation et Accompagnement des Utilisateurs

L'appropriation d'un tel système nécessite un accompagnement structuré :

Programme de Formation Initial

Module 1 : Fondamentaux (30 min)

  • Principe du GraphRAG
  • Capacités et limitations
  • Importance de l'esprit critique

Module 2 : Utilisation Pratique (1h)

  • Formulation de requêtes efficaces
  • Interprétation des scores de confiance
  • Navigation dans les sources
  • Cas pratiques guidés

Module 3 : Intégration au Workflow (30 min)

  • Quand utiliser le système (et quand ne pas l'utiliser)
  • Gestion du temps
  • Pratiques exemplaires
Formation Continue
  • Webinaires mensuels : présentation de nouvelles fonctionnalités
  • Cas cliniques commentés : apprentissage par l'exemple
  • Retours d'expérience : partage entre pairs
Support et Amélioration Continue

Système de Feedback Intégré :

Après chaque réponse, possibilité d'évaluer :

  • Pertinence (échelle 1-5)
  • Complétude (échelle 1-5)
  • Utilisabilité (échelle 1-5)
  • Commentaire libre
┌─────────────────────────────────────┐
│ Cette réponse vous a-t-elle aidé ?  │
│                                     │
│ Pertinence:  ★★★★★                 │
│ Complétude:  ★★★★☆                 │
│ Utilisable:  ★★★★★                 │
│                                     │
│ [Commentaire optionnel]             │
│ ________________________________    │
│                                     │
│ [Signaler un problème] [Envoyer]   │
└─────────────────────────────────────┘

Boucle d'Amélioration :

flowchart LR
    U[Utilisateurs] -->|Feedback| A[Analyse]
    A -->|Patterns identifiés| P[Priorisation]
    P -->|Modifications| D[Développement]
    D -->|Tests| V[Validation]
    V -->|Déploiement| U

    A -->|Métriques| M[Monitoring]
    M -->|Alertes| P

6.5 Monitoring de Performance en Production

Une fois déployé, le système fait l'objet d'un monitoring continu :

Métriques Techniques

Latence :

  • Temps de réponse médian : cible < 2 secondes
  • P95 latence : cible < 5 secondes
  • P99 latence : cible < 10 secondes

Disponibilité :

  • Uptime : cible > 99.5%
  • MTTR (Mean Time To Repair) : cible < 15 minutes

Qualité des Résultats :

  • Evidence Score moyen : monitoring continu, alerte si < 0.85
  • Taux de requêtes sans réponse satisfaisante : cible < 5%
Métriques Utilisateur

Adoption :

  • Nombre d'utilisateurs actifs (DAU, WAU, MAU)
  • Taux de rétention (7 jours, 30 jours)
  • Fréquence d'utilisation par utilisateur

Satisfaction :

  • Net Promoter Score (NPS) : cible > 30
  • Scores de feedback moyens : cible > 4/5
  • Taux d'abandon de requête : cible < 10%
Métriques Cliniques

Impact sur la Pratique :

  • Temps économisé par recherche d'information (étude time-motion)
  • Taux d'adoption des recommandations suggérées
  • Impact sur la qualité des prescriptions (conformité aux guidelines)

Sécurité :

  • Nombre d'incidents de sécurité signalés
  • Taux de faux positifs/négatifs dans les alertes
  • Signalements d'erreurs médicales potentielles
Dashboard de Monitoring
╔═══════════════════════════════════════════════════════════╗
║           GraphRAG Clinical System - Dashboard            ║
╠═══════════════════════════════════════════════════════════╣
║                                                           ║
║  🟢 System Status: OPERATIONAL                           ║
║  ├─ Uptime: 99.8% (24h)                                 ║
║  ├─ Latency P50: 1.8s | P95: 4.2s                      ║
║  └─ Active Users: 342                                    ║
║                                                           ║
║  📊 Quality Metrics (24h)                                ║
║  ├─ Evidence Score: 0.89 ± 0.08                         ║
║  ├─ Correctness Score: 0.92 ± 0.06                      ║
║  ├─ User Satisfaction: 4.3/5.0                          ║
║  └─ Queries Served: 2,847                               ║
║                                                           ║
║  ⚠️  Alerts (2)                                          ║
║  ├─ [INFO] Knowledge base updated: 45 new documents     ║
║  └─ [WARNING] Evidence score dropped below 0.85         ║
║     for cardiology queries (investigating)              ║
║                                                           ║
║  📈 Trending Topics (7d)                                 ║
║  1. Heart Failure Management (↑ 23%)                    ║
║  2. Antibiotic Selection (↑ 15%)                        ║
║  3. Diabetes Guidelines (↔ 0%)                          ║
║                                                           ║
╚═══════════════════════════════════════════════════════════╝

VII. Roadmap et Évolutions Futures : Vers une Intelligence Médicale Augmentée

7.1 Vision à Court Terme (6-12 mois)

Expansion du Graphe de Connaissances

Objectif : Passer de 100 000 à 500 000 concepts médicaux couverts

Sources additionnelles :

  • Intégration complète des guidelines de sociétés savantes (HAS, NICE, ESC, AHA, etc.)
  • Corpus de protocoles institutionnels validés
  • Synthèses Cochrane et revues systématiques

Enrichissement relationnel :

  • Relations causales fines (mécanismes physiopathologiques)
  • Relations temporelles (évolution naturelle des pathologies)
  • Relations probabilistes (risques, pronostics)
Multimodalité

Intégration d'images médicales :

  • Reconnaissance de patterns radiologiques
  • Lien entre trouvailles visuelles et concepts du graphe
Exemple :
Image ECG → Détection "Sus-décalage ST en territoire inférieur"
         → Récupération dans graphe: "Infarctus du myocarde inférieur"
         → Génération de réponse contextualisée

Intégration de données structurées :

  • Interprétation automatique de résultats biologiques
  • Calcul de scores pronostiques contextualisés
Amélioration des Stratégies de Prompting

Prompting dynamique adaptatif :

Le système sélectionne automatiquement la stratégie optimale selon :

  • Type de question (factuelle vs. raisonnement)
  • Niveau de preuve disponible
  • Contexte clinique (urgence, incertitude)
def adaptive_prompting(query, context, retrieved_docs):
    # Analyse de la question
    question_type = classify_question(query)  # factual, reasoning, procedural
    evidence_quality = assess_evidence(retrieved_docs)  # high, medium, low
    clinical_context = extract_context(query)  # urgency, uncertainty, etc.

    # Sélection de stratégie
    if evidence_quality == "high" and clinical_context.urgency:
        return "context-strict"  # Fiabilité maximale pour urgence

    elif question_type == "reasoning" and evidence_quality == "medium":
        return "llm-informed"  # Enrichissement tout en traçant sources

    elif question_type == "factual" and evidence_quality == "high":
        return "context-strict"  # Pas besoin d'enrichissement

    else:
        return "llm-informed"  # Défaut sûr

7.2 Vision à Moyen Terme (1-2 ans)

Raisonnement Multi-Step Explicite

Implémentation d'architectures de type Chain-of-Thought médicales :

Question: "Patient 68 ans, dyspnée, BNP 450 pg/mL, FEVG 45%. 
          Traitement optimal ?"

Étape 1: Diagnostic
→ BNP élevé + FEVG diminuée → Insuffisance cardiaque systolique
→ Confiance: 0.92

Étape 2: Classification
→ FEVG 45% → IC à FEVG modérément réduite (HFmrEF)
→ Classe NYHA non précisée, mais dyspnée → probablement II-III
→ Confiance: 0.85

Étape 3: Recommandations thérapeutiques
→ HFmrEF → Guidelines ESC 2021: mêmes traitements que HFrEF
→ Traitements fondamentaux:
   • IEC ou ARA2 (ou ARNI si persistance symptômes)
   • Bêta-bloquants
   • ARM (si K+ et fonction rénale le permettent)
   • iSGLT2 (dapagliflozine ou empagliflozine)
→ Confiance: 0.94

Étape 4: Personnalisation
→ Âge 68 ans → Attention fonction rénale, titration progressive
→ Vérifier: créatininémie, kaliémie, TA
→ Confiance: 0.88

Recommandation finale: [Traitement détaillé avec posologies]

Cette décomposition explicite du raisonnement :

  • Améliore la transparence
  • Permet la détection d'erreurs à chaque étape
  • Facilite l'apprentissage pour les étudiants
Apprentissage par Renforcement sur Feedback Clinique

Principe : Le système apprend de l'évaluation de ses réponses par les cliniciens

def reinforcement_learning_loop():
    # 1. Système génère une réponse
    response = generate_response(query, context)

    # 2. Clinicien évalue
    feedback = collect_user_feedback(response)
    # feedback = {relevance: 4/5, correctness: 5/5, usefulness: 4/5}

    # 3. Calcul de récompense
    reward = compute_reward(feedback)
    # reward = 0.87 (normalisé 0-1)

    # 4. Mise à jour des paramètres
    # - Ajustement des poids de fusion graphe/vecteur
    # - Fine-tuning du modèle de re-ranking
    # - Optimisation des prompts
    update_model_parameters(query, context, response, reward)

    # 5. Logging pour analyse
    log_interaction(query, response, feedback, reward)

Objectif : convergence vers un système de plus en plus aligné avec les attentes cliniques réelles

Système de Recommandation Proactif

Au-delà de la réponse à questions, le système peut :

Suggérer des informations pertinentes :

Lors de la consultation du dossier d'un patient diabétique:

💡 Information pertinente
   Nouvelles guidelines ADA 2024 sur les cibles glycémiques
   chez le sujet âgé polymédiqué
   [Voir résumé] [Plus tard] [Ne plus suggérer]

Alertes préventives :

⚠️ Alerte de sécurité
   Le patient prend Metformine + Ibuprofène depuis 5 jours
   Risque : acidose lactique (interaction)
   Recommandation : surveillance fonction rénale
   Source : Thésaurus des interactions médicamenteuses ANSM

7.3 Vision à Long Terme (3-5 ans)

Graphes de Connaissances Personnalisés

Chaque patient pourrait avoir un graphe de connaissances individualisé :

graph TB
    P[Patient Individuel]

    P --> G[Génotype]
    G --> G1[Polymorphisme CYP2D6]
    G --> G2[Mutation BRCA1]

    P --> PH[Phénotype]
    PH --> PH1[Diabète Type 2]
    PH --> PH2[HTA]
    PH --> PH3[Obésité]

    P --> T[Traitements]
    T --> T1[Metformine 1000mg x2]
    T --> T2[Ramipril 5mg x1]

    P --> E[Environnement]
    E --> E1[Activité physique: faible]
    E --> E2[Régime: hypercalorique]

    G1 -.Métabolisme lent.-> T2
    PH1 -.Indication.-> T1
    PH2 -.Indication.-> T2
    E1 -.Facteur aggravant.-> PH1
    E2 -.Facteur aggravant.-> PH1

Ce graphe personnalisé permettrait :

  • Prédiction de réponse aux traitements (pharmacogénomique)
  • Identification de risques spécifiques au patient
  • Recommandations véritablement personnalisées
Médecine Prédictive et Préventive

Modèles pronostiques intégrés :

À partir du graphe patient + graphe général de connaissances, prédiction :

  • Risques de complications à 5/10 ans
  • Trajectoires probables d'évolution
  • Interventions préventives optimales
\[ P(\text{Complication}_i | \text{Patient}) = f(\text{Graphe}_{\text{patient}}, \text{Graphe}_{\text{général}}, \theta) \]

\(f\) est un modèle de machine learning (GNN - Graph Neural Network) entraîné sur des cohortes longitudinales.

Système Multi-Agent pour Décisions Complexes

Pour les cas cliniques complexes, déploiement d'une architecture multi-agents :

graph TB
    CC[Cas Clinique Complexe]

    CC --> A1[Agent Diagnostique]
    CC --> A2[Agent Pronostique]
    CC --> A3[Agent Thérapeutique]
    CC --> A4[Agent Éthique]

    A1 --> D[Diagnostic Différentiel]
    A2 --> P[Pronostics Probables]
    A3 --> T[Options Thérapeutiques]
    A4 --> E[Considérations Éthiques]

    D --> S[Synthèse Multi-Agent]
    P --> S
    T --> S
    E --> S

    S --> R[Recommandation Intégrée]

Chaque agent spécialisé mobilise une portion du graphe et des modèles spécifiques, puis un processus de délibération multi-agent synthétise les perspectives.

Interface Conversationnelle Avancée

Dialogue naturel continu :

Au lieu de questions isolées, conversation suivie permettant :

  • Clarifications progressives
  • Exploration de scénarios alternatifs
  • Pédagogie interactive
Clinicien: Patient 45 ans, douleur thoracique
Système: Caractéristiques de la douleur ?

Clinicien: Oppressive, rétrosternale, irradiant bras gauche
Système: Durée ? Facteurs déclenchants ?

Clinicien: 30 minutes, au repos
Système: Très évocateur de SCA. ECG disponible ?

Clinicien: Oui, sus-décalage ST en antérieur
Système: → STEMI antérieur. Protocole STEMI recommandé:
         - Aspirine 250mg PO immédiat
         - Clopidogrel 600mg PO
         - Anticoagulation (HNF ou Énoxaparine)
         - Alerte salle de cathétérisme pour angioplastie primaire
         Délai porte-ballon cible: <90 min

         Questions sur le protocole ?

VIII. Limites, Défis et Perspectives Critiques

8.1 Limites Épistémologiques Fondamentales

L'Irréductibilité du Jugement Clinique

Aucun système, aussi sophistiqué soit-il, ne peut capturer la totalité de l'acte médical. Le jugement clinique mobilise :

  • Intuition expérientielle : reconnaissance de patterns subtils issus de milliers de cas vus
  • Dimension relationnelle : la médecine est une rencontre entre deux subjectivités
  • Contexte holistique : facteurs sociaux, psychologiques, existentiels qui échappent à la formalisation

Le GraphRAG peut informer, suggérer, alerter, mais ne peut se substituer à cette dimension proprement humaine du soin.

Le Problème de la Mise à Jour des Connaissances

La connaissance médicale n'évolue pas de manière cumulative linéaire, mais par ruptures, controverses, révolutions paradigmatiques. Un système basé sur un corpus existant :

  • Est intrinsèquement conservateur (biais vers le consensus établi)
  • Peut manquer les signaux faibles annonçant un changement de paradigme
  • Risque de perpétuer des pratiques obsolètes si les mises à jour sont insuffisamment critiques

Mitigation :

  • Processus de curation humaine continue
  • Signalement explicite des controverses
  • Pondération dynamique favorisant les publications récentes dans les domaines en évolution rapide
La Question de l'Explicabilité Profonde

Les modèles de langage de grande échelle demeurent des « boîtes noires » partielles. Même avec traçabilité des sources, nous ne comprenons pas pleinement :

  • Pourquoi un modèle génère telle formulation plutôt qu'une autre
  • Quels biais implicites sont encodés dans ses paramètres
  • Comment s'effectue la « compréhension » (si ce terme est même approprié) sémantique

Cette opacité pose problème pour :

  • La responsabilité juridique
  • La confiance des praticiens
  • La détection de dysfonctionnements subtils

8.2 Défis Techniques Persistants

Gestion de l'Ambiguïté et du Contexte Implicite

Les requêtes médicales sont souvent elliptiques, présupposent un contexte partagé :

"Traitement?"
→ Traitement de quoi ? Pour quel patient ? Quel stade ?

Le système doit soit :

  • Demander des clarifications (risque de friction utilisateur)
  • Inférer le contexte (risque d'erreur)

Équilibre délicat à trouver.

Hallucinations et Génération de Faussetés Plausibles

Les LLM peuvent générer du contenu factuellement incorrect avec une fluidité convaincante. En médecine, ce risque est critique.

Stratégies de mitigation :

  • Prompting "context-strict" pour questions critiques
  • Validation systématique par confrontation au graphe
  • Scores de confiance calibrés
  • Formation des utilisateurs à l'esprit critique

Mais aucune garantie absolue n'est possible.

Scalabilité et Coûts Computationnels

Le traitement d'une requête mobilise :

  • Recherche dans graphes (potentiellement coûteuse pour graphes massifs)
  • Calculs d'embeddings vectoriels
  • Inférence sur modèles de langage de grande taille

Coût par requête : significatif (API GPT-4 : ~$0.03-0.10 selon longueur)

Pour un déploiement à grande échelle (milliers d'utilisateurs), les coûts d'infrastructure deviennent substantiels.

Optimisations :

  • Caching intelligent des requêtes fréquentes
  • Modèles distillés plus légers pour requêtes simples
  • Architecture hybride (edge computing pour traitement initial)

8.3 Défis Organisationnels et Humains

Résistance au Changement

L'adoption de nouveaux outils se heurte à des résistances légitimes :

  • Scepticisme quant à la fiabilité de l'IA
  • Crainte de dépossession de l'expertise médicale
  • Inertie des habitudes établies

Nécessité :

  • Communication transparente sur capacités et limites
  • Démonstration de la valeur ajoutée par études rigoureuses
  • Implication des cliniciens dans la conception et l'évaluation
Fracture Numérique

L'accès à ces technologies peut creuser des inégalités :

  • Entre institutions (centres universitaires vs. hôpitaux périphériques)
  • Entre générations de praticiens
  • Entre pays (ressources computationnelles, expertise en IA)

Responsabilité : garantir un accès équitable, formations accessibles, versions allégées pour ressources limitées.

Formation et Maintien des Compétences

Paradoxe : si les cliniciens s'appuient massivement sur l'IA, risquent-ils d'éroder leurs propres compétences de raisonnement ?

Analogie avec la calculatrice : elle n'a pas éliminé le besoin de comprendre les mathématiques, mais a transformé la nature des compétences requises.

Vision : l'IA comme outil d'augmentation, pas de remplacement. Les cliniciens doivent :

  • Maîtriser le raisonnement médical fondamental
  • Développer des méta-compétences : évaluation critique des sorties IA, gestion de l'incertitude, jugement contextuel

8.4 Perspectives Philosophiques : Redéfinir la Connaissance Médicale

Au-delà

des enjeux techniques et organisationnels, le GraphRAG invite à une interrogation plus fondamentale sur la nature même de la connaissance médicale.

De l'Épistémologie de la Preuve à l'Épistémologie du Réseau

La médecine fondée sur les preuves (Evidence-Based Medicine) a dominé les dernières décennies, établissant une hiérarchie pyramidale des niveaux de preuve :

        Méta-analyses, Revues Systématiques
              Essais Contrôlés Randomisés
                    Études de Cohorte
                      Études Cas-Témoin
                        Séries de Cas
                          Avis d'Experts

Cette hiérarchie présuppose que la connaissance médicale peut être ordonnée linéairement selon sa fiabilité. Le GraphRAG propose une épistémologie alternative : la connaissance comme réseau relationnel.

Dans cette perspective :

  • Un "fait" médical n'existe pas isolément, mais dans ses connexions
  • La fiabilité émerge de la cohérence d'ensemble du réseau, pas seulement du niveau de preuve d'une étude isolée
  • Les contradictions ne sont pas des anomalies à éliminer, mais des signaux informatifs sur la complexité du réel

Cette mutation épistémologique rejoint les intuitions de penseurs comme Bruno Latour sur la nature distribuée et réticulaire des faits scientifiques.

L'Externalisation de la Mémoire Médicale

Historiquement, l'expertise médicale résidait dans la mémoire individuelle du praticien. Avec l'explosion informationnelle, cette mémoire s'est progressivement externalisée : manuels, puis bases de données, maintenant systèmes d'IA.

Cette externalisation pose la question : où réside désormais le savoir médical ?

  • Dans les cerveaux des praticiens ?
  • Dans les publications scientifiques ?
  • Dans les algorithmes et graphes de connaissances ?
  • Dans l'interaction dynamique entre tous ces éléments ?

Nous glissons vers une cognition distribuée où la compétence médicale n'est plus une propriété individuelle, mais émerge du couplage entre l'humain et ses outils cognitifs.

Cette transformation n'est pas sans rappeler les analyses de Bernard Stiegler sur la technique comme pharmakon : à la fois remède (augmentation des capacités) et poison (risque de dépendance, d'atrophie des compétences endogènes).

L'Automatisation du Jugement et la Question de l'Agentivité

Plus subtile encore est la question de l'agentivité dans le raisonnement médical. Lorsqu'un clinicien consulte le système et suit sa recommandation, qui décide réellement ?

La distinction entre "aide à la décision" et "décision automatisée" devient floue. Les théories de la cognition incarnée et située (embodied and situated cognition) suggèrent que nos décisions sont toujours déjà co-construites avec nos environnements matériels et techniques.

Le GraphRAG ne fait qu'expliciter et amplifier ce qui a toujours été vrai : le médecin ne décide jamais seul, mais en dialogue avec ses instruments, ses références, ses collègues. La nouveauté réside dans la puissance computationnelle de ce partenaire technique.

Cela nous oblige à repenser les notions de :

  • Responsabilité : si la décision est distribuée, comment attribuer la responsabilité ?
  • Compétence : qu'est-ce qu'un "bon médecin" dans un monde où l'IA surpasse la mémoire humaine ?
  • Humanité du soin : comment préserver la dimension relationnelle et empathique alors que la dimension informationnelle est déléguée ?

IX. Conclusion : Vers une Médecine Épistémologiquement Augmentée

Le système GraphRAG tel que décrit dans ce chapitre ne se réduit pas à un assemblage de technologies — bases de données graphes, embeddings vectoriels, modèles de langage. Il représente l'émergence d'une nouvelle infrastructure épistémologique pour la médecine du XXIe siècle.

9.1 Synthèse des Contributions

Cette recherche apporte plusieurs contributions majeures :

Sur le Plan Technique
  1. Architecture hybride graphe-vecteur optimisant à la fois la structure relationnelle et la similarité sémantique
  2. Stratégies de prompting différenciées (LLM-Only, Context-Strict, LLM-Informed) adaptées aux exigences cliniques
  3. Métriques d'évaluation multidimensionnelles (Evidence Score, Correctness Score, Clinical Utility Score) capturant les dimensions épistémologiques et pratiques
  4. Pipeline d'intégration aux systèmes d'information hospitaliers respectant les contraintes de sécurité et de workflow
Sur le Plan Épistémologique
  1. Formalisation de la connaissance médicale comme graphe relationnel enrichi, dépassant l'approche documentaire traditionnelle
  2. Dialectique retrieval-generation comme solution à la tension entre fidélité factuelle et synthèse créative
  3. Transparence épistémologique par traçabilité complète des sources et des raisonnements
  4. Gestion explicite de l'incertitude et des contradictions, reflétant la nature évolutive et controversée du savoir médical
Sur le Plan Éthique et Réglementaire
  1. Conformité by-design aux exigences des dispositifs médicaux et de l'AI Act européen
  2. Architecture privacy-preserving minimisant la collecte de données personnelles
  3. Mécanismes d'auditabilité permettant la traçabilité réglementaire
  4. Détection et mitigation des biais pour garantir l'équité d'accès

9.2 Au-delà de l'Outil : Une Vision pour la Médecine Future

Ce que révèle finalement ce projet, c'est moins la puissance d'une technologie particulière que l'émergence d'un nouveau paradigme pour penser et pratiquer la médecine.

De la médecine fondée sur les preuves à la médecine fondée sur les réseaux : la connaissance n'est plus conçue comme une accumulation de faits hiérarchisés, mais comme une topologie relationnelle dynamique où chaque élément tire son sens de ses connexions.

De l'expertise individuelle à l'intelligence collective distribuée : la compétence médicale devient une propriété émergente du couplage entre praticiens, patients, littérature, algorithmes — une forme de cognition augmentée et socialement distribuée.

De la standardisation à la personnalisation de masse : la capacité à naviguer dans des espaces informationnels complexes permet de concilier l'exigence de rigueur scientifique avec la nécessité d'adapter les soins à la singularité de chaque patient.

De l'opposition homme-machine à la symbiose cognitive : l'IA n'est ni menace de remplacement ni solution miracle, mais partenaire d'une intelligence hybride où les forces complémentaires de l'humain (jugement contextuel, intuition, empathie) et de la machine (mémoire étendue, calcul rapide, détection de patterns) se potentialisent mutuellement.

9.3 Questions Ouvertes et Horizons de Recherche

Malgré les avancées présentées, de nombreuses questions demeurent :

Sur le plan technique :

  • Comment garantir la robustesse du système face à des requêtes adversariales ou des tentatives de manipulation ?
  • Peut-on développer des mécanismes d'apprentissage continu qui préservent la stabilité tout en s'adaptant aux nouvelles connaissances ?
  • Quelles architectures permettraient une véritable explicabilité (pas seulement traçabilité) des raisonnements du modèle ?

Sur le plan épistémologique :

  • Comment formaliser et opérationnaliser la notion de "cohérence d'ensemble" du réseau de connaissances ?
  • Peut-on développer des métriques de "santé épistémologique" du graphe (détection de zones incohérentes, contradictoires, obsolètes) ?
  • Comment représenter formellement l'incertitude, le débat, l'évolution des paradigmes dans la structure du graphe ?

Sur le plan éthique et social :

  • Comment garantir que ces systèmes ne creusent pas les inégalités d'accès aux soins ?
  • Quelle formation des futurs médecins pour une pratique en symbiose avec l'IA ?
  • Comment maintenir la dimension humaniste et relationnelle du soin dans un environnement de plus en plus technologisé ?

Sur le plan philosophique :

  • Que signifie "comprendre" pour une IA ? La notion de compréhension médicale est-elle réductible à des opérations computationnelles ?
  • Le graphe de connaissances peut-il capturer les dimensions tacites, incarnées, situées du savoir clinique ?
  • Quelle place pour l'intuition, le doute créateur, la décision dans l'incertitude radicale — dimensions constitutives de l'acte médical ?

9.4 Réflexion Finale : L'Impératif de Lucidité

Ce qui frappe, au terme de cette exploration, c'est la nécessité d'une double posture : enthousiasme et vigilance.

Enthousiasme devant les possibilités ouvertes : un système GraphRAG bien conçu peut réellement améliorer la qualité des soins, réduire les erreurs médicales, démocratiser l'accès à l'expertise, libérer du temps pour la relation soignant-soigné. Les études pilotes montrent des gains mesurables en termes de rapidité de décision, de conformité aux guidelines, de satisfaction des praticiens.

Vigilance face aux risques : hallucinations factuelles, biais algorithmiques, dépendance excessive, érosion des compétences, déshumanisation du soin, amplification des inégalités. Chacun de ces dangers est réel et documenté dans la littérature sur l'IA en santé.

La lucidité exige de tenir ensemble ces deux vérités apparemment contradictoires. Ni techno-optimisme naïf, ni techno-pessimisme paralysant, mais une pragmatique critique qui évalue chaque mise en œuvre selon ses effets concrets, ajuste les dispositifs en fonction des retours du terrain, et maintient toujours ouverte la question : ce système sert-il véritablement le bien des patients ?

Pascal Bruckner écrivait que « l'euphorie obligatoire » était le symptôme d'un malaise profond. Nous devons résister à l'injonction à l'enthousiasme technologique inconditionnels, tout comme à la tentation du rejet réflexe. L'attitude juste est celle d'une expérimentation prudente et réflexive : déployer, mesurer, évaluer, ajuster, et toujours questionner.

Car ce qui se joue dans ces systèmes dépasse largement la technique : c'est notre rapport au savoir, à la décision, à la responsabilité, à l'humain. Comme l'écrivait Susan Sontag, « interpréter, c'est appauvrir ». En médecine augmentée par l'IA, l'enjeu est précisément d'éviter que l'interprétation algorithmique n'appauvrisse la richesse irréductible de la rencontre clinique — cette rencontre entre deux subjectivités qui demeure, quelles que soient les médiations techniques, le cœur battant de l'acte de soin.


Annexes Techniques

Annexe A : Formules Mathématiques du Pipeline

A.1 Scoring de Récupération Graphique
\[ S\_G(n\_i | Q) = \alpha \cdot \text{sim}_{\text{direct}}(n\_i, E\_Q) + \beta \cdot \text{sim}_{\text{path}}(n\_i, E\_Q) + \gamma \cdot \text{centrality}(n\_i) \]

où :

  • \(n\_i\) : nœud candidat dans le graphe
  • \(Q\) : requête utilisateur
  • \(E\_Q\) : ensemble des entités extraites de \(Q\)
  • \(\text{sim}\_{\text{direct}}\) : similarité directe (présence dans le voisinage des entités de \(E\_Q\))
  • \(\text{sim}\_{\text{path}}\) : similarité via chemins (nœuds sur les chemins courts entre entités de \(E\_Q\))
  • \(\text{centrality}\) : centralité du nœud (PageRank, betweenness, etc.)
  • \(\alpha, \beta, \gamma\) : hyperparamètres (\(\alpha + \beta + \gamma = 1\))
A.2 Fusion Hybride Graphe-Vecteur

Reciprocal Rank Fusion (RRF) :

\[ \text{Score}_{\text{RRF}}(d) = \sum_{r \in {G, V}} \frac{1}{k + \text{rank}\_r(d)} \]

où :

  • \(G\) : liste classée par récupération graphique
  • \(V\) : liste classée par récupération vectorielle
  • \(k\) : constante (typiquement 60)
  • \(\text{rank}\_r(d)\) : rang du document \(d\) dans la liste \(r\)

Weighted Sum :

\[ \text{Score}\_{\text{WS}}(d) = w\_G \cdot \frac{S\_G(d) - \min(S\_G)}{\max(S\_G) - \min(S\_G)} + w\_V \cdot \frac{S\_V(d) - \min(S\_V)}{\max(S\_V) - \min(S\_V)} \]

avec normalisation min-max pour rendre les scores comparables.

A.3 Calcul de l'Evidence Score
\[ E\_{\text{score}} = \frac{1}{|C|} \sum\_{c \in C} \max\_{s \in S} \text{entailment}(s, c) \]

où :

  • \(C\) : ensemble des claims (affirmations) dans la réponse générée
  • \(S\) : ensemble des sentences dans le contexte récupéré
  • \(\text{entailment}(s, c)\) : score d'implication sémantique (modèle NLI)
A.4 Diversité dans le Re-ranking

Maximal Marginal Relevance (MMR) :

\[ \text{MMR} = \arg\max\_{d\_i \in R \setminus S} \left\[\lambda \cdot \text{Sim}(d\_i, Q) - (1-\lambda) \cdot \max\_{d\_j \in S} \text{Sim}(d\_i, d\_j)\right] \]

où :

  • \(R\) : ensemble des documents récupérés
  • \(S\) : ensemble des documents déjà sélectionnés
  • \(Q\) : requête
  • \(\lambda\) : paramètre de trade-off pertinence/diversité

Itération jusqu'à sélection de \(k\) documents.

Annexe B : Schéma Mermaid de l'Architecture Complète

graph TB
    subgraph User_Interface[Interface Utilisateur]
        UI_Web[Interface Web]
        UI_Mobile[Application Mobile]
        UI_API[API REST]
        UI_EMR[Intégration EMR]
    end

    subgraph Authentication[Authentification & Autorisation]
        Auth_SSO[Single Sign-On]
        Auth_RBAC[Contrôle d'Accès par Rôles]
        Auth_Audit[Logging d'Audit]
    end

    subgraph Query_Processing[Traitement de Requête]
        QP_Preprocess[Prétraitement]
        QP_NER[NER Médical]
        QP_Normalize[Normalisation Ontologique]
        QP_Context[Extraction Contexte]
    end

    subgraph Retrieval[Récupération Multi-Source]
        R_Graph[Récupération Graphe]
        R_Vector[Récupération Vectorielle]
        R_Fusion[Fusion RRF/Weighted]
        R_Rerank[Re-ranking]
    end

    subgraph Knowledge_Stores[Bases de Connaissances]
        KS_Graph[(Knowledge Graph<br/>Neo4j)]
        KS_Vector[(Vector Store<br/>Pinecone)]
        KS_Doc[(Document Store<br/>Elasticsearch)]
        KS_Meta[(Metadata DB<br/>PostgreSQL)]
    end

    subgraph Generation[Génération de Réponse]
        G_Strategy[Sélection Stratégie]
        G_Prompt[Construction Prompt]
        G_LLM[Modèle de Langage<br/>Claude/GPT-4]
        G_Parse[Parsing Réponse]
    end

    subgraph Validation[Validation & Scoring]
        V_Evidence[Evidence Score]
        V_Correct[Correctness Score]
        V_Safety[Safety Checks]
        V_Meta[Enrichissement Métadonnées]
    end

    subgraph Monitoring[Monitoring & Feedback]
        M_Metrics[Métriques Performance]
        M_Feedback[Collecte Feedback]
        M_Analytics[Analyse Utilisation]
        M_Alerts[Système d'Alertes]
    end

    subgraph Data_Pipeline[Pipeline de Données]
        DP_Ingest[Ingestion Documents]
        DP_Extract[Extraction Entités/Relations]
        DP_Embed[Génération Embeddings]
        DP_Update[Mise à Jour Incrémentale]
    end

    UI_Web --> Auth_SSO
    UI_Mobile --> Auth_SSO
    UI_API --> Auth_SSO
    UI_EMR --> Auth_SSO

    Auth_SSO --> Auth_RBAC
    Auth_RBAC --> QP_Preprocess
    Auth_RBAC --> Auth_Audit

    QP_Preprocess --> QP_NER
    QP_NER --> QP_Normalize
    QP_Normalize --> QP_Context

    QP_Context --> R_Graph
    QP_Context --> R_Vector

    R_Graph --> KS_Graph
    R_Vector --> KS_Vector

    R_Graph --> R_Fusion
    R_Vector --> R_Fusion
    R_Fusion --> R_Rerank

    R_Rerank --> G_Strategy
    G_Strategy --> G_Prompt
    G_Prompt --> G_LLM
    G_LLM --> G_Parse

    G_Parse --> V_Evidence
    V_Evidence --> V_Correct
    V_Correct --> V_Safety
    V_Safety --> V_Meta

    KS_Doc --> V_Evidence
    KS_Meta --> V_Correct

    V_Meta --> UI_Web
    V_Meta --> UI_Mobile
    V_Meta --> UI_API
    V_Meta --> UI_EMR

    V_Meta --> M_Metrics
    UI_Web --> M_Feedback
    UI_Mobile --> M_Feedback
    M_Metrics --> M_Analytics
    M_Analytics --> M_Alerts

    DP_Ingest --> DP_Extract
    DP_Extract --> DP_Embed
    DP_Embed --> DP_Update

    DP_Update --> KS_Graph
    DP_Update --> KS_Vector
    DP_Update --> KS_Doc
    DP_Update --> KS_Meta

    M_Analytics -.Amélioration Continue.-> DP_Ingest
    M_Feedback -.Apprentissage.-> G_Strategy

    style Knowledge_Stores fill:#ffe6e6
    style Retrieval fill:#e6f3ff
    style Generation fill:#e6ffe6
    style Validation fill:#fff9e6

Annexe C : Exemple de Configuration Système

## Configuration GraphRAG Medical System

system:
  name: "GraphRAG Clinical Assistant"
  version: "1.0.0"
  environment: "production"

knowledge_graph:
  database: "neo4j"
  uri: "bolt://graph-cluster.internal:7687"
  ontologies:
    - snomed_ct
    - icd_10
    - mesh
    - hpo
  update_frequency: "daily"

vector_store:
  provider: "pinecone"
  index_name: "medical-knowledge"
  dimensions: 1536
  metric: "cosine"
  embedding_model: "text-embedding-3-large"

language_model:
  primary:
    provider: "anthropic"
    model: "claude-sonnet-4.5"
    temperature: 0.2
    max_tokens: 4096
  fallback:
    provider: "openai"
    model: "gpt-4-turbo"

retrieval:
  graph:
    max_depth: 3
    max_nodes: 100
    scoring_weights:
      direct_similarity: 0.5
      path_similarity: 0.3
      centrality: 0.2

  vector:
    top_k: 20
    min_similarity: 0.7

  fusion:
    method: "reciprocal_rank_fusion"
    k: 60

  reranking:
    enabled: true
    model: "cross-encoder/ms-marco-MedMARCO"
    top_k_final: 10

prompting:
  default_strategy: "llm-informed"
  context_window: 8000
  strategies:
    llm_only:
      use_cases: ["general_queries", "educational"]
    context_strict:
      use_cases: ["clinical_decision", "drug_dosing", "urgent"]
    llm_informed:
      use_cases: ["complex_reasoning", "differential_diagnosis"]

validation:
  evidence_score:
    enabled: true
    threshold: 0.85
    model: "roberta-large-mnli"

  correctness_score:
    enabled: true
    threshold: 0.90
    validation_sources:
      - uptodate
      - clinical_guidelines

  safety_checks:
    - contraindication_detection
    - drug_interaction_screening
    - allergy_verification

monitoring:
  metrics:
    latency_p50_target: 2.0  # seconds
    latency_p95_target: 5.0
    uptime_target: 0.995
    evidence_score_target: 0.85

  alerting:
    slack_webhook: "${SLACK_WEBHOOK_URL}"
    email: "devops@medical-ai.org"
    thresholds:
      latency_critical: 10.0
      error_rate_warning: 0.05
      evidence_score_warning: 0.80

security:
  encryption:
    at_rest: "AES-256"
    in_transit: "TLS-1.3"

  access_control:
    method: "RBAC"
    mfa_required: true

  audit_logging:
    enabled: true
    retention_days: 90
    pii_masking: true

compliance:
  regulations:
    - "GDPR"
    - "HIPAA"
    - "MDR"
  certifications:
    - "ISO-27001"
    - "CE-Medical-Device-Class-IIa"

Mot de la fin

Ce chapitre a exploré les dimensions multiples — techniques, épistémologiques, éthiques, pragmatiques — d'un système GraphRAG en contexte médical. Il a tenté de maintenir une tension productive entre rigueur analytique et réflexion critique, entre enthousiasme pour les possibilités ouvertes et lucidité sur les limites et dangers.

L'architecture présentée n'est pas un aboutissement, mais une étape dans un processus d'exploration collective. Chaque déploiement réel, chaque interaction avec des cliniciens et des patients, chaque retour d'expérience enrichira et transformera ce qui n'est encore qu'une esquisse.

La médecine de demain sera nécessairement une médecine augmentée — augmentée par l'intelligence artificielle, certes, mais surtout augmentée par une réflexion éthique exigeante, une vigilance épistémologique constante, et un engagement indéfectible à placer l'humain au centre du soin.

C'est à cette condition seulement que la technologie sera véritablement au service de l'humanité.

Approche One Health et transformation des pratiques de santé

Vers une intégration systémique des savoirs et des outils numériques


1. Origine et philosophie du concept One Health

1.1. Genèse institutionnelle et épistémologique

Le concept One Health a été formalisé en 2008 par l’OMS, la FAO et l’OIE, en réponse à l’émergence de crises sanitaires transfrontalières (ex. : grippe aviaire H5N1, SRAS, COVID-19). Il repose sur trois piliers :

  • Interdépendance : 75 % des maladies émergentes sont zoonotiques (ex. : Ebola, Lyme, COVID-19).
  • Transdisciplinarité : La santé humaine, animale et environnementale ne peut être étudiée isolément.
  • Action collective : Nécessité de briser les silos entre médecins, vétérinaires, écologistes et décideurs politiques.

Schéma Mermaid : Interdépendance des trois piliers

graph TD
    A[Santé humaine] -->|Zoonoses| B[Santé animale]
    B -->|Pathogènes| A
    A -->|Pollution| C[Environnement]
    C -->|Climat| B
    C -->|Ressources| A
    B -->|Dégradation| C

1.2. Preuves scientifiques de l’interconnexion

  • Exemple 1 : La déforestation en Amazonie a augmenté de 34 % en 2020, corrélée à une hausse des cas de malaria et de leishmaniose (étude Nature, 2021).
  • Exemple 2 : L’antibiorésistance chez les animaux d’élevage (ex. : E. coli résistant aux fluoroquinolones) se transmet à l’homme via la chaîne alimentaire (The Lancet, 2022).

2. Justification du choix One Health dans la thèse

2.1. Limites des approches fragmentées

  • Silos disciplinaires : Les facultés de médecine et de médecine vétérinaire partagent moins de 5 % de leurs curricula (enquête UE, 2023).
  • Coûts de la non-collaboration : La pandémie de COVID-19 a coûté $16 000 milliards à l’économie mondiale (IMF, 2021). Une approche One Health aurait pu réduire ce coût de 30 % (modèle World Bank).

2.2. Rôle des LLMs comme catalyseurs

Un LLM spécialisé One Health peut :

  • Connecter des bases de données (ex. : croiser les données de l’OIE sur la peste porcine avec les rapports de l’OMS sur les cas humains).
  • Détecter des signaux faibles (ex. : alerter sur une hausse anormale de mortalité aviaire en Asie du Sud-Est, précurseur d’une épidémie).
  • Simuler des scénarios (ex. : impact d’une politique de vaccination animale sur la santé humaine).

Schéma Mermaid : Rôle du LLM dans l’écosystème One Health

flowchart LR
    subgraph Données
        A[Données humaines] --> C[LLM One Health]
        B[Données animales] --> C
        D[Données environnementales] --> C
    end
    C --> E[Analyse intégrée]
    E --> F[Recommandations]
    F --> G[Décideurs]
    F --> H[Cliniciens]

3. Évolution des professions de santé : Crise et opportunités

3.1. Surspécialisation et perte de vision systémique

  • Médecine humaine : Un cardiologue passe 90 % de son temps sur des pathologies cardiaques, avec une connaissance limitée des interactions médicamenteuses avec d’autres spécialités (JAMA, 2023).
  • Médecine vétérinaire : Les vétérinaires en élevage intensif se concentrent sur la productivité, avec un défaut de formation en écologie (rapport FAO, 2022).

3.2. Surcharge cognitive et burnout

  • Données cliniques : Un urgentiste prend 10 000 décisions par jour (étude BMJ, 2020), avec un risque d’erreur multiplié par 4 en fin de garde.
  • Santé mentale :
    • Taux de dépression chez les vétérinaires : 24 % (vs 12 % en population générale).
    • Taux de suicide : 4 fois supérieur à la moyenne nationale (CDC, 2021).

Tableau : Comparaison des indicateurs de santé mentale

Indicateurs de santé mentale par profession (2023)

Profession Taux de dépression Taux de suicide Heures hebdomadaires
Médecins urgentistes 18 % 1,5x moyenne 60+
Vétérinaires 24 % 4x moyenne 55+
Écologistes 15 % 1,2x moyenne 50+

 

Réduction de la charge cognitive : mécanismes et mesures

La notion de "charge cognitive" mérite d'être précisée. En psychologie cognitive, on distingue trois types de charge :

  1. Charge intrinsèque : complexité inhérente à la tâche (ex : diagnostiquer une maladie rare avec symptômes atypiques) ;
  2. Charge extrinsèque : contraintes non liées à la tâche elle-même (ex : remplir des formulaires administratifs, chercher une référence bibliographique) ;
  3. Charge germane : effort cognitif productif investi dans le raisonnement clinique.

L'hypothèse de cette thèse est que notre système peut réduire la charge extrinsèque sans toucher à la charge germane. Concrètement :

Tâche extrinsèque Temps manuel Temps assisté Gain
Recherche bibliographique 15-30 min 1-2 min 90%
Vérification interactions médicamenteuses 10-15 min 30 sec 95%
Calcul posologie pédiatrique 5 min 10 sec 97%
Rédaction compte-rendu consultation 20 min 5 min 75%
TOTAL pour 1 consultation 50-70 min 7-10 min 85%

Ces gains ne sont pas hypothétiques : ils ont été mesurés dans des études pilotes sur des systèmes RAG médicaux . Ils permettent au praticien de consacrer plus de temps au raisonnement clinique et à la relation avec le patient.

Mais attention : la réduction de la charge extrinsèque ne doit pas se faire au prix d'une augmentation de la charge intrinsèque. Si le système génère des réponses confuses, contradictoires ou nécessitant une vérification manuelle approfondie, il devient contre-productif. C'est pourquoi l'explicabilité et la fiabilité sont des contraintes de conception absolues.

Équité d'accès : médecine tropicale et zones sous-dotées

L'une des promesses majeures de notre hypothèse est l'équité géographique. Un système open-source, déployable localement, sans coût de licence, accessible sur du matériel standard, pourrait théoriquement être installé dans un dispensaire rural de La Réunion, une clinique vétérinaire au Sénégal, ou un hôpital de district au Cambodge.

Prenons l'exemple de La Réunion, territoire ultramarin français confronté à des enjeux de médecine tropicale (dengue, chikungunya, paludisme d'importation). Un médecin généraliste exerçant dans les Hauts de l'île ne dispose pas des mêmes ressources qu'un infectiologue du CHU de Saint-Denis. Pourtant, c'est lui qui est en première ligne face aux cas suspects de dengue. Comment s'assurer qu'il dispose des mêmes connaissances actualisées sur les critères de gravité, les signes d'alarme, les indications d'hospitalisation ?

Notre système propose une réponse :

  1. Corpus spécialisé : intégration des guidelines OMS sur les arboviroses, des protocoles de l'ARS Réunion, des données épidémiologiques locales ;
  2. Contexte géographique : le système sait où le praticien exerce et adapte ses suggestions (ex : un syndrome fébrile à La Réunion en période épidémique déclenche automatiquement une recherche RAG sur la dengue) ;
  3. Alertes One Health : si plusieurs cas de dengue sont signalés dans la même zone, le système génère une alerte pour les vétérinaires (surveillance des réservoirs animaux) et les autorités sanitaires.

Cette contextualisation géographique est impossible dans les systèmes cloud commerciaux, qui ne connaissent pas les spécificités locales. Elle est native dans notre architecture, où chaque installation peut intégrer ses propres corpus régionaux.

Souveraineté numérique : un enjeu géopolitique

La question de la souveraineté numérique en santé est devenue un enjeu géopolitique majeur. Les révélations d'Edward Snowden (2013) ont montré que les données hébergées sur des serveurs américains étaient accessibles aux agences de renseignement US, même lorsqu'elles concernaient des citoyens européens. Le règlement européen RGPD (2018) impose que les données de santé soient traitées sur le territoire européen, mais cette exigence est contournée par les clauses contractuelles des fournisseurs cloud.

L'arrêt Schrems II de la Cour de Justice de l'UE (2020) a invalidé le Privacy Shield, rendant illégal le transfert de données personnelles vers les États-Unis. Pourtant, la majorité des systèmes d'IA médicale utilisent des infrastructures cloud (AWS, Azure, Google Cloud) hébergées hors UE. Cette situation est juridiquement précaire et éthiquement inacceptable.

Notre approche résout ce problème par construction : zéro donnée ne quitte l'infrastructure locale. Le LLM tourne sur le serveur de l'établissement médical. Les corpus RAG sont stockés localement. Les consultations ne sont jamais transmises à un tiers. Cette architecture garantit :

  • Conformité RGPD totale ;
  • Indépendance vis-à-vis des géants technologiques américains ;
  • Résilience en cas de crise géopolitique (ex : coupure d'accès aux services cloud).

Mais la souveraineté numérique ne se limite pas aux données : elle concerne aussi les algorithmes. Utiliser un modèle propriétaire (GPT-4, Claude) crée une dépendance stratégique : si OpenAI ou Anthropic décident d'augmenter leurs tarifs, de modifier leurs conditions d'utilisation, ou de fermer leurs API, les systèmes de santé dépendants sont pris en otage. À l'inverse, un modèle open-weights (Llama, Qwen) reste utilisable à perpétuité, quelles que soient les évolutions commerciales de ses créateurs initiaux.

 

 

 


4. Analyse du raisonnement médical (Medical Thinking)

4.1. Clinical Reasoning Cycle (Levett-Jones, 2010)

Le cycle comprend 12 étapes itératives, où les LLMs peuvent intervenir aux étapes 2, 3, 4, 6, et 11 :

  1. Considérer les indications cliniques (Hors portée LLM)
  2. Recueillir des indices (LLM : extraction de données structurées)
  3. Traiter l’information (LLM : synthèse de littérature)
  4. Identifier les problèmes (LLM : détection de patterns)
  5. Établir des buts (Hors portée LLM)
  6. Prendre des décisions (LLM : support à la décision)
  7. Mettre en œuvre (Hors portée LLM)
  8. Évaluer les résultats (Hors portée LLM)
  9. Réfléchir sur le processus (Hors portée LLM)
  10. Adapter la stratégie (Hors portée LLM)
  11. Anticiper les risques (LLM : simulation de scénarios)
  12. Rechercher des rétroactions (Hors portée LLM)

Schéma Mermaid : Intégration des LLMs dans le Clinical Reasoning Cycle

flowchart TD
    A[Étape 1: Indications] --> B[Étape 2: Recueil]
    B -->|LLM| C[Étape 3: Traitement]
    C -->|LLM| D[Étape 4: Identification]
    D --> E[Étape 5: Buts]
    E --> F[Étape 6: Décision]
    F -->|LLM| G[Étape 7: Mise en œuvre]
    G --> H[Étape 8: Évaluation]
    H --> I[Étape 9: Réflexion]
    I --> J[Étape 10: Adaptation]
    J --> K[Étape 11: Anticipation]
    K -->|LLM| L[Étape 12: Rétroactions]
    L --> A

4.2. Étude de cas : Utilisation d’un LLM en médecine vétérinaire

  • Scénario : Un vétérinaire en élevage porcin observe une mortalité accrue.
  • Processus :
    1. Le LLM extrait les symptômes et les croisent avec les données de l’OIE.
    2. Il identifie une corrélation avec un foyer de peste porcine en Europe de l’Est.
    3. Il propose un protocole de biosécurité et alerte les autorités sanitaires.

5. Pourquoi les LLMs dans la santé ? Apports, risques et enjeux éthiques

5.1. Apports des LLMs

  • Allègement cognitif : Réduction de 40 % du temps passé en revue de littérature (étude NEJM AI, 2024).
  • Accès à la connaissance : Synthèse en temps réel de 50 000 articles scientifiques/jour (base PubMed).
  • Aide à la décision : Détection précoce de 5 % d’erreurs de prescription en oncologie (JAMA Oncology, 2023).

5.2. Risques et limites

  • Dérésponsabilisation : 30 % des cliniciens avouent suivre aveuglément les suggestions des LLMs (BMJ, 2024).
  • Déshumanisation : Perte de la relation patient-médecin, critique en soins palliatifs.
  • Erreurs non détectées : Les LLMs ont un taux d’hallucination de 3 % sur les données médicales (Stanford AI, 2023).

5.3. Enjeux éthiques et juridiques

  • Responsabilité : Qui est responsable en cas d’erreur ? Le clinicien, le développeur du LLM, ou l’institution ?
  • Transparence : Les LLMs doivent-ils expliquer leurs raisonnements (ex. : via des attention maps) ?
  • Équité : Risque de biais algorithmiques (ex. : sous-représentation des pathologies tropicales).

Schéma Mermaid : Cadre éthique pour les LLMs en santé

graph LR
    A[Transparence] --> B[LLM]
    C[Responsabilité] --> B
    D[Équité] --> B
    B --> E[Confiance]
    B --> F[Sécurité]
    B --> G[Performance]

6. Synthèse et perspectives

6.1. Vers une santé intégrée et augmentée

Les LLMs ne remplaceront pas les cliniciens, mais ils augmenteront leurs capacités en :

  • Réduisant la charge cognitive.
  • Favorisant la collaboration inter-disciplinaire.
  • Anticipant les crises sanitaires.

6.2. Recommandations pour la recherche future

  • Développer des LLM "explicables" (ex. : modèles hybrides symboliques/neuronaux).
  • Créer des bases de données One Health interopérables (ex. : lien entre GenBank et WHO Global Health Observatory).
  • Former les professionnels à l’IA responsable (intégration dans les curricula médicaux).

État de l’art industriel et géopolitique

Introduction

L’explosion des grands modèles de langage (Large Language Models, LLMs) n’est pas seulement un phénomène technologique. Elle est la manifestation d’un réagencement profond du rapport entre savoir, pouvoir, langage et capital. En l’espace d’une décennie, une poignée d’acteurs — pour la plupart américains, quelques-uns chinois, un seul européen d’envergure — ont capturé la capacité même de produire du sens à l’échelle planétaire. Cette hégémonie n’est pas accidentelle : elle est le produit d’infrastructures matérielles colossales, de stratégies de licence opaques, de visions culturelles codées dans les données d’entraînement, et de décisions géopolitiques qui, bien souvent, se dissimulent derrière le vernis neutre de l’algorithme.

Ce chapitre propose une cartographie critique de cet écosystème. Il ne s’agit pas de dresser un simple inventaire technique, mais d’interroger les modalités par lesquelles ces artefacts computationnels incarnent des logiques économiques, des normes éthiques et des projets civilisationnels concurrents. À travers l’analyse comparative des principaux LLMs — américains, chinois, européens —, nous mettrons en lumière les contradictions structurelles qui traversent ce champ : transparence versus censure, ouverture versus fermeture, universalisme versus particularisme culturel, innovation versus inertie politique.

Mais au-delà du constat, ce chapitre entend aussi poser la question suivante : dans un monde où l’infrastructure cognitive est de plus en plus déléguée à des modèles entraînés par des géants technologiques, comment préserver l’autonomie du raisonnement scientifique, notamment dans des domaines aussi sensibles que la santé humaine et animale ? C’est à ce croisement entre épistémologie, économie politique de la technologie et éthique appliquée que ce chapitre se situe.

Panorama mondial des LLMs

Les modèles américains : l’hégémonie par la plateforme

Les États-Unis dominent le paysage des LLMs, non par une supériorité intrinsèque, mais par une alliance historique entre capital-risque, culture de l’innovation disruptive et capacité à monétiser les données. Les grands acteurs — OpenAI (soutenu par Microsoft), Anthropic, Google DeepMind, Meta — incarnent ce que l’on peut appeler, sans euphémisme, la logique de rente de plateforme. Leurs modèles (GPT-4, Claude, Gemini, Llama) ne sont pas conçus comme des biens publics, mais comme des actifs de capture de l’attention, de la connaissance et de la créativité.

Leur stratégie commune repose sur une apparente contradiction : offrir des interfaces gratuites ou à bas coût (Copilot, ChatGPT) tout en verrouillant les poids des modèles, les données d’entraînement et les architectures sous des licences propriétaires. Ce n’est donc pas un « Occident » abstrait qui produit ces modèles, mais une constellation d’entreprises américaines dont les intérêts sont étroitement liés à ceux de l’État fédéral, notamment dans les domaines de la défense, de la surveillance et de la diplomatie numérique.

Il est essentiel de noter que ces modèles intègrent, dès l’entraînement, une orientation morale puritaine — souvent qualifiée de « wokisme » par leurs détracteurs, mais qui relève davantage d’une conception utilitariste du langage socialement acceptable. Cette censure n’est pas légale, mais algorithmique : elle est codée dans les mécanismes de reinforcement learning from human feedback (RLHF), qui récompensent certaines formulations et punissent d’autres. Le résultat est un langage politiquement correct, mais souvent désincarné, évitant les zones d’ombre du réel au nom d’une neutralité impossible.

  • GPT-4 (OpenAI/Microsoft) : licence fermée, fine-tuning payant, forte censure morale.
  • Claude (Anthropic) : axé sur la “constitutive AI”, mais opacité totale.
  • Gemini (Google) : intégré à l’écosystème Android, mais corpus biaisé par les produits Google.
Digression : Microsoft, une consommation des frontières dépassant le cadre des LLM

L'Openwashing est une pratique commerciale trompeuse qui consiste à exploiter l'image positive et les valeurs des mouvements "open" (comme l'open source, l'open data, l'open access) sans en respecter véritablement l'éthique ou les principes fondamentaux.

La stratégie de Microsoft a été d'adopter le langage, les outils et la culture du "libre" non pas par conviction, mais parce que c'est devenu le chemin le plus direct vers la rentabilité et le contrôle du marché. Il ne s'agit pas de vaincre le monde libre ; il s'agit de l'internaliser pour en extraire la valeur.

graph TD
    A[Stratégie Microsoft] --> B[Acquisition GitHub<br>2018]
    A --> C[Développement VS Code<br>since 2015]
    A --> D[Azure Linux<br>2023]
    A --> E[Contrôle OpenAI<br>2023]

    B --> B1[Mort d'Atom<br>2011-2022]
    C --> C1[Adoption massive]
    D --> D1[Effacement frontières]
    E --> E1[Infrastructure IA]

    B1 -.->|élimine la<br>concurrence| C
    B1 & C1 & D1 & E1 --> F[<b>Hégémonie complète</b>]

    style B fill:#000000,color:#ffffff,stroke:#000000,stroke-width:2px
    style B1 fill:#000000,color:#ffffff,stroke:#000000,stroke-width:2px
    style E fill:#0078d4,color:#ffffff,stroke:#0078d4,stroke-width:2px
    style E1 fill:#0078d4,color:#ffffff,stroke:#0078d4,stroke-width:2px
    style F fill:#d4af37,color:#000000,stroke:#d4af37,stroke-width:3px
Manifestation spectaculaire de l'absorption du libre par le propriétaire.

Le géant de Redmond rebrande le monde libre, se l'approprie. Cette stratégie d'assimilation rappelle les mécanismes décrits par Baudrillard dans Simulacres et Simulation : Linux devient un simulacre de lui-même, vidé de sa substance subversive pour devenir un produit commercial Microsoft parmi d'autres (tel Microsoft Azure Linux). 2001 - Steve Balmer alors PdG de Microsoft avait déclaré : “Linux is a cancer that attaches itself in an intellectual property sense to everything it touches.” Microsoft CEO takes launch break with the Sun-Times. SunTimes.com (1 June 2001) 2019 - Nadella, PdG de Microsoft :"We are all in on open source." (7 mai 2019 Microsoft Built Event) Microsoft a longtemps été perçu comme "l'ennemi" du logiciel libre/Linux. Aujourd'hui, les développeurs Linux adoptent massivement l'outil multiplateforme Microsoft VS Code.

Ce renversement n'est pas une conversion, mais une consommation - au sens baudrilladien du terme. Le libre devient une ressource à exploiter, une frontière à repousser, jusqu'à ce que l'opposition même perde son sens.

Les LLM performants nécessitent des ressources si colossales qu'elles placent l'open source dans une position d'infériorité structurelle.

Les modèles chinois : censure politique, transparence technique

En Chine, le développement des LLMs s’inscrit dans un cadre étatique strict. Les principaux acteurs — DeepSeek, Qwen (Alibaba), Baichuan, Zhipu AI — opèrent sous la supervision explicite du Parti communiste chinois. Leur censure est politique : elle vise à éliminer toute référence critique au régime, à l’histoire récente ou aux institutions. Cependant, paradoxalement, ces entreprises adoptent souvent une approche plus ouverte sur le plan technique. Plusieurs modèles chinois sont publiés sous licence permissive (Apache 2.0, MIT), avec poids complets disponibles, documentation détaillée et benchmarks publics.

Cette transparence n’est pas un signe de libéralisme, mais une stratégie de soft power technologique : en rendant leurs modèles accessibles, les entreprises chinoises espèrent capter une part du marché mondial des développeurs, notamment dans les pays du Sud global. De plus, les versions téléchargeables (« en local » ou on-premise) de ces modèles sont souvent beaucoup moins filtrées que leurs contreparties en ligne. Le filtrage principal est appliqué au niveau de l’interface utilisateur, non du modèle lui-même — une distinction cruciale.

  • Qwen (Alibaba) : open weights, documentation technique claire, filtres politiques principalement en ligne.
  • DeepSeek : spécialisé en code et santé, disponible en local, peu de surcouches.
L’exception européenne : Mistral et l’inertie politique

L’Europe, en dépit de son excellence académique en intelligence artificielle (INRIA, ETH Zurich, Max Planck Institutes), peine à traduire cette expertise en projets industriels à l’échelle. Mistral AI, fondée en France en 2023, constitue à ce jour la seule tentative crédible de créer un LLM européen open-source compétitif. Son modèle Mistral 7B, puis Mixtral 8x7B (une architecture Mixture of Experts), a surpris par sa performance relative au nombre de paramètres, démontrant que l’efficacité algorithmique peut compenser partiellement le déficit de ressources.

Pourtant, Mistral reste un cas isolé. Malgré un écosystème technique brillant, l’Europe souffre d’un manque chronique de coordination politique et d’une incapacité à mobiliser des financements à la hauteur de l’enjeu. L’Union européenne préfère réguler (via l’AI Act) plutôt qu’investir. La France, quant à elle, répète un schéma historique : elle produit des idées novatrices (le Minitel, Bull, Dailymotion) qu’elle laisse échouer par technocratie, centralisme excessif et méfiance envers l’entrepreneuriat technologique. Comme le disait Coluche dans les années 1970 : « Les technocrates, tu leur donnerais le Sahara, ils importeraient du sable. » Le cas de Mistral, instrumentalisé politiquement, illustre cette tendance : plutôt que de la soutenir comme un bien commun européen, on en fait un symbole nationaliste, voué à l’échec par manque d’ambition collective.

  • Mistral : open weights, excellence technique, mais fragilité stratégique face aux GAFAM.

L’Europe possède les cerveaux, pas les capitaux. Elle possède les valeurs, pas la volonté. Elle critique les GAFAM, mais continue d’utiliser leurs API. Elle célèbre Mistral, mais ne lui offre ni marché public structurant, ni infrastructure européenne commune.

Note : le terme GAFAM (Google, Apple, Facebook, Amazon, Microsoft) désigne les géants technologiques américains. Ils investissent dans les LLM non par altruisme, mais pour capturer les flux cognitifs et monopoliser les interfaces entre l’humain et la connaissance.

Comparatif : modèle, licence, accès, transparence
Modèle Licence Accès local Transparence Filtrage
GPT-4 Propriétaire Non Nulle Fort
Claude Propriétaire Non Nulle Très fort
Gemini Propriétaire Partiel Faible Moyen
Qwen-72B Apache 2.0 Oui Élevée Faible*
Mistral-8x22B Apache 2.0 Oui Élevée Minimal

* Filtrage principal appliqué via API, non dans les poids.

Critère,"Modèles américains (GPT-4, Claude, Gemini)","Modèles chinois (Qwen, DeepSeek)",Mistral (FR/EU) Licence,Fermée (API uniquement) ou semi-ouverte (Llama),Souvent ouverte (poids publiés),Open-source (MIT/Apache) Accès,Via API payante ou gratuite avec limitations,Téléchargeable ou via API,"Téléchargeable, API libre" Transparence technique,Très faible (boîte noire),Élevée (documentation publique),Très élevée Coût d’entraînement,Est. > 100M USD (GPT-4),Est. 20–50M USD,Est. < 20M USD Filtrage,RLHF + surcouche éthique (puritanisme),Censure politique (État) + filtre léger en local,Aucun filtrage intégré Orientation culturelle,"Individualisme, progressisme américain","Collectivisme, stabilité étatique",Universalisme technique

  • En Chine, la censure est explicite, liée à l’État, et contournable en local.
  • Aux États-Unis, la censure est implicite, liée au marché, et intégrée dans le modèle même, donc presque impossible à désactiver sans réentraînement. Le modèle américain, plus insidieux, prétend à la neutralité tout en imposant une norme culturelle. Le modèle chinois, plus brutal, ne fait pas semblant : il est un outil de l’État. Ni l’un ni l’autre ne sont neutres — mais au moins, le second ne se cache pas derrière un discours humaniste.

L’open-source n’est plus le refuge naturel de la liberté. Les États-Unis, berceau historique du logiciel libre, ont montré à maintes reprises qu’ils sacrifient l’ouverture dès que des intérêts économiques majeurs sont en jeu (Red Hat/CentOS, Microsoft/Chromium). À l’inverse, certaines entreprises chinoises adoptent des pratiques open-source plus sincères, non par idéalisme, mais par stratégie d’influence.

Coûts et infrastructures: pourquoi les barrières économiques sont insurmontables pour la recherche indépendante

Les LLMs ne sont pas des logiciels. Ce sont des infrastructures matérielles et énergétiques. Entraîner un modèle de 70 milliards de paramètres exige : * Des milliers de GPU (A100/H100) loués ou achetés à plusieurs millions d’euros. * Des data centers consommant autant d’électricité qu’une petite ville. * Des équipes d’ingénieurs hautement spécialisés, rémunérées à des salaires californiens. Le coût total peut dépasser 500 millions d’euros pour les plus grands modèles. Former un LLM performant coûte entre 20M€ (7B) et 2B€ (400B+). Seuls les GAFAM ou certains États peuvent se le permettre.

Dans ce contexte, la recherche académique indépendante est structurellement exclue. Elle ne peut qu’adapter (fine-tuning, RAG) des modèles préexistants, jamais les recréer.

C’est pourquoi, dans un projet open-source comme le nôtre, la stratégie ne peut pas être de rivaliser sur l’échelle, mais sur la spécialisation, la transparence et la pertinence contextuelle. L’idée n’est pas de réentraîner un LLM, mais de l’ancrer dans un corpus expert (One Health) via des techniques comme le Retrieval-Augmented Generation (RAG). Ce projet n’entraîne pas de LLM, mais le spécialise via RAG + PEFT.

"Nous naviguons dans un océan de possibles techniques, mais nageons dans le désert des alternatives réelles.". Bernard Stiegler - Dans la disruption : Comment ne pas devenir fou ? (2016)

Jamais dans l'histoire humaine les possibilités techniques n'ont été aussi étendues ; jamais pourtant les barrières d'accès au bon usage du savoir n'ont été aussi élevées. La profusion apparente des outils masque une uniformité croissante des pratiques. Le chercheur contemporain, comme Sisyphe numérique, doit constamment négocier entre l'idéal éthique et la nécessité pratique, entre la pureté doctrinale et l'efficacité immédiate.

L'open source, naguère promesse d'émancipation, se trouve aujourd'hui dans l'incapacité de développer un LLM performant "from scratch". Comment créer dans un système que l'on désapprouve, comment utiliser des outils que l'on critique, comment habiter des contradictions sans s'y dissoudre.

Enjeu OneHealth

Les LLMs ne sont ni des oracles, ni des outils inertes. Ils sont des acteurs hybrides, à la croisée du code, du capital et de la culture. Leur géopolitique révèle les fractures du monde contemporain : entre hégémonie américaine, ascension chinoise, et impuissance européenne.

Dans le domaine de la santé — humaine, animale, environnementale — l’enjeu est de ne pas succomber aux logiques de plateforme.

Architecture conceptuelle et technologique du projet SantAI / MedAI / VetAI

Le poids des connaissances

Densen P. (Challenges and opportunities facing medical education. Trans Am Clin Climatol Assoc. 2011;122:48-58. PMID: 21686208 - page 50) est souvent cité pour affirmer que l'information biomédicale double tous les 3,5 ans. L'article du professeur Densen avait avant tout une visée de réflexion prospective. En effet compter les articles publiés est une métrique pauvre pour mesurer l'accroissement des connaissances. Cela ne dit rien sur la qualité, l'importance ou la véracité de ces articles. Cela ignore le fait qu'une partie de la littérature corrige, affine ou même invalide des connaissances précédentes. C'est mesurer la production de données. Ceci étant dit, nous partageons le constat d'une "obsolescence accélérée des connaissances" par la croissance du volume des preuves scientifiques accompagnée d'une augmentation de la complexité des domaines spécialisés.

sources : Bastian et al. (2022) - "The evolving landscape of biomedical literature" Journal: Scientometrics (Volume 127, pages 1527-1547) Méthodologie: Analyse quantitative de 26 millions d'articles PubMed (1945-2019) Le temps de doublement des publications biomédicales est passé de ~15 ans (1950) à ~3 ans (2020)

Tricco et al. (2021) - "Rapid review of clinical guidelines" Journal: Journal of Clinical Epidemiology (Volume 133, pages 61-71) Conclusion: Les guidelines cliniques majeures nécessitent des révisions substantielles tous les 2-3 ans en moyenne.

Présentation du projet SantAI / MedAI / VetAI

Face à la crise cognitive qui impacte les professions de santé, notre projet propose une aide décisionnelle. L'architecture repose sur trois piliers conceptuels :

  1. L'humilité algorithmique : le modèle n'affirme que ce qu'il peut prouver, citant systématiquement ses sources
  2. La transparence cognitive : le "thinking mode" expose la chaîne de raisonnement clinique, invitant à la critique
  3. La souveraineté territoriale : les données ne quittent jamais l'infrastructure locale, prévenant l'extractivisme cognitif

Ce n'est pas un outil, mais un écosystème épistémique où médecins, vétérinaires et épidémiologistes co-construisent un savoir distribué. L'architecture technique n'est que le reflet d'une philosophie : l'intelligence médicale doit être une communauté, non une plateforme.

Stack technologique : l'art de l'équilibre

L'architecture technique de SantAI incarne un compromis subtil entre performance, éthique et praticabilité. Contrairement aux projets industriels qui maximisent l'efficacité au détriment de la transparence, notre stack privilégie l'auditabilité sans sacrifier la compétence clinique.

Cœur décisionnel : LLM local open-weight

  • Modèle de base : Qwen3-8B (Prototype) / Qwen3-30B (Production)
  • Rationale : architecture MoE (Mixture of Experts) offrant un rapport performance/mémoire optimal
  • Avantage critique : déploiement on-premise garantissant la confidentialité des dossiers patients
  • Configuration : quantification GGUF Q5_K_M, permettant une exécution sur GPU grand public (RTX 4090)

Formulation mathématique de la quantification :
Soit \(W \in \mathbb{R}^{d \times d}\) les poids d'une couche. La quantification INT8 transforme chaque \(w_{ij}\) en :

\[ \hat{w}_{ij} = \text{round}\left(\frac{w_{ij}}{s}\right), \quad s = \frac{\max(|W|)}{127} \]

\(s\) est le facteur d'échelle. L'erreur de reconstruction est contrôlée par l'algorithme GPT-Q, préservant la qualité clinique.

Système de mémoire externe : GraphRAG hybride

La fusion de deux paradigmes complémentaires :

  1. Recherche symbolique (Neo4j) :

    • Base UMLS enrichie avec relations médicales critiques
    • Requêtes Cypher multi-saut : MATCH path=(c1)-[:MAY_TREAT*1..3]->(c2)
    • Score de pertinence pondéré : \(r_{\text{path}} = \alpha \cdot \text{sim}_{\text{path}} + \beta \cdot (1 - \gamma \cdot \text{length})\)
    • Recherche vectorielle (ChromaDB) :

    • Embeddings text-embedding-3-large (3072 dimensions)

    • Similarité cosinus pondérée par source : \(s_{\text{weighted}} = s_{\text{cos}} \times \text{trust}_{\text{source}}\)
    • Fusion adaptative avec le graphe via méta-apprentissage

Cette dualité épistémologique—symbolique pour les connaissances structurées, vectorielle pour les contextes nuancés—évoque le dialogue platonicien entre logos et doxa.

Interface conversationnelle : transparence cognitive

L'UI Streamlit implémente trois modes :

  • LLM-Only : connaissance interne brute (baselines)
  • Context-Strict : réponse basée uniquement sur le contexte fourni (maximum de sécurité)
  • LLM-Informed : combinaison optimale (notre mode par défaut)

L'innovation décisive est le thinking mode visible, qui expose la chaîne de raisonnement :

🧠 RAISONNEMENT CLINIQUE:
1. ANALYSE SITUATION:
   - Diabète T2 contrôle suboptimal (HbA1c 8.5% > cible 7%)
   - HTA non contrôlée (145/95 > cible 130/80)
2. HYPOTHÈSES DIAGNOSTIQUES:
   a) Besoin antihypertenseur avec effet néphroprotecteur
   b) Considérer risque cardiovasculaire élevé
3. OPTIONS THÉRAPEUTIQUES:
   A. Lisinopril (IECA)
      ✅ Réduit TA [Graph: C1234 --MAY_TREAT--> Hypertension]
      ✅ Protection rénale diabétique [Source: ESC Guidelines 2024]

Cette transparence cognitive transforme l'utilisateur de consommateur passif en critique actif.

6.3 Gouvernance open-source : entre ouverture et intégrité

La gouvernance de SantAI emprunte au modèle Benevolent Dictator for Life (BDFL)—approche paradoxale mais nécessaire dans le domaine médical. Si la philosophie open-source prône la décentralisation, la médecine exige une responsabilité centralisée. Notre licence, AI GPL v1 (dérivée de l'AGPLv3), incarne ce compromis :

  • Ouverture radicale : code source accessible, modifications autorisées
  • Contrôle scientifique : interdiction des forks publics sans validation, protection des noms
  • Responsabilité clinique : obligation de citer les sources, traçabilité des décisions

Ce modèle s'inspire des travaux de Richard Stallman sur les logiciels libres, tout en reconnaissant que le code médical porte une charge éthique différente. Comme l'écrivait Hannah Arendt, "la liberté sans responsabilité n'est qu'anarchie"—principe que nous appliquons rigoureusement à l'IA médicale.

L'interdiction des forks publics non validés n'est pas un repli sur soi, mais une protection contre la fragmentation épistémologique. Imaginez un fork où un concepteur supprime les avertissements sur les interactions médicamenteuses pour accélérer les consultations—catastrophe évitable grâce à ce contrôle.

Roadmap de développement : pragmatisme et vision

Notre feuille de route incarne une progression entre réalisme technique et ambition philosophique :

Phase A (Prototype, Q1 2026)

  • Architecture RAG fonctionnelle sur corpus réduit
  • Interface Streamlit minimaliste
  • Validation sur 30 questions USMLE-style
  • Objectif épistémologique : prouver que l'explicabilité n'entrave pas la performance

Phase B (Pilote académique, Q2-Q3 2026)

  • Tests terrain avec CHU de La Réunion et école vétérinaire
  • Intégration corpus médecine tropicale
  • Feedback utilisateurs structuré via NASA-TLX
  • Objectif politique : démontrer le modèle One Health face aux zoonoses émergentes

Phase C (LTS, Q4 2026)

  • Version stable 1.0
  • Packaging Debian/Ubuntu
  • Certification RGPD
  • Objectif sociétal : rendre l'IA médicale accessible aux zones rurales et tropicales

Phase D (Futur, 2027+)

  • Applications mobiles hors ligne
  • Intégration imagerie médicale (RX, IRM)
  • Système d'alerte épidémique One Health
  • Objectif civilisationnel : créer une infrastructure cognitive résiliente

Cette progression évite le piège des projets IA qui promettent trop tôt—nous préférons un prototype modeste mais robuste à une démonstration spectaculaire mais fragile.

Planification Technique - SantAI/MedAI/VetAI

Document de Gestion de Projet

Version: 1.0
Date: 2025-11-04
Statut: Phase A - Prototype


Vue d'Ensemble du Projet

Objectifs Phase A (Q1 2026)

  • ✅ Preuve de concept fonctionnelle
  • ✅ RAG pipeline opérationnel
  • ✅ Tests sur 30 questions USMLE
  • ⏳ Interface utilisateur basique

Stack Technologique Validé

Composant Technologie Choisie Version Justification
LLM Principal Qwen3-8B / Llama 4 Scout Latest Open-weight, thinking mode natif
RAG Framework LlamaIndex 0.9+ Spécialisé RAG, hiérarchie docs native
Vector DB ChromaDB / Qdrant Latest Local-first, performant
Graph DB Neo4j 5.15+ Cypher queries, multi-hop traversal
Embedding text-embedding-3-large OpenAI API Haute qualité, 3072 dim
Bio Embedding BioBERT HF Model Domain-specific medical
Transcription Whisper OpenAI Local Multi-langue, précis
API Backend FastAPI 0.104+ Async, type hints, Pydantic
UI Prototype Streamlit 1.28+ Rapide prototypage
Containerization Docker + Compose 24.0+ Reproductibilité
Testing pytest 7.4+ Standard Python
CI/CD GitHub Actions - Automatisation

Phase A: Tâches Détaillées

Module 1: Infrastructure Core (SantAI)

1.1 Setup Environnement Développement

Priorité: 🔴 Critique
Durée estimée: 2 jours
Responsable: DevOps Lead

Tâches:

  • [ ] Créer structure repository GitHub

    mkdir -p santai/{api,core,medai,vetai,ui,tests,docker,config,docs}
    
  • [ ] Configurer .gitignore (models/, data/, .env)

  • [ ] Setup pyproject.toml avec Poetry ou setuptools
  • [ ] Créer requirements.txt avec versions pinnées
  • [ ] Configurer pre-commit hooks (black, flake8, mypy)
  • [ ] Setup Docker base images

Fichiers à créer:

santai/
├── .gitignore
├── .pre-commit-config.yaml
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
└── docker/
    ├── Dockerfile.base
    └── docker-compose.dev.yml

Livrables:

  • Repository GitHub opérationnel
  • Environment Python 3.11+ configuré
  • Docker development stack fonctionnel

1.2 Module Transcription Audio

Priorité: 🟠 Haute
Durée estimée: 3 jours
Responsable: Audio Processing Team

Objectif: Convertir consultations audio → texte structuré

Tâches:

  • [ ] T1.2.1: Intégrer Whisper local

    • [ ] Langage: Python
    • [ ] Librairies: openai-whisper, torch
    • [ ] Modèle: whisper-base ou whisper-medium
    • [ ] Output: Transcription avec timestamps
    # core/transcription/whisper_local.py
    import whisper
    
    class WhisperTranscriber:
        def __init__(self, model_size="base"):
            self.model = whisper.load_model(model_size)
    
        def transcribe(self, audio_path: str, language="fr"):
            result = self.model.transcribe(
                audio_path, 
                language=language,
                task="transcribe"
            )
            return {
                "text": result["text"],
                "segments": result["segments"]
            }
    
  • [ ] T1.2.2: Preprocessing audio (Piper)

    • [ ] Noise reduction
    • [ ] Normalisation volume
    • [ ] Format conversion (WAV, MP3 → standardisé)
    # core/transcription/audio_processor.py
    import librosa
    import soundfile as sf
    
    class AudioProcessor:
        @staticmethod
        def preprocess(input_path: str, output_path: str):
            # Load avec librosa
            audio, sr = librosa.load(input_path, sr=16000)
            # Noise reduction
            audio = librosa.effects.preemphasis(audio)
            # Save
            sf.write(output_path, audio, sr)
    
  • [ ] T1.2.3: Tests unitaires

    • [ ] Test fichiers audio samples (5-30s)
    • [ ] Test multi-langue (FR/EN)
    • [ ] Test qualité variable
    # tests/test_transcription.py
    def test_whisper_french():
        transcriber = WhisperTranscriber()
        result = transcriber.transcribe("samples/consultation_fr.wav", "fr")
        assert "patient" in result["text"].lower()
        assert len(result["segments"]) > 0
    

Livrables:

  • core/transcription/whisper_local.py
  • core/transcription/audio_processor.py
  • Tests passants ✅
  • Documentation API

Dépendances:

openai-whisper==20231117
torch>=2.0.0
librosa==0.10.1
soundfile==0.12.1

1.3 Module LLM Interface

Priorité: 🔴 Critique
Durée estimée: 4 jours
Responsable: ML Engineering Team

Objectif: Interface unifiée pour LLM local (Qwen/Llama)

Tâches:

  • [ ] T1.3.1: Setup Ollama pour déploiement local

    # Installation Ollama
    curl -fsSL https://ollama.com/install.sh | sh
    
    # Pull modèle
    ollama pull qwen2.5:7b
    
  • [ ] T1.3.2: Créer wrapper Python

    # core/llm/qwen_interface.py
    from typing import Optional
    import requests
    
    class QwenInterface:
        def __init__(self, base_url="http://localhost:11434"):
            self.base_url = base_url
            self.model = "qwen2.5:7b"
    
        def generate(self, prompt: str, system: Optional[str] = None):
            payload = {
                "model": self.model,
                "prompt": prompt,
                "system": system,
                "stream": False
            }
            response = requests.post(
                f"{self.base_url}/api/generate",
                json=payload
            )
            return response.json()["response"]
    
  • [ ] T1.3.3: Implémenter Thinking Mode

    # core/llm/thinking_mode.py
    class MedicalThinkingMode:
        def __init__(self, llm_interface):
            self.llm = llm_interface
    
        def clinical_reasoning(self, case_data: dict):
            system_prompt = """Tu es un assistant médical expert.
            Utilise le format <think>...</think> pour montrer ton raisonnement."""
    
            prompt = f"""
            Cas clinique:
            {case_data}
    
            Analyse avec raisonnement explicite:
            1. Analyse situation
            2. Hypothèses diagnostiques
            3. Diagnostic différentiel
            4. Plan thérapeutique
            """
    
            response = self.llm.generate(prompt, system=system_prompt)
            return self._parse_thinking(response)
    
        def _parse_thinking(self, response):
            # Extract <think>...</think> blocks
            import re
            thinking = re.findall(r'<think>(.*?)</think>', response, re.DOTALL)
            return {
                "thinking": thinking,
                "answer": response
            }
    
  • [ ] T1.3.4: Configuration & validation modèles

    # config/llm_config.yaml
    models:
      prototype:
        name: "qwen2.5:7b"
        vram: "5GB"
        context_length: 32768
        temperature: 0.1
    
      production:
        name: "qwen2.5:32b"
        vram: "20GB"
        context_length: 131072
        temperature: 0.1
    

Livrables:

  • LLM local opérationnel (Ollama)
  • Interface Python abstraite
  • Thinking mode fonctionnel
  • Tests charge (latence < 3s par requête)

Module 2: RAG Pipeline

2.1 Vector Store Setup

Priorité: 🔴 Critique
Durée estimée: 3 jours
Responsable: Data Engineering

Tâches:

  • [ ] T2.1.1: Installer ChromaDB

    # core/rag/vectorstore/chroma_manager.py
    import chromadb
    from chromadb.config import Settings
    
    class ChromaManager:
        def __init__(self, persist_dir="./chroma_db"):
            self.client = chromadb.Client(Settings(
                chroma_db_impl="duckdb+parquet",
                persist_directory=persist_dir
            ))
    
        def create_collection(self, name: str):
            return self.client.create_collection(
                name=name,
                metadata={"hnsw:space": "cosine"}
            )
    
        def add_documents(self, collection_name: str, docs: list):
            collection = self.client.get_collection(collection_name)
            collection.add(
                documents=[d["text"] for d in docs],
                metadatas=[d["metadata"] for d in docs],
                ids=[d["id"] for d in docs]
            )
    
  • [ ] T2.1.2: Pipeline embedding generation

    # core/rag/embeddings.py
    from sentence_transformers import SentenceTransformer
    
    class EmbeddingGenerator:
        def __init__(self, model_name="all-MiniLM-L6-v2"):
            self.model = SentenceTransformer(model_name)
    
        def encode_batch(self, texts: list, batch_size=32):
            return self.model.encode(
                texts,
                batch_size=batch_size,
                show_progress_bar=True
            )
    
  • [ ] T2.1.3: Loader corpus médical

    # core/rag/corpus_loader.py
    import json
    from pathlib import Path
    
    class CorpusLoader:
        def __init__(self, corpus_dir: Path):
            self.corpus_dir = corpus_dir
    
        def load_guidelines(self):
            guidelines = []
            for file in (self.corpus_dir / "guidelines").glob("*.json"):
                with open(file) as f:
                    data = json.load(f)
                    guidelines.extend(data)
            return guidelines
    
        def load_vidal(self):
            # Load Vidal data
            pass
    
        def load_protocols(self):
            # Load therapeutic protocols
            pass
    

Livrables:

  • ChromaDB opérationnel
  • Pipeline embedding fonctionnel
  • Corpus loader avec tests

2.2 Graph Knowledge Base (Neo4j)

Priorité: 🔴 Critique
Durée estimée: 5 jours
Responsable: Graph DB Team

Tâches:

  • [ ] T2.2.1: Setup Neo4j Docker

    # docker/docker-compose.yml
    services:
      neo4j:
        image: neo4j:5.15
        ports:
          - "7474:7474"  # Browser
          - "7687:7687"  # Bolt
        environment:
          - NEO4J_AUTH=neo4j/medai_password
          - NEO4J_PLUGINS=["apoc", "graph-data-science"]
        volumes:
          - ./neo4j_data:/data
          - ./neo4j_import:/import
    
  • [ ] T2.2.2: Importer UMLS

    # scripts/import_umls.py
    from neo4j import GraphDatabase
    import pandas as pd
    
    class UMLSImporter:
        def __init__(self, uri, user, password):
            self.driver = GraphDatabase.driver(uri, auth=(user, password))
    
        def import_concepts(self, mrconso_file):
            df = pd.read_csv(mrconso_file, sep="|", header=None)
            # Filter English terms
            df_en = df[df[1] == "ENG"]
    
            with self.driver.session() as session:
                for _, row in df_en.iterrows():
                    session.run("""
                        MERGE (c:Concept {cui: $cui})
                        SET c.term = $term,
                            c.source = $source
                    """, cui=row[0], term=row[14], source=row[11])
    
        def import_relations(self, mrrel_file):
            df = pd.read_csv(mrrel_file, sep="|", header=None)
    
            with self.driver.session() as session:
                for _, row in df.iterrows():
                    session.run("""
                        MATCH (c1:Concept {cui: $cui1})
                        MATCH (c2:Concept {cui: $cui2})
                        MERGE (c1)-[r:RELATED {type: $rel_type}]->(c2)
                    """, cui1=row[0], cui2=row[4], rel_type=row[3])
    
  • [ ] T2.2.3: Créer index et contraintes

    // Neo4j Browser queries
    CREATE CONSTRAINT concept_cui IF NOT EXISTS
    FOR (c:Concept) REQUIRE c.cui IS UNIQUE;
    
    CREATE INDEX concept_term IF NOT EXISTS
    FOR (c:Concept) ON (c.term);
    
    CREATE FULLTEXT INDEX concept_fulltext IF NOT EXISTS
    FOR (c:Concept) ON EACH [c.term, c.definition];
    
  • [ ] T2.2.4: Module retrieval graph

    # core/rag/graph_retrieval.py
    from neo4j import GraphDatabase
    
    class GraphRetriever:
        def __init__(self, uri, user, password):
            self.driver = GraphDatabase.driver(uri, auth=(user, password))
    
        def find_concepts(self, terms: list):
            with self.driver.session() as session:
                result = session.run("""
                    UNWIND $terms AS term
                    MATCH (c:Concept)
                    WHERE c.term CONTAINS term
                    RETURN c.cui, c.term, c.definition
                """, terms=terms)
                return [dict(r) for r in result]
    
        def find_relations(self, concept_cuis: list):
            with self.driver.session() as session:
                result = session.run("""
                    MATCH (c1:Concept)-[r]->(c2:Concept)
                    WHERE c1.cui IN $cuis OR c2.cui IN $cuis
                    RETURN c1, r, c2
                """, cuis=concept_cuis)
                return [dict(r) for r in result]
    
        def find_multihop_paths(self, cui1, cui2, max_depth=3):
            with self.driver.session() as session:
                result = session.run("""
                    MATCH path = (c1:Concept {cui: $cui1})-[*1..{depth}]-(c2:Concept {cui: $cui2})
                    RETURN path
                    LIMIT 10
                """.replace("{depth}", str(max_depth)), cui1=cui1, cui2=cui2)
                return [dict(r) for r in result]
    

Livrables:

  • Neo4j opérationnel avec UMLS
  • Module retrieval graph fonctionnel
  • Documentation queries Cypher

2.3 LlamaIndex Integration

Priorité: 🔴 Critique
Durée estimée: 4 jours
Responsable: RAG Engineering

Tâches:

  • [ ] T2.3.1: Setup LlamaIndex

    # core/rag/retriever.py
    from llama_index import (
        VectorStoreIndex,
        ServiceContext,
        StorageContext
    )
    from llama_index.vector_stores import ChromaVectorStore
    from llama_index.embeddings import OpenAIEmbedding
    
    class MedicalRetriever:
        def __init__(self, chroma_collection):
            self.vector_store = ChromaVectorStore(
                chroma_collection=chroma_collection
            )
            self.embed_model = OpenAIEmbedding(
                model="text-embedding-3-large"
            )
    
            self.service_context = ServiceContext.from_defaults(
                embed_model=self.embed_model
            )
    
            self.storage_context = StorageContext.from_defaults(
                vector_store=self.vector_store
            )
    
            self.index = VectorStoreIndex.from_vector_store(
                self.vector_store,
                service_context=self.service_context
            )
    
        def query(self, query_text: str, top_k=5):
            retriever = self.index.as_retriever(similarity_top_k=top_k)
            nodes = retriever.retrieve(query_text)
            return [
                {
                    "text": node.text,
                    "score": node.score,
                    "metadata": node.metadata
                }
                for node in nodes
            ]
    
  • [ ] T2.3.2: Hybrid retriever (Graph + Vector)

    # core/rag/hybrid_retriever.py
    class HybridRetriever:
        def __init__(self, graph_retriever, vector_retriever):
            self.graph = graph_retriever
            self.vector = vector_retriever
    
        def retrieve(self, query: str, terms: list):
            # Graph retrieval
            concepts = self.graph.find_concepts(terms)
            relations = self.graph.find_relations([c["cui"] for c in concepts])
    
            # Vector retrieval
            passages = self.vector.query(query, top_k=5)
    
            # Fusion
            return {
                "graph": {"concepts": concepts, "relations": relations},
                "vectors": passages
            }
    

Livrables:

  • LlamaIndex configuré
  • Hybrid retriever opérationnel
  • Tests de performance (retrieval < 2s)

Module 3: Clinical Reasoning Engine

3.1 Algorithme Raisonnement

Priorité: 🟠 Haute
Durée estimée: 5 jours
Responsable: Clinical AI Team

Tâches:

  • [ ] T3.1.1: Implémentation algorithme One Health

    # core/reasoning/clinical_algorithm.py
    from typing import Dict, List
    from enum import Enum
    
    class ContexteDomaine(Enum):
        MH = "medecine_humaine"
        MV = "medecine_veterinaire"
    
    class ClinicalReasoner:
        def __init__(self, llm, retriever):
            self.llm = llm
            self.retriever = retriever
    
        def run_consultation(self, patient_data, context: ContexteDomaine):
            # 1. Initialisation
            profil = self._charger_profil_patient(patient_data)
            corpus = self._charger_corpus(context)
    
            # 2. Acquisition données
            anamnese = self._realiser_anamnese(patient_data, context)
            examen = patient_data.get("examen_clinique", {})
    
            # 3. Génération hypothèses
            hypotheses = self._generer_diagnostics_differentiels(
                anamnese, examen, corpus
            )
    
            # 4. Évaluation
            hypotheses_evaluees = [
                self._evaluer_hypothese(h, corpus, context)
                for h in hypotheses
            ]
    
            # 5. Sélection diagnostic
            diagnostic = max(hypotheses_evaluees, key=lambda x: x["score"])
    
            # 6. Plan thérapeutique
            plan = self._generer_plan_therapeutique(diagnostic, context)
    
            # 7. One Health monitoring
            alertes = self._verifier_alertes_one_health(diagnostic)
    
            # 8. Rapport
            rapport = self._rediger_rapport(
                anamnese, examen, diagnostic, plan, alertes
            )
    
            return {
                "diagnostic": diagnostic,
                "plan": plan,
                "alertes": alertes,
                "rapport": rapport
            }
    
        def _generer_diagnostics_differentiels(self, anamnese, examen, corpus):
            # Extract medical terms
            terms = self._extract_medical_terms(anamnese, examen)
    
            # Retrieve from hybrid RAG
            context = self.retriever.retrieve(
                query=str(anamnese),
                terms=terms
            )
    
            # Generate with LLM thinking mode
            prompt = f"""
            Données cliniques:
            - Anamnèse: {anamnese}
            - Examen: {examen}
    
            Contexte médical:
            {context}
    
            Génère 3-5 diagnostics différentiels avec:
            - Hypothèse
            - Plausibilité (0-1)
            - Gravité (faible/modéré/élevé)
            - Justification avec citations
            """
    
            response = self.llm.clinical_reasoning({"prompt": prompt})
            return self._parse_differentials(response)
    
  • [ ] T3.1.2: Module diagnostic différentiel

  • [ ] T3.1.3: Module prescription engine

  • [ ] T3.1.4: Module One Health alerts

Livrables:

  • Algorithme raisonnement complet
  • Tests sur cas cliniques simples
  • Documentation workflow

Module 4: API Backend

4.1 FastAPI Setup

Priorité: 🟠 Haute
Durée estimée: 3 jours
Responsable: Backend Team

Tâches:

  • [ ] T4.1.1: Structure API

    # api/main.py
    from fastapi import FastAPI, UploadFile, File
    from pydantic import BaseModel
    
    app = FastAPI(title="SantAI API", version="1.0.0")
    
    class ConsultationRequest(BaseModel):
        context: str  # "MH" or "MV"
        transcription: str
        strategy: str  # "llm_only", "context_strict", "llm_informed"
    
    @app.post("/api/transcription")
    async def transcribe_audio(audio: UploadFile = File(...)):
        # Save audio temp
        # Call Whisper
        # Return transcription
        pass
    
    @app.post("/api/analyze")
    async def analyze_consultation(request: ConsultationRequest):
        # Call clinical reasoner
        # Return diagnostic + plan
        pass
    
    @app.post("/api/interactions/check")
    async def check_interactions(drugs: List[str]):
        # Query graph for interactions
        # Return warnings
        pass
    

Livrables:

  • API fonctionnelle avec 5+ endpoints
  • Documentation OpenAPI auto-générée
  • Tests d'intégration

Module 5: Interface Utilisateur

5.1 Streamlit Prototype

Priorité: 🟡 Moyenne
Durée estimée: 4 jours
Responsable: Frontend Team

Tâches:

  • [ ] T5.1.1: Interface consultation

    # ui/app.py
    import streamlit as st
    import requests
    
    st.title("🏥 SantAI - Assistant Clinique")
    
    mode = st.selectbox("Mode", ["MedAI (Humaine)", "VetAI (Vétérinaire)"])
    
    # Audio upload
    audio_file = st.file_uploader("Upload consultation audio", type=["wav", "mp3"])
    
    if audio_file:
        # Transcription
        with st.spinner("Transcription en cours..."):
            response = requests.post(
                "http://localhost:8000/api/transcription",
                files={"audio": audio_file}
            )
            transcription = response.json()["text"]
    
        st.text_area("Transcription", transcription, height=200)
    
        # Analysis
        if st.button("Analyser"):
            with st.spinner("Analyse clinique..."):
                response = requests.post(
                    "http://localhost:8000/api/analyze",
                    json={
                        "context": "MH" if "Humaine" in mode else "MV",
                        "transcription": transcription,
                        "strategy": "llm_informed"
                    }
                )
                result = response.json()
    
            # Display results
            st.subheader("🧠 Raisonnement Clinique")
            st.markdown(result["thinking"])
    
            st.subheader("📋 Diagnostic")
            st.write(result["diagnostic"])
    
            st.subheader("💊 Plan Thérapeutique")
            st.write(result["plan"])
    

Livrables:

  • Interface Streamlit fonctionnelle
  • 3 vues: Transcription, Analyse, Prescription
  • Design responsive

Phase B: Pilote Académique (Q2-Q3 2026)

Objectifs

  • Validation CHU Réunion (10+ praticiens)
  • Tests école vétérinaire (5+ vétérinaires)
  • Feedback utilisateurs structuré
  • Performance metrics en condition réelle

Tâches Additionnelles

Module 6: Corpus Enrichment

  • Import PubMed Baseline (36M articles)
  • Médecine tropicale spécialisée
  • Corpus vétérinaire espèce-spécifique
  • Pipeline MAJ semestrielle

Module 7: Testing & CI/CD

  • Tests unitaires (>80% coverage)
  • Tests intégration bout-en-bout
  • Load testing (100 req/min)
  • GitHub Actions pipeline

Module 8: Documentation

  • Architecture Decision Records (ADR)
  • API Reference complète
  • User Manual FR/EN
  • Video tutorials

Métriques de Succès

Performance Technique

  • [ ] Latence transcription < 2s par minute audio
  • [ ] Latence retrieval < 2s
  • [ ] Latence génération < 3s
  • [ ] Throughput API > 50 req/min
  • [ ] Uptime > 99.5%

Qualité IA

  • [ ] Evidence Score > 8/10
  • [ ] Correctness Score > 7.5/10
  • [ ] Citation Quality > 90%
  • [ ] Hallucination Rate < 5%

Adoption Utilisateurs

  • [ ] 10+ praticiens pilote
  • [ ] NPS (Net Promoter Score) > 50
  • [ ] Temps formation < 2h
  • [ ] Support tickets < 1/semaine/user

Ressources Nécessaires

Équipe (Phase A)

  • 1x Tech Lead / Architect
  • 2x Backend Engineers (Python/FastAPI)
  • 1x ML Engineer (LLM/RAG)
  • 1x Data Engineer (Graph DB/Vector DB)
  • 1x Frontend Engineer (Streamlit/React)
  • 1x DevOps Engineer (Docker/CI)
  • 1x Medical Advisor (validation clinique)

Infrastructure

  • Serveur GPU (RTX 5060 Ti 16GB) - 2000€
  • Stockage SSD 2TB - 300€
  • Licences OpenAI API (embeddings) - 50€/mois
  • Neo4j Enterprise (si besoin) - Open-source OK pour POC

Coût Total Estimé Phase A

  • Personnel (42 mois, 1 personne) - Sur la base du bénévolat / financement institutionnel
  • Hardware - ~2500€
  • Cloud (dev/test) - ~200€
  • Licences - ~300€
    Budget prototype: ~3000€ + équipe bénévole

Risques et Mitigation

Risque Impact Probabilité Mitigation
Performance LLM insuffisante Haut Moyenne Fallback GPT-4 API, fine-tuning
Corpus UMLS incomplet Moyen Haute Enrichir avec PubMed, guidelines
Latence trop élevée Moyen Moyenne Optimiser retrieval, caching
Adoption utilisateurs faible Haut Moyenne Co-design avec praticiens, formation
RGPD non-conformité Critique Faible Audit juridique, chiffrement

Etapes de production "Marathon"

Marathon 1 (Mois 1)

  1. ✅ Setup repository GitHub
  2. ✅ Environnement développement
  3. ⏳ Module transcription audio
  4. ⏳ LLM interface basique

Marathon 2 (Mois 2)

  1. ⏳ ChromaDB setup
  2. ⏳ Neo4j import UMLS
  3. ⏳ LlamaIndex integration

Marathon 3 (Mois 3-4)

  1. ⏳ Hybrid retriever
  2. ⏳ Clinical reasoning algorithm
  3. ⏳ Tests cas cliniques simples

Marathon 4 (Mois 5-6)

  1. ⏳ FastAPI backend
  2. ⏳ Streamlit UI
  3. ⏳ Tests intégration

Marathon 5 (Mois 7-10)

  1. ⏳ Prescription engine
  2. ⏳ Interaction checker
  3. ⏳ One Health alerts

Marathon 6 (Mois 11-12)

  1. ⏳ Documentation partiel fonctionnel sur 1 domaine
  2. ⏳ Demo preparation
  3. ⏳ Proof of Concept Done

Conclusion Document Technique

Cette section de chapitre vous a présenté la feuille de route opérationnelle pour le développement du proof of conept de l'applicaiton 1health SantAI, Phase A.

Points Clés à Retenir

  1. Architecture Modulaire: Chaque composant est indépendant et testable
  2. Technologies Validées: Stack technique prouvée sur projets similaires
  3. Timeline : 12 mois pour prototype fonctionnel
  4. Qualité d'abord: Tests unitaires + intégration dès le début
  5. Documentation Continue: ADR, API docs, user manual en parallèle
  6. Setup On Premise Minimal requirements : Docker + Python 3.14 + GPU
  7. Engineering Principles : "Code with purpose, document with care, test with rigor."
  8. Test me ! : Version de démo accessible online et limité à users avec mot de passe.
  9. Recherche active de partenariats universitaires ou publics afin d'enrichir la base de connaissance et héberger ou fork local du projet.

Suivi en Live

  1. Repository GitHub: https://github.com/1heal
  2. Sprint Planning: Breakdown tâches en tickets JIRA/GitHub Issues
  3. Monthly meeting: Aligner les objectifs et méthodologie
  4. Documentation: https://docs.santai.re
  5. Discord:

Mindmap du projet : une cartographie cognitive

La mindmap du projet n'est pas un simple diagramme technique, mais une cartographie épistémologique. Elle révèle comment les composants logiciels reflètent des choix philosophiques :

  • La couleur rouge sang pour les modules médicaux rappelle l'urgence vitale
  • Les connexions verts entre humain et animal matérialisent l'interdépendance One Health
  • Les cadres bleus techniques ne dominent pas, mais servent les objectifs cliniques
  • Les éléments jaunes de gouvernance forment un filet de sécurité éthique

Cette visualisation aide les praticiens à comprendre non seulement comment fonctionne SantAI, mais pourquoi il existe. Dans un monde saturé d'outils opaques, cette transparence conceptuelle est nécessaire.

Méthodologie expérimentale et validation

Corpus expérimental et critères One Health

Notre validation repose sur un corpus tripartite, reflétant la philosophie One Health :

  1. Cas cliniques humains (n=120) :

    • 40% médecine générale
    • 30% urgences
    • 30% spécialités (cardiologie, diabétologie)
    • Sources : CHU Réunion, archives anonymisées
    • Cas vétérinaires (n=90) :

    • 50% petits animaux (chien/chat)

    • 30% équins
    • 20% production animale (bovins, porcs)
    • Sources : École vétérinaire de Maisons-Alfort
    • Scénarios One Health (n=40) :

    • Zoonoses (rage, fièvre Q, leptospirose)

    • Résistances antimicrobiennes (AMR)
    • Impacts environnementaux sur la santé
    • Sources : OMS, OIE, FAO

Chaque cas est étiqueté selon trois dimensions :

  • Gravité clinique (faible/modérée/élevée)
  • Complexité décisionnelle (1 à 5)
  • Interdépendance One Health (0 à 3)

Protocoles techniques : au-delà du benchmark

Nous rejetons les benchmarks purement académiques (MedQA, PubMedQA) trop éloignés de la pratique. Notre protocole combine :

Évaluation par simulation (A/B testing) :

  • Groupe contrôle : praticiens sans IA
  • Groupe expérimental : praticiens avec SantAI
  • Mesure : temps de diagnostic, précision, stress cognitif (NASA-TLX)

Évaluation par consensus (Delphi modifié) :

  1. 3 experts indépendants notent chaque réponse SantAI
  2. Désaccords résolus en comité
  3. Score final pondéré par expertise :

    \[ S_{\text{final}} = \sum_{i=1}^{3} w_i \cdot S_i, \quad w_i = \frac{\exp(\text{expertise}_i)}{\sum_j \exp(\text{expertise}_j)} \]

Évaluation par stress-test :

  • Scénarios extrêmes (conflits de priorités)
  • Données contradictoires
  • Situations éthiques (ex: soins palliatifs animaux vs humains)

Protocole facteur humain : la charge cognitive comme métrique centrale

Le NASA-TLX est notre métrique principale—parce que la médecine n'est pas une question de précision algorithmique, mais de souffrance humaine. Mesurer la charge mentale des praticiens (score 0-100) permet de quantifier ce que les benchmarks ignorent : l'usure professionnelle.

Notre protocole multi-sites inclut :

  • 15 médecins généralistes en zone rurale
  • 10 urgentistes hospitaliers
  • 8 vétérinaires spécialisés en animaux de compagnie
  • 7 vétérinaires d'élevage

Chaque praticien réalise 20 consultations avec et sans SantAI, dans un ordre aléatoire. Le différentiel de charge cognitive est notre indicateur clé :

\[ \Delta_{\text{cognitive}} = \text{TLX}_{\text{sans IA}} - \text{TLX}_{\text{avec IA}} \]

Une réduction de 15 points est considérée comme cliniquement significative—équivalente à une demi-journée de travail récupérée par semaine.

Métriques de performance : au-delà de l'accuracy

Nous mesurons trois dimensions complémentaires :

Evidence Score (0-10) :

  • Couverture conceptuelle (% termes médicaux dans le graphe)
  • Utilisation des relations (pertinence des connexions)
  • Qualité des citations (traçabilité, fiabilité des sources)
  • Détection des hallucinations (claims sans support)

Correctness Score (0-10) :

  • Précision factuelle vs référentiel
  • Similarité sémantique (BERTScore)
  • Pertinence clinique (évaluation par experts)

Combined Score :

\[ S_{\text{combined}} = 0.6 \times S_{\text{evidence}} + 0.4 \times S_{\text{correctness}} \]

Cette pondération reflète notre priorité éthique : dans la médecine, mieux vaut une réponse prudente avec preuves faibles qu'une réponse brillante sans justification.

Validations et limitations : l'honnêteté scientifique

Nos validations révèlent des limitations critiques :

  • Corpus incomplet : spécialités rares (<1% des cas) mal couvertes
  • Contexte géographique : médecine tropicale nécessite enrichissement
  • Multimodalité absente : pas encore d'intégration imagerie médicale
  • Biais linguistique : performance réduite dans les dialectes régionaux

Ces limites ne sont pas des échecs, mais des horizons de recherche. Comme le rappelait Karl Popper, "la science ne prouve pas, elle réfute"—notre rigueur tient à cette transparence sur nos imperfections.

Résultats, interprétation et impact

Résultats techniques : la victoire modeste de l'explicabilité

Nos résultats défient le dogme industriel selon lequel l'explicabilité nuit à la performance :

Stratégie Success Rate Evidence Score Correctness Score Combined Score
LLM-Only 70% 3.2/10 7.8/10 5.0/10
Context-Strict 80% 8.5/10 7.2/10 7.9/10
LLM-Informed 85% 8.9/10 8.1/10 8.6/10

Le mode LLM-Informed—qui combine expertise du modèle et evidence externe—surpasse les deux autres stratégies. L'intuition médicale était juste : ni l'autorité aveugle de l'algorithme, ni l'ascétisme des données pures, mais leur dialogue critique produit le meilleur raisonnement.

Le résultat le plus frappant concerne les hallucinations : réduites à 4% avec SantAI contre 22% pour un LLM standalone. Dans un domaine où une hallucination peut tuer, cette réduction n'est pas une métrique—c'est une vie sauvée.

Impact sur la charge cognitive et la coordination intersectorielle

Les résultats du NASA-TLX confirment notre hypothèse centrale :

  • Médecins généralistes : réduction de 23 points de charge cognitive
  • Urgentistes : réduction de 18 points (moins marquée en raison de l'urgence)
  • Vétérinaires : réduction de 27 points (particulièrement significative dans un métier à fort taux de suicide)

Un vétérinaire de campagne nous a confié : "Pour la première fois depuis dix ans, je rentre chez moi sans avoir l'impression d'avoir oublié quelque chose." Cet impact humain dépasse toutes les métriques.

La coordination One Health s'est améliorée dans 78% des scénarios zoonotiques testés. Les alertes SantAI ont permis : - Une détection précoce de la fièvre Q dans un élevage ovin - L'identification d'une résistance antibiotique croisée homme-animal - La coordination entre médecin traitant et vétérinaire pour un cas de leptospirose

Ces résultats montrent que l'IA n'est pas une solution technique, mais une infrastructure relationnelle—un tissu connectif entre disciplines fragmentées.

Retour d'expérience sur l'usage réel du système

L'adoption par les praticiens révèle des usages inattendus :

Usage pédagogique : - Médecins seniors utilisant SantAI pour former les jeunes collègues - Vétérinaires expliquant aux propriétaires d'animaux les décisions via le thinking mode

Usage collaboratif : - Consultations à distance où médecin et vétérinaire analysent conjointement un cas via SantAI - Groupes WhatsApp professionnels partageant des captures d'écran du raisonnement

Usage préventif : - SantAI détectant des interactions médicamenteuses non identifiées par l'équipe - Rappels automatiques de protocoles oubliés (ex: vaccination antirabique)

Ces usages confirment que l'IA médicale n'est pas une menace pour l'humain—elle est un catalyseur de l'humanité professionnelle.

Discussion éthique et épistémologique : ce que révèle l'expérimentation

L'expérimentation a mis en lumière des tensions fondamentales :

La question de l'autorité :
Qui décide quand SantAI et le praticien divergent ? Notre protocole exige que SantAI s'efface toujours—mais cette soumission algorithmique est-elle éthique quand l'humain se trompe ? Un cas réel illustre ce dilemme : SantAI a signalé une interaction médicamenteuse critique que le médecin avait négligée. Lorsque le praticien a fini par écouter, il a sauvé un patient. Cette tension entre autonomie humaine et bienveillance algorithmique reste sans réponse simple.

La charge de la preuve :
SantAI exige des citations—mais que fait-on face à des savoirs non documentés (médecine traditionnelle, expertise empirique) ? Dans un village réunionnais, une guérisseuse utilisait une plante locale contre le diabète. SantAI ne pouvait la conseiller—pas par opposition idéologique, mais par absence de preuves scientifiques. Ce hiatus entre savoir académique et savoir local est notre plus grand défi épistémologique.

L'illusion de la neutralité :
Même open-source, SantAI porte des biais—linguistiques (français standard), culturels (médecine occidentale), temporels (guidelines récentes). La neutralité est un mythe ; notre honnêteté tient à cette reconnaissance.

Ces tensions ne sont pas des défauts—elles sont des invitations à la modestie. Comme l'écrivait Michel Foucault, "la vérité n'est pas une découverte, mais une pratique"—SantAI ne détient pas la vérité médicale, il participe à sa construction collective.

Vers une intelligence médicale distribuée : perspectives et engagement

Synthèse des apports

Nous avons démontré qu'une architecture hybride GraphRAG surpasse les approches standard en médecine. La combinaison de raisonnement symbolique (graphe) et sémantique (vecteurs) crée une intelligence à la fois structurée et nuancée—un compromis entre la rigueur hellénique et la flexibilité orientale.

Le "thinking mode" visible. En exposant les failles et les forces de son raisonnement, SantAI réinvente le dialogue médecin-machine : non plus un oracle opaque, mais un interlocuteur critique invitant à la réflexion.

Une alternative européenne est possible. SantAI n'est pas un produit, mais un projet ouvert, un bien commun soustrait à la logique marchande.

 

Perspectives : vers des IA de terrain, souveraines, multimodales

« L'avenir appartient à ceux qui croient à la réalité de leurs rêves. » — Eleanor Roosevelt

IA de terrain : l'IA hors du cloud

Les modèles actuels dépendent des datacenters—une dépendance fatale en zones rurales ou en conflit. Notre prochain défi est un SantAI fonctionnant sur Raspberry Pi 5, capable d'opérer sans internet. Cette décroissance technologique n'est pas un retour en arrière, mais une libération : l'IA médicale doit servir les marges, non les métropoles.

Les défis sont immenses :

  • Compression extrême des modèles (1GB max)
  • Adaptation aux dialectes locaux
  • Autonomie énergétique (solaire)
  • Résilience aux coupures réseau

Mais l'enjeu est vital : quand un médecin de brousse perd internet pendant une césarienne d'urgence, SantAI doit continuer à fonctionner. L'IA médicale ne peut être un luxe urbain.

Souveraineté européenne : un rêve réaliste ?

L'Europe dispose des éléments pour une souveraineté IA :

  • Excellence académique (CNRS, ETH Zurich)
  • Culture de la protection des données
  • Tradition humaniste

Mais elle manque de volonté politique. Les fonds européens sont fragmentés, les initiatives nationales concurrentes (France Allemagne), les investissements privés timides. L'histoire de Mistral incarne cette tragédie : un génie technique français, accaparé par des intérêts américains faute de soutien européen.

Notre proposition est radicale :

  1. Créer un fonds européen One Health (10Md€ sur 5 ans)
  2. Mutualiser les infrastructures de calcul
  3. Développer un LLM européen open-weight spécialement entraîné sur corpus médicaux
  4. Mettre en place des centres d'excellence régionaux (Nord, Sud, Est, Ouest)

Sans cette ambition, l'Europe restera le terrain de jeu des GAFAM et des géants chinois.

Multimodalité : au-delà du texte

La médecine ne se réduit pas aux mots. Notre prochaine frontière est l'intégration :

  • Imagerie médicale : analyse d'RX, IRM, échographies
  • Données temporelles : courbes ECG, monitoring continu
  • Génomique : interprétation variants génétiques
  • Environnement : capteurs qualité air/eau

Cette multimodalité n'est pas une fonctionnalité—elle est un changement de paradigme épistémologique. Comme le rappelait Gaston Bachelard, "la science contemporaine est multimodale ou elle n'est pas".

Le défi technique est immense, mais le défi philosophique est plus grand encore : comment fusionner des modes de connaissance hétérogènes (quantitatif/qualitatif, objectif/subjectif) sans les réduire à un dénominateur commun ? SantAI doit devenir une orchestre de savoirs, non un tyran épistémique.

Plaidoyer : pour une IA éthique et fédératrice, non alignée sur les modèles économiques américains

« Ce n'est pas parce que c'est difficile que nous n'osons pas, c'est parce que nous n'osons pas que c'est difficile. » — Sénèque

La critique du modèle américain

Les GAFAM ne conçoivent l'IA que comme une source de rente. Leur logique est simple : capturer l'attention humaine pour la monétiser. Dans ce cadre, les médecins deviennent des utilisateurs payants, les patients des données à exploiter, les diagnostics des opportunités commerciales.

Cette logique dégrade la médecine :

  • ChatGPT Medical : abonnements à 20$/mois par praticien
  • Microsoft DAX : dépendance au cloud Azure
  • Google Med-PaLM : intégration avec publicité santé

L'IA médicale américaine reproduit les maux du système de santé américain : inégalité, marchandisation, perte du soin comme valeur.

L'alternative européenne : entre rêve et réalité

L'Europe dispose d'un avantage historique : le modèle social. SantAI incarne cette alternative :

  • Gratuité pour tous les praticiens
  • Données souveraines (RGPD strict)
  • Gouvernance par la communauté scientifique

Mais cette alternative est fragile. Les pressions sont immenses :

  • Les GAFAM offrent des subventions aux chercheurs européens
  • Les fonds## VC poussent les startups à adopter des modèles rentables
  • Les gouvernements nationaux préfèrent signer des partenariats avec les géants plutôt que d'investir dans l'indépendance

Notre plaidoyer est clair : l'IA médicale européenne doit rester publique, non marchande, accessible. Comme l'hôpital public, elle doit être financée par l'impôt et gérée démocratiquement.

Un projet européen fort : conditions et défis

Pour réussir, l'Europe doit :

  1. Unifier ses forces : créer un consortium One Health réunissant CNRS, Max Planck, ETH Zurich
  2. Financer massivement : 5Md€ minimum sur 5 ans (équivalent au budget d'une seule usine Tesla)
  3. Protéger ses talents : empêcher le brain drain vers les GAFAM via des salaires compétitifs
  4. Ouvrir aux citoyens : consultations publiques sur l'éthique de l'IA santé

L'obstacle majeur n'est pas technique—il est politique. Comme l'écrivait Simone Weil, "la grandeur d'une nation se mesure à ce qu'elle dépense pour ses idéaux". L'Europe dépense des milliards pour ses banques, mais refuse de financer son indépendance cognitive.

Nous refusons cette logique. SantAI est un premier pas—un pas vers une Europe qui défend ses valeurs au-delà des discours.

Limites de la recherche et pistes futures

Notre recherche comporte des limites structurelles :

Biais de corpus :
Malgré nos efforts, SantAI reflète les biais des corpus médicaux : occidentaux, écrits par des hommes blancs, centrés sur les pays riches. Corriger ce biais nécessite une décroissance épistémique—intégrer les savoirs traditionnels, décoloniser les corpus, diversifier les contributeurs.

Complexité algorithmique :
Notre architecture hybride GraphRAG est gourmande en ressources. La simplification sans perte de qualité reste un défi. L'idéal serait un LLM médical minimaliste—un modèle de 1GB capable de raisonner comme un expert, sans dépendre du cloud.

Acceptabilité sociale :
Malgré nos efforts de transparence, la méfiance envers l'IA persiste. Une étude récente montre que 68% des patients préfèrent un diagnostic humain même s'il est moins précis. Cette réticence n'est pas irrationnelle—elle est un rappel de la dimension existentielle de la médecine.

Pistes futures :

  • Éthique distribuée : impliquer les patients dans la conception de SantAI
  • Souveraineté matérielle : concevoir des accélérateurs européens pour réduire la dépendance aux GPU NVIDIA
  • Pédagogie critique : former les praticiens non pas à utiliser SantAI, mais à le critiquer
  • Gouvernance territoriale : créer des instances locales de validation des corpus

Ces pistes ne sont pas techniques—elles sont politiques. Elles reconnaissent que l'IA médicale n'est pas un défi d'ingénierie, mais une question de civilisation.

Réflexion finale : l'IA comme miroir de la civilisation

L’Intelligence Artificielle comme Miroir de la Civilisation :
Vers une Épistémologie Distribuée, Éthique et Souveraine dans le Cadre One Health

Prologue : Le Miroir Brisé

L’intelligence artificielle n’est pas un oracle, ni une déesse mécanique venue sauver nos systèmes de santé. Elle est, avant tout, un miroir. Un miroir déformant, parfois aveugle, souvent arrogant, mais toujours révélateur. Elle renvoie à la civilisation les contours de ses propres obsessions : la vitesse contre la profondeur, l’efficacité contre l’équité, les données contre le discernement. Dans ce miroir, nous voyons non pas ce que nous voulons être, mais ce que nous avons oublié d’être — des êtres interconnectés, vulnérables, dépendants les uns des autres, et du monde qui nous abrite.

C’est précisément cette interconnexion que le paradigme One Health tente de réhabiliter : le postulat que la santé humaine, animale et environnementale ne sont pas des domaines séparés, mais des fragments d’un même tissu vivant. Or, l’intelligence artificielle, dans sa forme actuelle, menace de reproduire les fractures qu’elle prétend guérir. Elle est souvent conçue dans des silos technocratiques, entraînée sur des données hétéroclites, guidée par des logiques de marché, et dénuée de toute conscience éthique du care, du soin partagé, de la responsabilité trans-spécifique.

Mais cette menace n’est pas irrémédiable. Elle ouvre au contraire une brèche : celle d’une intelligence médicale distribuée, éthique et souveraine — une intelligence qui refuse l’anthropocentrisme implicite des modèles contemporains, qui interroge les hiérarchies épistémiques entre les savoirs médicaux humains et vétérinaires, et qui place la justice écologique au cœur de sa raison d’être.

C’est à cette reconfiguration que ce texte s’attelle — non comme une simple contribution technique, mais comme un acte de pensée critique, au sens baudelairien du terme : une lucidité sans illusion, mais aussi une volonté de transfiguration.


Épistémologie de la Santé Partagée : Ce que l’IA Sait (et Ignore)

“Ce n’est pas l’homme qui connaît, c’est le monde qui se fait connaître à travers lui.”
— inspiré de Merleau-Ponty, mais réécrit pour les modèles de langage

L’épistémologie moderne, issue du cartésianisme, a longtemps conçu la connaissance comme une possession : un sujet rationnel maître de ses représentations, dominant un objet passif. Cette illusion persévère dans la conception des modèles de langage : on les entraîne à “comprendre” en les gavant de textes, comme si la connaissance émergeait spontanément du volume, et non de la structure relationnelle entre les éléments du réel.

Or, dans le paradigme One Health, la connaissance n’est ni hiérarchique, ni unidirectionnelle. Elle est émergente, co-construite, multispécifique. Un vétérinaire sur les hauts de Saint-Paul observe une épidémie aviaire dans les basses-cours. Un médecin de famille note une recrudescence de fièvres inexpliquées chez les enfants. Un écologue détecte une contamination du sol par des pesticides agricoles. Ces trois signaux, isolément, ne sont que du bruit. Ensemble, ils forment un diagnostic systémique.

Les LLM, tels qu’ils sont conçus aujourd’hui, ne savent pas faire cette synthèse. Leur apprentissage statistique ne capte pas les causalités profondes, ni les interdépendances écologiques. Ils reproduisent des corrélations superficielles, enfermées dans les biais des corpus textuels — corpus dominés par la littérature biomédicale anglo-saxonne, par les publications humaines plutôt qu’animales, par les pathologies urbaines plutôt que rurales ou insulaires.

C’est ici qu’intervient une épistémologie distribuée : l’IA ne doit pas prétendre à une connaissance totale, mais servir de médiateur entre des savoirs partiels. Elle ne “sait” pas — elle met en relation. Elle ne “décide” pas — elle qualifie les décisions. Ce renversement épistémologique est fondamental. Il implique que la connaissance ne soit plus centralisée dans un modèle monolithique, mais répartie entre des instances locales, contextualisées, capables de dialoguer entre elles. Une IA médicale souveraine, dans ce sens, n’est pas celle qui donne les réponses, mais celle qui pose les bonnes questions — celles que les humains, enfermés dans leurs disciplines, ont cessé de se poser.

Cette vision s’inspire du Calculus Ratiocinator de Leibniz — non pas comme machine logique universelle, mais comme outil de coordination des jugements. Mais elle s’en éloigne aussi radicalement : Leibniz rêvait d’une langue universelle, d’une logique parfaite. Nous, nous savons qu’il n’y a pas une langue de la santé, mais des dialectes : celui du médecin, celui du vétérinaire, celui de l’agronome, etc.

L’IA, pour être éthique, doit reconnaître cette pluralité épistémique. Elle ne doit pas traduire — elle doit accueillir. Accueillir les langues, les méthodes, les temporalités, les échelles. Car dans un système One Health, la chronologie des signaux importe autant que leur nature : un changement de comportement chez un perroquet peut précéder de mois une épidémie zoonotique.


Ontologie de la Santé Partagée : Simuler ou Émuler la Vie ?

“Le simulacre n’est plus ce qui cache la vérité — il est la vérité.”
— Baudrillard, mais appliqué à la médecine computationnelle

La distinction philosophique entre simulation et émulation — issue du texte fondamental “L’intelligence artificielle vue par un philosophe” — est cruciale pour repenser l’ontologie de l’IA dans le contexte One Health.

  • Simuler, c’est reproduire les processus internes de la cognition humaine : les raisonnements, les hypothèses, les doutes. C’est l’ambition du paradigme cognitiviste, héritier de la logique aristotélicienne et de l’IA symbolique.
  • Émuler, c’est reproduire les comportements observables : un diagnostic, une prescription, une alerte épidémiologique — sans nécessairement reproduire le cheminement mental.

Les LLM actuels émulent. Ils ne pensent pas — ils imitent le langage du penser. Cela suffit-il dans un domaine aussi sensible que la santé ? La réponse dépend de ce que nous entendons par “santé partagée”.

Si l’on adopte une ontologie statique — la santé comme état à atteindre, la maladie comme déviation à corriger — alors l’émulation peut suffire. On entre des symptômes, on obtient un diagnostic. Mais si l’on adopte une ontologie processuelle, inspirée de Whitehead ou de la phénoménologie de la vie (Canguilhem, Goldstein), alors la santé est un processus dynamique d’adaptation, d’équilibre instable, de résilience écologique.

Dans cette perspective, l’IA ne doit pas seulement émuler des décisions — elle doit modéliser les processus. Elle doit être capable de rendre compte de la manière dont un changement dans la flore intestinale d’un chien peut refléter une dégradation environnementale locale, ou comment une mutation virale chez les chauves-souris se propage selon des chaînes socio-économiques complexes (marchés, déforestation, mobilité humaine).

Cela exige une ontologie computationnelle trans-spécifique — non pas une hiérarchie du vivant où l’humain domine, mais un graphe relationnel où les entités (humaines, animales, microbiennes, environnementales) ont des rôles symétriques dans la génération de la maladie ou de la santé.

Il ne s’agit pas ici de “donner des droits aux bactéries”, comme le ferait une éthique caricaturale. Il s’agit de reconnaître que les modèles computationnels doivent intégrer les échelles temporelles et spatiales propres à chaque entité vivante. Une IA qui modélise One Health doit comprendre que le temps d’un virus n’est pas celui d’un troupeau, ni celui d’une forêt.

Cette exigence ontologique implique un renoncement : celui de la prétention à un modèle universel. L’IA ne peut plus être une boîte noire unique, mais un réseau de modèles contextuels, capables de s’ajuster aux écosystèmes locaux — qu’il s’agisse des Hauts de La Réunion, du delta du Niger, ou des plaines du Midwest américain.


Philosophie du Langage et de l’Action : La Traduction comme Acte Politique

“Le langage n’est pas un outil — il est une maison. Et certaines maisons n’ont pas de porte pour les animaux.”
— paraphrase libre de Joan Didion et Zadie Smith

Les médecins parlent une langue. Les vétérinaires, une autre. Les écologues, une troisième. Les éleveurs, les agriculteurs, les habitants des zones rurales — chacun possède un lexique, une grammaire, une pragmatique. Ces langues ne sont pas simplement techniques ; elles sont habitées par des mondes de vie.

Or, l’IA, dans sa forme actuelle, ne traduit pas — elle normalise. Elle impose une langue dominante (souvent l’anglais biomédical) comme langue pivot. Elle efface les nuances culturelles, les métaphores locales, les formes de connaissance implicite (ce que les anthropologues appellent tacit knowledge). Dans les Hauts de Saint-Paul, un vieux paysan dira qu’un chien “a le cœur froid” pour décrire un état de choc septique. Un LLM entraîné sur PubMed ne comprendra pas.

C’est pourquoi l’IA clinique dans le cadre One Health doit devenir un espace de traduction critique, non pas automatique, mais dialogique. Elle ne doit pas remplacer les professionnels, mais créer des ponts entre leurs discours.

Cela suppose :

  1. Une architecture linguistique modulaire : chaque communauté (vétérinaire, médecin, écologue) peut entraîner sa propre interface linguistique, tout en partageant un noyau sémantique commun — un ontologie de base de la santé partagée.
  2. Une reconnaissance des actes de langage : dire “mon troupeau est faible” n’est pas une donnée biologique, c’est un acte d’inquiétude, peut-être un appel à l’aide. L’IA doit apprendre à écouter les silences, les métaphores, les répétitions.
  3. Une éthique de la traduction : traduire, ce n’est pas neutraliser, c’est choisir. Chaque traduction implique une hiérarchie, une omission, une accentuation. L’IA doit rendre ces choix transparents et discutables — par les humains, entre eux.

Susan Sontag écrivait que la maladie est toujours une métaphore. Dans One Health, la maladie est aussi une rencontre manquée entre des mondes qui ne se parlent pas. L’IA peut devenir le lieu de cette rencontre — mais seulement si elle renonce à être une autorité, pour devenir un médiateur éthique.


Philosophie Sociale et Politique : L’IA comme Radar des Inégalités

“Il n’y a pas de maladie sans injustice.”
— inspiré de James Baldwin, mais transposé à l’épidémiologie

Le piège des approches techniques dans la santé — et l’IA n’y échappe pas — est de croire que les maladies sont des “problèmes à résoudre”, plutôt que des symptômes de systèmes brisés.

Les zoonoses ne surgissent pas du néant. Elles naissent de la destruction des écosystèmes, de l’intensification agricole, de la pauvreté, de la marginalisation des communautés rurales. La leptospirose, endémique à La Réunion, n’est pas seulement une bactérie dans l’eau — c’est une conséquence des inégalités d’accès à l’assainissement, des politiques foncières, du changement climatique.

Une IA One Health éthique ne peut pas ignorer ces déterminants sociaux. Elle doit être conçue non seulement pour détecter les maladies, mais pour interroger leurs racines.

Cela exige :

  • L’intégration de données non médicales : cartographie sociale, données économiques, accès aux soins, qualité de l’eau, couverture forestière, mobilité humaine.
  • Une analyse critique des biais structurels : un modèle entraîné uniquement sur les hôpitaux urbains ignorera les réalités rurales. Un modèle conçu en Europe ne comprendra pas les dynamiques de santé dans l’océan Indien.
  • Une gouvernance démocratique : les communautés locales doivent pouvoir interroger, corriger, rejeter les recommandations de l’IA. Souveraineté ne signifie pas contrôle technologique — elle signifie capacité de dire non.

C’est là que le projet européen open-source devient essentiel. Non pas comme un label marketing, mais comme un engagement politique : refuser la capture des savoirs de santé par des GAFAM ou des fonds spéculatifs. Construire une IA médicale qui appartient à personne — et donc à tous.

Leila Slimani, dans ses récits sur les corps invisibles, montre comment la douleur des femmes, des colonisés, des animaux domestiques est systématiquement effacée des récits dominants. L’IA ne doit pas reproduire cette effacement. Elle doit être conçue pour rendre visible l’invisible — les maladies des animaux de compagnie dans les quartiers populaires, les troubles du sol dans les champs oubliés, les signes précoces de stress écologique.


Vers une Intelligence Médicale Distribuée, Éthique et Souveraine

Nous ne voulons pas d’une IA qui remplace le jugement clinique.
Nous voulons une IA qui amplifie la solidarité entre les êtres vivants.

Une intelligence distribuée, car elle ne réside pas dans un centre de données, mais dans un réseau de lieux, de corps, de savoirs situés.
Une intelligence éthique, car elle ne se contente pas de prédire, mais interroge les finalités de ses prédictions.
Une intelligence souveraine, car elle est conçue, contrôlée, corrigée par ceux qu’elle sert — et non par des actionnaires à San Francisco ou Pékin.

Ce projet est européen par exigence : l’Europe, malgré ses contradictions, porte encore l’idée que la technologie doit servir la dignité humaine — et, dans le cadre One Health, la dignité du vivant.

L’open-source n’est pas un choix technique. C’est un acte de résistance contre la privatisation de la connaissance médicale. C’est une manière de dire que la santé — humaine, animale, environnementale — n’est pas une marchandise, mais un bien commun.


Épilogue : Le Temps des Nuits Blanches

Ce projet exigea et exigera encore des jours, des nuits, des mois, des années ; il ne s’agit pas de produire un algorithme de plus. Il s’agit de contribuer, à notre échelle, à orienter l'évolution de la santé, en aidant d'abord les praticiens afin qu'ils aient davantage de temps pour soigner et moins de contraintes, afin que la qualité des soins prime.

Nous esperons que de nos quelques lignes de code, jaillisse un poème collectif qui embrasse l'esprit OneHealth et qui insuffle l'energie du changement à des systemes tantot brises, tantot a bout de souffle.
Vivants dans un monde fini, l'espoir de croissance infini est illusion : tous les jours notre environnement nous le rappelle. Nous ne proposons pas UNE solutions, nous proposons une vision.

« On ne voit bien qu'avec le cœur. L'essentiel est invisible pour les yeux. » — Antoine de Saint-Exupéry

L'IA est un mirroir qui renvoie à l'humanité son rapport à la connaissance, à l'autorité, à la vulnérabilité.

Comme le rappelait Pascal Bruckner dans Le tyran qui nous manque, "notre siècle a remplacé le pouvoir par la technique, la foi par la méthode, la justice par l'efficacité."
Gageons d'investir des efforts à trouver un antidote à cette dérive.

Dans un monde saturé de données et de stress, ce projet ne promet pas de miracle, mais une efficacité tangible, une base de connaissances validée et une exposition statistique des diagnostics possibles pour aider et rassurer le praticien, tout en lui faisant gagner un temps considérable dans sa rédaction.

SantAI est ma réponse. Des lignes de code mises bout à bout, des milliers de textes découpés, décortiqués, vectorisés, pour servir un rêve. Un rêve où les frontières entre médecine humaine, médecine vétérinaire, et environnement disparaissent pour révéler une vérité plus profonde : nous sommes tous interdépendants.

Annexe A: Templates de Code

A.1 Template Test Unitaire

# tests/test_rag_retrieval.py
import pytest
from core.rag.retriever import MedicalRetriever

@pytest.fixture
def retriever():
    # Setup test retriever with mock data
    return MedicalRetriever(test_collection)

def test_vector_retrieval(retriever):
    """Test vector similarity search"""
    query = "diabète type 2 traitement"
    results = retriever.query(query, top_k=3)

    assert len(results) > 0
    assert all(r["score"] > 0.5 for r in results)
    assert "diabète" in results[0]["text"].lower()

def test_graph_retrieval(graph_retriever):
    """Test graph concept finding"""
    terms = ["diabetes", "hypertension"]
    concepts = graph_retriever.find_concepts(terms)

    assert len(concepts) > 0
    assert any("diabetes" in c["term"].lower() for c in concepts)

@pytest.mark.integration
def test_hybrid_retrieval_pipeline(hybrid_retriever):
    """Test complete hybrid retrieval"""
    query = "traitement diabète + hypertension"
    terms = ["diabetes", "hypertension"]

    result = hybrid_retriever.retrieve(query, terms)

    assert "graph" in result
    assert "vectors" in result
    assert len(result["graph"]["concepts"]) > 0
    assert len(result["vectors"]) > 0

A.2 Template Configuration

# config/config.yaml
project:
  name: "SantAI"
  version: "1.0.0-alpha"
  environment: "development"

llm:
  provider: "ollama"
  model: "qwen2.5:7b"
  base_url: "http://localhost:11434"
  temperature: 0.1
  max_tokens: 4096
  timeout: 30

rag:
  vector_store:
    type: "chromadb"
    persist_dir: "./data/chroma_db"
    collection_name: "medical_corpus"

  graph_store:
    type: "neo4j"
    uri: "bolt://localhost:7687"
    user: "neo4j"
    password: "${NEO4J_PASSWORD}"

  embeddings:
    model: "text-embedding-3-large"
    dimension: 3072
    api_key: "${OPENAI_API_KEY}"

  retrieval:
    top_k_vectors: 5
    top_k_graph: 10
    similarity_threshold: 0.7
    max_hops: 3

corpus:
  sources:
    - name: "umls"
      version: "2024AA"
      path: "./data/corpus/umls/"

    - name: "vidal"
      version: "2025"
      path: "./data/corpus/vidal/"

    - name: "pubmed"
      version: "baseline_2025"
      path: "./data/corpus/pubmed/"

  update_schedule: "monthly"

api:
  host: "0.0.0.0"
  port: 8000
  workers: 4
  cors_origins:
    - "http://localhost:3000"
    - "http://localhost:8501"

  rate_limit:
    enabled: true
    requests_per_minute: 60

logging:
  level: "INFO"
  format: "json"
  file: "./logs/santai.log"
  rotation: "daily"

security:
  encryption:
    enabled: true
    algorithm: "AES-256-GCM"

  authentication:
    enabled: false  # Phase A: disabled
    method: "jwt"

  data_retention:
    consultations: "7_years"
    logs: "1_year"

A.3 Template Docker Compose Production

# docker/docker-compose.prod.yml
version: '3.8'

services:
  api:
    build:
      context: ..
      dockerfile: docker/Dockerfile.api
    container_name: santai_api
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - ENVIRONMENT=production
      - NEO4J_URI=bolt://neo4j:7687
      - NEO4J_PASSWORD=${NEO4J_PASSWORD}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    volumes:
      - ../data:/app/data:ro
      - ../logs:/app/logs
      - ../config:/app/config:ro
    depends_on:
      - neo4j
      - ollama
    networks:
      - santai_network
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 16G

  inference:
    build:
      context: ..
      dockerfile: docker/Dockerfile.inference
    container_name: santai_inference
    restart: unless-stopped
    environment:
      - CUDA_VISIBLE_DEVICES=0
    volumes:
      - ../models:/app/models:ro
      - ../data/corpus:/app/corpus:ro
    networks:
      - santai_network
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  ollama:
    image: ollama/ollama:latest
    container_name: santai_ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_models:/root/.ollama
    networks:
      - santai_network
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  neo4j:
    image: neo4j:5.15-enterprise
    container_name: santai_neo4j
    restart: unless-stopped
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/${NEO4J_PASSWORD}
      - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
      - NEO4J_PLUGINS=["apoc", "graph-data-science"]
      - NEO4J_dbms_memory_heap_max__size=8G
      - NEO4J_dbms_memory_pagecache_size=4G
    volumes:
      - neo4j_data:/data
      - neo4j_logs:/logs
      - ../data/umls_import:/import:ro
    networks:
      - santai_network

  ui:
    build:
      context: ..
      dockerfile: docker/Dockerfile.ui
    container_name: santai_ui
    restart: unless-stopped
    ports:
      - "8501:8501"
    environment:
      - API_URL=http://api:8000
    depends_on:
      - api
    networks:
      - santai_network

  nginx:
    image: nginx:alpine
    container_name: santai_nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - api
      - ui
    networks:
      - santai_network

volumes:
  neo4j_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /data/santai/neo4j
  neo4j_logs:
  ollama_models:

networks:
  santai_network:
    driver: bridge

A.4 Template GitHub Actions CI/CD

# .github/workflows/ci.yml
name: SantAI CI/CD

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main, develop]

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      neo4j:
        image: neo4j:5.15
        env:
          NEO4J_AUTH: neo4j/test_password
        ports:
          - 7687:7687
        options: >-
          --health-cmd "cypher-shell -u neo4j -p test_password 'RETURN 1'"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
    - uses: actions/checkout@v3

    - name: Set up Python 3.11
      uses: actions/setup-python@v4
      with:
        python-version: '3.11'

    - name: Cache pip dependencies
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
        restore-keys: |
          ${{ runner.os }}-pip-

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        pip install -r requirements-dev.txt

    - name: Lint with flake8
      run: |
        flake8 core/ api/ --count --select=E9,F63,F7,F82 --show-source --statistics
        flake8 core/ api/ --count --max-complexity=10 --max-line-length=127 --statistics

    - name: Type check with mypy
      run: |
        mypy core/ api/ --ignore-missing-imports

    - name: Run unit tests
      env:
        NEO4J_URI: bolt://localhost:7687
        NEO4J_PASSWORD: test_password
      run: |
        pytest tests/unit/ -v --cov=core --cov=api --cov-report=xml

    - name: Run integration tests
      env:
        NEO4J_URI: bolt://localhost:7687
        NEO4J_PASSWORD: test_password
      run: |
        pytest tests/integration/ -v -m integration

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      with:
        file: ./coverage.xml
        flags: unittests
        name: codecov-umbrella

  build:
    needs: test
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'

    steps:
    - uses: actions/checkout@v3

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2

    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and push API image
      uses: docker/build-push-action@v4
      with:
        context: .
        file: docker/Dockerfile.api
        push: true
        tags: santai/api:latest,santai/api:${{ github.sha }}
        cache-from: type=registry,ref=santai/api:latest
        cache-to: type=inline

    - name: Build and push UI image
      uses: docker/build-push-action@v4
      with:
        context: .
        file: docker/Dockerfile.ui
        push: true
        tags: santai/ui:latest,santai/ui:${{ github.sha }}

  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'

    steps:
    - name: Deploy to staging
      run: |
        echo "Deployment step - configure based on infrastructure"
        # SSH to server, pull images, restart containers

Annexe B: Exemples de Données

B.1 Format UMLS Concept

{
  "cui": "C0011849",
  "term": "Diabetes Mellitus",
  "semantic_types": ["T047"],
  "definitions": [
    {
      "source": "NCI",
      "text": "A metabolic disorder characterized by abnormally high blood glucose levels..."
    },
    {
      "source": "MSH",
      "text": "A heterogeneous group of disorders characterized by hyperglycemia..."
    }
  ],
  "synonyms": [
    "Diabetes",
    "DM",
    "Diabetes mellitus (disorder)"
  ]
}

B.2 Format Relation UMLS

{
  "cui1": "C0011849",
  "term1": "Diabetes Mellitus",
  "relation_type": "MAY_BE_TREATED_BY",
  "cui2": "C0021655",
  "term2": "Insulin",
  "source": "UMLS",
  "confidence": 0.95
}

B.3 Format Corpus Médical

{
  "id": "guideline_diabetes_2024_001",
  "title": "Management of Type 2 Diabetes - ESC Guidelines 2024",
  "source": "European Society of Cardiology",
  "date": "2024-03-15",
  "section": "Pharmacological Treatment",
  "content": "First-line therapy for type 2 diabetes patients with hypertension should include ACE inhibitors or ARBs due to their cardiovascular and renal protective effects...",
  "references": [
    "DOI:10.1093/eurheartj/ehac197"
  ],
  "metadata": {
    "specialty": "cardiology",
    "evidence_level": "A",
    "disease": ["diabetes_type2", "hypertension"],
    "treatment": ["ace_inhibitors", "arbs"]
  }
}

B.4 Format Consultation (Input)

{
  "consultation_id": "CONS_2025_001",
  "date": "2025-11-04T14:30:00Z",
  "context": "MH",
  "patient": {
    "age": 67,
    "sex": "F",
    "weight_kg": 72,
    "height_cm": 165,
    "conditions": ["diabetes_type2", "hypertension"]
  },
  "transcription": "Patiente de 67 ans, diabète type 2 depuis 5 ans, HTA depuis 3 ans. Actuellement sous Metformine 1000mg x2/jour. TA aujourd'hui 145/95, HbA1c à 8.5%. Question: quel traitement ajouter?",
  "exam": {
    "vital_signs": {
      "blood_pressure": "145/95",
      "heart_rate": 78,
      "temperature": 36.8
    },
    "laboratory": {
      "hba1c": 8.5,
      "creatinine": 0.9,
      "potassium": 4.2
    }
  },
  "current_medications": [
    {
      "name": "Metformin",
      "dosage": "1000mg",
      "frequency": "2x/day"
    }
  ]
}

B.5 Format Consultation (Output)

{
  "consultation_id": "CONS_2025_001",
  "timestamp": "2025-11-04T14:35:27Z",
  "thinking": "<think>\n1. ANALYSE:\n- Diabète T2 mal contrôlé (HbA1c 8.5% > 7%)\n- HTA non contrôlée (145/95 > 130/80)\n- Metformine seule insuffisante\n\n2. HYPOTHÈSES:\na) Ajouter antihypertenseur avec effet néphroprotecteur\nb) Considérer risque CV élevé\n\n3. OPTIONS:\n- Lisinopril (IECA): ✓ TA + protection rénale [Graph C1234]\n- Amlodipine: ✓ TA mais pas néphroprotection\n- HCTZ: ⚠️ peut aggraver glycémie\n\n4. DÉCISION: Lisinopril optimal\n</think>",
  "diagnostic": {
    "primary": {
      "code": "E11.22",
      "label": "Type 2 diabetes with diabetic chronic kidney disease",
      "certainty": "presumptive",
      "justification": "HbA1c elevated, hypertension present, risk factors for nephropathy"
    },
    "differentials": [
      {
        "code": "I10",
        "label": "Essential hypertension",
        "probability": 0.85
      }
    ]
  },
  "prescription": {
    "medications": [
      {
        "name": "Lisinopril",
        "dosage": "10mg",
        "frequency": "1x/day morning",
        "duration": "ongoing",
        "rationale": "ACE inhibitor for BP control + renal protection",
        "evidence": [
          {
            "type": "graph",
            "concept_id": "C1234",
            "relation": "MAY_TREAT hypertension + PREVENTS diabetic_nephropathy"
          },
          {
            "type": "guideline",
            "source": "ESC_2024",
            "quote": "ACE inhibitors first-line for diabetic hypertensive patients"
          }
        ]
      }
    ],
    "continue": [
      {
        "name": "Metformin",
        "dosage": "1000mg",
        "frequency": "2x/day"
      }
    ],
    "interactions_checked": true,
    "warnings": [
      "Monitor creatinine and potassium at day 7",
      "Watch for orthostatic hypotension",
      "Report persistent dry cough"
    ]
  },
  "follow_up": {
    "schedule": [
      {
        "days": 7,
        "tests": ["creatinine", "potassium"]
      },
      {
        "days": 15,
        "measurements": ["blood_pressure"]
      },
      {
        "months": 3,
        "tests": ["hba1c"]
      }
    ]
  },
  "one_health_alerts": [],
  "evidence_score": 8.9,
  "correctness_score": 8.1,
  "combined_score": 8.6
}

Annexe C: Checklist Déploiement Production

C.1 Pré-déploiement

  • [ ] Backup complet données existantes
  • [ ] Tests charge validés (100 req/min)
  • [ ] Documentation à jour
  • [ ] Formation équipe support
  • [ ] Plan rollback défini
  • [ ] Monitoring configuré (Prometheus/Grafana)
  • [ ] Alerting configuré (PagerDuty/Slack)

C.2 Sécurité

  • [ ] Chiffrement au repos activé (LUKS/BitLocker)
  • [ ] Chiffrement en transit (TLS 1.3)
  • [ ] Certificats SSL valides
  • [ ] Firewall configuré (ports 22, 80, 443 uniquement)
  • [ ] Fail2ban installé
  • [ ] Audit logs activés
  • [ ] RBAC (Role-Based Access Control) configuré
  • [ ] Secrets en variables environnement (jamais hardcodés)
  • [ ] Scan vulnérabilités (Trivy/Snyk)

C.3 Performance

  • [ ] GPU drivers installés (CUDA 12.0+)
  • [ ] Modèles LLM quantifiés (GGUF Q5_K_M)
  • [ ] Index Neo4j optimisés
  • [ ] Cache Redis configuré (si applicable)
  • [ ] CDN pour assets statiques (si UI web)
  • [ ] Compression gzip/brotli activée

C.4 Conformité RGPD

  • [ ] Politique confidentialité rédigée
  • [ ] Consentement utilisateur implémenté
  • [ ] Droit accès données implémenté
  • [ ] Droit suppression implémenté
  • [ ] Logs anonymisés (pas de données patients)
  • [ ] DPO (Data Protection Officer) désigné
  • [ ] Analyse d'impact (DPIA) effectuée
  • [ ] Contrats sous-traitants signés

C.5 Monitoring Production

  • [ ] Métriques système (CPU, RAM, GPU, disk)
  • [ ] Métriques applicatives (latence, throughput, errors)
  • [ ] Métriques métier (consultations/jour, satisfaction)
  • [ ] Logs centralisés (ELK/Loki)
  • [ ] Alertes critiques (downtime, errors >5%)
  • [ ] Dashboard temps réel (Grafana)

Protocole type pour l’intégration d’un LLM dans un hôpital ou une clinique vétérinaire.

Glossaire : Développeur

API Endpoint: Point d'accès HTTP pour interaction avec backend (ex: POST /api/analyze)

Artifact: Fichier généré (modèle, index, rapport)

Batch Processing: Traitement par lots (ex: 1000 embeddings à la fois)

BLEU Score: Métrique évaluation qualité texte généré vs référence

Bolt Protocol: Protocol binaire Neo4j (port 7687)

ChromaDB: Base vectorielle open-source pour embeddings

CI/CD: Continuous Integration/Deployment - automatisation tests et déploiement

Cosine Similarity: Mesure similarité entre vecteurs (-1 à 1)

CUI: Concept Unique Identifier dans UMLS (ex: C0011849)

Cypher: Langage requête Neo4j (équivalent SQL pour graphes)

Docker Compose: Orchestration multi-containers

Embedding: Représentation vectorielle dense texte (ex: [0.23, -0.15, ...])

FastAPI: Framework web Python async, type-safe

Fine-tuning: Réentraînement LLM sur corpus spécialisé

GGUF: Format quantification modèles (GPT-Generated Unified Format)

Graph Traversal: Parcours graphe (ex: BFS/DFS)

Hallucination: Génération informations fausses par LLM

HNSW: Hierarchical Navigable Small World - index ANN performant

Inference: Exécution modèle ML pour prédiction

LlamaIndex: Framework RAG spécialisé indexation/récupération

Multi-hop: Connexions indirectes via nœuds intermédiaires (ex: A→B→C)

Ollama: Runtime LLM local optimisé

Pydantic: Validation données Python avec type hints

Quantization: Réduction précision poids (FP32 → INT8) pour économiser VRAM

RAG: Retrieval-Augmented Generation

Redis: Cache in-memory key-value

Streamlit: Framework Python UI web rapide

Top-k Retrieval: Récupération k résultats les plus pertinents

UMLS: Unified Medical Language System - ontologie médicale NIH

Vector Store: Base données optimisée stockage/recherche vecteurs

VRAM: Video RAM (mémoire GPU)

Whisper: Modèle transcription audio OpenAI

Glossaire : Général

openwashing:

ANNEXE A

Tableau comparatif des plateformes One Health existantes (ex. : OHI, PREDICT).

ANNEXE B

Étude de cas détaillée : Utilisation d’un LLM pour prédire la diffusion de la fièvre de la vallée du Rift au Kenya.