Articles · arXiv 2407.16741
OpenHands : Une plateforme ouverte pour les développeurs logiciels IA en tant qu'agents généralistes
OpenHands: An Open Platform for AI Software Developers as Generalist Agents
Publié le cs.SEcs.AIcs.CL arXivPDF
Résumé en trois lignes
- 🎯 Concevoir, maintenir et évaluer en toute sécurité des agents logiciels IA sur diverses tâches de code et web nécessite des bacs à sable standardisés, des outils et des benchmarks reproductibles.
- 🔧 OpenHands associe une architecture de flux d'événements à des bacs à sable Docker, une bibliothèque AgentSkills extensible, la navigation via BrowserGym, la délégation multi-agents et des tests d'intégration avec des LLM simulés (mocked).
- 📈 En utilisant Claude 3.5 Sonnet sans ajustement de prompt spécifique au benchmark, CodeActAgent atteint un taux de résolution de 26,0 % sur SWE-Bench Lite, 15,3 % sur WebArena et 52,0 % sur GPQA Diamond.
Résumé
Le logiciel est l'un des outils les plus puissants à la disposition des humains ; il permet à un programmeur qualifié d'interagir avec le monde de manière complexe et profonde. Parallèlement, grâce aux progrès des grands modèles de langage (LLM), on assiste également à un développement rapide des agents IA qui interagissent avec leur environnement et y apportent des modifications. Dans cet article, nous présentons OpenHands (anciennement OpenDevin), une plateforme pour le développement d'agents IA puissants et flexibles qui interagissent avec le monde de manière similaire à celle d'un développeur humain : en écrivant du code, en interagissant avec une ligne de commande et en naviguant sur le Web. Nous décrivons comment la plateforme permet l'implémentation de nouveaux agents, une interaction sécurisée avec des environnements en bac à sable (sandbox) pour l'exécution de code, la coordination entre plusieurs agents et l'intégration de benchmarks d'évaluation. Sur la base de nos benchmarks actuellement intégrés, nous réalisons une évaluation des agents sur 15 tâches exigeantes, incluant l'ingénierie logicielle (par exemple, SWE-BENCH) et la navigation Web (par exemple, WEBARENA), entre autres. Publié sous la licence permissive MIT, OpenHands est un projet communautaire réunissant le monde universitaire et l'industrie avec plus de 2,1k contributions provenant de plus de 188 contributeurs.
Résumé original (anglais)
Software is one of the most powerful tools that we humans have at our disposal; it allows a skilled programmer to interact with the world in complex and profound ways. At the same time, thanks to improvements in large language models (LLMs), there has also been a rapid development in AI agents that interact with and affect change in their surrounding environments. In this paper, we introduce OpenHands (f.k.a. OpenDevin), a platform for the development of powerful and flexible AI agents that interact with the world in similar ways to those of a human developer: by writing code, interacting with a command line, and browsing the web. We describe how the platform allows for the implementation of new agents, safe interaction with sandboxed environments for code execution, coordination between multiple agents, and incorporation of evaluation benchmarks. Based on our currently incorporated benchmarks, we perform an evaluation of agents over 15 challenging tasks, including software engineering (e.g., SWE-BENCH) and web browsing (e.g., WEBARENA), among others. Released under the permissive MIT license, OpenHands is a community project spanning academia and industry with more than 2.1K contributions from over 188 contributors.
Guide de lecture
Problème et motivation
Le développement logiciel constitue l'une des interfaces les plus expressives par lesquelles les humains interagissent avec le monde numérique. Si les grands modèles de langage (LLM) peuvent générer des extraits de code isolés, l'ingénierie logicielle en conditions réelles exige des interactions à long terme : naviguer dans des dépôts, modifier des architectures multi-fichiers, exécuter des commandes bash, lire la documentation via des navigateurs web et s'autodéboguer grâce aux retours d'exécution.
Les frameworks d'agents antérieurs souffraient souvent de lacunes architecturales majeures : manque d'environnements d'exécution isolés, exécuteurs de code sans état (stateless), absence de capacités de navigation web multimodale ou absence d'outils d'évaluation standardisés sur des domaines hétérogènes. OpenHands (anciennement OpenDevin) répond à ce besoin avec une plateforme open source (sous licence MIT) offrant des environnements d'exécution en bac à sable (sandbox), des interfaces agent-machine (ACI) extensibles, une coordination multi-agents et une évaluation comparative standardisée.
Idées clés
- Architecture de flux d'événements (Event Stream) : Les instructions utilisateur, les actions des agents et les observations à l'exécution sont suivies chronologiquement dans un flux d'événements qui unifie la communication entre les interfaces utilisateur, les agents et les environnements d'exécution sandboxés.
- Primitives en langages de programmation (PL) : Au lieu d'API personnalisées fragiles, les interactions des agents reposent sur des actions génériques :
IPythonRunCellAction,CmdRunActionetBrowseInteractiveAction(via BrowserGym). - AgentSkills extensible : Un package Python modulaire préchargé dans le noyau IPython fournit des utilitaires de haut niveau (par exemple, l'édition de lignes basée sur l'AST
edit_file, l'analyse de PDF, l'extraction d'images multimodales) sans réinventer les packages existants. - Délégation d'agents : Des agents spécialistes gèrent des flux de travail propres à leur domaine (par exemple, déléguer des tâches web via
AgentDelegateActionà unBrowsingAgentdédié). - Contrôle qualité via des tests simulés (mocked) : Des tests d'intégration continue de routine évaluent les régressions de prompts, les actions et la stabilité du bac à sable à l'aide d'une mise en cache déterministe des paires prompt-réponse, évitant ainsi des appels d'API en temps réel coûteux.
Méthode (avec les équations clés)
Le cycle d'exécution d'OpenHands fonctionne selon une fonction d'étape discrète où l'agent mappe un état de l'environnement à une action : Ici, l'état résume l'historique chronologique des actions et observations antérieures : où assure le suivi des métadonnées d'état auxiliaires (coût cumulé des LLM, pile de délégation multi-agents active, paramètres de configuration).
L'espace d'action comprend :
CmdRunAction(command): Exécute des commandes bash arbitraires dans le shell Linux cible.IPythonRunCellAction(code): Exécute du code Python avec état dans un noyau Jupyter persistant, exposantAgentSkills.BrowseInteractiveAction(code): Exécute des primitives BrowserGym pilotées par Playwright (click(bid),fill(bid, val),goto(url), etc.).AgentDelegateAction(subtask, agent_name): Empile un sous-objectif sur la pile de l'agent pour invoquer un spécialiste.AgentFinishAction(): Termine l'exécution.
L'exécution a lieu dans un bac à sable Docker client-serveur sécurisé. Les conteneurs Docker de base sont étendus avec un serveur d'API REST OpenHands (runtime.py), étiquetés à l'aide d'un double mécanisme de taggage : un hash MD5 du contenu (target_image_repo:target_image_hash_tag) pour une reproductibilité stricte, et un tag générique sémantique (runtime:oh_v{VERSION}_{BASE_IMAGE}_tag_{IMAGE_TAG}) pour la mise en cache des builds de couches de base.
Résultats (avec les chiffres les plus importants)
OpenHands évalue les agents généralistes sur 15 benchmarks couvrant l'ingénierie logicielle, la navigation web et l'assistance générale sans adaptation de prompt par benchmark :
- SWE-Bench Lite (300 instances, sans indices) :
CodeActAgent v1.8avecclaude-3-5-sonnet@20240620obtient un taux de résolution de (coût moyen de 1,10 $ par instance), surpassantSWE-Agent() etAutoCodeRover(), et approchantAider(). - HumanEvalFix (164 instances) :
CodeActAgent v1.5avecgpt-4o-2024-05-13résout dans une configuration d'autodébogage 0-shot (contre pour StarCoder2-15B). - WebArena (812 instances) :
BrowsingAgent v1.0atteint en utilisantclaude-3-5-sonnetet avecgpt-4o, tandis queCodeActAgent v1.8via délégation atteint . - MiniWoB++ (125 environnements) : En zéro-shot,
BrowsingAgent v1.0avecgpt-4oatteint . - Assistance générale et raisonnement :
- GPQA Diamond : CodeActAgent v1.8 +
claude-3-5-sonnetobtient (en deçà de la référence humaine experte à , mais dépassant le CoT few-shot de GPT-4 à ). - GAIA (Validation L1) : GPTSwarm v1.0 avec
gpt-4oatteint ( pour AutoGPT). - AgentBench (sous-ensemble OS) : CodeActAgent v1.5 atteint .
- MINT (Math / Code) : CodeActAgent v1.5 atteint en mathématiques et en code.
- GPQA Diamond : CodeActAgent v1.8 +
Limites et questions ouvertes
- Modifications de fichiers longs : Les primitives d'édition actuelles rencontrent des difficultés lors du traitement de dépôts volumineux ou de fichiers sources étendus où les décalages de numéros de ligne introduisent des conflits de modification.
- Intégration multimodale : Bien que les compétences auxiliaires (
parse_image,parse_pdf) extraient du texte ou des résumés d'images via des modèles de vision externes, le raisonnement multimodal natif au niveau du navigateur et du terminal n'est pas encore totalement unifié. - Automatisation des flux de travail : Les flux de travail reposent encore fortement sur des prompts système conçus manuellement et des boucles d'orchestration d'agents plutôt que sur des architectures de graphes automatiquement optimisées (par exemple, GPTSwarm).
Termes clés
- OpenHands
- Une plateforme open source et communautaire pour concevoir, déployer et évaluer des agents développeurs logiciels IA dans des environnements en bac à sable.
- CodeAct
- Une architecture d'agent où l'espace d'action est unifié autour de l'exécution de code dans un langage de programmation arbitraire (Python, bash, actions de navigateur) plutôt que de schémas JSON rigides.
- Event Stream
- Un journal chronologique en ajout seul qui trace les actions des agents, les interventions des utilisateurs et les observations de l'environnement au sein de l'environnement d'exécution OpenHands.
- AgentSkills
- Un package d'utilitaires Python modulaire injecté dans le noyau IPython sandboxé qui fournit aux agents des fonctions d'édition de fichiers, de navigation et d'analyse de documents.
- BrowserGym
- Un environnement d'automatisation de navigateur et un langage d'action dédié basé sur Playwright utilisé par OpenHands pour les tâches de navigation web.
- Agent Runtime
- L'environnement d'exécution client-serveur isolé fonctionnant dans un conteneur Docker qui prend en charge les commandes bash, les cellules de code IPython et les sessions de navigation.
- AgentDelegateAction
- Un type d'action spécialisé permettant à un agent généraliste principal de déléguer des sous-tâches spécifiques à un agent spécialiste du domaine concerné.
- SWE-Bench
- Un benchmark évaluant la capacité d'un agent à résoudre des issues GitHub réelles et à faire passer des suites de tests unitaires sans intervention humaine.
Questions
Quelle est la différence entre OpenHands et OpenDevin ?
OpenHands est la suite officielle et le nouveau nom d'OpenDevin, qui a évolué d'une réimplémentation ouverte du système Devin de Cognition vers une plateforme généraliste pour le développement logiciel et les agents numériques généralistes.
Comment OpenHands garantit-il la sécurité lors de l'exécution de code arbitraire ?
Toutes les actions de l'agent (commandes shell, extraits Python et actions de navigation) s'exécutent dans un conteneur sandbox Docker isolé qui communique avec le backend via un client API REST, protégeant ainsi le système hôte.
Comment OpenHands évite-t-il les appels LLM coûteux pendant les tests automatisés ?
Le framework intègre une suite de tests d'intégration de bout en bout qui intercepte les requêtes LLM et renvoie des paires prompt-réponse déterministes mises en cache, ne rappelant les modèles réels que lorsque des modifications cassantes affectent les prompts.
OpenHands peut-il fonctionner avec des images Docker utilisateur personnalisées ?
Oui. OpenHands fournit un flux de build qui installe son serveur d'API d'exécution d'actions par-dessus n'importe quelle image Docker de base fournie par l'utilisateur, en assurant le suivi des builds via des hashs MD5 des sources et des tags génériques.
La présentation de cette page a été rédigée par une IA à partir de l'article et peut contenir des erreurs. Consultez l'article pour les détails.