← Projets Projet · RAG

AtelIA

Une plateforme de démonstration IA modulaire, construite de zéro autour d'une PME agro fictive — pour prouver, brique par brique, ce que l'IA appliquée change concrètement pour une entreprise.

RôleConception & développement
Année2026
StatutEn ligne
Le problème

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.

L'approche

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).

Le résultat

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.

Décisions d'architecture

Les choix qui tiennent la maison

Chaque décision structurante est consignée dans un ADR. Quelques-unes qui comptent :

ADR-101

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.

ADR-102

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.

ADR-103

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.

ADR-104

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.

ADR-105

Données publiques + synthétiques uniquement

Aucune donnée personnelle réelle dans la démo — conformité RGPD par construction.

ADR-106

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.

ADR-107

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.

La stack

Souveraine de bout en bout

PythonFastAPIPostgreSQLpgvectorLiteLLMMistralJinja2DockerCoolify