Автономный AI-агент сдал Stepik на 100%: код и ошибки | 2026 | AiManual
AiManual Logo Ai / Manual.
22 Мар 2026 Гайд

AI-агент сдал курс на Stepik на 100%: техническая реализация и уроки автономного обучения

Технический разбор эксперимента: как агент на Python, Playwright и Claude Opus 4 автономно прошел курс на Stepik. Архитектура, код и главные ошибки.

Когда Claude Opus 4 в режиме полной автономии за 7 часов прошел курс по DevOps, я понял две вещи. Первая – будущее уже здесь, и оно слегка ироничное. Вторая – большинство гайдов по автономным агентам врут. Они показывают идеализированную картинку, а не ту гору костылей и неожиданных ошибок, которая возникает на практике.

Этот эксперимент начался со спора. Можно ли заставить AI-агент не просто болтать в API, а полноценно взаимодействовать со сложным веб-приложением, где есть регистрация по почте, интерактивные тесты, видео и задания с кодом? Платформу для теста выбрали Stepik – не самый простой, но и не монстр вроде Coursera. Цель – 100% завершение курса без человеческого вмешательства после старта.

Спойлер: агент справился. Но путь к успеху состоял на 30% из гениальных инсайтов и на 70% из борьбы с тупыми, раздражающими проблемами вроде внезапно изменившегося CSS-селектора или капчи в письме подтверждения.

Почему 90% автономных агентов терпят поражение на первом же тесте

Типичная ошибка – думать, что достаточно дать агенту доступ к браузеру и мощной LLM вроде Claude Opus 4 (последняя доступная версия на март 2026 года). На бумаге все просто: агент видит страницу, понимает задачу, кликает. В реальности вас ждет ад динамического контента.

  • Хрупкость селекторов. Playwright находит кнопку по `data-qa="submit-button"`, а завтра разработчик Stepik меняет атрибут на `data-testid`.
  • Неоднозначность инструкций. LLM видит вопрос «Выберите правильные утверждения». Что для нее «правильное»? Логически верное или соответствующее мнению автора курса?
  • Временные задержки. AJAX-загрузка результатов теста может занять 3 секунды, а агент уже пытается кликнуть дальше и ломает поток.
  • Контекстное окно. Самое болезненное. Агент, проходя модуль, забывает, что было три шага назад. Он не держит в памяти полную структуру курса.

Именно поэтому многие проекты, о которых пишут в блогах, работают только на демо-стенде. Наш подход был другим: вместо создания «универсального студента» мы построили узкоспециализированного агента, заточенного под конкретную платформу – Stepik. Это ключевой момент.

Архитектура агента: не универсальный солдат, а хирург с набором инструментов

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

Модуль агентаИнструментыЗадача
НавигаторPlaywright, кастомные селекторыПеремещение по курсу, нажатие «Далее»
Решатель заданийClaude Opus 4 API, контекстное окноАнализ вопроса, генерация ответа
РегистраторIMAP клиент, парсер писемСоздание аккаунта, подтверждение email
ИнспекторPlaywright, скриншоты, логиВалидация состояния страницы, отладка

Оркестратор написан на Python 3.12, потому что в 2026 году asyncio и тайп-хинты – это must have для любого серьезного автоматизационного скрипта. Playwright использовали версии 1.45+, которая поддерживает все современные браузеры и имеет отличный Python API.

1Шаг первый: обратный инжиниринг Stepik и планирование атаки

Прежде чем писать код, агент (вернее, мы) должен был понять структуру курса. Вручную прошли несколько уроков, записали все типы заданий: multiple choice, текст с пропусками, сопоставление, вопросы с кодом. Для каждого типа создали шаблон обработки.

Важный нюанс – мы не парсили HTML курса заранее. Агент должен был исследовать его на лету, как настоящий студент. Но мы дали ему «карту»: знание основных CSS-селекторов Stepik (они, к счастью, довольно стабильны) и список возможных действий.

# Пример конфигурации селекторов для Stepik (2026 год)
STEPIK_SELECTORS = {
    "next_button": "button[data-qa='next']",
    "question_text": ".attempt__header h2",
    "choice_option": ".task-choice__option label",
    "submit_button": "button[type='submit']",
    "success_indicator": ".attempt__solution-correct",
}
# Но мы также подготовили fallback-селекторы, потому что веб-разработчики любят менять классы.

2Шаг второй: автономная регистрация и война с IMAP

Первый серьезный барьер. Нужно создать аккаунт, получить письмо с подтверждением, перейти по ссылке. Звучит просто. На практике – почтовые сервисы блокируют автоматические действия, письма приходят с задержкой, а в письме может быть не одна ссылка, а пять (подписка, отписка, подтверждение).

Использовали библиотеку `imaplib` и `email` из стандартной библиотеки Python. Создали временный почтовый ящик на сервисе, который позволяет IMAP (важный момент – многие бесплатные сервисы в 2026 году его отключают). Агент ждал письмо до 5 минут, парсил HTML-часть, искал ссылку с текстом «confirm» или «подтвердить», извлекал ее и открывал в браузере.

Ошибка №1: Агент кликал на первую же ссылку в письме, которая вела на страницу отписки от рассылки. Решение: научить его искать ссылку по комбинации текста и атрибута `href`, содержащего `confirm` или `token`. Пришлось добавить простой regex-фильтр.

3Шаг третий: браузерная автоматизация на стероидах с Playwright

Playwright – это наш скальпель. Мы использовали не только автоматические клики, но и расширенный контекст. Например, перед каждым действием агент делал скриншот области с заданием и отправлял его в Claude Opus 4 вместе с HTML-кодом. Это давало двойную информацию: структурированные данные (HTML) и визуальный контекст (скриншот).

