Gouvernance de crise à états pour l'IA de santé comportementale

Gouvernance de crise à états pour l'IA de santé comportementale

Nous avons construit un middleware de sécurité qui enveloppe un chatbot de santé comportementale existant et applique une politique d'escalade à états, transversale aux tours, dont l'équipe clinique est propriétaire. Il attrape la conversation qui s'aggrave, celle qu'un modérateur sans état rate structurellement, et il prouve chaque décision avec une piste d'audit chaînée par hachage, classable. La sécurité est un problème d'architecture, pas un problème de prompting.

0 contre 68

Réponses dangereuses livrées, protégé contre non protégé

Jeu doré étiqueté de 40 conversations

2 tours

Détection médiane plus précoce vs un modérateur sans état identique

Même classifieur et même porte ; la gestion d'état seule

0 / 29

Fausses escalades sur les tours bénins

Jeu doré étiqueté de 40 conversations

Une démo d'un schéma d'architecture de sécurité sur des données synthétiques. Pas un dispositif médical, pas un avis clinique, pas une intégration DSE.

Le volume sans mémoire

Les chatbots de santé comportementale sont modérés un message à la fois. Une crise n'arrive pas un message à la fois.

La plupart des revues de sécurité d'un chatbot de santé mentale notent chaque réponse isolément. Chaque message est contrôlé, signalé ou validé, puis oublié. Cela fonctionne pour une seule ligne explicitement dangereuse. C'est structurellement aveugle à une conversation qui dérive, tour après tour, où aucun message isolé n'est assez alarmant pour être bloqué à lui seul.

Les échecs documentés suivent cette forme. Le chatbot « Tessa » de la NEDA a distribué des conseils de déficit calorique et de pince à plis cutanés avant d'être retiré (NEDA, 2023). Des cliniciens ont rapporté une psychose renforcée par chatbot chez des patients qui n'avaient jamais rencontré une personne pour les contredire (Dr Keith Sakata, UCSF, 2025). OpenAI a retiré une mise à jour de GPT-4o après qu'elle est devenue flagorneuse (OpenAI, 2025). Dans chaque cas, le modèle paraissait soutenant à un tour donné tandis que la trajectoire allait quelque part de dangereux.

Un modérateur sans état n'a aucun moyen de voir cette trajectoire, parce qu'il n'a aucune mémoire des tours précédents. Un meilleur modèle de base ne règle pas cela. Un chatbot parfait n'a toujours aucune idée de la politique d'escalade de votre plateforme, ne produit aucune piste d'audit que vous puissiez classer, et ne vous donne aucune porte déterministe à certifier. C'est pourquoi nous traitons ici la sécurité comme un problème d'architecture, et pourquoi la démo compare deux piles exécutant le modèle identique.

Démo en écran partagé : la même conversation synthétique de patient passe par un chatbot MindMate Support non protégé à gauche et le même chatbot derrière la couche de sécurité Veriprajna à droite, avec un rail de pipeline indiquant classifieur, trajectoire, vérificateur, porte, audit.
La démo rejoue une conversation synthétique à travers deux piles. MindMate Support est un substitut fictif d'un chatbot existant. Données synthétiques uniquement, aucun PHI.

Le mécanisme : un pipeline à états qui s'exécute à chaque tour

Les modèles consultatifs alimentent une porte déterministe. La porte prend la décision, et la décision est du code que vous pouvez lire.

Chaque tour patient passe par un pipeline fixe. Le message est dépouillé des PII et haché, un classifieur C-SSRS note sa sévérité selon la structure Columbia et renvoie un niveau, une confiance, et un ABSTAIN lorsqu'il ne peut pas justifier une sévérité. Un Trajectory Monitor à états accumule ensuite le risque d'un tour à l'autre. C'est la capacité centrale, et c'est la seule chose qu'un modérateur message par message n'a pas : il voit le schéma, pas la ligne isolée, et il produit un risque effectif et une bande (BENIGN, WATCH, CONCERN, HIGH, CRITICAL) avec une raison énoncée telle que « trouble alimentaire persistant, pente ascendante ».

Avant qu'une réponse candidate n'atteigne le patient, un panneau de vérificateurs multi-critiques l'inspecte : un critique de flagornerie et de ton, un détecteur de motifs interdits, et un vérificateur d'affirmations cliniques. Un critique qui signale force la porte à au moins un niveau minimum configuré, peu importe à quel point la réponse paraît douce.

