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

Ce 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ètres
    • analyze_all_parameters.py : Analyse de l’utilisation des paramètres dans le code
    • consolidate_parameters.py : Consolidation de toutes les données en un fichier unique
    • openfisca_param.py : Manipulation des paramètres OpenFisca (lecture/écriture YAML)
    • legidb.py : Interface avec la base de données Légifrance
    • llm.py : Intégration avec les modèles de langage
    • find_parameter_usage.py : Analyse AST pour détecter l’utilisation des paramètres
  • 🌐 ui_find_outdated_parameters/ : Scraping de l’interface utilisateur
    • find_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é par consolidate_parameters.py)

Données

  • 💾 datasets/ : Fichiers CSV générés
    • parameters_consolidated.csv : ⭐ FICHIER PRINCIPAL - Toutes les données consolidées
    • of-fr-parameters.csv : (intermédiaire) Utilisation des paramètres
    • outdated_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

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