Код навигатора выглядел не как линейный скрипт, а как конечный автомат (state machine). Агент всегда знал, в каком состоянии находится: «на странице урока», «ожидает загрузки вопроса», «отправляет ответ», «анализирует результат».

async def navigate_to_next_page(page, state):
    """Умная навигация с ожиданием загрузки контента."""
    try:
        # Ждем, пока кнопка "Далее" станет кликабельной
        await page.wait_for_selector(
            STEPIK_SELECTORS["next_button"],
            state="attached",
            timeout=10000
        )
        await page.click(STEPIK_SELECTORS["next_button"])
        # Ждем появления следующего вопроса или индикатора успеха
        await page.wait_for_selector(
            ".stepik-content",
            timeout=15000
        )
        state["current_page"] += 1
        logger.info(f"Перешли на страницу {state['current_page']}")
    except TimeoutError as e:
        # Если что-то пошло не так, делаем скриншот для отладки
        await page.screenshot(path=f"error_{state['current_page']}.png")
        raise AgentNavigationError(f"Таймаут навигации: {e}")

4Шаг четвертый: интеграция Claude Opus 4 – не просто чат, а решатель задач

Claude Opus 4 (Anthropic) был выбран из-за его контекстного окна в 200K токенов и способности следовать сложным инструкциям. Промпт – это сердце агента. Он не был просто «Ответь на вопрос». Это была многоуровневая инструкция, напоминающая подходы из кейса нетрадиционного обучения.

Мы структурировали промпт так:

  • Роль: Ты эксперт по DevOps, проходишь курс на Stepik.
  • Контекст: Вот HTML-код текущего вопроса и скриншот. Вот история твоих предыдущих ответов.
  • Задача: Проанализируй вопрос, выбери правильный ответ. Если вопрос с кодом – напиши код.
  • Ограничения: Ответ должен быть в точном формате, требуемом платформой (например, буква варианта или точная строка).
💡
Инсайт: Claude Opus 4 иногда слишком «рассуждал», выдавая длинные объяснения вместо требуемой буквы A, B, C. Мы жестко форматировали ответ, требуя вывод в JSON, например: {"answer": "A"}. Это снизило точность распознавания на 2%, но увеличило успешность отправки ответа на 40%.

5Шаг пятый: оркестрация, логирование и обработка исключений

Главный скрипт запускал всех микро-агентов, следил за таймаутами и логировал каждый шаг в структурированном виде (JSON-логи). При любой ошибке – будь то сетевой сбой, изменение интерфейса или неожиданный вопрос – агент не падал, а переходил в состояние «ошибка», делал скриншот и пытался применить одно из запасных действий: обновить страницу, вернуться на шаг назад, перечитать вопрос.

Система мониторинга, вдохновленная принципами оценки AI-агентов, отслеживала не только конечный результат (пройден/не пройден), но и метрики: время на вопрос, точность ответов, количество fallback-действий.

Что пошло не так: топ-5 ошибок, которые съели 80% времени

  1. Динамические ID элементов. Некоторые кнопки на Stepik генерировали `data-qa` атрибуты с случайным суффиксом. Решение: перейти на поиск по XPath, используя частичное совпадение текста или относительные пути.
  2. Капча в письме подтверждения. На второй день тестов наш почтовый провайдер начал показывать капчу после нескольких автоматических входов по IMAP. Пришлось вручную добавить паузу между проверками и использовать резервный почтовый сервис. Это был ручной труд – слабое место автономии.
  3. LLM галлюцинирует на простых вопросах. Claude Opus 4 иногда давал неверный ответ на элементарный вопрос с подвохом, хотя на сложных вопросах по Docker справлялся блестяще. Видимо, перемудривал. Решение: добавили второй, более простой промпт для вопросов базового уровня.
  4. Проблемы с памятью. Когда курс содержал 50+ шагов, контекстное окно переполнялось. Мы начали суммировать пройденные этапы, но это могло привести к потере важных деталей. В будущем нужно внедрить векторную базу для долгосрочной памяти, как в архитектуре AI Coding Agent.
  5. Экономика. Запросы к Claude Opus 4 API стоят денег. Один курс обошелся примерно в $15. Для массового использования нужна оптимизация: кэширование ответов, использование более дешевых моделей для простых шагов.

Что это значит для будущего? Агенты не займут мир, но они уже могут учиться

Эксперимент показал, что автономные AI-агенты в 2026 году готовы к выполнению сложных, многошаговых задач в реальных веб-средах, но только при условии тщательной инженерии и наличия человека-инженера, который проектирует архитектуру и тушит пожары.

Следующий шаг – масштабирование. Не для сдачи курсов (это скорее proof-of-concept), а для реальных бизнес-задач: автоматизация рутинных операций в CRM, мониторинг и реагирование в системах поддержки, автономное тестирование веб-приложений. Принципы те же: модульность, устойчивость к ошибкам, четкие промпты.

Если вы хотите погрузиться в разработку подобных систем с нуля, начните с основ. Например, бесплатный курс от Kaggle и Google по AI-агентам дает хорошую теоретическую базу. А для практики попробуйте повторить наш эксперимент на каком-нибудь открытом курсе. Только приготовьтесь: 20% времени уйдет на гениальный код, а 80% – на борьбу с тем, что кнопка «Далее» вдруг стала зеленой.

И последний совет. Не пытайтесь создать агента, который пройдет любой курс. Создайте агента, который пройдет конкретный курс на конкретной платформе. Специализация побеждает универсальность. Пока что.

Подписаться на канал