Все статьи
ИИ-агенты // Geron Labs

Как работает ИИ-агент: путь от события до действия

Разбираем полный цикл ИИ-агента: входное событие, контекст, выбор инструмента, API-вызов, проверка и передача человеку.

Автор: Сергей Сидоров, основатель Geron Labs 28.09.2026 Код, API и границы решения

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

Шаг 1. Получить событие

События приходят разными способами:

  • webhook сообщает об изменении сразу;
  • polling регулярно запрашивает новые объекты;
  • пользователь загружает файл или отправляет сообщение;
  • планировщик запускает проверку по времени.

Webhook не всегда лучше. В Avito-проекте DOLOROSA мы использовали опрос новых чатов. На аккаунте уже были сторонние подписки, а бизнес-правило требовало паузу перед ответом. Для YCLIENTS webhook оказался полезен, чтобы получать изменения записей и обновлять локальную память.

Шаг 2. Собрать контекст

Входное сообщение редко содержит все данные. Фраза «он ещё есть?» понятна только вместе с объявлением. «Запишите вечером» требует услуги, филиала, даты и расписания.

Контекст надо собирать из источников с понятным приоритетом. В DOLOROSA наличие приходит из МойСклада, а цена для разговора в Avito берётся из объявления. Это правило появилось после сравнения данных: одна карточка могла содержать другую сумму.

Полезно хранить не только значение, но и происхождение:

json
{
  "fact": "price",
  "value": "из контекста объявления",
  "source": "avito_chat_context",
  "checked_at": "request_time"
}

В публичном журнале настоящие значения и идентификаторы заменяются обезличенными примерами.

Шаг 3. Выбрать инструмент

Модель получает список функций и их контракты. Например:

text
check_stock(product_id) -> in_stock | sold | unknown
find_slots(branch_id, service_id, date) -> slots[]
escalate(reason, context_ref) -> ticket_id

Чем уже инструмент, тем легче проверить вызов. Функция solve_everything() скрывает ошибки. find_slots() имеет понятные аргументы и результат.

До выполнения код проверяет типы, обязательные поля, права и бизнес-ограничения. Если модель передала название вместо UUID, вызов должен завершиться контролируемой ошибкой, а не проверить случайный товар.

Шаг 4. Выполнить действие

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

Для операций записи используют один или несколько механизмов:

  • idempotency key, если его поддерживает API;
  • сохранение внешнего ID результата;
  • проверка состояния перед повтором;
  • запрет автоматического retry для неоднозначной операции.

В YCLIENTS-проекте безопасные GET-запросы повторялись, а book_record по умолчанию не отправлялся повторно после неопределённого сбоя. В Avito перед повторной отправкой сообщения канал перечитывал чат и искал уже доставленную собственную реплику.

Шаг 5. Проверить результат

HTTP 200 ещё не доказывает бизнес-результат. Нужно проверить, что в ответе есть ожидаемый объект, его ID сохранён, а целевая система показывает нужный статус.

Для КП проверка другая: каждая строка должна иметь источник, соответствие товара и флаг ручного просмотра. Для обработки фотографии сравниваются исходник и результат, отдельно проверяются надписи и форма предмета.

Шаг 6. Ответить или передать человеку

Эскалация является обычной веткой процесса. Агент передаёт диалог сотруднику, когда:

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

В Telegram-хабе DOLOROSA каждый диалог Avito получил отдельную тему. Менеджер видел контекст и мог продолжить разговор без копирования переписки.

Шаг 7. Оставить след для разбора

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

Такой журнал помогает отличить ошибку модели от отказа API, нехватки прав или неверного правила. Например, HTTP 403 в YCLIENTS был связан с ролью технического пользователя, а не с промтом.

Проверка перед запуском

Для каждого инструмента прогоняем успешный сценарий, пустой результат, отказ доступа, timeout и повтор события. Затем запускаем теневой режим: система выполняет чтение и готовит решение, но не пишет клиенту или в рабочую систему. Только после разбора журналов включается ограниченная запись.

Если у вас есть конкретный процесс, Geron Labs может разложить его на события, источники, инструменты и проверки до оценки разработки.

Читайте также: Что такое ИИ-агент и какие задачи он может выполнять в бизнесе, Как настроить данные, инструменты, память и эскалации ИИ-агента, Как подключить ИИ-агента к Avito через API.

Источники

Разбор процесса

Нужна такая же схема у вас?

Пришлите один реальный сценарий: заявку, переписку или файл. Покажем, где нужен ИИ, какие API понадобятся и во что обойдётся пилот. Простой агент с несколькими функциями — в среднем от $500.

SYS: COOKIE

Мы используем технические cookies для корректной работы сайта. Политика конфиденциальности