Визуализация работы ИИ-агентов в Telegram: статусы инструментов и отмена задач

Habr AI · оригинал

Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Статья описывает техническую реализацию прозрачного интерфейса для AI-агентов в Telegram с использованием временных черновиков сообщений. Рассматриваются методы отображения статуса выполнения инструментов, добавления анимаций и корректной обработки кнопки Stop для отмены задач.

Прозрачность действий ИИ-агентов критически важна для пользовательского доверия. Отображение промежуточных статусов и возможность прервать выполнение задачи повышают управляемость ботов в мессенджерах.

При взаимодействии с AI-агентами, выполняющими многошаговые задачи, стандартный индикатор «печатает…» часто не дает представления о текущем этапе работы. В Telegram для решения этой проблемы существует механизм временных черновиков сообщений (drafts), позволяющий выводить динамический блок состояния. На примере агента swift-claw автор демонстрирует, как связать вызовы инструментов с обновлением интерфейса через Bot API. Ключевым элементом здесь является тег <tg-thinking>, который позволяет боту передавать текстовые статусы, такие как «Ищу тесты микрофона» или «Читаю обзор», без необходимости показывать внутренние рассуждения модели.

Техническая реализация начинается с отправки запроса sendRichMessageDraft. Этот метод создает временное сообщение в чате, которое автоматически исчезает через 30 секунд, если не будет обновлено. Для отслеживания состояния используется уникальный draft_id, который сохраняется приложением вместе с текущей задачей. Поскольку длительные операции могут приводить к истечению таймера черновика, разработчикам необходимо периодически отправлять обновления, даже если текст статуса не меняется. Это требует синхронизации событий инструментов и фоновых таймеров.

Для детализации процесса агенту присваиваются отдельные шаги для каждого вызова инструмента. При старте действия в список добавляется запись с описанием, а при завершении — фиксируется результат или ошибка. Такой подход позволяет различать параллельные операции и корректно отображать их статусы. Важно экранировать динамический текст перед вставкой в HTML, чтобы избежать конфликтов с разметкой Telegram. После завершения всех шагов готовый ответ отправляется отдельным сообщением через sendRichMessage, сохраняя его в истории чата.

Визуальное восприятие можно улучшить с помощью анимированных иконок. Telegram предлагает набор custom emoji AIActions, которые поддерживаются внутри блока состояния. Использование тегов <tg-emoji> позволяет добавить анимацию поиска или обдумывания рядом с текстовой подписью. Если бот не имеет прав на отправку кастомных эмодзи, интерфейс остается функциональным в текстовом виде.

Критически важным аспектом является обработка кнопки Stop. Параметр can_stop: true активирует встроенную кнопку отмены. При нажатии пользователь получает событие stopped_message_generation, содержащее идентификаторы чата и черновика. Приложение должно использовать эти данные для точной привязки к конкретной задаче, чтобы избежать отмены новых запросов, отправленных после остановки предыдущего. Здесь возникают гонки условий: например, если результат инструмента приходит после запроса отмены, обработчик должен игнорировать его, иначе черновик может появиться снова.

Разработчикам также следует проверять доступность поля ввода во время активной генерации. В некоторых версиях клиентов Telegram кнопка отправки могла блокироваться индикатором загрузки, мешая пользователю отправить уточнение или команду /stop. Корректная реализация требует, чтобы закрытие обновлений черновика происходило до запроса отмены у агента, гарантируя, что отмененная задача не сможет опубликовать финальный ответ.

Описанный подход универсален и не зависит от конкретного языка программирования или фреймворка. Он основан на стандартных методах Bot API и логике управления состоянием приложения. Такой интерфейс делает работу AI-агентов предсказуемой и управляемой, что особенно важно при выполнении длительных исследовательских задач.