Last translated: 17 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

After translating, add the links to README so others can view it directly.

Logo Agent S2: Композиционная архитектура общего и специализированного агентов для взаимодействия с компьютером

  🌐 [Блог S2]  📄 [Статья S2]  🎥 [Видео S2]

  🌐 [Блог S1]  📄 [Статья S1 (ICLR 2025)]  🎥 [Видео S1]

  simular-ai%2FAgent-S | Trendshift

Discord    PyPI Downloads

🥳 Обновления

  • 2025/04/01: Опубликована статья Agent S2 с новыми рекордными результатами на OSWorld, WindowsAgentArena и AndroidWorld!
  • 2025/03/12: Выпущен Agent S2 вместе с v0.2.0 библиотеки gui-agents, устанавливающий новый стандарт для агентов компьютерного взаимодействия (CUA), превосходящий OpenAI CUA/Operator и Claude 3.7 Sonnet Computer-Use от Anthropic!
  • 2025/01/22: Статья Agent S принята на ICLR 2025!
  • 2025/01/21: Выпущена версия v0.1.2 библиотеки gui-agents с поддержкой Linux и Windows!
  • 2024/12/05: Выпущена версия v0.1.0 библиотеки gui-agents, позволяющая легко использовать Agent-S для Mac, OSWorld и WindowsAgentArena!
  • 2024/10/10: Опубликованы статья Agent S и исходный код!

Содержание

  1. 💡 Введение
  2. 🎯 Текущие результаты
  3. 🛠️ Установка и настройка
  4. 🚀 Использование
  5. 🤝 Благодарности
  6. 💬 Цитирование

💡 Введение

Добро пожаловать в 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%
WindowsAgentArena29.8%19.5% (NAVI)+10.3%
AndroidWorld54.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.

Настройка получения данных из интернета с помощью Perplexica

Agent S работает лучше всего с поиском знаний в интернете. Чтобы включить эту функцию, необходимо настроить Perplexica:

  1. Убедитесь, что Docker Desktop установлен и запущен на вашей системе.

  2. Перейдите в директорию с файлами проекта.

     cd Perplexica
     git submodule update --init
    
  3. Переименуйте файл 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: Метрика схожести (заполнена по умолчанию; можно оставить как есть, если не уверены).

  4. Убедитесь, что находитесь в директории с файлом docker-compose.yaml, и выполните:

    docker compose up -d
    
  5. Экспортируйте URL Perplexica, используя порт из файла docker-compose.yaml. В разделе app/ports вы увидите 3000:3000. Порт — это число слева (в данном случае 3000).

    export PERPLEXICA_URL=http://localhost:{port}/api/search
    
  6. Наша реализация 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 как более легкую альтернативу с минимальным снижением производительности.

CLI

Запуск 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
    • Назначение: Указывает основную модель генерации
    • Поддерживает: все провайдеры моделей из models.md
    • По умолчанию: --provider "anthropic" --model "claude-3-7-sonnet-20250219"
  • --model_url, --model_api_key
    • Назначение: Указывает пользовательский эндпоинт для основной модели генерации и ваш ключ API
    • Примечание: Эти параметры не обязательны. Если не указаны, gui-agents будет использовать переменные окружения для URL и ключа API.
    • Поддерживает: все провайдеры моделей из models.md
    • По умолчанию: None

Настройки позиционирования

Можно использовать либо Конфигурацию 1, либо Конфигурацию 2:

(По умолчанию) Конфигурация 1: API-модели
  • --grounding_model_provider, --grounding_model
    • Назначение: Указывает модель для визуального позиционирования (предсказание координат)
    • Поддерживает: все провайдеры моделей из models.md
    • По умолчанию: --grounding_model_provider "anthropic" --grounding_model "claude-3-7-sonnet-20250219"
  • Важно--grounding_model_resize_width
    • Назначение: Некоторые API-провайдеры автоматически изменяют размер изображений. Поэтому сгенерированные координаты (x, y) будут относиться к измененным размерам изображения, а не к оригинальным.
    • Поддерживает: Anthropic rescaling
    • Советы: Если позиционирование неточное даже для простых запросов, проверьте, правильно ли указана ширина изменения размера для разрешения вашего экрана.
    • По умолчанию: --grounding_model_resize_width 1366 (Anthropic)
Конфигурация 2: Пользовательский эндпоинт
  • --endpoint_provider

    • Назначение: Указывает провайдера эндпоинта
    • Поддерживает: HuggingFace TGI, vLLM, Open Router
    • По умолчанию: None
  • --endpoint_url

    • Назначение: URL вашего пользовательского эндпоинта
    • По умолчанию: None
  • --endpoint_api_key

    • Назначение: Ваш ключ API для пользовательского эндпоинта
    • Примечание: Этот параметр не обязателен. Если не указан, gui-agents будет использовать переменные окружения для ключа API.
    • По умолчанию: None

Примечание: Конфигурация 2 имеет приоритет над Конфигурацией 1.

Это откроет приглашение для ввода запроса, где вы сможете взаимодействовать с Agent S2. Можно использовать любую модель из списка поддерживаемых в models.md.

SDK 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 или теги релизов, включающие базы знаний.

OSWorld

Для развертывания 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}
}

История звезд

Star History Chart