Relier chaque texte voté à sa vie réglementaire et jurisprudentielle. Défi du Hackathon Assemblée nationale 2026 — « Le parcours de la loi : vers une IA de confiance ».
L'open data parlementaire documente admirablement la loi jusqu'à sa promulgation. Après, le fil se coupe : décrets d'application, jurisprudence, doctrine et questions parlementaires vivent dans des silos séparés. Ce projet reconstruit cette constellation aval à partir d'une simple recherche en langage naturel — et chaque nœud porte un identifiant officiel vérifiable et cliquable. C'est le sens de « IA de confiance » : zéro affirmation non sourcée.
- Barre de recherche en langage naturel →
GET /constellation?q=…. On tape « la loi plein emploi », « loi immigration 2024 » ou « 2023-1196 ». - Compréhension de la requête (LLM) : la requête est résolue vers une loi choisie parmi des candidats officiels (jamais inventée). Requête précise → une loi ; requête thématique (« renseignement ») → la famille des lois du domaine, présentée pour exploration.
- Reconstruction de la constellation : cinq branches de textes rattachés, chacun avec son identifiant Légifrance/HAL/parlement et son lien source.
- Qualification des liens : chaque texte d'application est classé application / cite la loi / codification (le bruit est signalé, pas masqué).
- Deux vues : la constellation (les relations) et le parcours (la chronologie, du dépôt à la jurisprudence), textes cliquables vers la source.
- Synthèse ancrée (LLM, étiquetée) : description + points clés résumés uniquement à partir du matériel sourcé.
| Cluster | Contenu | Source | Mode de liaison |
|---|---|---|---|
| Application | Décrets, arrêtés + classification | Légifrance/PISTE (LODA_ETAT/VISA ∪ JORF) + LLM |
citation du n° qualifiée par le LLM |
| Jurisprudence | CE, Cass., Conseil constit., CNIL | Légifrance/PISTE (CETAT/JURI/CONSTIT/CNIL) |
citation du n° (ou de la date pour les lois anciennes) |
| Doctrine | Articles, thèses (accès ouvert) | HAL (api.archives-ouvertes.fr, collection AO-DROIT) |
thématique (mots-clés) |
| Parlement | Questions écrites AN/Sénat | parlement.tricoteuses.fr (open data) |
thématique (mots-clés) |
| Connexes | Lois, codes, ordonnances liés | — | à construire |
L'IA (Mistral — souveraineté FR, remplaçable par un modèle open-weight
Apache-2.0 derrière la même interface backend/llm.py) ne fait que
comprendre et classer du matériel déjà sourcé. Elle ne produit jamais un
fait affiché.
- Résolution : elle choisit une loi parmi des candidats PISTE, par son indice (validé ∈ candidats → impossible d'inventer une loi), et distingue requête référentielle vs thème (famille).
- Classification des textes d'application : application / citation / codification, avec justification.
- Synthèse (description, points clés) : résumé exclusivement de l'intitulé officiel + des intitulés réels des textes remontés, étiqueté « synthèse IA ».
- Jamais : inventer un texte, un identifiant ou un chiffre. Les mesures restent des comptages déterministes. Sans clé LLM, un repli déterministe prend le relais (rien ne casse).
Le code du défi tourne entièrement sur données ouvertes via l'adaptateur de référence. Un adaptateur Silexia de production (connecteurs MCP) est une implémentation alternative et optionnelle du même contrat — non requis.
barre langage naturel → GET /constellation?q=…
│
resolve_candidates (PISTE) → LLM.rank_laws (choisit / désambiguïse)
│
orchestrator.constellation() (chaque appel passe par le cache)
│
┌───── 5 clusters (adaptateur) ─────┐ → LLM.classify_application
│ application · jurisprudence │ → LLM.synthesize (ancrée)
│ doctrine · parlement · connexes │
└───────────────────────────────────┘
│
Constellation (loi + nœuds + résolution + synthèse) → front
ReferenceAdapter(BACKEND=reference, défaut) — l'adaptateur publié : PISTE (application + jurisprudence), HAL (doctrine),parlement.tricoteuses.fr(parlement). 100 % open data.backend/llm.py— couche LLM swappable (MistralLLMsiMISTRAL_API_KEY, sinonHeuristicLLMdéterministe).SilexiaAdapter— connecteurs MCP de prod, plugin privé optionnel, absent du dépôt public.
Voir docs/ARCHITECTURE.md et
docs/SOURCES.md. Câblage front :
frontend/README.md.
Prérequis : Python 3.11+ (le fichier .env est auto-chargé par
backend/env.py).
python -m pip install -r requirements.txt
cp .env.example .env # renseigner PISTE_CLIENT_ID/SECRET (+ MISTRAL_API_KEY conseillé)
# API + front servis en même origine
python -m uvicorn backend.api:app --reload # http://localhost:8000
# ou serveur MCP (pour un agent)
python -m backend.mcp_serverWindows : utiliser
pyau lieu depython, et$env:PYTHONUTF8=1pour les accents. Un serveur de dev est aussi défini dans.claude/launch.json.
Le jour du pitch, on ne joue pas contre les API en salle bondée. On réchauffe le cache une fois, puis on sert en lecture seule :
DEMO_MODE=0 python -m backend.warmup "la loi plein emploi" "loi immigration" "2023-1196"
DEMO_MODE=1 python -m uvicorn backend.api:app # 0 appel réseau : PISTE ET LLM servis du cacheUne requête non réchauffée renvoie un 503 actionnable (au lieu d'un résultat arbitraire).
python -m tests.test_piste_mapping # sans réseau, sur fixturePaaS Scalingo (FR), domaine hackathon.silexia.legal. Procfile type :
web: uvicorn backend.api:app --host 0.0.0.0 --port $PORT. Variables :
PISTE_CLIENT_ID/SECRET, MISTRAL_API_KEY, BACKEND=reference, DEMO_MODE=1.
DEMO_MODE=1, le cache doit être présent dans le conteneur (hook
post-déploiement warmup, ou cache committé) — les conteneurs sont éphémères.
Ce dépôt public n'embarque que l'adaptateur de référence (open data). Un
adaptateur Silexia optionnel — qui branche l'orchestrateur sur des
connecteurs MCP de production — existe mais est distribué séparément. Il n'est
pas requis : le défi est intégralement reproductible sur données ouvertes. On le
dépose dans backend/adapters/silexia.py puis on lance BACKEND=silexia ;
sinon plugins.load_adapter renvoie une erreur explicite. Le contrat qu'il
implémente est public (backend/adapters/base.py).
- Cluster connexes (lois/codes/ordonnances liés).
- Pivot réglementaire : résoudre les régimes sans loi éponyme (une racine peut être un décret) + seuil de confiance explicite.
- Qualification dur/mou généralisée à tous les clusters.
- Déploiement open-weight (souveraineté) derrière
backend/llm.py.
AGPL-3.0-or-later — voir LICENSE. Toute exploitation en SaaS
d'une version modifiée doit rouvrir ses modifications. La licence couvre le code
de ce dépôt ; un service distant appelé via API (ex. API Mistral, connecteurs
Silexia) reste un programme indépendant sous sa propre licence.