Poser une question à ses données en français, et obtenir un chiffre juste

Un assistant IA branché sur l’entrepôt invente ses propres définitions. Ce projet explore une autre voie : ne lui exposer que des métriques gouvernées.

Dessin animé : dans un atelier, la première tentative de branchement tourne à la catastrophe et un chat est projeté par un gant de boxe à ressort ; au centre, une souris branche toutes les machines sur un boîtier commun, et la presse, la machine à café et le phonographe fonctionnent ensemble.
À chaque machine sa prise : le chaos. Un seul boîtier commun : tout fonctionne ensemble.Illustration · [Crédit]

L’essentiel en trente secondes

  • Les assistants IA calculent vite, mais avec leurs propres définitions.
  • L’idée : ne leur donner accès qu’à des métriques définies une seule fois.
  • Le moyen : une semantic layer, exposée par un serveur MCP.

01Le problème

Brancher un assistant IA directement sur un entrepôt de données semble simple. Il lit le schéma, écrit une requête, renvoie un chiffre. Le chiffre est souvent plausible. Il est parfois faux — et rien ne permet de le savoir : l’assistant a décidé lui-même de ce qu’était un « client actif ».

02Pourquoi c’est important

Une réponse fausse mais bien présentée est plus dangereuse qu’une absence de réponse. Dès qu’une décision s’appuie sur ces chiffres, c’est la confiance dans toute la donnée qui est en jeu.

03L’approche

Plutôt que d’ouvrir les tables à l’assistant, ne lui ouvrir que des métriques définies une fois pour toutes dans une semantic layer. L’assistant ne calcule plus : il choisit une métrique, un niveau de détail et une période.

04Les décisions techniquesTechnique

DécisionAlternative écartéePourquoi
Exposer des métriques, pas des tablesLaisser l’assistant écrire du SQLUne seule définition par indicateur
Passer par un serveur MCPUne intégration sur mesure par assistantUn protocole commun à plusieurs assistants
Une liste fermée de dimensionsDes dimensions libresÉviter les combinaisons jamais testées

05L’architectureTechnique

En un coup d’œil

  1. Question« Combien de clients actifs ce mois-ci ? »
  2. Assistant IAChoisit un outil plutôt que d’écrire du SQL
  3. Serveur MCPExpose une liste fermée de métriques
  4. Semantic layerUne seule définition de « client actif »
  5. EntrepôtModèles dbt testés et documentés

→ La question descendLa réponse remonte, avec sa définition ←

Figure 1. Le parcours d’une question. Seule la semantic layer sait calculer « client actif ».
Détails d’implémentation : l’outil exposé par le serveur MCPPython
serveur_mcp.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("semantic-layer")
METRIQUES = {"clients_actifs", "ca_net", "panier_moyen"}

@mcp.tool()
def interroger_metrique(metrique: str, grain: str, periode: str) -> dict:
    """Renvoie une métrique gouvernée, jamais une table brute."""
    if metrique not in METRIQUES:
        raise ValueError(f"Métrique inconnue : {metrique}")
    # client de la semantic layer : [à préciser]
    return semantic_layer.query(metrique, grain=grain, periode=periode)

06Les difficultés

Une question ambiguë reste ambiguë : « les ventes du mois », est-ce le mois civil ou les trente derniers jours ? L’assistant doit pouvoir demander une précision plutôt que choisir à la place de l’utilisateur. [Autres difficultés rencontrées : à documenter.]

07Résultats et limites

Résultat mesuré
[À documenter — aucun chiffre sans mesure]
Limites connues
[À documenter — aucun chiffre sans mesure]
Ce qui reste à faire
[À documenter — aucun chiffre sans mesure]

08Ce que j’en retiens

[Trois leçons, une phrase chacune.]