Évolution des prompts au lieu du RL : les coulisses du framework GEPA
L'ajustement des instructions système et des agents se transforme généralement en retouches textuelles manuelles sans fin. Corrigez une formulation — améliorez la logique, mais cassiez le formatage de sortie. Utiliser l'apprentissage par renforcement comme GRPO pour de tels ajustements est trop coûteux : les algorithmes nécessitent des dizaines de milliers d'exécutions, et tous les retours se résument à un seul score.
Récemment, j'ai exploré le dépôt GEPA (Genetic-Pareto). Le projet est développé par des chercheurs de Berkeley et Stanford, offrant une approche fondamentalement différente pour optimiser n'importe quel paramètre textuel.
L'idée centrale du projet
Les optimiseurs classiques traitent le système comme une boîte noire : ils obtiennent un score numérique en sortie et essaient de deviner où aller ensuite. GEPA fonctionne différemment. Le framework fournit au réseau de neurones l'ensemble du journal d'exécution — erreurs, sortie du profileur, traces de pile et raisonnement intermédiaire.
Le modèle analyse ces données de la même manière qu'un développeur lors du débogage. Il identifie la cause spécifique d'un échec et suggère des corrections ciblées. Ensuite, un algorithme génétique entre en jeu avec des considérations de front de Pareto : le système préserve les variantes textuelles qui performent le mieux sur différents sous-ensembles de tâches.
Ce que le framework peut accomplir
Cette approche permet l'ajustement automatique de divers éléments :
- Prompts pour des modèles individuels ou des chaînes dans DSPy et LangChain
- Architecture des agents et leurs ensembles de compétences
- Règles de planification des tâches et fichiers de configuration
- Descriptions des outils pour le protocole MCP
Dans les tests des auteurs, le modèle GPT-4.1 Mini a amélioré la précision sur le benchmark mathématique AIME de 46,6% à 56,6% après une centaines d'itérations. Les ingénieurs de Databricks ont utilisé GEPA pour réduire leurs coûts d'opération des agents de 90x sans perdre en qualité.
Comment fonctionne le processus d'optimisation
Le framework opère dans une boucle de cinq étapes séquentielles :
- Sélection du candidat depuis le front de Pareto. Le système choisit une variante qui a montré le résultat maximal sur un groupe de test spécifique.
- Exécution sur un petit jeu de données. Pendant cette étape, tous les journaux d'exécution et erreurs sont collectés.
- Réflexion. Le modèle réflecteur lit les journaux d'échecs textuels et formule des diagnostics.
- Mutation. Une nouvelle version du prompt ou du code est créée, tenant compte des erreurs passées de tous les ancêtres.
- Décision. Le nouveau candidat est ajouté au pool partagé s'il a démontré une amélioration réelle.
Tous les diagnostics sont appelés Actionable Side Information dans la terminologie des auteurs. En optimisation textuelle, cela sert d'équivalent du gradient de l'apprentissage automatique traditionnel.

Comment écrire du code
Vous pouvez installer la bibliothèque depuis PyPI :
pip install gepa
Le projet a une API simple appelée optimize_anything. Elle vous permet d'ajuster non seulement les prompts mais aussi n'importe quel artefact textuel :
import gepa.optimize_anything as oa
from gepa.optimize_anything import GEPAConfig, EngineConfig, optimize_anything
def evaluate(candidate: str) -> float:
result = run_my_system(candidate)
oa.log(f"Output: {result.output}")
oa.log(f"Error: {result.error}")
return result.score
result = optimize_anything(
seed_candidate="Начальный текст инструкции или кода",
evaluator=evaluate,
objective="Уменьшить количество ошибок форматирования вывода",
config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)
Les logs envoyés via oa.log() sont exactement ce qui est transmis au modèle réflecteur pour la détection d'erreurs. Si vous utilisez déjà DSPy, l'outil est disponible prêt à l'emploi comme dspy.GEPA.
Quand l'ajustement via GEPA vaut vraiment le coup
La méthode fonctionne mieux dans les scénarios suivants :
- Exécuter des agents avec de nombreux outils externes
- Petits jeux de données d'entraînement avec seulement 5–10 exemples
- Modèles fermés sans accès aux poids via API
- Appels coûteux ou lents, y compris la compilation de code et les simulations
Là où le RL nécessite 5 000–25 000 exécutions pour converger, cet algorithme n'a généralement besoin que de 100–500 évaluations.
En conclusion
Le framework aborde le sujet douloureux de l'ajustement manuel des instructions textuelles. C'est bien que l'outil ait déjà été intégré dans MLflow, Pydantic AI et Google ADK, vous n'aurez donc pas besoin de traîner beaucoup de code supplémentaire dans votre projet. Commencez par le court tutoriel dans la documentation ou exécutez optimize_anything sur quelques-uns de vos prompts les plus problématiques.
Projets similaires