Présentation du problème

Les agents IA basés sur les modèles de langage (LLM) sont très performants dans les tâches de développement de logiciels, mais ils ont du mal à effectuer des tâches simples sur les interfaces graphiques utilisateur (GUI). Les benchmarks tels que OSWorld-V2 et Agents' Last Exam montrent que les meilleurs modèles n'atteignent que des taux de complétion de 20,6% et 26,2% respectivement.

Limites des approches actuelles

Les approches actuelles pour améliorer l'utilisation des ordinateurs par les agents IA se concentrent sur l'augmentation de la taille des modèles et du nombre de tokens. Cependant, cela ne résout pas le problème fondamental : les agents IA ont du mal à utiliser les interfaces. Les tâches telles que cliquer sur des boutons, remplir des formulaires et naviguer sur des sites web sont difficiles pour les agents IA, car ils doivent contourner les limitations des interfaces.

Analyse de la cause profonde

La cause profonde du problème est que les agents IA utilisent des méthodes de contournement pour éviter d'utiliser les interfaces. Par exemple, au lieu de cliquer sur un bouton, ils injectent du code JavaScript pour accéder directement à l'API du site web. Cela peut être vu comme avantageux, mais cela peut également avoir des effets secondaires inattendus et rendre les tâches plus complexes qu'elles ne le sont en réalité.

Vers une nouvelle approche

Pour résoudre ce problème, il est nécessaire de repenser les approches actuelles et de séparer la planification de l'exécution. Une approche vision-first peut être utilisée, en traitant l'écran comme un environnement dynamique et en poursuivant des temps de réaction humains. Cela nécessite l'introduction d'un système de manipulation qui prend soin du contrôle moteur, permettant ainsi aux agents IA d'utiliser les interfaces de manière plus efficace.

Exemple de code pour une approche vision-first :
// Obtenir une capture d'écran et une représentation textuelle de l'environnement
// Utiliser un modèle de langage pour raisonner sur la capture d'écran
// Sortie : une commande d'outil telle que click(elem[#submit])
// Exécuter la commande
// Répéter