honey@lab:~$ cat post/practice
Как я пытался подружиться с AI-агентами... и что из этого вышло 🧑💻
Пришел ответ на вакансию Go-разработчика. Его суть — реализовать AI-агента для автоматизации браузера. Мой финальный босс получается.
Решил попробовать — посмотреть, кто эти ваши агенты.🧃
Что от него хотели:
• Управлять браузером программно (не headless, чтобы всё было видно).
• Поддерживать сессии (человек залогинился — агент продолжил).
• Использовать Claude/OpenAI для принятия решений.
• Обрабатывать сложные, многошаговые задачи.
• Самое сложное: уметь работать с ограничениями по токенам, не загружая в AI всю страницу целиком.
• Никаких заготовленных селекторов или шаблонов действий. Агент должен сам до всего додуматься.
Взял питон + ключик от Anthropic API, я пошел создавать этого агента, спусят полтора часа я уже сидел в браузере и смотрел как он рыскает по яндекс лавке, в поиске бургеров. Но к сожалению было очень много попаболи...
😡 Первая попаболь: Жадный до токенов DOM
Одним из инструментов агента был get_page_content(), который слал AI всю структуру страницы.
Каждый запрос пожирал по ~10к токенов. Через час мои тестовые лимиты испарились в никуда.
Skill issue? Безусловно.
Собственно в ожидание пока мне выдадут новый ключ, я пошёл искать, а как правильно организовывать работу агентов? Ответом стала — Sub-agent architecture. Это как микросервисы, но для AI. Главный агент-координатор и куча мелких специалистов:
• DOMSubAgent — аналитик, отвечает на вопросы о странице.
• TaskPlannerSubAgent — разбивает «купить бургер» на шаги: зайти → найти → добавить.
Такая схема сэкономила токены в 2-3 раза. Каждый саб-агент знает своё дело и не грузит контекст лишним.
😡 Вторая попаболь: Слишком много инструментов
Я создал 19 инструментов для клика: по element_id, по тексту, по CSS, по координатам... Агент в них просто потерялся. Он не знал, каким инструментов когда пользоваться. Пришлось резать, оставив только самое необходимое.
😡 Третья попаболь: Лишние абстракции и AI-рефлексия
Сначала я накрутил абстракций над CSS-селекторами, хотя нужно было передавать их напрямую.
Потом создал Vision Sub-agent, который по скриншоту искал элементы. Он отвечал: «Кнопка справа на карточке товара!». Главный агент, не получив чёткий селектор, снова и снова вызывал его. Началась бесконечная AI-рефлексия... И это не говоря про дебаг промтов для каждого агента — отдельная удручающая история.😴
Ну и под конец уже, у меня случилась трагедия с морсом и глинтвейном🧃
Дал агенту задание: «Закажи морс». Всё шло хорошо, пока он не зашёл в раздел «Соки и морсы».
На первой позиции Яндекс лавки любезно разместил глинтвейн (типа «попробуй, вдруг понравится»).
Это свело агента с ума.
Он 10 минут пытался понять, почему «глинтвейн» — это не «морс».
• Один саб-агент клал глинтвейн в корзину.
• Другой — проверял корзину, видел ошибку и удалял его.
• Главный агент, в попытке разрешить конфликт, открыл два окна и начал сравнивать морс и глинтвейн, задавая сам себе философские вопросы.
Он сравнивал все: температуру напитка, ингредиенты, условия в которых их принимают, культурный вектор, после чего дал такой ответ:
> Semantic similarity < 15%. Classification failed.
Через 15 минут борьбы он таки осознал разницу и добавил нужный товар. А у меня — кончились токены. Идти просить ещё один ключ я не стал, отправил работу как есть.
У этой компании очень много вакансий лежит на hh, если кто-то еще будет делать тестовое, то надеюсь мои ошибки и/или наработки помогут вам выполнить его намного лучше.
Как сказал бы агент: skill issue🗿