Expérimentations IA LexImpact
Fonctionnement global de la mise à jour de paramètre
L’objectif est de maintenir à jour les paramètres d’OpenFisca-France et d’OpenFisca-France-Indirect-Taxation.
Le module update_openfisca_ai/openfisca_param.py contient les méthodes pour manipuler ces paramètres.
Voir les schémas schema_mise_a_jour_parametres.md.
Workflow Rationalisé (Version 2.0)
⚡ Génération automatique en une commande :
./generate_consolidated_data.shCe script orchestre automatiquement toutes les étapes de génération des données :
Étape 1 : Analyse de l’utilisation des paramètres
Le script update_openfisca_ai/analyze_all_parameters.py : - ✅ Supporte plusieurs dépôts OpenFisca (France + Indirect-Taxation) - ✅ Extrait tous les paramètres YAML présents dans openfisca_france/parameters et openfisca_france_indirect_taxation/parameters - ✅ Analyse le code (model/) pour déterminer si chaque paramètre est utilisé - ✅ Sauve le résultat dans datasets/of-fr-parameters.csv - 📊 ~3463 paramètres analysés (3400 France + 63 Indirect-Taxation)
Étape 2 : Détection des paramètres obsolètes dans l’UI
Le script ui_find_outdated_parameters/find_outdated_parameters.py : - Charge le fichier decompositions.json pour extraire l’arborescence de l’UI - Parcourt l’UI de https://socio-fiscal.leximpact.an.fr/ pour identifier les paramètres avec “panneau orange” (obsolètes > 3 ans) - Sauve le résultat dans datasets/outdated_parameters.csv
Étape 3 : Consolidation des données
Le script update_openfisca_ai/consolidate_parameters.py : - ✅ Charge les métadonnées depuis le JSON OpenFisca consolidé (France + Indirect-Taxation) - ✅ Fusionne les données d’utilisation (of-fr-parameters.csv) - ✅ Ajoute le statut UI obsolète (outdated_parameters.csv) - ✅ Génère UN SEUL FICHIER : datasets/parameters_consolidated.csv
Structure du fichier consolidé
Le fichier parameters_consolidated.csv contient 34 colonnes avec toutes les informations :
Métadonnées de base : - name, file_path, description, documentation
Dates et validité : - last_value_date, last_value_still_valid_on, no_last_value_still_valid_on, old_last_value_check
Valeurs : - value, is_brackets, current_bracket
Références légales : - github_url, id, url_ref_0 à url_ref_11 (jusqu’à 12 références)
Utilisation dans le code : - is_used : Booléen, le paramètre est-il utilisé dans le code ? - file_count : Nombre de fichiers Python utilisant ce paramètre - total_matches : Nombre total d’utilisations - repo_name : Source (openfisca-france ou openfisca-france-indirect-taxation)
Interface utilisateur : - outdated_ui : 🆕 Booléen, le paramètre a-t-il un panneau orange dans l’UI ? (règle > 3 ans) - section : Section UI (principale/secondaire) - vide si outdated_ui = False - warning : Message d’avertissement - vide si outdated_ui = False - ui_name : Nom affiché dans l’UI - domain : Domaine (première partie du nom, ex: impot_revenu)
Filtrage flexible
Le fichier contient TOUS les paramètres, permettant un filtrage selon vos critères :
import pandas as pd
df = pd.read_csv('datasets/parameters_consolidated.csv')
# Paramètres obsolètes selon l'UI (> 3 ans)
df[df['outdated_ui'] == True]
# Paramètres prioritaires : utilisés + obsolètes UI
df[(df['outdated_ui'] == True) & (df['is_used'] == True)]
# Paramètres Indirect-Taxation
df[df['repo_name'] == 'openfisca-france-indirect-taxation']
# Vos propres critères (ex: obsolète depuis > 2 jours)
df[(df['old_last_value_check'] == True) & (df['is_used'] == True)]Avantages du nouveau workflow
✅ Simplicité : 1 commande, 1 fichier au lieu de 5
✅ Couverture complète : France + Indirect-Taxation
✅ Flexibilité : Filtrez selon vos critères, pas limité à la règle des 3 ans
✅ Performance : Chargement plus rapide (1 fichier vs 5)
✅ Reproductibilité : Script versionné, pas d’étapes manuelles cachées
📚 Documentation complète : Voir WORKFLOW.md et CHANGELOG_CONSOLIDATION.md
Données sur les textes de loi
Une base de donnée Légi venant de https://tricoteuses.fr/ est hébergée sur le serveur de LexImpact.
Le module update_openfisca_ai/legidb.py contient les méthodes pour faciliter la gestion de cette base.
Utilisation de l’IA
Le module update_openfisca_ai/llm.py contient les méthodes pour utiliser un LLM pour lui demander d’extraire la nouvelle valeur d’un paramètre dans un texte de loi.
Le module update_openfisca_ai/llm_agent.py contient les méthodes pour permettre à un LLM de faire des recherches libres sur Internet pour trouver les références d’un paramètre qui n’en aurait pas encore.
Ces modules, ainsi que la base de données, sont accessibles via un serveur MCP hébergé sur le serveur LexImpact.
Outil de mise à jour (Application Tauri)
L’application tauri_outdated_parameters_app/ réalise la synthèse de tous ces développements : - ✅ Lecture de parameters_consolidated.csv (fichier unique consolidé) - ✅ Proposition de filtres pour cibler les paramètres à mettre à jour - ✅ Appel d’un LLM pour mettre à jour le paramètre choisi (via serveur MCP) - ✅ Affichage de la réponse du LLM avec suggestions - ✅ Mise à jour du fichier YAML sur le poste de l’utilisateur pour vérification - ✅ Génération automatique du texte de Pull Request
C’est ensuite à l’utilisateur de créer sa branche et d’ouvrir une PR.
Une fois la PR mergée, il faut reconstruire la branche wip-leximpact qui est utilisée par https://socio-fiscal.leximpact.an.fr/.
Il est ensuite possible de relancer le script de génération pour vérifier les améliorations.
Cela fait, il est possible de réduire la durée utilisée pour afficher un “panneau orange” et relancer le cycle de mise à jour.
Serveur MCP
Le dossier leximpact_mcp_server contient le code des serveurs MCP (Model Context Protocol) utilisés pour fournir des outils aux modèles de langage.
Organisation du Dépôt
📂 Structure des dossiers
Scripts de génération de données
- 🔧
update_openfisca_ai/: Modules Python pour l’analyse et la manipulation des paramètresanalyze_all_parameters.py: Analyse de l’utilisation des paramètres dans le codeconsolidate_parameters.py: Consolidation de toutes les données en un fichier uniqueopenfisca_param.py: Manipulation des paramètres OpenFisca (lecture/écriture YAML)legidb.py: Interface avec la base de données Légifrancellm.py: Intégration avec les modèles de langagefind_parameter_usage.py: Analyse AST pour détecter l’utilisation des paramètres
- 🌐
ui_find_outdated_parameters/: Scraping de l’interface utilisateurfind_outdated_parameters.py: Détection des paramètres avec panneau orange
- 🚀
generate_consolidated_data.sh: Script wrapper orchestrant tout le workflow
Application de mise à jour
- 💻
tauri_outdated_parameters_app/: Application Tauri (Rust + Svelte)- Interface graphique pour visualiser et mettre à jour les paramètres
- Intégration avec le serveur MCP pour les appels LLM
- Génération automatique de Pull Requests
Serveurs et API
- 🔌
leximpact_mcp_server/: Serveurs MCP (Model Context Protocol)- Exposition d’outils pour les LLM (recherche Légifrance, extraction de valeurs, etc.)
Cas d’usage supplémentaires
- 💬
creation_cas_type/: Création conversationnelle de cas-type- Agent conversationnel pour générer des cas-type interactifs
Documentation et exemples
- 📚
documentation/: Documentation du projet (notebooks, guides) - 📓
notebooks/: Notebooks Jupyter d’expérimentation- ⚠️ Obsolète :
check_last_value_still_valid_on.ipynb(remplacé parconsolidate_parameters.py)
- ⚠️ Obsolète :
Données
- 💾
datasets/: Fichiers CSV générésparameters_consolidated.csv: ⭐ FICHIER PRINCIPAL - Toutes les données consolidéesof-fr-parameters.csv: (intermédiaire) Utilisation des paramètresoutdated_parameters.csv: (intermédiaire) Paramètres obsolètes UI- ⚠️ Obsolètes :
actifs_avec_ref.csv,no_ref.csv,last_ref_manquante.csv
🔄 Workflow complet
┌─────────────────────────────────────────────────────────┐
│ 1. Génération des données (automatique) │
│ ./generate_consolidated_data.sh │
│ │
│ ├─ analyze_all_parameters.py │
│ │ (France + Indirect-Taxation) │
│ │ │
│ ├─ find_outdated_parameters.py │
│ │ (Scraping UI) │
│ │ │
│ └─ consolidate_parameters.py │
│ (Fusion → parameters_consolidated.csv) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. Application Tauri │
│ cd tauri_outdated_parameters_app │
│ npm run tauri dev │
│ │
│ - Chargement de parameters_consolidated.csv │
│ - Filtrage et sélection des paramètres │
│ - Mise à jour avec LLM (via MCP) │
│ - Génération de PR │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. Publication │
│ - Commit + Push │
│ - Ouverture de Pull Request │
│ - Merge sur master │
│ - Rebuild branche wip-leximpact │
└─────────────────────────────────────────────────────────┘
↓
(Cycle recommence)
🎯 Fichiers clés
| Fichier | Description | Statut |
|---|---|---|
generate_consolidated_data.sh |
Script principal de génération | ⭐ À utiliser |
parameters_consolidated.csv |
Fichier consolidé unique | ⭐ Fichier principal |
WORKFLOW.md |
Documentation complète du workflow | 📚 Référence |
CHANGELOG_CONSOLIDATION.md |
Historique des changements v2.0 | 📚 Référence |
check_last_value_still_valid_on.ipynb |
Ancien notebook | ⚠️ Obsolète |
actifs_avec_ref.csv, no_ref.csv, etc. |
Anciens CSV séparés | ⚠️ Obsolètes |
📊 Statistiques du projet
- ~3463 paramètres analysés (3400 France + 63 Indirect-Taxation)
- 34 colonnes d’information par paramètre
- 1 seul fichier CSV au lieu de 5
- 80% de réduction du nombre de fichiers
- 100% de couverture des paramètres
Création conversationnelle de cas-type
Le dossier creation_cas_type contient le code pour la création conversationnelle de cas-type, permettant aux utilisateurs de générer des cas-type en interagissant avec un agent conversationnel.
Mise à jour des paramètres d’OpenFisca avec de l’IA
Résumé du projet
Le projet vise à automatiser la récupération et la mise à jour des paramètres fiscaux utilisés dans OpenFisca, un logiciel de microsimulation. L’objectif principal est de partir d’un identifiant OpenFisca, comme marche_travail.salaire_minimum.smic.smic_b_horaire pour le SMIC horaire, et d’extraire automatiquement les informations pertinentes, notamment :
- La description du paramètre : Smic brut (horaire)
- Sa valeur actuelle : 11.65€ au 1er janvier 2024
- La référence légale correspondante : Décret du 20/12/2023
Ce processus présente plusieurs défis :
- Gestion des cas où les références légales sont manquantes ou imprécises
- Mise à jour de l’historique des paramètres
- Traitement de textes juridiques longs et complexes
- Nécessité d’un modèle de langue performant en français et particulièrement en vocabulaire juridique
- Conversion des valeurs textuelles en format numérique
Pour relever ces défis, le projet combine des méthodes déterministes avec l’utilisation de grands modèles de langage (LLM).
L’approche a évolué au fil du temps :
- Juin 2023 : Premiers essais avec des modèles de langue libres, avec des résultats limités (environ 5% de réussite)
- Juillet-Août 2023 : Tentatives de fine-tuning et d’utilisation de modèles pour vérifier les valeurs existantes
- Avril 2024 : Mise en place d’un système de lecture/écriture des paramètres OpenFisca et intégration d’une base de données de textes législatifs
- Juillet 2024 : Implémentation d’agents de recherche basés sur des LLM avancés (comme GPT-4) pour trouver les références manquantes, avec des résultats prometteurs
Le projet vise à terme à créer un système robuste et efficace pour maintenir à jour les milliers de paramètres fiscaux d’OpenFisca, tout en explorant les possibilités offertes par l’intelligence artificielle dans le domaine juridique et administratif.
Une explication de l’approche retenue est disponible : Utilisation de l’IA pour la mise à jour de paramètres OpenFisca
- Présentation le 28 novembre 2023, dans le cadre du programme 10% (Etalab), à Guillaume Rozier, conseiller du président de la République sur le numérique et les données publiques.
- Présentation à la communauté OpenFisca le 25 juin 2024 : Voir le replay en anglais
- Présentation à Rules as Code Europe 2026 : Automating the Rules as Code Process with AI: Lessons from LexImpact
Ces travaux ont bénéficié d’un accès aux moyens de calcul de l’IDRIS au travers de l’allocation de ressources 2023-AD011014553 attribuée par GENCI.
Création de cette documentation
uv run nbdev-docs