🌐 [Blog S2] 📄 [Article S2] 🎥 [Vidéo S2]
🌐 [Blog S1] 📄 [Article S1 (ICLR 2025)] 🎥 [Vidéo S1]
Bienvenue dans Agent S, un framework open-source conçu pour permettre une interaction autonome avec les ordinateurs via l'Interface Agent-Ordinateur. Notre mission est de créer des agents GUI intelligents capables d'apprendre des expériences passées et d'exécuter des tâches complexes de manière autonome sur votre ordinateur.
Que vous soyez intéressé par l'IA, l'automatisation ou que vous souhaitiez contribuer à des systèmes d'agents de pointe, nous sommes ravis de vous accueillir !
Taux de réussite (%) d'Agent S2 sur l'ensemble de test complet d'OSWorld en utilisant uniquement des captures d'écran.
Benchmark | Agent S2 | Ancien SOTA | Δ amélioration |
---|---|---|---|
OSWorld (15 étapes) | 27.0% | 22.7% (UI-TARS) | +4.3% |
OSWorld (50 étapes) | 34.5% | 32.6% (OpenAI CUA) | +1.9% |
WindowsAgentArena | 29.8% | 19.5% (NAVI) | +10.3% |
AndroidWorld | 54.3% | 46.8% (UI-TARS) | +7.5% |
❗Avertissement❗ : Si vous êtes sur une machine Linux, la création d'un environnement
conda
interférera avecpyatspi
. À ce jour, il n'existe pas de solution propre à ce problème. Procédez à l'installation sans utiliserconda
ni aucun environnement virtuel.
⚠️Avertissement⚠️ : Pour exploiter pleinement le potentiel d'Agent S2, nous utilisons UI-TARS comme modèle d'ancrage (7B-DPO ou 72B-DPO pour de meilleures performances). Ils peuvent être hébergés localement ou sur Hugging Face Inference Endpoints. Notre code prend en charge Hugging Face Inference Endpoints. Consultez Hugging Face Inference Endpoints pour plus d'informations sur la configuration et l'interrogation de ce point de terminaison. Cependant, l'exécution d'Agent S2 ne nécessite pas ce modèle, et vous pouvez utiliser d'autres modèles basés sur des API pour l'ancrage visuel, comme Claude.
Installez le package :
pip install gui-agents
Définissez vos clés d'API LLM et autres variables d'environnement. Vous pouvez le faire en ajoutant la ligne suivante à votre fichier .bashrc (Linux) ou .zshrc (MacOS).
export OPENAI_API_KEY=<YOUR_API_KEY>
export ANTHROPIC_API_KEY=<YOUR_ANTHROPIC_API_KEY>
export HF_TOKEN=<YOUR_HF_TOKEN>
Alternativement, vous pouvez définir la variable d'environnement dans votre script Python :
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
Nous prenons également en charge Azure OpenAI, Anthropic, Gemini, Open Router et l'inférence vLLM. Pour plus d'informations, consultez models.md.
Agent S fonctionne mieux avec la récupération de connaissances web. Pour activer cette fonctionnalité, vous devez configurer Perplexica :
Assurez-vous que Docker Desktop est installé et en cours d'exécution sur votre système.
Accédez au répertoire contenant les fichiers du projet.
cd Perplexica
git submodule update --init
Renommez le fichier sample.config.toml
en config.toml
. Pour les configurations Docker, vous n'avez besoin de remplir que les champs suivants :
OPENAI
: Votre clé API OpenAI. Vous ne devez remplir ce champ que si vous souhaitez utiliser les modèles d'OpenAI.
OLLAMA
: Votre URL API Ollama. Vous devez l'entrer sous la forme http://host.docker.internal:PORT_NUMBER
. Si vous avez installé Ollama sur le port 11434, utilisez http://host.docker.internal:11434
. Pour d'autres ports, ajustez en conséquence. Vous devez remplir ce champ si vous souhaitez utiliser les modèles d'Ollama au lieu de ceux d'OpenAI.
GROQ
: Votre clé API Groq. Vous ne devez remplir ce champ que si vous souhaitez utiliser les modèles hébergés par Groq.
ANTHROPIC
: Votre clé API Anthropic. Vous ne devez remplir ce champ que si vous souhaitez utiliser les modèles d'Anthropic.
Remarque : Vous pouvez modifier ces paramètres après avoir démarré Perplexica depuis la boîte de dialogue des paramètres.
SIMILARITY_MEASURE
: La mesure de similarité à utiliser (ce champ est rempli par défaut ; vous pouvez le laisser tel quel si vous n'êtes pas sûr).
Assurez-vous d'être dans le répertoire contenant le fichier docker-compose.yaml
et exécutez :
docker compose up -d
Exportez votre URL Perplexica en utilisant le port trouvé dans le fichier docker-compose.yaml
sous app/ports
, vous verrez 3000:3000
. Le port est le nombre à gauche (dans ce cas, 3000).
export PERPLEXICA_URL=http://localhost:{port}/api/search
Notre implémentation d'Agent S intègre l'API Perplexica pour ajouter une fonctionnalité de moteur de recherche, ce qui permet une expérience utilisateur plus pratique et réactive. Si vous souhaitez adapter l'API à vos paramètres et exigences spécifiques, vous pouvez modifier l'URL et les paramètres de requête dans agent_s/query_perplexica.py
. Pour un guide complet sur la configuration de l'API Perplexica, consultez la Documentation de l'API de recherche Perplexica.
Pour un guide d'installation et d'utilisation plus détaillé, consultez le Dépôt Perplexica.
❗Avertissement❗ : L'agent exécutera directement du code Python pour contrôler votre ordinateur. Veuillez l'utiliser avec prudence.
Remarque : Notre meilleure configuration utilise Claude 3.7 avec une réflexion étendue et UI-TARS-72B-DPO. Si vous ne pouvez pas exécuter UI-TARS-72B-DPO en raison de contraintes de ressources, UI-TARS-7B-DPO peut être utilisé comme alternative plus légère avec une dégradation minimale des performances.
Exécutez Agent S2 avec un modèle spécifique (par défaut gpt-4o
) :
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--grounding_model_provider "anthropic" \
--grounding_model "claude-3-7-sonnet-20250219" \
Ou utilisez un point de terminaison personnalisé :
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--endpoint_provider "huggingface" \
--endpoint_url "<endpoint_url>/v1/"
--provider
, --model
--provider "anthropic" --model "claude-3-7-sonnet-20250219"
--model_url
, --model_api_key
gui-agents
utilisera par défaut vos variables d'environnement pour l'URL et la clé API.Vous pouvez utiliser soit la Configuration 1, soit la Configuration 2 :
--grounding_model_provider
, --grounding_model
--grounding_model_provider "anthropic" --grounding_model "claude-3-7-sonnet-20250219"
--grounding_model_resize_width
--grounding_model_resize_width 1366
(Anthropic)--endpoint_provider
--endpoint_url
--endpoint_api_key
gui-agents
utilisera par défaut vos variables d'environnement pour la clé API.Remarque : La Configuration 2 prend le pas sur la Configuration 1.
Cela affichera une invite de requête utilisateur où vous pouvez entrer votre requête et interagir avec Agent S2. Vous pouvez utiliser n'importe quel modèle de la liste des modèles pris en charge dans models.md.
gui_agents
Tout d'abord, nous importons les modules nécessaires. AgentS2
est la classe principale de l'agent pour Agent S2. OSWorldACI
est notre agent d'ancrage qui traduit les actions de l'agent en code Python exécutable.
import pyautogui
import io
from gui_agents.s2.agents.agent_s import AgentS2
from gui_agents.s2.agents.grounding import OSWorldACI
# Load in your API keys.
from dotenv import load_dotenv
load_dotenv()
current_platform = "linux" # "darwin", "windows"
Ensuite, nous définissons nos paramètres de moteur. engine_params
est utilisé pour l'agent principal, et engine_params_for_grounding
est pour l'ancrage. Pour engine_params_for_grounding
, nous prenons en charge la série Claude, GPT et Hugging Face Inference Endpoints.
engine_params = {
"engine_type": provider,
"model": model,
"base_url": model_url, # Optional
"api_key": model_api_key, # Optional
}
# Grounding Configuration 1: Load the grounding engine from an API based model
grounding_model_provider = "<your_grounding_model_provider>"
grounding_model = "<your_grounding_model>"
grounding_model_resize_width = 1366
screen_width, screen_height = pyautogui.size()
engine_params_for_grounding = {
"engine_type": grounding_model_provider,
"model": grounding_model,
"grounding_width": grounding_model_resize_width,
"grounding_height": screen_height
* grounding_model_resize_width
/ screen_width,
}
# Grounding Configuration 2: Load the grounding engine from a HuggingFace TGI endpoint
endpoint_provider = "<your_endpoint_provider>"
endpoint_url = "<your_endpoint_url>"
endpoint_api_key = "<your_api_key>"
engine_params_for_grounding = {
"engine_type": endpoint_provider,
"base_url": endpoint_url,
"api_key": endpoint_api_key, # Optional
}
Puis, nous définissons notre agent d'ancrage et Agent S2.
grounding_agent = OSWorldACI(
platform=current_platform,
engine_params_for_generation=engine_params,
engine_params_for_grounding=engine_params_for_grounding
)
agent = AgentS2(
engine_params,
grounding_agent,
platform=current_platform,
action_space="pyautogui",
observation_type="screenshot",
search_engine="Perplexica", # Assuming you have set up Perplexica.
embedding_engine_type="openai" # Supports "gemini", "openai"
)
Enfin, interrogeons l'agent !
# Get screenshot.
screenshot = pyautogui.screenshot()
buffered = io.BytesIO()
screenshot.save(buffered, format="PNG")
screenshot_bytes = buffered.getvalue()
obs = {
"screenshot": screenshot_bytes,
}
instruction = "Close VS Code"
info, action = agent.predict(instruction=instruction, observation=obs)
exec(action[0])
Consultez gui_agents/s2/cli_app.py
pour plus de détails sur le fonctionnement de la boucle d'inférence.
Agent S2 utilise une base de connaissances qui se met continuellement à jour avec de nouvelles connaissances pendant l'inférence. La base de connaissances est initialement téléchargée lors de l'initialisation de AgentS2
. La base de connaissances est stockée sous forme d'assets dans nos GitHub Releases. L'initialisation de AgentS2
ne téléchargera que la base de connaissances pour votre plateforme spécifiée et la version de l'agent (par exemple s1, s2). Si vous souhaitez télécharger la base de connaissances de manière programmatique, vous pouvez utiliser le code suivant :
download_kb_data(
version="s2",
release_tag="v0.2.2",
download_dir="kb_data",
platform="linux" # "darwin", "windows"
)
Cela téléchargera la base de connaissances d'Agent S2 pour Linux à partir de la version v0.2.2
dans le répertoire kb_data
. Consultez nos GitHub Releases ou les tags de version qui incluent les bases de connaissances.
Pour déployer Agent S2 dans OSWorld, suivez les instructions de déploiement OSWorld.
Si vous trouvez ce codebase utile, veuillez citer
@misc{Agent-S2,
title={Agent S2: A Compositional Generalist-Specialist Framework for Computer Use Agents},
author={Saaket Agashe and Kyle Wong and Vincent Tu and Jiachen Yang and Ang Li and Xin Eric Wang},
year={2025},
eprint={2504.00906},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/abs/2504.00906},
}
@inproceedings{Agent-S,
title={{Agent S: An Open Agentic Framework that Uses Computers Like a Human}},
author={Saaket Agashe and Jiuzhou Han and Shuyu Gan and Jiachen Yang and Ang Li and Xin Eric Wang},
booktitle={International Conference on Learning Representations (ICLR)},
year={2025},
url={https://arxiv.org/abs/2410.08164}
}