Hémicycle — Assistant citoyen de l'Assemblée nationale

Hémicycle — Assistant citoyen de l'Assemblée nationale

Porteur : Équipe Hémicycle
0 personne inscrite
Accessibilité de la loi Application des lois Contrôle de l'action du Gouvernement Députés et sénateurs Lois Rapports et travaux Votes
Galerie des fêtes de l'Hôtel de Lassay

Numéro de table à l'Hôtel de Lassay

Aucune table renseignée

Ce contenu est contributif, il n'est pas rédigé par l'Assemblée nationale.

Le contenu de cette page est écrit par les contributeurs du projet depuis le dépôt de code.

À propos du défi

Un citoyen pose une question en langage naturel (« Comment mon député a-t-il voté ? », « Où en est la loi sur… ? », « C'est quoi le 49.3 ? ») et reçoit une réponse vulgarisée, neutre et sourcée, construite en direct par des agents spécialisés sur les données officielles ouvertes de l'Assemblée nationale — avec le parcours de réflexion et de délégation de l'IA visible dans le chat.

Le problème. Le jargon juridique et parlementaire (navette, scrutin public, 49.3, non-votant vs abstention…) rend l'activité de l'Assemblée nationale opaque pour la plupart des citoyens, alors même que toutes les données sont publiques et ouvertes.

La réponse : Hémicycle, un assistant conversationnel qui transforme une question citoyenne en réponse pédagogique, enrichie de widgets visuels (graphe de votes, fiche député, timeline de loi, hémicycle interactif, agenda parlementaire, direct de la séance), le tout construit exclusivement à partir des données officielles.

Pourquoi c'est une « IA de confiance » :

  1. Données officielles uniquement : scrutins, députés et dossiers législatifs sont chargés depuis data.assemblee-nationale.fr (Licence Ouverte Etalab) dans PostgreSQL. Les agents lisent cette base en lecture seule ; le LLM rédige avec les chiffres exacts injectés dans son prompt — il n'a pas le droit d'en inventer.
  2. Sources cliquables : chaque réponse renvoie vers la page officielle (assemblee-nationale.fr) du scrutin, du député ou du dossier.
  3. Transparence totale : le plan de l'orchestrateur, les agents mobilisés, chaque appel d'outil (SQL local, API, serveur MCP) et son résultat sont affichés en direct dans le « Parcours de l'IA ». Un gate humain d'approbation du plan est réactivable par un simple flag.
  4. Neutralité : règles de rédaction strictes — aucun jugement de valeur, « non-votant » ≠ « abstention », un texte adopté n'est pas encore une loi, un absent « n'a pas pris part au vote ».
  5. Résilience : si le LLM tombe, des replis déterministes clôturent le tour avec les données brutes sourcées — jamais de spinner infini, jamais d'invention.

Architecture.

Citoyen ──WS──▶ Frontend React (chat + widgets VoteChart / FicheDepute / TimelineLoi
                 + « Parcours de l'IA » : plan, agents, appels d'outils, sources ①②③)
                    │
             Gateway FastAPI (pont WebSocket ⇄ bus)
                    │
             NATS JetStream — personne n'appelle personne directement
                    │
             Orchestrateur FSM événementiel (routing LLM + gardes déterministes,
             vulgarisation, replis sans LLM, leases, DLQ, outbox)
              ├─▶ agent_votes    ─┐
              ├─▶ agent_deputes  ─┼─ PostgreSQL 16 (open data AN, lecture seule)
              └─▶ agent_lois     ─┘  + serveurs MCP du hackathon (échec-doux)
  • Orchestration multi-agents : machine à états événementielle sur NATS JetStream ; chaque agent domaine (votes, députés, lois) dispose de ses propres outils et sources.
  • Serveurs MCP du hackathon : client MCP Streamable HTTP intégré ; les serveurs mcp-moulineuse et mcp-parlement se branchent en renseignant leur URL dans .env — URL absente = étape ignorée et tracée honnêtement dans l'interface.
  • État : tout vit dans PostgreSQL/JetStream, rien en RAM — un service qui crashe redémarre et reprend.

Données exploitées.

JeuSourceUsage
Scrutins 17e législature (~1,5 M positions de vote)data.assemblee-nationale.fragent_votes
Acteurs / mandats / organes (tous députés, y compris mandats clos)data.assemblee-nationale.fragent_deputes
Dossiers législatifsdata.assemblee-nationale.fragent_lois
Circonscriptions législatives (GeoJSON)data.gouv.frdéputé par adresse

Déroulé de la démo. docker compose up -d, chargement de l'open data AN (~5-10 min), puis conversation libre : votes d'un député, état d'un dossier législatif, explication d'une notion parlementaire, recherche de son député par adresse — chaque réponse montrant ses sources et le parcours complet de l'IA.

Galerie d'images

Hémicycle interactif
Graphe de votes
Parcours de l'IA
Agenda parlementaire

Documents du défi