🌐 [Блог S2] 📄 [Статья S2] 🎥 [Видео S2]
🌐 [Блог S1] 📄 [Статья S1 (ICLR 2025)] 🎥 [Видео S1]
Добро пожаловать в Agent S — фреймворк с открытым исходным кодом, предназначенный для автономного взаимодействия с компьютером через Agent-Computer Interface. Наша миссия — создание интеллектуальных GUI-агентов, способных обучаться на предыдущем опыте и автономно выполнять сложные задачи на вашем компьютере.
Если вас интересует ИИ, автоматизация или вклад в передовые агентские системы, мы рады видеть вас здесь!
Результаты Agent S2 по проценту успешных выполнений (%) на полном тестовом наборе OSWorld с использованием только скриншотов.
Бенчмарк | Agent S2 | Предыдущий SOTA | Улучшение Δ |
---|---|---|---|
OSWorld (15 шагов) | 27.0% | 22.7% (UI-TARS) | +4.3% |
OSWorld (50 шагов) | 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% |
❗Внимание❗: Если вы используете Linux, создание окружения
conda
может конфликтовать сpyatspi
. На данный момент чистого решения этой проблемы нет. Производите установку без использованияconda
или любого виртуального окружения.
⚠️Отказ от ответственности⚠️: Для полного раскрытия потенциала Agent S2 мы используем UI-TARS в качестве модели позиционирования (7B-DPO или 72B-DPO для лучшей производительности). Их можно разместить локально или на Hugging Face Inference Endpoints. Наш код поддерживает Hugging Face Inference Endpoints. Подробнее о настройке и запросах к этому эндпоинту см. Hugging Face Inference Endpoints. Однако для работы Agent S2 эта модель не обязательна, и вы можете использовать альтернативные API-модели для визуального позиционирования, такие как Claude.
Установка пакета:
pip install gui-agents
Установите ключи API LLM и другие переменные окружения. Это можно сделать, добавив следующую строку в файл .bashrc (Linux) или .zshrc (MacOS).
export OPENAI_API_KEY=<YOUR_API_KEY>
export ANTHROPIC_API_KEY=<YOUR_ANTHROPIC_API_KEY>
export HF_TOKEN=<YOUR_HF_TOKEN>
Либо вы можете установить переменную окружения в своем Python-скрипте:
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
Мы также поддерживаем Azure OpenAI, Anthropic, Gemini, Open Router и vLLM inference. Подробнее см. models.md.
Agent S работает лучше всего с поиском знаний в интернете. Чтобы включить эту функцию, необходимо настроить Perplexica:
Убедитесь, что Docker Desktop установлен и запущен на вашей системе.
Перейдите в директорию с файлами проекта.
cd Perplexica
git submodule update --init
Переименуйте файл sample.config.toml
в config.toml
. Для настройки Docker необходимо заполнить только следующие поля:
OPENAI
: Ваш ключ API OpenAI. Заполняйте только если хотите использовать модели OpenAI.
OLLAMA
: URL API Ollama. Введите его как http://host.docker.internal:PORT_NUMBER
. Если Ollama установлен на порту 11434, используйте http://host.docker.internal:11434
. Для других портов измените соответственно. Заполняйте только если хотите использовать модели Ollama вместо OpenAI.
GROQ
: Ваш ключ API Groq. Заполняйте только если хотите использовать размещенные модели Groq.
ANTHROPIC
: Ваш ключ API Anthropic. Заполняйте только если хотите использовать модели Anthropic.
Примечание: Эти настройки можно изменить после запуска Perplexica через диалог настроек.
SIMILARITY_MEASURE
: Метрика схожести (заполнена по умолчанию; можно оставить как есть, если не уверены).
Убедитесь, что находитесь в директории с файлом docker-compose.yaml
, и выполните:
docker compose up -d
Экспортируйте URL Perplexica, используя порт из файла docker-compose.yaml
. В разделе app/ports
вы увидите 3000:3000
. Порт — это число слева (в данном случае 3000).
export PERPLEXICA_URL=http://localhost:{port}/api/search
Наша реализация Agent S интегрирует API Perplexica для добавления функциональности поисковой системы, что обеспечивает более удобный и отзывчивый пользовательский опыт. Если вы хотите адаптировать API под свои настройки и требования, можно изменить URL и параметры запроса в agent_s/query_perplexica.py
. Подробное руководство по настройке API Perplexica см. в Perplexica Search API Documentation.
Для более детального руководства по настройке и использованию см. Репозиторий Perplexica.
❗Внимание❗: Агент будет напрямую выполнять Python-код для управления вашим компьютером. Пожалуйста, используйте с осторожностью.
Примечание: Наша лучшая конфигурация использует Claude 3.7 с расширенным мышлением и UI-TARS-72B-DPO. Если вы не можете запустить UI-TARS-72B-DPO из-за ограничений ресурсов, можно использовать UI-TARS-7B-DPO как более легкую альтернативу с минимальным снижением производительности.
Запуск Agent S2 с определенной моделью (по умолчанию gpt-4o
):
agent_s2 \
--provider "anthropic" \
--model "claude-3-7-sonnet-20250219" \
--grounding_model_provider "anthropic" \
--grounding_model "claude-3-7-sonnet-20250219" \
Или использование пользовательского эндпоинта:
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
будет использовать переменные окружения для URL и ключа API.Можно использовать либо Конфигурацию 1, либо Конфигурацию 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
будет использовать переменные окружения для ключа API.Примечание: Конфигурация 2 имеет приоритет над Конфигурацией 1.
Это откроет приглашение для ввода запроса, где вы сможете взаимодействовать с Agent S2. Можно использовать любую модель из списка поддерживаемых в models.md.
gui_agents
Сначала импортируем необходимые модули. AgentS2
— основной класс агента для Agent S2. OSWorldACI
— наш агент позиционирования, который преобразует действия агента в исполняемый Python-код.
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"
Затем определяем параметры движка. engine_params
используется для основного агента, а engine_params_for_grounding
— для позиционирования. Для engine_params_for_grounding
мы поддерживаем Claude, серию GPT и 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
}
Далее определяем агента позиционирования и 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"
)
Наконец, отправим запрос агенту!
# 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])
Подробнее о работе цикла вывода см. gui_agents/s2/cli_app.py
.
Agent S2 использует базу знаний, которая постоянно обновляется в процессе работы. База знаний первоначально загружается при инициализации AgentS2
. Она хранится как ассеты в наших GitHub Releases. Инициализация AgentS2
загрузит базу знаний только для указанной платформы и версии агента (например, s1, s2). Если вы хотите загрузить базу знаний программно, используйте следующий код:
download_kb_data(
version="s2",
release_tag="v0.2.2",
download_dir="kb_data",
platform="linux" # "darwin", "windows"
)
Это загрузит базу знаний Agent S2 для Linux из релиза с тегом v0.2.2
в директорию kb_data
. См. наши GitHub Releases или теги релизов, включающие базы знаний.
Для развертывания Agent S2 в OSWorld следуйте инструкциям развертывания OSWorld.
Если этот код оказался полезным, процитируйте:
@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}
}