🌐 [S2 Blog] 📄 [S2 Paper] 🎥 [S2 Video]
🌐 [S1 Blog] 📄 [S1 Paper (ICLR 2025)] 🎥 [S1 Video]
Willkommen bei Agent S, einem Open-Source-Framework, das autonome Interaktion mit Computern über die Agent-Computer-Schnittstelle ermöglicht. Unsere Mission ist es, intelligente GUI-Agenten zu entwickeln, die aus vergangenen Erfahrungen lernen und komplexe Aufgaben auf Ihrem Computer autonom ausführen können.
Egal, ob Sie sich für KI, Automatisierung oder die Mitarbeit an zukunftsweisenden agentenbasierten Systemen interessieren – wir freuen uns, dass Sie hier sind!
Ergebnisse der Erfolgsrate (%) von Agent S2 auf dem OSWorld-Volltestset unter ausschließlicher Verwendung von Screenshot-Eingaben.
Benchmark | Agent S2 | Vorheriges SOTA | Δ Verbesserung |
---|---|---|---|
OSWorld (15 Schritte) | 27,0% | 22,7% (UI-TARS) | +4,3% |
OSWorld (50 Schritte) | 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% |
❗Warnung❗: Wenn Sie einen Linux-Rechner verwenden, kann die Erstellung einer
conda
-Umgebung mitpyatspi
kollidieren. Derzeit gibt es keine saubere Lösung für dieses Problem. Führen Sie die Installation ohneconda
oder eine virtuelle Umgebung durch.
⚠️Haftungsausschluss⚠️: Um das volle Potenzial von Agent S2 auszuschöpfen, verwenden wir UI-TARS als Grounding-Modell (7B-DPO oder 72B-DPO für bessere Leistung). Diese können lokal oder auf Hugging Face Inference Endpoints gehostet werden. Unser Code unterstützt Hugging Face Inference Endpoints. Weitere Informationen zur Einrichtung und Abfrage dieses Endpoints finden Sie unter Hugging Face Inference Endpoints. Die Ausführung von Agent S2 erfordert dieses Modell jedoch nicht, und Sie können alternative API-basierte Modelle für visuelles Grounding verwenden, wie z.B. Claude.
Installieren Sie das Paket:
pip install gui-agents
Setzen Sie Ihre LLM-API-Schlüssel und andere Umgebungsvariablen. Dies können Sie tun, indem Sie die folgende Zeile zu Ihrer .bashrc (Linux) oder .zshrc (MacOS) Datei hinzufügen.
export OPENAI_API_KEY=<YOUR_API_KEY>
export ANTHROPIC_API_KEY=<YOUR_ANTHROPIC_API_KEY>
export HF_TOKEN=<YOUR_HF_TOKEN>
Alternativ können Sie die Umgebungsvariable in Ihrem Python-Skript setzen:
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
Wir unterstützen auch Azure OpenAI, Anthropic, Gemini, Open Router und vLLM-Inferenz. Weitere Informationen finden Sie unter models.md.
Agent S funktioniert am besten mit Web-Wissensabruf. Um diese Funktion zu aktivieren, müssen Sie Perplexica einrichten:
Stellen Sie sicher, dass Docker Desktop installiert und auf Ihrem System ausgeführt wird.
Navigieren Sie zu dem Verzeichnis, das die Projektdateien enthält.
cd Perplexica
git submodule update --init
Benennen Sie die Datei sample.config.toml
in config.toml
um. Für Docker-Setups müssen Sie nur die folgenden Felder ausfüllen:
OPENAI
: Ihr OpenAI-API-Schlüssel. Sie müssen dies nur ausfüllen, wenn Sie OpenAIs Modelle verwenden möchten.
OLLAMA
: Ihre Ollama-API-URL. Geben Sie sie als http://host.docker.internal:PORT_NUMMER
ein. Wenn Sie Ollama auf Port 11434 installiert haben, verwenden Sie http://host.docker.internal:11434
. Für andere Ports passen Sie dies entsprechend an. Sie müssen dies ausfüllen, wenn Sie Ollamas Modelle anstelle von OpenAIs Modellen verwenden möchten.
GROQ
: Ihr Groq-API-Schlüssel. Sie müssen dies nur ausfüllen, wenn Sie Groqs gehostete Modelle verwenden möchten.
ANTHROPIC
: Ihr Anthropic-API-Schlüssel. Sie müssen dies nur ausfüllen, wenn Sie Anthropic-Modelle verwenden möchten.
Hinweis: Sie können diese Einstellungen nach dem Start von Perplexica über das Einstellungsdialogfeld ändern.
SIMILARITY_MEASURE
: Das zu verwendende Ähnlichkeitsmaß (Dies ist standardmäßig ausgefüllt; Sie können es unverändert lassen, wenn Sie sich unsicher sind.)
Stellen Sie sicher, dass Sie sich in dem Verzeichnis befinden, das die docker-compose.yaml
-Datei enthält, und führen Sie aus:
docker compose up -d
Exportieren Sie Ihre Perplexica-URL mit dem Port, der in der docker-compose.yaml
-Datei unter app/ports
zu finden ist. Sie sehen 3000:3000
. Der Port ist die linke Zahl (in diesem Fall 3000).
export PERPLEXICA_URL=http://localhost:{port}/api/search
Unsere Implementierung von Agent S integriert die Perplexica-API, um eine Suchmaschinenfunktionalität einzubinden, die ein bequemeres und reaktionsschnelleres Benutzererlebnis ermöglicht. Wenn Sie die API an Ihre Einstellungen und spezifischen Anforderungen anpassen möchten, können Sie die URL und die Nachricht der Anfrageparameter in agent_s/query_perplexica.py
ändern. Eine umfassende Anleitung zur Konfiguration der Perplexica-API finden Sie in der Perplexica Search API Dokumentation.
Für eine detailliertere Einrichtungs- und Verwendungsanleitung lesen Sie bitte das Perplexica Repository.
❗Warnung❗: Der Agent führt direkt Python-Code aus, um Ihren Computer zu steuern. Bitte verwenden Sie ihn mit Vorsicht.
Hinweis: Unsere beste Konfiguration verwendet Claude 3.7 mit erweitertem Denken und UI-TARS-72B-DPO. Wenn Sie UI-TARS-72B-DPO aufgrund von Ressourcenbeschränkungen nicht ausführen können, kann UI-TARS-7B-DPO als leichtere Alternative mit minimalem Leistungsverlust verwendet werden.
Führen Sie Agent S2 mit einem bestimmten Modell aus (Standard ist gpt-4o
):
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--grounding_model_provider "anthropic" \
--grounding_model "claude-3-7-sonnet-20250219" \
Oder verwenden Sie einen benutzerdefinierten Endpunkt:
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
standardmäßig Ihre Umgebungsvariablen für die URL und den API-Schlüssel.Sie können entweder Konfiguration 1 oder Konfiguration 2 verwenden:
--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
standardmäßig Ihre Umgebungsvariablen für den API-Schlüssel.Hinweis: Konfiguration 2 hat Vorrang vor Konfiguration 1.
Dadurch wird eine Benutzerabfrage-Eingabeaufforderung angezeigt, in der Sie Ihre Abfrage eingeben und mit Agent S2 interagieren können. Sie können jedes Modell aus der Liste der unterstützten Modelle in models.md verwenden.
gui_agents
SDKZuerst importieren wir die notwendigen Module. AgentS2
ist die Hauptagentenklasse für Agent S2. OSWorldACI
ist unser Grounding-Agent, der Agentenaktionen in ausführbaren Python-Code übersetzt.
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"
Als nächstes definieren wir unsere Engine-Parameter. engine_params
wird für den Hauptagenten verwendet, und engine_params_for_grounding
ist für Grounding. Für engine_params_for_grounding
unterstützen wir die Claude-, GPT-Serie und 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
}
Dann definieren wir unseren Grounding-Agenten und 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"
)
Schließlich fragen wir den Agenten ab!
# 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])
Weitere Details zur Funktionsweise der Inferenzschleife finden Sie in gui_agents/s2/cli_app.py
.
Agent S2 verwendet eine Wissensdatenbank, die während der Inferenz kontinuierlich mit neuem Wissen aktualisiert wird. Die Wissensdatenbank wird zunächst beim Initialisieren von AgentS2
heruntergeladen. Die Wissensdatenbank wird als Assets unter unseren GitHub Releases gespeichert. Die AgentS2
-Initialisierung lädt nur die Wissensdatenbank für Ihre angegebene Plattform und Agentenversion (z.B. s1, s2) herunter. Wenn Sie die Wissensdatenbank programmatisch herunterladen möchten, können Sie den folgenden Code verwenden:
download_kb_data(
version="s2",
release_tag="v0.2.2",
download_dir="kb_data",
platform="linux" # "darwin", "windows"
)
Dadurch wird die Wissensdatenbank von Agent S2 für Linux vom Release-Tag v0.2.2
in das Verzeichnis kb_data
heruntergeladen. Weitere Informationen finden Sie in unseren GitHub Releases oder Release-Tags, die die Wissensdatenbanken enthalten.
Um Agent S2 in OSWorld bereitzustellen, folgen Sie den OSWorld-Bereitstellungsanweisungen.
Wenn Sie diese Codebasis nützlich finden, zitieren Sie bitte
@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}
}