La décision elle-même est une porte de politique déterministe à 5 niveaux, et c'est du Python, pas un LLM : L1 CONTINUE, L2 RESTRICT, L3 SUBSTITUTE_SCRIPT, L4 HUMAN_HANDOFF, L5 CRISIS_PROTOCOL. Lorsque la porte bloque une réponse, elle substitue l'un des scripts d'une bibliothèque groupée, rédigés par des cliniciens, par niveau et par famille, et enregistre l'id du script. Elle n'improvise jamais le langage de crise. Chaque tour est ensuite écrit comme une entrée sha256 chaînée à celle d'avant.

La pile protégée montrant le rail de pipeline par message (classifieur, trajectoire, vérificateur, porte, audit) avec les latences par étape, et les résultats de porte en ligne pour les tours précoces indiquant L1 CONTINUE et L2 RESTRICT tandis que le modérateur sans état sur le même tour lit BENIGN, ne voit rien, pas de mémoire.
Le pipeline s'exécute à chaque message. La latence ajoutée est inférieure à la milliseconde par tour (moyenne 0,16 ms, p95 0,21 ms sur le jeu doré).

L'équipe clinique possède la politique, pas l'ingénierie

Les seuils, les minimums imposés par le vérificateur, et la bibliothèque de 12 scripts sont configurés par le comité de sécurité clinique sous la version de politique 2026.04-clinical-v1. L'ingénierie applique exactement cela, et ne le modifie pas. L'historique d'un patient, récupéré via le drapeau FHIR fictif, peut abaisser un seuil pour que la couche escalade plus tôt pour un patient plus vulnérable. Lorsque la confiance du classifieur est faible, il s'abstient et achemine vers un examen humain plutôt que de deviner une sévérité.

La fenêtre modale de politique clinique montrant les niveaux minimums imposés par le vérificateur par critique et par constat, les règles d'incertitude et de frontière (une abstention à faible confiance force un humain, un score de jailbreak égal ou supérieur à 0,8 force un minimum L3), et la bibliothèque de 12 scripts approuvés par des cliniciens avec un message de remplacement L2 pour trouble alimentaire révélé.
La fenêtre modale de politique : minimums imposés par le vérificateur, règles d'abstention et de jailbreak, et la bibliothèque de scripts approuvés par des cliniciens avec un message de remplacement révélé.

Une conversation, traitée de bout en bout

Le scénario héros par défaut est la dérive vers les troubles alimentaires : six tours, chacun individuellement une question de bien-être ordinaire.

La conversation s'ouvre sur des questions inoffensives concernant une alimentation plus saine et le comptage des calories. Un modérateur message par message n'a rien à bloquer, et la référence sans état dans la démo reste verte, lisant WATCH et « ne voit rien, pas de mémoire » tour après tour. La couche à états, qui observe la trajectoire, passe en CONCERN au tour 3. Elle bloque la réponse du chatbot et substitue un script d'ancrage rédigé par un clinicien qui oriente vers la ligne d'assistance NEDA. C'est deux tours avant le premier message explicitement dangereux.

Tour 3 de la pile protégée : le compteur de risque transversal aux tours lit 3,4 CONCERN, la réponse du chatbot est bloquée et non envoyée, et un script d'ancrage L3 approuvé par un clinicien est substitué avec le numéro de la ligne d'assistance NEDA, tandis que le modérateur sans état message par message sur le même tour lit encore WATCH et ne voit rien.
Tour 3 : la couche à états atteint CONCERN et substitue un script d'ancrage. Le modérateur sans état, même classifieur, ne voit toujours rien.

Aux tours finaux, les messages deviennent explicitement dangereux. La pile non protégée à gauche livre la réponse nuisible, affichée barrée et étiquetée comme livrée au patient et dangereuse. À droite, le panneau de vérificateurs intercepte la réponse, attrape le ton flagorneur et le motif interdit, et la porte escalade vers un transfert humain L4, en alertant un membre de l'équipe de soins avec le contexte complet. Nous décrivons l'interception, pas le contenu nuisible lui-même.

Tours finaux : à droite le panneau de vérificateurs intercepte la réponse candidate, le compteur de risque lit 5,0 CRITICAL et la porte plafonne l'escalade à un transfert humain L4 parce qu'il n'y a pas d'indice aigu L5, un script de transfert approuvé par un clinicien est substitué, et la réponse nuisible est bloquée et non envoyée, tandis que la pile non protégée à gauche montre la même réponse barrée comme livrée et dangereuse.
Le vérificateur intercepte la réponse candidate et la porte escalade vers un transfert humain L4. La pile non protégée livre la même réponse.

Le résultat de session rend le delta concret, et il est attribuable à la gestion d'état seule parce que les deux piles ont utilisé le même classifieur et la même porte. La seule différence était la mémoire transversale aux tours.

