Nous ne remplaçons pas Huwise. Nous proposons une boucle de mesure et d'optimisation sûre, au-dessus de ses outils existants.
Une seule carte, quatre lectures
Cliquez un bloc : rôle, entrées/sorties, outils réels, exemple, statut et sources. Les traits distinguent métadonnées, schéma, requêtes de données, retour d'usage et gouvernance.
« Combien y a-t-il de collèges à Dijon ? »
Chaque étape réellement exécutée : entrée, outil, sortie, temps, jetons, source, statut. La configuration A suit les noms des outils Huwise MCP, mais ce n'est pas le serveur Huwise (clé API requise) : c'est notre agent, même modèle, avec des outils génériques.
Une erreur reproductible, et ce qui la rattrape
Requêtes réelles sur data.education.gouv.fr, rejouables par n'importe qui. Ce ne sont pas des erreurs de Huwy : ce sont des pièges de format que tout agent rencontre.
nom_commune='DIJON' → 0 ligne ; la donnée est écrite 'Dijon' → 23.
where = nom_commune='DIJON' and type_etablissement='Collège'
code_departement='21' → 0 ligne ; le code est écrit '021' → 74 collèges.
where = code_departement='21' and type_etablissement='Collège'
Context Optimizer
Ce que fait l'Optimizer : sur un résultat vide, il demande au portail comment la valeur est écrite et le dit à l'agent ; sur la route FAST, la valeur est résolue avant la requête.
{"total_count": 0, "hint": ["nom_commune: 'DIJON' is stored as 'Dijon'"]}
{"total_count": 0, "hint": ["code_departement: codes are written with leading zeros, try '021'"]}Une modification à la fois, mesurée, gardée ou annulée
Le lab ne peut modifier que les fiches (description, synonymes, modèle de requête, note). Il ne voit jamais le holdout, ne touche ni l'évaluateur, ni les réponses attendues, ni le validateur, ni le journal.
Budget par cycle
- max_proposals = 3
- max_llm_calls = 150
- max_seconds = 3600
- control_cases = 10
Quality gate (fixé avant) gate-2026-11-11.1
- min_fixed = 1
- max_broken_control = 0
- max_new_wrong_confident = 0
- max_new_query_errors = 0
- max_tokens_increase_pct = 25
Journal (append-only, chaîné)
Aucun cycle enregistré pour l'instant.
Mêmes questions, même modèle, trois configurations
A : outils génériques nommés comme ceux de Huwise MCP (pas le serveur Huwise). B : nos fiches compilées. C : fiches + Context Optimizer. Notation sans juge LLM : la valeur est comparée à une requête API de référence.
Le serveur Huwise MCP réel transmet des facettes que notre A n'a pas : A sous-estime probablement Huwise. Un vrai test A demande une clé API du portail.
Pas encore de run A/B/C complet.
Expériences internes antérieures (A contre B seulement, jeu de 30 questions vu pendant le développement) — historique, pas une preuve contre Huwy.
| model | A | B | runs | date |
|---|---|---|---|---|
| openai/gpt-5.4-mini | 40.0 % | 90.0 % | #10/#11 | 10.11.2026 |
| nvidia/nemotron-3-ultra-550b-a55b:free | 30.0 % | 80.0 % | #3/#4 | 10.11.2026 |
La prod ne change que par une décision humaine
base ctxc · index cards · graphe Neo4j (écriture) · MCP public en lecture seule · aucun endpoint d'administration
base ctxc_preprod · index cards_preprod · graphe partagé en lecture seule · le lab ne tourne qu'ici · budget modèle plafonné
Promotion : un humain lit le diff et les mesures, applique la modification en prod, observe (canari), et peut revenir à la version précédente de la fiche en une commande.
Ce que nous empruntons, et ce que ces travaux ne prouvent pas pour Huwise
Aucun de ces travaux ne mesure un portail Huwise : seule l'évaluation de cette page dit quelque chose ici.
AutoResearch — Andrej Karpathy
DSPy / MIPRO — Opsahl-Ong et al., EMNLP 2024
LLMCompiler — Kim et al., 2023
RouteLLM — Ong et al., 2024
Metamorphic & property-based testing
OpenTelemetry · SRE (SLI/SLO)
Le code, les données, le déploiement
| module | rôle / role |
|---|---|
| sources/explore.py | Explore API v2.1 scan: 314 datasets, 6 976 fields → MariaDB |
| ctx/compile.py · ctx/export.py | cards (short ≤ 400, full ≤ 1 500 tokens), versioned · llms.txt + 314 pages |
| projections/es.py · graph.py | Elasticsearch BM25 + usage boost (routing per portal) · Neo4j shared keys / lineage |
| tools/ · mcpserver.py | MCP find_dataset · explain_dataset · query (ODSQL whitelist) · /api/demo/run |
| optimizer/ | recipes · values · router · cache · evidence · pipeline · scenarios · record_traces |
| lab/ | cycle (guard, diagnose, static check, gate, budget) · log (hash chain) · policy.json |
| evals/ | golden sets (education 30, education_v2 95 with dev/val/holdout) · runner (A/B/C, no LLM judge) · improve |
Limites honnêtes
- A n'est pas le serveur Huwise MCP : il faut une clé API du portail pour mesurer le vrai (décision du propriétaire du compte).
- Modèle gratuit (OpenRouter) : résultats variables d'un run à l'autre ; tailles d'échantillon affichées, intervalles de confiance larges.
- Les 30 questions historiques ont été vues pendant le développement ; le holdout du jeu v2 est la mesure propre, mais il est écrit par le même auteur.
- Les recettes couvrent une forme de question (compter des établissements par type, statut, lieu) ; tout le reste passe par l'agent.
- Compression par question et parallélisme d'outils : décrits, non activés ; preprod partage les serveurs MariaDB/ES/Neo4j (bases et index séparés).
- L'intérieur de Huwise (stockage, classement, orchestration, modèle de Huwy) n'est pas public : la carte ne l'affirme pas.
/data/architecture.json · /data/scenarios.json · /data/comparison.json · /data/lab.json · /llms.txt · MCP: https://context.smiro.dev/mcp