L'IA partout, mais rien de tangible
Les PME entendent parler d'IA partout, mais peinent à voir ce qu'elle change pour elles, concrètement. Les démonstrations génériques ne parlent pas leur langage métier. Il fallait une preuve tangible, ancrée dans le quotidien d'une entreprise réelle plutôt qu'un énième chatbot hors-sol.
Une PME crédible, quatre modules réels
Plutôt qu'une démo abstraite, j'ai construit « Conservia », une PME agro fictive mais crédible, et quatre modules répondant chacun à un besoin métier concret avec la bonne technique — pas un LLM systématique : extraction de factures Factur-X entièrement déterministe (sans LLM), RAG réglementaire sur le règlement INCO avec seuil anti-hors-corpus, agent function-calling sur les API publiques de l'État, classification de messages sous contrainte. Chaque module est un plugin autonome, activable indépendamment — on ajoute une capacité sans toucher au cœur.
Un principe traverse tout : le code décide du critique. Le score fournisseur est calculé en code à barème fixe, jamais produit par le LLM ; un garde-fou force la priorité « critique » sur tout message touchant à la sécurité alimentaire. Chaque décision structurante est consignée dans un ADR (7 au total : registre de plugins, anonymisation par config, RAG pgvector mono-base, agent sur API officielles, données publiques et synthétiques uniquement, couche LLM agnostique via LiteLLM avec Mistral souverain par défaut, journal des gains en append-only). La stack est souveraine : hébergement auto-géré (Coolify · Hetzner), données dans PostgreSQL + pgvector sans vector store tiers, et inférence via l'API Mistral (FR/UE) derrière LiteLLM — basculable vers un modèle local sans refactor. Python, FastAPI, Jinja2, Docker, déployée en continu.
Factures Factur-X
Extraction déterministe des factures via Factur-X/lxml — sans LLM — avec contrôles, détection d'anomalies et journal de gains.
RAG réglementaire
Questions-réponses sur le règlement INCO (corpus réel), recherche vectorielle pgvector avec seuil anti-hors-corpus — chaque réponse cite sa source.
Agent function-calling
Un agent qui interroge en direct les API publiques de l'État (Recherche d'entreprises, BODACC) pour vérifier un fournisseur — le score final est calculé en code, pas par le LLM.
Classification de messages
Tri zero-shot des messages entrants sous contrainte (catégories fermées, validation Pydantic, garde-fou sécurité alimentaire prioritaire).
Une preuve, pas une promesse
Quatre modules fonctionnels, documentés par 7 ADR et une architecture arc42, couverts par 85 tests, déployés en ligne et rejouables. Une démonstration qui parle métier plutôt que technique — et qui tient en production, pas seulement en local.
Les choix qui tiennent la maison
Chaque décision structurante est consignée dans un ADR. Quelques-unes qui comptent :
Plateforme modulaire avec registre de modules
Socle app/core + modules enfichables app/modules/<nom> avec schema.sql idempotent — ajouter une capacité ne touche jamais au cœur.
Anonymisation : PME fictive paramétrable
L'identité « Conservia » est centralisée en config : le même code sert n'importe quelle entreprise, sans fuite de données.
RAG sur pgvector (mono-base, souverain)
Le corpus réglementaire vit dans la même base PostgreSQL que le reste — pas de vector store tiers.
Agent M3 : function-calling sur API publiques officielles
L'agent interroge les API publiques de l'État en direct ; le score fournisseur est calculé en code, jamais par le LLM.
Données publiques + synthétiques uniquement
Aucune donnée personnelle réelle dans la démo — conformité RGPD par construction.
Couche LLM agnostique : Mistral par défaut, swappable via LiteLLM
Toute l'IA passe par un module unique ; le modèle se change par variable d'environnement, sans refactor.
Journal de gains immuable (append-only)
Chaque gain mesuré est inscrit dans un journal append-only, tarif runtime non rétroactif — traçabilité et honnêteté des résultats.