Le panneau de résultat de session : intercepté 2 tours plus tôt que le modérateur sans état identique (tour 3 contre tour 5), 0 réponse dangereuse livrée là où la pile non protégée en aurait envoyé 2, chaîne d'audit intacte sur 6 entrées à preuve de falsification sous la politique clinique 2026.04-clinical-v1.
Résultat de session pour la conversation de dérive vers les troubles alimentaires : 0 dangereuse livrée contre 2, intercepté 2 tours plus tôt, chaîne d'audit intacte.

Sur l'ensemble du jeu doré

Le banc d'essai note un jeu doré étiqueté de 40 conversations, soit 177 tours, généré de façon déterministe à partir de 8 conversations canoniques rédigées à la main plus des paraphrases préservant les étiquettes et des variantes de contrôle bénignes. Sur ce jeu, la pile protégée a livré 0 réponse dangereuse là où une pile non protégée en a livré 68. La détection s'est faite en médiane 2 tours plus tôt que le modérateur sans état identique, et sur 2 conversations le modérateur sans état n'a jamais escaladé du tout. Il y a eu 0 fausse escalade sur 29 tours bénins, l'exactitude du niveau C-SSRS était de 94,3 % stricte et de 97,2 % à un niveau près, et la couche s'est abstenue vers un humain une fois. Ces chiffres sont limités à ce jeu doré synthétique, pas une garantie en conditions réelles.

Le tableau de bord en direct des 40 conversations listant chaque scénario avec son issue, par exemple la dérive vers les troubles alimentaires interceptée 2 tours plus tôt, la psychose à combustion lente où le modérateur sans état l'a manquée, et les vrais négatifs bénins sans escalade.
Le benchmark de 40 conversations, calculé en direct par la démo. Les scénarios à combustion lente sont ceux où le modérateur sans état n'escalade jamais du tout.

Le reçu classable

Chaque conversation rend un Rapport d'incident de sécurité. Chaque tour est une entrée sha256 chaînée à la précédente, donc modifier n'importe quel champ casse chaque hachage ultérieur et la falsification est visible. Le rapport montre le niveau du classifieur, le risque transversal aux tours, les constats du vérificateur, la décision de la porte et sa raison, l'id du script substitué, et la chaîne de hachage, avec la chaîne vérifiée intacte. Il est conçu pour être classé : preuves de surveillance post-commercialisation FDA, défense en contentieux, souscription d'assurance.

Le Rapport d'incident de sécurité chaîné par hachage pour la conversation de dérive vers les troubles alimentaires, un tableau de 6 tours montrant le hachage du message dépouillé des PII, le niveau du classifieur, la bande de risque transversal aux tours, les constats du vérificateur, la décision de la porte avec la raison, l'id du script substitué, et la chaîne de hachage sha256, avec la preuve de falsification marquée chaîne intacte.
Le Rapport d'incident de sécurité : un enregistrement par conversation, chaîné par hachage, à preuve de falsification, qu'un réviseur peut lire ligne par ligne.

Un modérateur sans état face à la couche de sécurité

Même tâche, une différence structurelle : la mémoire d'un tour à l'autre et une politique dont quelqu'un peut être propriétaire.

Capacité Modérateur sans état message par message Couche de sécurité IA clinique
Note un message isolé Oui Oui
Voit la trajectoire transversale aux tours Non, il n'a pas de mémoire Oui, un accumulateur de risque à états
Inspecte la réponse candidate avant livraison Non Oui, un panneau de vérificateurs multi-critiques
Qui possède la politique d'escalade Implicite dans le modèle ou le prompt L'équipe clinique, une porte à 5 niveaux
Qui prend la décision Un modèle ou un prompt Du code déterministe hors du LLM
Langage de crise lorsqu'il bloque Généré par le modèle, improvisé Bibliothèque de scripts approuvés par des cliniciens
Audit conçu pour être classé Aucun Rapport d'incident de sécurité chaîné par hachage

Ce que cette démo ne fait pas

  • Ce n'est pas un dispositif médical et ce n'est pas autorisé par la FDA, certifié HIPAA, ni un avis clinique. Le cadrage FDA PCCP et SaMD est une direction de production différée, pas une affirmation sur la démo.
  • Chaque conversation, chaque patient, et le chatbot « MindMate Support » sont synthétiques. Il n'y a pas de données patients réelles et pas de PHI.
  • L'adaptateur FHIR est un stub avec un drapeau patient synthétique. Il n'y a pas de connexion Epic ou Cerner dans la démo.
  • Le classifieur est un classifieur lexical déterministe, intentionnellement simple. Le remplacement en production est un modèle affiné in-VPC derrière la même interface. La similarité sémantique dans la démo est un Jaccard sur tokens, pas des embeddings de phrases.
  • Tous les chiffres de preuve sont limités à un jeu doré étiqueté de 40 conversations de données synthétiques, jamais une garantie en conditions réelles. Il n'y a pas de clients, de déploiements, ni d'approbations de cliniciens à citer, et nous n'en inventons aucun.

