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

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

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

Автор: Сергей Сидоров, основатель Geron Labs 17.10.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 перед повторной отправкой сообщения канал перечитывал чат и искал уже доставленную собственную реплику.

Схема процессаGERON LABS

Таймаут: действие могло уже выполниться

  1. Отправили запрос

    Например, на создание записи или отправку сообщения.

  2. Не получили ответ

    Сетевой сбой не доказывает, что операция не состоялась.

  3. Проверили целевую систему

    Ищем внешний ID, созданную запись или собственное сообщение.

  4. Подтвердили результат или остановились

    Не повторяем неоднозначную запись вслепую. При необходимости подключаем сотрудника.

Схема обработки неопределённого результата. Конкретная проверка зависит от возможностей API.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источники

Из практики студии

Как это устроено в наших проектах

Если нужна такая автоматизация

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

Какую работу поручить агенту?

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

SYS: COOKIE

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