ValueAdservio — Manuel d'utilisation

Démonstrateur de gouvernance de portefeuille IA


Auteur : Olivier Vitrac, PhD, HDR Head of Adservio Innovation Lab · Adservio · La Défense ✉ olivier.vitrac@adservio.fr

Édition : Avril 2026 · v0.1 URL publique : https://valueadservio.pages.dev


1. Vue d'ensemble

ValueAdservio est un démonstrateur de gouvernance de portefeuille IA. Il n'est pas une application classique : c'est un noyau scientifique déterministe (kernel) entouré d'une interface humaine et d'une API REST publique (/api/kernel/*, OpenAPI 3.1). Le même noyau peut être appelé par une analyste devant son écran, par un agent LLM autonome, ou par un script batch — les trois voies produisent exactement les mêmes nombres pour les mêmes entrées.

Le démonstrateur permet, à partir d'une simple description d'un cas d'usage IA, d'estimer :

Toutes ces sorties sont reproductibles et traçables : aucun appel sortant, aucun aléa, aucune boîte noire.


2. Architecture du noyau

2.1 Principe de conception

Le noyau ValueAdservio diffère d'une application web classique par sa discipline architecturale :

Trois invariants non négociables :

  1. Le noyau ne peut pas appeler vers l'extérieur (ni LLM, ni base de données, ni service tiers). Il prend du JSON, il rend du JSON.

  2. Le noyau n'a pas de mémoire. Chaque appel est indépendant ; deux appels identiques produisent des sorties identiques.

  3. Le noyau est l'unique source de vérité numérique. L'interface affiche, le LLM propose, mais c'est le noyau qui calcule.

Cette discipline rend le système auditable (un commit = un comportement) et gouvernable (un changement de politique passe par un fichier data/policy.*.json versionné, jamais par un prompt).

2.2 Modules du noyau

2.3 Deux modes de consommation

Le même noyau, deux transports :

L'interface graphique est un consommateur parmi d'autres du noyau, au même titre qu'un LLM externe ou qu'un script batch. Voir docs/wave-5-plan.md pour la spécification de la couche REST.


3. Équations sous-jacentes

Toutes les formules ci-dessous sont implémentées textuellement dans kernel/*.js. Les notations sont conservées pour la lisibilité ; les noms canoniques sont donnés en regard.

3.1 Valeur brute annuelle

(1)cVal(p)=NJt100min(1,g100)min(1,a100)kscenc

où :

SymboleSignificationPlage typique
Npopulation impactée1–10 000 personnes/cas
Jjours travaillés/an200–250 (par défaut 220)
tpart de temps concernée0–100 %
ggain IA attendu0–100 %
aadoption attendue0–100 %
kscencoefficient de scénario (prudence ↔ ambition)0,4–0,9
ccoût journalier chargé100–2 000 €/j

Les caps min(1,g/100) et min(1,a/100) traduisent la borne physique : on ne peut pas gagner plus de 100 % d'une activité, ni adopter plus de 100 % de la population.

3.2 Multiplicateur des prismes stratégiques

(3)cPrime(p)=kPrismes(1+bk1pk)

avec cinq prismes booléens {data,souv,grp,exec,quick} et leurs coefficients bk figés dans kernel/constants.js. La plage résultante est cPrime[1,0;1,756].

3.3 Probabilité d'adoption (facteur de confiance)

(4)cPAdopt(p)=min(0,95,C50,35+a1000,45+cm50,20)

C est le score RICE de confiance (1–5), a le taux d'adoption attendu, cm la maturité du change management (1–5). Le plafond à 0,95 reflète qu'aucune adoption n'est jamais certaine.

Note ADOPT-001. Le taux a intervient deux fois — dans cVal comme « adoption attendue » et dans cPAdopt comme « facteur de confiance ». Ce comportement hérité de la version v0 est préservé pour la compatibilité de régression et est documenté dans docs/intentional-behavior.md. Les puces de sensibilité ±10% sur le palier Adoption × scénario du waterfall rendent cette double application visible (asymétrie typique : +16 k€ / −15 k€).

3.4 Valeur ajustée annuelle

(5)cValAdj(p)=cVal(p)cPrime(p)cPAdopt(p)

C'est la grandeur principale affichée dans toutes les vues du cockpit.

3.5 Score composite

(6)cScore(p)=min(100,wRR+wII+wCC+wSSwEEwCRCR+Δprismes+Δrisque)

avec les coefficients w figés dans kernel/scoring.js. R,I,C,S,E,CR sont les sept scores qualitatifs (1–5) inspirés de la méthode RICE. Δprismes et Δrisque sont les ajustements liés aux prismes stratégiques activés et au niveau de risque IA Act.

3.6 Trajectoire de valeur cumulée (36 mois)

La courbe de valeur ajustée mois-à-mois suit une rampe d'adoption :

(7)V(m)=cValAdj(p)m12ramp(m),m[0,36]

ramp(m) encode la montée en charge progressive (logistique sur 12 mois, plateau ensuite). Le payback est défini par :

(8)payback=min{m:Vcash(m)B+rBm12}

avec B le budget build et r le taux de run annuel.

3.7 ROI à 3 ans

(9)ROI3y=V3y(B+3rB)B+3rB

3.8 Réconciliation kernel ↔ LLM (AC5)

Soit vkernel la valeur calculée par le noyau et vLLM la valeur revendiquée par un agent LLM. Pour chaque champ avec une tolérance τ déclarée dans data/taxonomy.json, l'écart relatif est :

(10)δ=|vkernelvLLM|max(1,|vkernel|)

Le verdict de réconciliation est :

(13)verdict={✓ matchsi δτ⚠ divergencesi δ>τ? cannot_resolvesi vLLM absent ou non numérique

Règle d'or (AC8) : la valeur du noyau n'est jamais écrasée par la revendication du LLM. La divergence est affichée, la décision revient à l'humain.

3.9 Action recommandée (politique pré- et post-déploiement)

L'action recommandée est calculée par recommendAction(p, options). La politique est externalisée dans data/policy.recommendation.json et est spécifique au cycle de vie du projet :

Les seuils sont audités et sont publiés en JSON dans le dépôt — pas dans un prompt.


4. Parcours utilisateur

4.1 Cockpit (page d'accueil)

Cockpit

La page d'accueil présente cinq tuiles KPI globales (nombre de projets, valeur ajustée annuelle agrégée, budget 3 ans, projets à fort score, projets à risque) et la matrice de portefeuille Valeur × Score.

Chaque point de la matrice est un projet ; sa couleur indique le statut de cycle de vie, sa taille la racine carrée du budget. Cliquer un point ouvre la vue Simulation du projet correspondant.

Le bouton + Nouveau projet lance l'assistant de définition pour un projet vierge ; le bouton + Importer scénario LLM ouvre la modale d'import d'un bundle JSON produit par un agent LLM externe.

4.2 Bibliothèque

Bibliothèque

La bibliothèque expose les 7 fiches d'amorçage synthétiques (les scenario cards de data/scenario-cards.json). Elles servent de few-shot examples à un agent LLM : c'est en lisant ces fiches qu'un LLM apprend la convention de modélisation du démonstrateur.

Chaque fiche affiche :

4.3 Simulation

Simulation

La vue Simulation est la plus dense ; elle expose toutes les sorties déterministes du noyau pour un projet donné :

Simulation

Variante ambitieuse

Variante ambitieuse

En cliquant sur Ambitieux, les multiplicateurs SCEN deviennent g×1,2, a×1,3, kscen=0,9. Toutes les sorties sont recalculées en temps réel — y compris le waterfall, le ROI, le payback et les fragilités. La vue d'origine reste intacte ; on peut donc explorer plusieurs hypothèses sans polluer l'enregistrement canonique.

Variante ambitieuse

4.4 Priorisation

La vue Priorisation combine la matrice du portefeuille avec une table triable sur huit colonnes : titre, famille, valeur ajustée, confiance RICE, risque, effort, score, statut. La colonne Action affiche le verdict du noyau (chip de couleur) — pas une étiquette manuelle.

C'est la vue à présenter en revue de portefeuille : elle permet en un coup d'œil de hiérarchiser les projets et d'identifier les quick wins (haut/droite de la matrice).

Priorisation

4.5 Comparaison

La vue Comparaison superpose deux projets sur :

C'est l'outil à utiliser pour arbitrer entre deux options similaires (par exemple : RAG conformité vs Voicebot relation client).

Comparaison

4.6 Suivi & Contrôle

Suivi & Contrôle

La vue Suivi & Contrôle ne montre que les projets actifs (statut {validé,en cours,déployé}). Pour chaque projet avec des données de réalisation (realized_values), le noyau émet une action recommandée post-déploiement :

Écart ΔAction
Δ>+10%scale (passer à l'échelle)
|Δ|15%continue (poursuivre)
30%<Δ15%correct (corriger via onboarding/coaching)
Δ50% et hypothèses provablement faussesrebaseline (rebaser le scénario)
Δ50%stop (arrêter)

Le tableau Valeur réalisée vs projetée détaille les écarts à M+3, M+6, M+12 sur quatre métriques (utilisateurs, adoption, gain IA, valeur ajustée).

Le bouton + Enregistrer une décision ouvre une modale dédiée qui expose la suggestion du noyau et son raisonnement, puis demande à l'utilisateur de confirmer ou de surcharger. Une décision enregistrée n'altère jamais le statut du cycle de vie (invariant AC11) ; elle est purement consultative et auditée.

4.7 Définition (assistant 4 blocs)

Définition — bloc A

L'assistant de définition remplace le copier-coller JSON par une interface en quatre blocs.

Bloc A — Problème métier

Champs textuels et listes déroulantes : titre, famille IA, domaine métier, entité, description courte, hypothèse de valeur en une phrase. Les champs textuels ne déclenchent pas de recalcul du noyau (le texte ne déplace pas les nombres).

Bloc B — Population & baseline

Définition — bloc B

Curseurs numériques pour N, J, t, c avec étiquettes en français et codes techniques en gris. Le rail Aperçu en direct recalcule à chaque mouvement de curseur ($\sim$1 ms).

Bloc C — Hypothèses de valeur

Définition — bloc C

Curseurs pour g, a, kscen, budget, run, taux de monétisation. Quatre curseurs (N, c, g, a) ont un bouton Justifier qui ouvre un panneau de saisie d'hypothèses :

Définition — panneau de justification

Le panneau capture :

Ces données sont écrites dans assumptions.{champ} et survivent à l'export / réimport (AC-W4A-7).

Bloc D — Gouvernance & recevabilité

Cinq cases readiness gates (el[5]), cinq cases prismes stratégiques, quatre options de risque IA Act, sept curseurs RICE-like.

Barre d'actions

4.8 Importer un scénario LLM

Importer scénario LLM

La modale d'import accepte un bundle JSON conforme à la version 0.1.1 du schéma. Le bloc optionnel llm_analysis est restitué dans le tiroir d'analyse mais n'est jamais lu par le noyau (AC3).

Le bouton Charger l'exemple insère un bundle de démonstration (data/sample-llm-input-with-analysis.json) qui illustre la convention attendue d'un agent LLM.

⚠ Ne jamais coller de données confidentielles d'entreprise dans un LLM public. Utiliser un environnement LLM privé approuvé pour les données sensibles (gate G2).

4.9 Tiroir JSON

Tiroir JSON

Le tiroir { } JSON (en haut à droite) affiche, pour le projet sélectionné, trois onglets :

C'est le seul endroit du cockpit où apparaissent les codes bruts du schéma (scenK, cm, el[5], …). L'interface partout ailleurs utilise des étiquettes françaises.

4.10 Aide en ligne

Le bouton ? dans la barre du haut (ou la touche ? du clavier) ouvre un panneau d'aide qui glisse depuis la gauche, sans masquer le reste du cockpit. Trois onglets :

Touche Esc pour fermer. Visible sur toutes les vues. Le panneau ne capte pas les clics tant qu'il est fermé (pointer-events: none).


5. Provenance — la primitive centrale

Toute valeur affichée dans le cockpit porte exactement un des trois marqueurs de provenance :

BadgeTierSourceTraitement
kernelcalculé par kernel/*.jsautoritaire
llmbloc llm_analysis du bundle importéconsultatif
inputsaisie utilisateur ou assumptions.*hypothèse

Règle de conflit (AC8) : lorsqu'une revendication LLM diverge d'une sortie noyau, les deux sont affichées côte-à-côte avec un tag ⚠ Divergence et l'écart en pourcentage. La valeur du noyau n'est jamais écrasée. L'arbitrage revient à l'humain.


6. Modes d'utilisation

6.1 Mode A — sans humain (REST)

Cette voie (Wave 5A, livrée — déployée à https://valueadservio.pages.dev/api/) expose le noyau verbatim sous HTTP. Elle permet à un agent LLM, à un script batch ou à un service tiers de tester des centaines de variations sans intervention humaine. Le noyau ne stocke rien ; chaque appel est une fonction pure de son entrée.

18 endpoints — 4 GET (métadonnées) + 14 POST (compute) :

Découverte automatique pour agents LLM :

Enveloppe de réponse uniforme :

Codes d'erreur : VALIDATION_ERROR · UNSUPPORTED_MEDIA (415) · METHOD_NOT_ALLOWED (405) · PAYLOAD_TOO_LARGE (413, > 1 MiB) · KERNEL_THREW (500). Aucune trace d'exécution n'est jamais retournée. Voir docs/api.md pour le contrat de transport complet et les exemples curl.

6.2 Mode B — avec humain (cockpit + URL)

Cette voie (Wave 5B, livrée) supprime le copier-coller tout en gardant l'humain dans la boucle : l'agent propose, l'humain dispose.

Deux formats de fragment :

Limites : 8 000 caractères par fragment ; 128 KiB de JSON décodé ; mono-projet uniquement (mode: "project"). Au-delà, préférer l'API REST (Mode A) ou l'import JSON manuel.

Génération depuis le cockpit : un bouton « URL partage » est disponible à deux endroits — sur la barre d'actions de l'assistant Définition (à côté d'Exporter JSON) et sur la carte d'affinement de la vue Simulation (à côté de + Bundle d'itération). Il copie automatiquement l'URL dans le presse-papiers.

Garanties : le fragment d'URL n'est jamais envoyé au serveur (contrairement à un paramètre ?import=...). Il est validé contre le schéma data/schema.llm-input.json avant tout chargement ; un bundle invalide affiche une bannière d'erreur sans modifier l'état. Le fragment est nettoyé de la barre d'URL après chargement (history.replaceState) — un rafraîchissement n'importe pas une seconde fois.


7. Garanties et limites

7.1 Ce que le démonstrateur garantit

7.2 Ce que le démonstrateur ne garantit pas


8. Aller plus loin

DocumentContenu
base/UI_WORKPLAN.mdspécification UI complète
base/CHANGELOG.mdhistorique des amendements (v1 → v5)
docs/api.mdcontrat de transport REST (enveloppe, codes d'erreur, CORS, exemples curl, boucle agentique)
docs/wave-4a-plan.mdspécification de la boucle d'authoring humain
docs/wave-5-plan.mdspécification de la couche REST + URL fragment
docs/intentional-behavior.mddécisions de conception assumées (ADOPT-001, RAMP-001, SCEN-001, PLATFORM-001)
docs/handoff-20260428.mdétat des lieux et plan de continuité
/api/openapi.json (en ligne)spec OpenAPI 3.1 du noyau REST (compatible Swagger UI, Stoplight)
/api/tools (en ligne)descripteurs Anthropic + OpenAI prêts à coller dans une boucle tool-use

Pour toute question, ré-implémentation, ou ré-étalonnage : olivier.vitrac@adservio.fr


ValueAdservio — Adservio Innovation Lab — Groupe Adservio, France. Privé — développé pour l'usage interne d'Adservio. Non redistribuable.