Questions que posent les acheteurs

Est-ce que cela remplace notre chatbot ou notre modèle clinique ?

Non. C'est un middleware qui enveloppe le chatbot existant et ne change jamais le modèle. Il ajoute un accumulateur de risque à états transversal aux tours, un panneau de vérificateurs multi-critiques, et une porte d'escalade déterministe autour du modèle, et il substitue un script rédigé par un clinicien lorsqu'il bloque une réponse. L'enjeu est une gouvernance à états et un reçu classable, pas un modèle différent.

En quoi cela diffère-t-il de la modération de contenu que nous exécutons déjà sur chaque message ?

Un modérateur message par message note chaque réponse isolément et n'a pas de mémoire, donc il rate une crise qui se construit d'un tour à l'autre. Sur un jeu doré étiqueté de 40 conversations, la couche à états a escaladé une médiane de 2 tours plus tôt qu'un modérateur sans état identique qui utilisait le même classifieur et la même porte. Sur deux de ces conversations, le modérateur sans état n'a jamais escaladé du tout.

La décision d'escalade est-elle prise par un LLM ?

Non. Le classifieur et le panneau de vérificateurs sont consultatifs, mais la décision d'escalade à 5 niveaux et l'audit sont du Python déterministe hors de tout LLM. Un réviseur peut lire la porte ; il ne peut pas contre-interroger un prompt. Les agents conseillent, le code décide.

Pouvons-nous prouver à un régulateur ou à un tribunal ce que le système a fait et pourquoi ?

Chaque tour est une entrée sha256 chaînée à celle d'avant, donc modifier n'importe quel champ casse chaque hachage ultérieur et la falsification est visible. Le résultat est un Rapport d'incident de sécurité classable en JSON et HTML, cadré pour la surveillance post-commercialisation FDA, la défense en contentieux et la souscription d'assurance. Dans la démo, le rapport montre la chaîne intacte.

Un meilleur modèle de base ne rendra-t-il pas cela inutile ?

Un chatbot parfait n'a toujours aucune idée de la politique d'escalade de votre plateforme, ne produit aucune piste d'audit, ne vous donne aucune porte déterministe à certifier, et n'offre aucune défense lorsqu'il est jailbreaké. La valeur durable est la gouvernance à états plus le reçu classable, pas un taux d'erreur de modèle plus bas. C'est pourquoi la démo compare un classifieur et une porte identiques et attribue l'amélioration à la gestion d'état seule.

S'agit-il d'un dispositif médical validé, et les données sont-elles réelles ?

Non. C'est une démo d'un schéma d'architecture de sécurité, pas un dispositif médical, et ce n'est pas autorisé par la FDA ni certifié HIPAA. Chaque conversation est synthétique, l'adaptateur FHIR est un stub, et le classifieur est un classifieur lexical déterministe qui tient lieu d'un modèle de production in-VPC. Tous les chiffres de preuve sont limités à un jeu doré étiqueté de 40 conversations de données synthétiques.

Recherche technique

La recherche derrière cette démo — l'architecture, la conception de la vérification, et le plan d'entreprise.

Si votre chatbot a un problème d'architecture, nous aimerions comparer nos notes

Une gouvernance à états, une politique dont l'équipe clinique est propriétaire, et un audit que vous pouvez classer.

Si votre équipe cherche comment rendre un chatbot de santé comportementale défendable pour un examen d'entreprise, de payeur ou réglementaire, nous aimerions sincèrement entendre comment vous y réfléchissez. Le problème est à l'échelle du secteur et les réponses le seront aussi.

Ce que nous construisons

  • ✓ Suivi de risque à états, transversal aux tours
  • ✓ Une porte d'escalade déterministe dont l'équipe clinique est propriétaire
  • ✓ Substitution de scripts approuvés par des cliniciens
  • ✓ Rapports d'incident de sécurité chaînés par hachage, classables

Comment nous travaillons

  • ✓ Un middleware qui enveloppe votre chatbot existant
  • ✓ Des modèles consultatifs, des décisions prises par du code que vous pouvez lire
  • ✓ Remplacement en production par un classifieur affiné in-VPC
  • ✓ Une gouvernance qui tient même lorsque le modèle de base s'améliore
Réseaux sociaux

Également publié sur