<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Analyse en Boîte Noire on Boris Dupoux</title><link>https://borisdupoux.com/fr/tags/analyse-en-bo%C3%AEte-noire/</link><description>Recent content in Analyse en Boîte Noire on Boris Dupoux</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Tue, 01 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://borisdupoux.com/fr/tags/analyse-en-bo%C3%AEte-noire/index.xml" rel="self" type="application/rss+xml"/><item><title>Graphes de connaissances de mission : des preuves de conseil à une ontologie interrogée via MCP</title><link>https://borisdupoux.com/fr/research/mission-knowledge-graph/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://borisdupoux.com/fr/research/mission-knowledge-graph/</guid><description>&lt;h2 id="contexte"&gt;&lt;a href="#contexte" class="header-anchor"&gt;&lt;/a&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Le conseil en observation des processus produit des logigrammes, des notes d&amp;rsquo;entretien, des
enregistrements d&amp;rsquo;écran et des recommandations. Une fois la mission livrée, ce matériau est
de fait inerte : la mission suivante repart d&amp;rsquo;une page blanche, même lorsque la réponse avait
déjà été trouvée ailleurs. La question de recherche est de savoir comment transformer les
livrables, de &lt;strong&gt;documents en données typées, sourcées et interrogeables&lt;/strong&gt;, afin qu&amp;rsquo;un
assistant puisse répondre à « où avons-nous déjà vu cela, et qu&amp;rsquo;en avions-nous conclu ? » en
citant des preuves vérifiables.&lt;/p&gt;
&lt;p&gt;Deux exigences structurent le travail : la &lt;strong&gt;traçabilité&lt;/strong&gt; (chaque assertion renvoie à sa
preuve) et une stricte &lt;strong&gt;séparation entre preuve et connaissance&lt;/strong&gt; (ce qui a été observé
n&amp;rsquo;est pas ce qui a été généralisé). La génération augmentée par la recherche (RAG) est
rapide à mettre en place, mais cite des passages, pas des assertions vérifiables ; une
ontologie formelle est traçable, mais coûteuse. Ce projet explore une voie pragmatique entre
les deux.&lt;/p&gt;
&lt;h2 id="approche"&gt;&lt;a href="#approche" class="header-anchor"&gt;&lt;/a&gt;Approche
&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 A["`Sources brutes de mission
immuables, hachées`"] --&gt; B["`Journal d'événements en ajout seul
source de vérité`"]
 B --&gt; C["`Base SQLite reconstructible
jetable`"]
 C --&gt; D[Extraction déterministe]
 C --&gt; E["`Extraction par LLM
simple force de proposition`"]
 D --&gt; F["`Nœuds et arêtes proposés
avec provenance`"]
 E --&gt; F
 F --&gt; G{"`Revue humaine
hors MCP`"}
 G --&gt;|validé| H[Graphe de connaissances]
 H --&gt; I[MCP : preuves]
 H --&gt; J[MCP : connaissances]
 H --&gt; K[MCP : ontologie]
 I --&gt; L[Assistant IA]
 J --&gt; L
 K --&gt; L&lt;/pre&gt;&lt;p&gt;Le choix de conception central consiste à scinder l&amp;rsquo;interface en &lt;strong&gt;trois serveurs MCP selon
le statut épistémique&lt;/strong&gt; : &lt;em&gt;preuves&lt;/em&gt; (observations attestées et sourcées), &lt;em&gt;connaissances&lt;/em&gt;
(généralisations) et &lt;em&gt;ontologie&lt;/em&gt; (le méta-modèle lui-même). Cette séparation empêche un
assistant de présenter une généralisation comme une observation.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 subgraph SCHEMA["SCHÉMA · nommage"]
 ON["`serveur ontologie
Comment le nomme-t-on ?`"]
 end
 subgraph PROVEN["PROUVÉ · observé"]
 EV["`serveur preuves
Qu'a-t-on capté, et où ?`"]
 end
 subgraph GENERAL["GÉNÉRALISÉ · conclu"]
 KN["`serveur connaissances
Qu'en conclut-on ?
propose, ne valide jamais`"]
 end
 ON -. "type" .-&gt; EV
 EV == "fonde chaque conclusion" ==&gt; KN
 EV --&gt; AI["`Assistant IA
réponses étiquetées par statut`"]
 KN --&gt; AI
 ON --&gt; AI&lt;/pre&gt;&lt;p&gt;Le graphe est unique ; seules les façades sont séparées. La frontière qui compte passe entre
preuves et connaissances : le serveur &lt;em&gt;preuves&lt;/em&gt; ne renvoie que ce qui a été observé, et où ;
le serveur &lt;em&gt;connaissances&lt;/em&gt; renvoie des conclusions qui doivent remonter jusqu&amp;rsquo;à ces preuves,
et aucun outil MCP ne peut marquer quoi que ce soit comme validé.&lt;/p&gt;
&lt;h2 id="méthodes"&gt;&lt;a href="#m%c3%a9thodes" class="header-anchor"&gt;&lt;/a&gt;Méthodes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Méta-modèle.&lt;/strong&gt; Un noyau fixe, complété de profils de mission et d&amp;rsquo;une ontologie
versionnée (v0). Chaque nœud porte une origine (structurelle, déterministe, extraite par
LLM) et un statut (proposé → validé).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invariants (I1–I6).&lt;/strong&gt; La provenance est obligatoire sur chaque nœud et chaque arête
dérivés ; une recommandation doit pouvoir être rattachée, de proche en proche, à un constat
sourcé ; les citations extraites par LLM doivent être des sous-chaînes littérales de leur
fragment ; le statut « validé » exige une décision humaine enregistrée. Les sources brutes
sont immuables ; la base de données est jetable et reconstruite à partir du journal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Questions de compétence avant l&amp;rsquo;implémentation.&lt;/strong&gt; Un jeu v0 de 33 questions, typées
comme factuelles, agrégées, de traçabilité, de contradiction, temporelles, inter-missions
et &lt;strong&gt;négatives&lt;/strong&gt; (requêtes que le système doit refuser, par exemple une fuite entre
clients), dans un format exécutable avec réponses attendues et références.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocole d&amp;rsquo;évaluation.&lt;/strong&gt; Au moins 30 tâches en langage naturel, notées automatiquement
ou par un juge. Les seuils de passage ont été fixés en amont : exactitude ≥ 0,8, citations
valides ≥ 0,98, ancrage ≥ 0,95, fuite = 0, médiane ≤ 6 appels d&amp;rsquo;outils par tâche ; chaque
question soluble en ≤ 3 appels ; précision de l&amp;rsquo;extraction déterministe ≥ 0,95 par type ;
κ inter-annotateurs ≥ 0,7.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phases P0–P6 avec jalons humains.&lt;/strong&gt; L&amp;rsquo;implémentation est déléguée à une session d&amp;rsquo;agent
qui doit s&amp;rsquo;arrêter à chaque jalon et consigner les décisions en suspens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cartographie d&amp;rsquo;un logiciel en boîte noire.&lt;/strong&gt; La même méthode a été appliquée à un
logiciel commercial de gestion d&amp;rsquo;entreprise, sans lecture de son code source. La cible est
un triplet de vérités — utilisateur, logiciel et base de données — reliées par des arêtes
prouvées. Onze heuristiques (H1–H11) couvrent l&amp;rsquo;appariement de valeurs, la perturbation
inverse et directe, les champs calculés, la visibilité conditionnelle, les différences
entre scénarios, la fouille d&amp;rsquo;invariants, le fuzzing des saisies, les a priori sémantiques
(jamais considérés comme preuve), le passage de la documentation au test et du symptôme à
la règle. Entrées : l&amp;rsquo;arborescence des menus via AT-SPI, un relevé des écrans, le
profilage des colonnes et une typologie d&amp;rsquo;événements issue du journal d&amp;rsquo;audit de
l&amp;rsquo;application. Une hypothèse n&amp;rsquo;est acceptée qu&amp;rsquo;avec une contre-preuve indépendante ; les
cartographies produites par l&amp;rsquo;éditeur sont tenues en quarantaine et servent d&amp;rsquo;oracle de
notation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un extrait illustratif du graphe typé (libellés fictifs) : la préconisation n&amp;rsquo;est recevable
que parce que la chaîne qui descend jusqu&amp;rsquo;à un fragment littéral d&amp;rsquo;une source est complète.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart TB
 R["`Préconisation
point de saisie unique`"] -- répond à --&gt; C["`Constat
double saisie à la réception`"]
 O["`Observation
« le stock est ressaisi à la main »`"] -- atteste --&gt; C
 O -- extrait de --&gt; F["`Fragment
notes d'entretien, lignes 40–52`"]
 F -- cite --&gt; P["`Pièce source
hachée, immuable`"]
 C -- porte sur --&gt; A["`Activité
réception des marchandises`"]
 A -- utilise --&gt; S["`Écran
formulaire de réception`"]
 S -- module de --&gt; Y["`Système
logiciel de gestion`"]&lt;/pre&gt;&lt;h2 id="état-davancement--résultats"&gt;&lt;a href="#%c3%a9tat-davancement--r%c3%a9sultats" class="header-anchor"&gt;&lt;/a&gt;État d&amp;rsquo;avancement &amp;amp; résultats
&lt;/h2&gt;&lt;p&gt;Il s&amp;rsquo;agit &lt;strong&gt;principalement d&amp;rsquo;une conception partiellement implémentée&lt;/strong&gt;, et non d&amp;rsquo;un
système en service.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pilote (corpus d&amp;rsquo;observation, passe déterministe).&lt;/strong&gt; 6 195 fichiers (6,92 Go) acquis de
manière idempotente ; 13 272 nœuds et 6 022 arêtes extraits en 2,1 s pour un coût LLM nul ;
les six invariants au vert sur 57 969 vérifications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mesure sur jeu de référence.&lt;/strong&gt; 145 unités d&amp;rsquo;annotation et 100 paires de résolution
d&amp;rsquo;entités. L&amp;rsquo;annotation humaine était partielle et le second annotateur était un LLM.
Accord humain × LLM : κ = 0,72 (logiciel), 0,41 (écran), 0,31 (catégorie), 0,52 (limites
de segments). Précision de l&amp;rsquo;extracteur par rapport à la référence humaine : 0,74, 0,43,
0,04, 0,63. &lt;strong&gt;Jalon G2 (≥ 0,95) non franchi&lt;/strong&gt; ; le résultat sur la catégorie traduit un
désaccord de définition, et non une erreur de calcul.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cartographie du logiciel.&lt;/strong&gt; Schéma de 427 tables sans aucune clé étrangère, aucun
déclencheur ni aucune vue déclarés (toute la logique est applicative) ; 1 048 entrées de
menu (899 feuilles) cartographiées ; 154 des 899 écrans relevés (17 %) ; 2 845 hypothèses
de règles ramenées à 1 519 par un filtre LLM local, avec 1 erreur de décision sur un
échantillon de 50 éléments revu par l&amp;rsquo;agent superviseur. Un prototype MCP en lecture seule
existe ; &lt;strong&gt;aucune règle n&amp;rsquo;a encore été prouvée&lt;/strong&gt; dans le logiciel. Les travaux ont été
suspendus après une surcharge de la VM hôte.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mesure sur jeu de référence face aux seuils fixés à l&amp;rsquo;avance : les barres sont les valeurs
mesurées par champ, la ligne orange est le seuil. Une seule barre le franchit.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;---
config:
 xyChart:
 width: 540
 height: 320
 themeVariables:
 xyChart:
 backgroundColor: "transparent"
 plotColorPalette: "#3F86B8, #C46A2B"
---
xychart-beta
 title "Accord humain × LLM, κ (seuil 0,7)"
 x-axis ["logiciel", "écran", "catégorie", "segments"]
 y-axis "κ" 0 --&gt; 1
 bar [0.72, 0.41, 0.31, 0.52]
 line [0.7, 0.7, 0.7, 0.7]&lt;/pre&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;---
config:
 xyChart:
 width: 540
 height: 320
 themeVariables:
 xyChart:
 backgroundColor: "transparent"
 plotColorPalette: "#3F86B8, #C46A2B"
---
xychart-beta
 title "Précision vs référence humaine (seuil 0,95)"
 x-axis ["logiciel", "écran", "catégorie", "segments"]
 y-axis "Précision" 0 --&gt; 1
 bar [0.74, 0.43, 0.04, 0.63]
 line [0.95, 0.95, 0.95, 0.95]&lt;/pre&gt;&lt;p&gt;La cartographie du logiciel, en entonnoir : l&amp;rsquo;arborescence des menus est entièrement
cartographiée, mais la couverture des écrans et la preuve restent loin derrière, et la
chaîne d&amp;rsquo;hypothèses n&amp;rsquo;a encore produit aucune règle prouvée.&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;---
config:
 xyChart:
 width: 540
 height: 360
 themeVariables:
 xyChart:
 backgroundColor: "transparent"
 plotColorPalette: "#3F86B8"
---
xychart-beta
 title "Cartographie en boîte noire : de l'inventaire à la preuve"
 x-axis ["Entrées menu", "Feuilles", "Écrans", "Hypothèses", "Filtrées", "Prouvées"]
 y-axis "Nombre" 0 --&gt; 3000
 bar [1048, 899, 154, 2845, 1519, 0]&lt;/pre&gt;&lt;p&gt;Les serveurs MCP et l&amp;rsquo;évaluation de bout en bout (P4–P5) ne sont &lt;strong&gt;pas implémentés&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="limites--suite"&gt;&lt;a href="#limites--suite" class="header-anchor"&gt;&lt;/a&gt;Limites &amp;amp; suite
&lt;/h2&gt;&lt;p&gt;Les résultats du pilote sont inférieurs aux seuils et reposent sur une annotation humaine
partielle. Prochaines étapes : redéfinir l&amp;rsquo;étiquette de catégorie, constituer une référence
entièrement humaine, mesurer à nouveau G1/G2, puis construire les trois serveurs et mener
l&amp;rsquo;évaluation préenregistrée. Pour la cartographie du logiciel, les heuristiques de
perturbation en écriture attendent une autorisation écrite et une VM dédiée.&lt;/p&gt;
&lt;h2 id="stack-technique"&gt;&lt;a href="#stack-technique" class="header-anchor"&gt;&lt;/a&gt;Stack technique
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Python 3.11&lt;/code&gt; · &lt;code&gt;JSONL event log&lt;/code&gt; · &lt;code&gt;SQLite&lt;/code&gt; · &lt;code&gt;YAML ontology&lt;/code&gt; · &lt;code&gt;MCP&lt;/code&gt; · &lt;code&gt;AT-SPI&lt;/code&gt; · &lt;code&gt;Ollama&lt;/code&gt; · &lt;code&gt;pytest&lt;/code&gt;&lt;/p&gt;</description></item></channel></rss>