Первая волна систем автономного управления компьютером (Computer-Use Agents), вроде Claude Computer Use или Operator, произвела сильное визуальное впечатление. Модель сама открывает калькулятор, вбивает числа, водит курсором по экрану и нажимает на кнопки. Но любой, кто пытался внедрить этот скриншотный подход в реальные бизнес-процессы компании, моментально сталкивался с жесткими ограничениями.
Работал этот контур до неприличия медленно: на каждый чих модель делает полноэкранный снимок в разрешении 4K, скармливает его тяжелой мультимодальной нейросети, запускает оптическое распознавание текста (OCR), пытается вычислить координаты кнопки в пикселях и эмулирует перемещение мыши. Задержка между действиями растягивалась до 5–8 секунд, счет за токены улетал в стратосферу, а малейшее смещение окна или изменение системного масштабирования (DPI) приводило к промахам курсора. К тому же бот намертво блокировал физическую мышь пользователя.
Архитектура Agent Desktop совершает в этой области настоящий технологический переворот. Вместо того чтобы мучительно разглядывать пиксели монитора через дорогое компьютерное зрение, система обращается напрямую к системному дереву доступности операционной системы (Accessibility API). О том, сколько стоит внедрение компьютерных агентов бизнесу, мы подробно писали в разборе Агенты за рабочим столом: как режим Computer Use автоматизирует десктопные программы и сколько это стоит бизнесу.
Как устроено системное дерево доступности
В каждой современной операционной системе — будь то Windows UI Automation, macOS Accessibility API или Linux AT-SPI — под капотом графического интерфейса живет параллельная структура данных. Изначально ее создавали для программ чтения с экрана (screen readers), помогающих незрячим пользователям ориентироваться в софте.
Для операционной системы окно программы — это не набор цветных точек, а строгое иерархическое дерево объектов. У каждого элемента есть четкие машиночитаемые атрибуты:
- Роль: кнопка (
button), текстовое поле ввода (text_field), выпадающий список (combobox), чекбокс (checkbox); - Имя и идентификатор: понятная текстовая метка (
name="Сохранить как...",id="btn_submit"); - Состояние: активно ли поле (
focused=True), доступна ли кнопка (disabled=False), раскрыто ли меню (expanded=True); - Поддерживаемые системные действия: вызов события клика, установка текста, переключение флага.
Агенту больше не нужно угадывать координаты кнопки «Оплатить счет». Он запрашивает снимок дерева активного окна, получает компактную текстовую структуру и отправляет операционной системе команду прямого программного вызова: element.invoke(). Нативное системное событие срабатывает за 15 миллисекунд без всякого перемещения физического курсора мыши.
Сравнение на пальцах: зрение против Accessibility API
Цифры производительности показывают колоссальное преимущество архитектуры Agent Desktop над скриншотным подходом:
- Расход токенов: текстовое дерево доступности сложного окна бухгалтерской программы или ERP-системы занимает от 400 до 1 200 токенов. Для сравнения: один 4K-скриншот в формате Claude Vision сжигает от 2 500 до 4 000 токенов на каждый шаг. Экономия квот достигает 70–80%.
- Скорость реакции (Action Latency): цикл скриншотного клика длится 4,5–8 секунд. Вызов системного метода через Accessibility API отрабатывает за 0,3–0,6 секунды — ускорение в 10–15 раз!
- Точность позиционирования: попадание по элементам составляет 99,8% против 74–82% у компьютерного зрения, которое постоянно путает мелкие иконки в плотных таблицах.
Вот пример концептуального моста на Python, считывающего системное дерево и выполняющего программные действия:
from typing import Dict, Any, List
class DesktopAccessibilityBridge:
def __init__(self, target_process: str):
self.app_name = target_process
def dump_window_tree(self) -> Dict[str, Any]:
# Получаем структурированный снимок окна через системный API ОС
return {
"app": self.app_name,
"window_title": "1С: Предприятие — Продажи",
"controls": [
{"uid": "grid_table", "type": "DataGrid", "rows_count": 42},
{"uid": "btn_recalc", "type": "Button", "label": "Пересчитать", "state": "enabled"},
{"uid": "input_discount", "type": "TextBox", "label": "Скидка (%)", "value": "0"},
{"uid": "btn_post", "type": "Button", "label": "Провести документ", "state": "enabled"}
]
}
def trigger_action(self, control_uid: str, action: str = "invoke") -> bool:
# Прямой системный вызов без захвата координат физического курсора
print(f"[OS Event] Выполняем {action} для элемента: {control_uid}")
return True
А вот как выглядит логика агента, который выбирает нужный элемент из полученного JSON и вносит данные:
def run_headless_agent_step():
bridge = DesktopAccessibilityBridge("EnterpriseERP.exe")
tree = bridge.dump_window_tree()
# Модель анализирует дерево и моментально выбирает действие
action_decision = {
"target_uid": "input_discount",
"new_value": "15",
"next_button": "btn_recalc"
}
print(f"Обнаружено окно: {tree['window_title']}")
# Применяем значение и нажимаем пересчет в фоне
bridge.trigger_action(action_decision["target_uid"], action="set_value")
bridge.trigger_action(action_decision["next_button"], action="invoke")
print("Документ успешно пересчитан в фоновом режиме.")
if __name__ == "__main__":
run_headless_agent_step()
Фоновая работа без захвата мыши
Еще одно важнейшее практическое преимущество Agent Desktop — работа в параллельном потоке (Headless / Background Operation).
Когда скриншотный бот берет управление на себя, ты не можешь даже пошевелить мышью: любое случайное движение руки сбивает прицел нейросети. С Agent Desktop всё иначе: системные события отправляются напрямую в дескриптор целевого окна.
Окно может быть свернуто, находиться на втором виртуальном рабочем столе или быть перекрыто другими программами. Ты спокойно общаешься в Telegram или пишешь код, пока агент в фоне заполняет строки в корпоративной базе данных. О том, как крупные корпорации строят сложные мультиагентные контуры, можно прочитать в статье Архитектура агентных приложений: как энтерпрайз развертывает мультиагентные системы.
Где пока остаются слепые зоны
Несмотря на очевидное инженерное превосходство, у дерева доступности есть две уязвимости.
Первая — нестандартный интерфейсный софт. Если программа написана на Canvas (как сложные графические редакторы) или на старых игровых библиотеках без поддержки accessibility, она представляет собой для ОС сплошное белое пятно. В таких случаях архитектура Agent Desktop переключается в гибридный режим, вызывая компьютерное зрение как аварийный шлюз.
Вторая — безопасность. Доступ к Accessibility API позволяет читать содержимое окон соседних программ, что требует строгой выдачи прав суперпользователя в операционной системе.
Но для корпоративной автоматизации десктопных программ выбор очевиден: эпоха слепого скриншотного управления стремительно уступает место чистому, быстрому и дешевому коду системных событий.
