<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ingénierie Des Ontologies on Boris Dupoux</title><link>https://borisdupoux.com/fr/tags/ing%C3%A9nierie-des-ontologies/</link><description>Recent content in Ingénierie Des Ontologies on Boris Dupoux</description><generator>Hugo -- gohugo.io</generator><language>fr</language><lastBuildDate>Wed, 14 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://borisdupoux.com/fr/tags/ing%C3%A9nierie-des-ontologies/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>Wed, 14 Oct 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
spécifié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; Six invariants d&amp;rsquo;intégrité et de provenance. 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. Elles sont
spécifiées, mais pas encore instanciées ni exécutées.&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. Le protocole d&amp;rsquo;évaluation a été versionné avant le premier commit
d&amp;rsquo;implémentation (le même jour) ; plusieurs jalons ont ensuite été adaptés. Seuils :
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 ; G1 : κ inter-annotateurs
≥ 0,7 ; G2 : précision de l&amp;rsquo;extracteur ≥ 0,95 par type.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phases P0–P6 avec points de contrôle 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 aux points de contrôle humains désignés 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 ; 61
copiés, 6 134 par référence hachée) acquis de manière idempotente ; 13 272 nœuds (dont un
nœud par fichier source) et 6 022 arêtes issus de la base de l&amp;rsquo;outil de capture
(extracteur v0.1), en 2,1 s, sans nouvel appel LLM (la passe relit les sorties VLM/ASR
déjà stockées par l&amp;rsquo;outil de capture) ; 57 969 vérifications automatiques des invariants
I1–I6, toutes passées (plusieurs sont vraies par vacuité sur ce corpus ; I6 n&amp;rsquo;est que
partiellement appliqué).&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 (245 au total). 97 unités sur 245 ont été annotées par l&amp;rsquo;auteur (67 frames,
30 segments ; aucun passage, aucune paire de résolution d&amp;rsquo;entités). Le second annotateur
était l&amp;rsquo;agent LLM qui a implémenté l&amp;rsquo;extracteur : l&amp;rsquo;accord ci-dessous oppose donc
l&amp;rsquo;auteur à l&amp;rsquo;agent LLM, ce n&amp;rsquo;est pas un κ entre humains, et le jalon G1 (adapté) n&amp;rsquo;a pas
pu être évalué au sens strict. Accord : κ = 0,72 (logiciel, n = 69), 0,41 (écran,
n = 67), 0,31 (catégorie, n = 69), 0,52 (limites de segments, n = 30) ; le rapport
compte 69 frames pour deux champs alors que 67 ont été annotées, un écart non encore
résolu. Précision de l&amp;rsquo;extracteur par rapport à la référence de l&amp;rsquo;auteur : 0,74, 0,43,
0,04, 0,63. &lt;strong&gt;Jalon G2 (précision de l&amp;rsquo;extracteur ≥ 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 tri par LLM local et un dédoublonnage par
plongements. Un audit aléatoire de 30 éléments par l&amp;rsquo;agent LLM superviseur a relevé
1 mauvaise décision de conservation ou de rejet (≈ 3 %, IC à 95 % : 0,6–17 %) ; aucun
audit humain à ce stade. Un unique prototype MCP en lecture seule existe pour la
cartographie du logiciel (ce n&amp;rsquo;est pas l&amp;rsquo;un des trois serveurs) ; &lt;strong&gt;aucune règle n&amp;rsquo;a
encore été prouvée&lt;/strong&gt; dans le logiciel. Le travail sur la VM s&amp;rsquo;est arrêté lorsque l&amp;rsquo;accès
a été retiré, après que les traitements de cartographie ont surchargé l&amp;rsquo;hôte partagé ;
il s&amp;rsquo;est poursuivi en local.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mesure sur jeu de référence face aux jalons : les barres sont les valeurs mesurées par
champ (n = 69, 67, 69 et 30 unités), la ligne orange est le seuil. Une seule barre de κ le
franchit, aucune barre de précision.&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 auteur × LLM, κ (G1 adapté, 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 de l'auteur (G2, 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 trois 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, instancier les questions de compétence, puis
construire les trois serveurs et dérouler le protocole d&amp;rsquo;évaluation. 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>