Agent S2:
A Compositional Generalist-Specialist Framework for Computer Use Agents
🌐 [S2 blog] 📄 [S2 Paper (COLM 2025)] 🎥 [S2 Video]
🌐 [S1 blog] 📄 [S1 Paper (ICLR 2025)] 🎥 [S1 Video]
🥳 Atualizações
- 07/07/2025: O artigo Agent S2 foi aceito na COLM 2025! Nos vemos em Montreal!
- 01/04/2025: Lançado o artigo Agent S2 com novos resultados SOTA em OSWorld, WindowsAgentArena e AndroidWorld!
- 12/03/2025: Lançado o Agent S2 junto com a versão v0.2.0 de gui-agents, o novo estado da arte para agentes de uso computacional (CUA), superando o CUA/Operator da OpenAI e o Claude 3.7 Sonnet Computer-Use da Anthropic!
- 22/01/2025: O artigo Agent S foi aceito na ICLR 2025!
- 21/01/2025: Lançada a versão v0.1.2 da biblioteca gui-agents, com suporte para Linux e Windows!
- 05/12/2024: Lançada a versão v0.1.0 da biblioteca gui-agents, permitindo que você use o Agent-S para Mac, OSWorld e WindowsAgentArena com facilidade!
- 10/10/2024: Lançado o artigo Agent S e seu código-fonte!
Índice
💡 Introdução
Bem-vindo ao Agent S, um framework de código aberto projetado para permitir interação autônoma com computadores através da Interface Agente-Computador. Nossa missão é construir agentes de GUI inteligentes que possam aprender com experiências passadas e executar tarefas complexas de forma autônoma no seu computador.
Se você está interessado em IA, automação ou em contribuir para sistemas baseados em agentes de ponta, estamos animados em tê-lo aqui!
🎯 Resultados Atuais
Results of Agent S2's Successful Rate (%) on the OSWorld full test set using Screenshot input only.
Benchmark | Agent S2 | Previous SOTA | Δ improve |
---|---|---|---|
OSWorld (15 step) | 27.0% | 22.7% (UI-TARS) | +4.3% |
OSWorld (50 step) | 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% |
🛠️ Instalação & Configuração
Observação: Nosso agente retorna código
pyautogui
e é destinado a uma tela de monitor único.
❗Aviso❗: Se você estiver em uma máquina Linux, criar um ambiente
conda
interferirá com opyatspi
. Até o momento, não há uma solução limpa para esse problema. Prossiga com a instalação sem usarconda
ou qualquer ambiente virtual.
⚠️Aviso Legal⚠️: Para aproveitar todo o potencial do Agent S2, utilizamos UI-TARS como modelo de ancoragem (7B-DPO ou 72B-DPO para melhor desempenho). Eles podem ser hospedados localmente ou em Hugging Face Inference Endpoints. Nosso código é compatível com Hugging Face Inference Endpoints. Consulte Hugging Face Inference Endpoints para obter mais informações sobre como configurar e consultar este endpoint. No entanto, a execução do Agent S2 não requer este modelo, e você pode usar modelos alternativos baseados em API para ancoragem visual, como o Claude.
Instale o pacote:
pip install gui-agents
Configure suas chaves de API LLM e outras variáveis de ambiente. Você pode fazer isso adicionando a seguinte linha ao seu arquivo .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>
Alternativamente, você pode definir a variável de ambiente diretamente no seu script Python:
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
Também oferecemos suporte para Azure OpenAI, Anthropic, Gemini, Open Router e inferência vLLM. Para mais informações, consulte models.md.
Configuração de Recuperação de Dados da Web usando Perplexica
O Agent S funciona melhor com recuperação de conhecimento da web. Para ativar este recurso, você precisa configurar o Perplexica:
-
Certifique-se de que o Docker Desktop está instalado e em execução no seu sistema.
-
Navegue até o diretório que contém os arquivos do projeto.
cd Perplexica git submodule update --init
-
Renomeie o arquivo
sample.config.toml
paraconfig.toml
. Para configurações com Docker, você só precisa preencher os seguintes campos:-
OPENAI
: Sua chave de API da OpenAI. Você só precisa preencher isso se desejar usar os modelos da OpenAI. -
OLLAMA
: Sua URL da API Ollama. Insira-a comohttp://host.docker.internal:PORT_NUMBER
. Se você instalou o Ollama na porta 11434, usehttp://host.docker.internal:11434
. Para outras portas, ajuste conforme necessário. Você precisa preencher isso se desejar usar os modelos do Ollama em vez dos da OpenAI. -
GROQ
: Sua chave de API da Groq. Você só precisa preencher isso se desejar usar os modelos hospedados da Groq. -
ANTHROPIC
: Sua chave de API da Anthropic. Você só precisa preencher isso se desejar usar os modelos da Anthropic.Observação: Você pode alterar essas configurações após iniciar o Perplexica, através da caixa de diálogo de configurações.
-
SIMILARITY_MEASURE
: A medida de similaridade a ser usada (isso já vem preenchido por padrão; você pode deixar como está se não tiver certeza).
-
-
Certifique-se de estar no diretório que contém o arquivo
docker-compose.yaml
e execute:docker compose up -d
-
Exporte a URL do Perplexica usando a porta encontrada no arquivo
docker-compose.yaml
. Emapp/ports
, você verá3000:3000
. A porta é o número do lado esquerdo (neste caso, 3000).export PERPLEXICA_URL=http://localhost:{port}/api/search
-
Nossa implementação do Agent S incorpora a API do Perplexica para integrar uma capacidade de mecanismo de busca, o que proporciona uma experiência de usuário mais conveniente e responsiva. Se você deseja personalizar a API de acordo com suas configurações e requisitos específicos, pode modificar a URL e os parâmetros de mensagem da solicitação em
agent_s/query_perplexica.py
. Para um guia abrangente sobre como configurar a API do Perplexica, consulte a Documentação da API de Busca do Perplexica. Para um guia mais detalhado de configuração e uso, consulte o Repositório do Perplexica.
❗Aviso❗: O agente executará diretamente código Python para controlar seu computador. Use com cuidado.
🚀 Como Usar
Nota: Nossa melhor configuração utiliza Claude 3.7 com pensamento estendido e UI-TARS-72B-DPO. Se você não conseguir executar UI-TARS-72B-DPO devido a limitações de recursos, UI-TARS-7B-DPO pode ser usado como alternativa mais leve com degradação mínima de desempenho.
CLI
Execute o Agent S2 com um modelo específico (o padrão é gpt-4o
):
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--grounding_model_provider "anthropic" \
--grounding_model "claude-3-7-sonnet-20250219" \
Ou use um endpoint personalizado:
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--endpoint_provider "huggingface" \
--endpoint_url "<endpoint_url>/v1/"
Configurações do Modelo Principal
--provider
,--model
- Finalidade: Especifica o modelo principal de geração
- Suporta: todos os provedores de modelo em models.md
- Padrão:
--provider "anthropic" --model "claude-3-7-sonnet-20250219"
--model_url
,--model_api_key
- Finalidade: Especifica o endpoint personalizado para o modelo principal de geração e sua chave de API
- Observação: Estes são opcionais. Se não especificados,
gui-agents
usará as variáveis de ambiente para a URL e chave de API. - Suporta: todos os provedores de modelo em models.md
- Padrão: Nenhum
Opções de Configuração de Grounding
Você pode usar a Configuração 1 ou Configuração 2:
(Padrão) Configuração 1: Modelos Baseados em API
--grounding_model_provider
,--grounding_model
- Finalidade: Especifica o modelo para grounding visual (previsão de coordenadas)
- Suporta: todos os provedores de modelo em models.md
- Padrão:
--grounding_model_provider "anthropic" --grounding_model "claude-3-7-sonnet-20250219"
- ❗Importante❗
--grounding_model_resize_width
- Finalidade: Alguns provedores de API redimensionam imagens automaticamente. Portanto, as coordenadas (x, y) geradas serão relativas às dimensões da imagem redimensionada, não às dimensões originais.
- Suporta: Redimensionamento da Anthropic
- Dicas: Se seu grounding estiver impreciso mesmo para consultas muito simples, verifique se a largura de redimensionamento está correta para a resolução da sua máquina.
- Padrão:
--grounding_model_resize_width 1366
(Anthropic)
Configuração 2: Endpoint Personalizado
-
--endpoint_provider
- Propósito: Especifica o provedor de endpoint
- Suporta: HuggingFace TGI, vLLM, Open Router
- Padrão: None
-
--endpoint_url
- Propósito: A URL para seu endpoint personalizado
- Padrão: None
-
--endpoint_api_key
- Propósito: Sua chave API para o endpoint personalizado
- Observação: Isso é opcional. Se não especificado,
gui-agents
usará as variáveis de ambiente para a chave API. - Padrão: None
Nota: A Configuração 2 tem precedência sobre a Configuração 1.
Isso exibirá um prompt de consulta onde você pode inserir sua pergunta e interagir com o Agent S2. Você pode usar qualquer modelo da lista de modelos suportados em models.md.
SDK gui_agents
Primeiro, importamos os módulos necessários. AgentS2
é a classe principal do agente S2. OSWorldACI
é nosso agente de fundamentação que traduz ações do agente em código Python executável.
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"
Em seguida, definimos os parâmetros do motor. engine_params
é usado para o agente principal e engine_params_for_grounding
é para fundamentação. Para engine_params_for_grounding
, suportamos a série Claude, GPT e 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
}
Depois, definimos nosso agente de fundamentação e o 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"
)
Finalmente, vamos consultar o agente!
# 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])
Consulte gui_agents/s2/cli_app.py
para mais detalhes sobre como o loop de inferência funciona.
Baixando a Base de Conhecimento
O Agent S2 usa uma base de conhecimento que é continuamente atualizada com novos conhecimentos durante a inferência. A base de conhecimento é baixada inicialmente ao inicializar AgentS2
. A base de conhecimento é armazenada como assets em nossos GitHub Releases. A inicialização do AgentS2
só baixará a base de conhecimento para sua plataforma especificada e versão do agente (ex: s1, s2). Se você quiser baixar a base de conhecimento programaticamente, pode usar o seguinte código:
download_kb_data(
version="s2",
release_tag="v0.2.2",
download_dir="kb_data",
platform="linux" # "darwin", "windows"
)
Isso baixará a base de conhecimento do Agent S2 para Linux da tag de release v0.2.2
para o diretório kb_data
. Consulte nossos GitHub Releases ou tags de release que incluem as bases de conhecimento.
OSWorld
Para implantar o Agent S2 no OSWorld, siga as instruções de implantação do OSWorld.
WindowsAgentArena
Para implantar o Agent S2 no WindowsAgentArena, siga as Instruções de Implantação do WindowsAgentArena.
💬 Citações
Se achar este código útil, por favor cite
@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}
}