Comment un agent IA fait de la recherche expérimentale pendant que vous dormez.
Autoresearch est un framework créé par Andrej Karpathy (ex-directeur IA chez Tesla, co-fondateur d'OpenAI) en mars 2026. L'idée fondatrice : au lieu d'écrire du code, on écrit un programme pour l'agent qui écrit le code.
Le concept repose sur trois piliers :
L'agent n'a le droit de modifier qu'un seul fichier (ex: train.py). Cela limite le périmètre d'action et rend chaque changement auditable.
Un script d'évaluation immuable mesure la performance (ex: val_bpb). Pas de subjectivité : le score monte ou descend.
Le fichier program.md remplace le chercheur humain. C'est un document qui décrit la boucle expérimentale, les règles de décision (keep/discard), et les gardes anti-régression.
Le cœur d'autoresearch est une boucle infinie en 4 étapes :
L'agent lit le code, analyse les erreurs du dernier run, et propose une modification ciblée. Ex : « Baisser le seuil de surface WC de 3.0 à 2.8m² ».
L'agent modifie le fichier, fait un git commit, puis lance le script d'évaluation. La sortie est redirigée vers un log pour ne pas polluer le contexte.
L'agent extrait la métrique du log (grep "^score:"). Si le grep est vide → crash. Sinon, il compare au score précédent.
Si le score s'améliore et que les gardes anti-régression passent → keep, on avance. Sinon → discard, git reset --hard HEAD~1. On log le résultat dans results.tsv et on recommence.
Voici à quoi ressemble le results.tsv après une session autonome sur nanochat :
Chaque ligne = une expérience complète (~5 min). L'agent a exploré des changements d'architecture, d'optimiseur, de taille de batch — trouvant des améliorations que des chercheurs humains avaient manquées.
Nous avons adapté le framework autoresearch à la classification de pièces BIM. L'adaptation est remarquable car notre domaine n'utilise aucun réseau de neurones — c'est de la recherche sur des règles métier.
Fichier modifiable : train.py
Métrique : val_bpb (↓ mieux)
Durée/run : 5 min (GPU)
Domaine : architecture LLM
Fichier modifiable : src/rules/*.py
Métrique : score combiné (↑ mieux)
Durée/run : ~30 sec (CPU)
Domaine : règles BIM
Voici une interaction réaliste avec l'agent sur notre classifieur :
Guide pas-à-pas, de zéro jusqu'à l'intégration des résultats.
python --version)git --version)git clone https://github.com/Lksdlvx/spatial-graph-classifier.git)npx -y @anthropic-ai/gemini-cli puis ouvrir le dossier du projetOuvrez le dossier du projet dans votre éditeur IA, puis donnez exactement ce prompt :
L'agent va automatiquement :
autoresearch/program.md (les instructions pour l'agent)jun02) et créer la branche autoresearch/jun02python run_baseline.py → score initialresults.tsv avec la ligne de baselineVous n'avez rien à faire. L'agent boucle en autonomie. Si vous voulez suivre en direct :
results.tsv se remplit au fur et à mesuregit log --onelineLa session produit un fichier results.tsv dans le dossier autoresearch/ :
Le score s'est amélioré et les gardes anti-régression sont passées (P1 ≥ 99.0%, P2 ≥ 94.0%). Le commit est conservé.
Le score a baissé, une garde a échoué, ou le code a crashé. Le commit est annulé (git reset --hard HEAD~1).
Si la session a produit des améliorations (lignes keep), fusionnez la branche :
C'est normal avec certains outils qui ont une limite de contexte. Relancez avec :
C'est probablement que l'agent a déjà fait des modifications sur la branche. Vérifiez avec git diff main. Si vous voulez repartir de zéro : git checkout main && git branch -D autoresearch/<tag>.
Ajoutez au prompt : « Ne modifie que les fichiers dans src/rules/ et src/blind_classifier.py. Tous les autres sont read-only. »
Si la branche existe déjà :
Au-delà de l'optimisation de seuils, la méthode autoresearch ouvre des axes de recherche radicalement nouveaux :
Idée : Le fichier apartment_clustering_v2.py est actuellement read-only. Mais on pourrait créer un second pipeline autoresearch dédié, avec sa propre métrique (ex: Adjusted Rand Index entre clusters prédits et clusters réels).
Pourquoi c'est intéressant : Un meilleur clustering en amont = des meilleures passes 3/4 en aval. C'est un effet multiplicateur.
Interaction illustrée :
Idée : Au lieu d'un score unique, optimiser simultanément accuracy et simplicité du code (nombre de lignes, complexité cyclomatique). L'agent cherche le front de Pareto : les solutions qui sont à la fois précises et simples.
Pourquoi c'est intéressant : Cela formalise le « simplicity criterion » de Karpathy en une vraie métrique. L'agent pourrait découvrir qu'on peut supprimer 30% des règles sans perdre en accuracy.
Métrique proposée :
Idée : Le plugin Revit qui exporte le JSON (EngineAntigravity) décide quelles features extraire. Un autoresearch en amont pourrait explorer : quelles données supplémentaires du modèle BIM faudrait-il exporter ?
Exemples de features inexplorées :
Boucle : L'agent propose une feature → on l'ajoute à l'export → on mesure si l'accuracy monte.
Idée : Un second agent (l'adversaire) génère des configurations de pièces synthétiques conçues pour tromper le classifieur. Le premier agent doit ensuite corriger les règles pour résister.
Pourquoi c'est intéressant : C'est l'approche GAN appliquée à des règles métier. L'adversaire découvre les failles, le défenseur les colmate. La robustesse explose.
Interaction illustrée :
Idée : L'algorithme Weisfeiler-Lehman utilise 44 templates d'appartements connus. Un autoresearch pourrait découvrir automatiquement de nouveaux templates à partir des données existantes.
Boucle :
graph_templates.py comme nouveaux templatesPotentiel : Chaque nouveau template matché = classification instantanée avec confiance 1.0. C'est le ROI le plus élevé possible par règle ajoutée.
Idée : Aujourd'hui le classifieur cible le logement résidentiel. Mais la méthode autoresearch permet d'adapter le système à d'autres typologies de bâtiments sans expertise humaine préalable.
Nouveau programme : L'agent reçoit un dataset de bureaux labellisé (open-space, salle de réunion, sanitaires, accueil…) et une copie vierge du classifieur. Il part de zéro et construit ses propres règles par exploration autonome.
Potentiel : Un classifieur universel multi-typologies, où chaque domaine a été exploré par des centaines d'expériences automatisées.
Idée : Lancer N agents en parallèle sur des branches séparées, chacun avec un program.md légèrement différent (un plus conservateur, un plus radical, un spécialisé sur les faux positifs…). Après 100 expériences chacun, on fusionne les meilleures découvertes.
Variante : Chaque agent travaille avec un LLM différent (Claude, Gemini, GPT) pour maximiser la diversité d'approches.
Interaction illustrée :
program.md est lui-même un sujet de recherche. Comme le dit Karpathy : « Vous ne programmez plus le programme — vous programmez le programme qui programme le programme. » Itérer sur le program.md (ton, niveau de détail, stratégie d'exploration) peut avoir autant d'impact que les expériences elles-mêmes.