openai

Код вместо кликов в образце computer-use агента

Promtime

openai

OpenAI опубликовала репозиторий openai-cua-sample-app с двумя computer-use агентами, которые управляют софтом через сгенерированный код: агент на JavaScript с Playwright водит браузер, агент на Python с PyAutoGUI управляет десктопом через скриншоты, мышь и клавиатуру. Код выложен на GitHub под лицензией MIT.

Коротко

  • Постоянная среда исполнения сохраняет состояние и вспомогательные функции между вызовами модели, поэтому агент циклом заполняет несколько полей, проверяет применение изменений и возвращает только нужный текст или скриншоты.
  • Для запуска нужны Node.js 22.20.0 и закреплённый в репозитории pnpm 10.26.0, для Python-агента дополнительно uv и Python 3.10 или новее, в репозитории зафиксирована версия 3.12.
  • Оба агента работают через Responses API, общую веб-консоль и три учебных сценария: доску задач, холст для рисования и бронирование отеля; каждый запуск получает свежую копию шаблона.

Подход, при котором модель пишет код вместо выдачи одного действия за вызов, выглядит попыткой снизить главную издержку computer-use агентов: число обращений к модели и объём заново пересылаемого контекста. Ценность репозитория для разработчиков скорее в схеме цикла, чем в готовом инструменте, поскольку OpenAI прямо отделяет образец от собственных продуктовых рантаймов. Судя по всему, это референсная архитектура, а не заготовка для боевых сценариев.

Оба агента построены вокруг цикла responses-loop и постоянного рабочего процесса исполнения

Computer-use агент осматривает интерфейс, выбирает действие, выполняет его и проверяет результат. В образце OpenAI этот цикл строится вокруг моделей, которые пишут код: код даёт возможность комбинировать действия, обрабатывать наблюдения и решать, когда снова смотреть на экран. По описанию OpenAI, так сокращается число обращений к модели и объём повторно передаваемого контекста, а модель получает обратную связь для исправления ошибок.

Агент на JavaScript использует локаторы Playwright, скриншоты и управление браузером в постоянной сессии, сервер и цикл агента написаны на TypeScript. Агент на Python держит собственный сервер, цикл агента и постоянный воркер PyAutoGUI, который управляет видимым браузером на рабочем столе. Ядро цикла лежит в файлах responses-loop.ts и responses_loop.py, жизненный цикл прогонов и сохранённые артефакты обслуживают runner-manager.ts и runner.py.

Консоль, контракты и три шаблона лабораторий общие для обеих реализаций

Репозиторий содержит общую веб-консоль и общие типы запросов, событий и реплеев, а также каталог сценариев labs/catalog.json с задачами по умолчанию. Шаблонов три: доска задач с карточками и колонками, холст для рисования с фигурами, слоями и инструментами, поиск отелей с имитацией бронирования.

Скрипт scripts/launch.mjs поднимает одно приложение и общую консоль, где выбирается сценарий, редактируется его промпт и запускается прогон; прогоны делают реальные вызовы API. Кнопка Stop прерывает работу, а при переключении между приложениями нужно дождаться завершения после Ctrl+C. Рабочие каталоги, скриншоты и реплеи остаются в игнорируемой Git директории data/ выбранного приложения.

Оба приложения читают корневой .env, переменные из оболочки имеют приоритет, а ключ API должен иметь доступ к настроенной модели; ключ можно сохранить в .env и использовать в следующих сессиях. Установка Playwright и десктопного воркера вынесена в отдельные команды pnpm, работоспособность воркера проверяется запуском с флагом --check.

Сгенерированный код исполняется с правами текущего пользователя

Работать предлагается в лабораториях из репозитория или в других контролируемых средах: песочницы уровня операционной системы и тех проверок действий, что OpenAI применяет в своих продуктах, в образцах нет. В OpenAI отмечают, что продуктовые системы используют собственные рантаймы и дополнительные механизмы контроля, а репозиторий демонстрирует сам подход на стандартных библиотеках.

Версия на Python управляет реальными мышью и клавиатурой, а скриншоты могут захватывать посторонние окна, поэтому в документации рекомендуют выделенную сессию рабочего стола и окно лаборатории на переднем плане основного монитора. Сбой способен оставить ввод зажатым: перед запуском предлагается прочитать раздел о прерывании и восстановлении.

Ключи и артефакты прогонов рекомендуется держать закрытыми: файлы окружения и сгенерированные данные исключены из Git, сервисы предлагается оставлять на локальных адресах по умолчанию. Настройка разрешений на управление рабочим столом и особенности платформ описаны в README приложения на Python.

Как проверять результат прогона

Сообщение о завершении прогона означает лишь, что цикл агента и очистка закончились штатно. Финальный ответ модели не доказывает, что задача выполнена: в документации предлагается смотреть скриншоты, записанную трассу в Replay JSON и таймлайн скриншотов, чтобы восстановить прежние состояния среды. Планов развития репозитория и сроков обновлений в нём не приводится, конкретная модель в инструкции по запуску тоже не названа.

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.