Composer : construire un modèle de pointe rapide avec RL
Composer est notre nouveau modèle d’agent conçu pour l’intelligence et la rapidité en génie logiciel. Sur nos benchmarks, le modèle atteint des résultats de pointe en programmation avec une vitesse de génération quatre fois supérieure à celle de modèles similaires.
Nous obtenons ces résultats en entraînant le modèle à relever de vrais défis de génie logiciel dans de grandes bases de code. Pendant l’entraînement, Composer a accès à un ensemble d’outils de recherche et d’édition utilisés en production et doit résoudre efficacement un large éventail de problèmes difficiles. Le résultat final est un modèle à grande échelle optimisé pour une utilisation à très haute vitesse comme agent dans Cursor.


Notre motivation vient de notre expérience de développement de Cursor Tab, notre modèle de complétion personnalisé. Nous avons constaté que les développeurs veulent souvent le modèle le plus intelligent possible, tout en restant compatible avec un usage interactif, afin de les maintenir dans leur flux de développement. Au cours de notre processus de développement, nous avons expérimenté un prototype de modèle d’agent, nom de code Cheetah, pour mieux comprendre l’impact de modèles d’agent plus rapides. Composer est une version plus intelligente de ce modèle, qui rend l’expérience de programmation agréable en étant suffisamment rapide pour une interaction en temps réel.
Composer est un modèle de langage de type mixture-of-experts (MoE) prenant en charge la génération et la compréhension sur de longs contextes. Il est spécialisé pour le génie logiciel grâce à l’apprentissage par renforcement (RL) dans une large diversité d’environnements de développement. À chaque itération d’entraînement, le modèle reçoit une description de problème et l’instruction de produire la meilleure réponse possible, que ce soit une modification de code, un plan ou une réponse explicative. Le modèle a accès à des outils simples, comme la lecture et l’édition de fichiers, ainsi qu’à des outils plus puissants comme des commandes de terminal et une recherche sémantique à l’échelle de la base de code.
Pour mesurer les progrès, nous avons conçu une évaluation qui mesure aussi fidèlement que possible l’utilité d’un modèle pour un développeur. Notre benchmark, Cursor Bench, est constitué de vraies requêtes adressées à l’agent par des ingénieurs et des chercheurs chez Cursor, accompagnées de solutions optimales soigneusement élaborées à la main pour ces requêtes. L’évaluation qui en résulte mesure non seulement la justesse de l’agent, mais aussi son respect des abstractions existantes d’une base de code et des pratiques de génie logiciel.


L’apprentissage par renforcement nous permet de spécialiser activement le modèle pour un génie logiciel efficace. Comme la vitesse de réponse est un élément crucial pour le développement interactif, nous incitons le modèle à faire des choix efficaces dans l’usage des outils et à maximiser le parallélisme chaque fois que possible. En outre, nous entraînons le modèle à être un assistant utile en minimisant les réponses inutiles et les affirmations faites sans preuve. Nous constatons également que, pendant le RL, le modèle apprend de lui-même des comportements utiles comme effectuer des recherches complexes, corriger des erreurs de linter, et écrire et exécuter des tests unitaires.


L’entraînement efficace de grands modèles MoE nécessite un investissement important dans la création d’infrastructures et la recherche en systèmes. Nous avons construit une infrastructure d’entraînement personnalisée s’appuyant sur PyTorch et Ray pour prendre en charge l’apprentissage par renforcement asynchrone à grande échelle. Nous entraînons nos modèles de manière native en basse précision en combinant nos noyaux MoE MXFP8 avec du parallélisme d’experts et un parallélisme de données fragmenté hybride, ce qui nous permet de faire monter l’entraînement en charge jusqu’à des milliers de GPU NVIDIA avec un coût de communication minimal. De plus, l’entraînement avec MXFP8 nous permet de proposer des vitesses d’inférence plus élevées sans nécessiter de quantification après l’entraînement.
Pendant l’RL, nous voulons que notre modèle puisse appeler n’importe quel outil dans le harness de Cursor Agent. Ces outils permettent de modifier du code, d’utiliser la recherche sémantique, de faire des grep de chaînes et d’exécuter des commandes de terminal. À notre échelle, apprendre au modèle à appeler efficacement ces outils nécessite l’exécution de centaines de milliers d’environnements de développement isolés et concurrents dans le cloud. Pour prendre en charge cette charge de travail, nous avons adapté l’infrastructure existante que nous avons construite pour les Background Agents, en réécrivant notre ordonnanceur de machines virtuelles afin de gérer le caractère très irrégulier et l’échelle des runs d’entraînement. Cela a permis une unification transparente des environnements d’RL avec les environnements de production.
Cursor crée des outils pour l’ingénierie logicielle, et nous faisons un usage intensif des outils que nous développons. Une motivation du développement de Composer a été de créer un agent que nous aurions envie d’utiliser nous‑mêmes dans notre travail. Ces dernières semaines, nous avons constaté que nombre de nos collègues utilisaient Composer pour leur développement logiciel au quotidien. Avec cette version, nous espérons que vous le trouverez, vous aussi, précieux.
—
¹ Évalué sur un benchmark interne dans le harness d’outils Cursor. Nous regroupons les modèles en classes en fonction de leur score et présentons le meilleur modèle de chaque classe. « Fast Frontier » inclut des modèles conçus pour une inférence efficace comme Haiku 4.5 et Gemini Flash 2.5. « Best Open » inclut les récentes publications de modèles à poids ouverts comme Qwen Coder et GLM 4.6. « Frontier 7/2025 » est le meilleur modèle disponible en juillet de cette année. « Best Frontier » inclut GPT-5 et Sonnet 4.5, qui surpassent tous deux Composer. Pour le calcul des tokens par seconde, les tokens sont standardisés entre les modèles selon le tokenizer Anthropic le plus récent.