ИИ-агент в бизнесе: как не выполнить одно действие дважды
Запрос завершился тайм-аутом, но CRM успела создать заказ. Почему повторный запуск агента опасен и как связать подтверждение, идентификатор операции и проверку результата.
Помощник подготовил заказ и отправил его в CRM. Ответ не пришёл за отведённое время. Агент решил, что действие не выполнено, и повторил запрос. В системе появились два заказа. Формально обе попытки были разумной реакцией на сбой, но бизнес получил лишнюю операцию.
Тайм-аут сообщает только об отсутствии ответа в ожидаемый срок. Он не доказывает, что принимающая система ничего не сделала. Когда ИИ-агент получает право создавать записи или отправлять сообщения, это различие становится частью основной логики, а не редким техническим исключением.
Модель может предложить действие: создать заказ, изменить адрес, отправить письмо. Выполнять предложение должен отдельный слой с явным набором операций. Он проверяет полномочия, параметры и текущее состояние объекта, после чего вызывает API с собственными служебными идентификаторами.
Не позволяйте модели выбирать произвольный адрес сервиса или подменять технический ключ операции. Иначе повторный диалог легко превратится в новое действие, хотя пользователь пытался уточнить результат предыдущего. Идентификатор связывают с бизнес-намерением и сохраняют вне контекста разговора.
Идемпотентность означает, что повтор одного и того же запроса в рамках предусмотренного контракта не создаёт дополнительного результата. Такая возможность должна поддерживаться принимающей системой или реализованным вами посредником. Произвольный заголовок с красивым названием сам по себе ничего не гарантирует.
Например, Stripe описывает собственный контракт идемпотентных запросов , включая срок хранения ключей и сравнение параметров. Это пример реализации, а не универсальная настройка CRM. Для другого API нужно отдельно выяснить, какие операции поддерживают безопасное повторение и как получить созданный объект после потери ответа.
Ситуация
Что известно
Следующее действие
Запрос ещё не отправляли
Побочного эффекта не было
Проверить условия и выполнить
Получен успешный ответ
Есть идентификатор результата
Сохранить результат и сообщить пользователю
Соединение оборвалось
Результат неизвестен
Сверить состояние, не создавать новую операцию
Найден прежний результат
Действие уже выполнено
Вернуть его вместо повторного создания
Параметры изменились
Это другое намерение или новая редакция
Повторно проверить и при необходимости согласовать
Минимальная запись содержит тип действия, идентификатор намерения, объект, согласованные параметры и состояние исполнения. Пример ниже — внутренний формат приложения. Он не является готовым запросом Битрикс24 или другого поставщика.
В рабочем варианте подтверждение связано с точным составом заказа: товарами, суммами, адресом и получателем. Если параметры изменились после согласования, прежнее подтверждение не подходит. Срок действия подтверждения и способ проверки полномочий задают в сервисе, а не оставляют на усмотрение модели.
На стороне хранилища требуется атомарно зарегистрировать намерение. Два параллельных обработчика не должны одновременно увидеть «операции нет» и оба начать создание. Для этого используют ограничения уникальности и согласованный механизм захвата работы. Но локальная блокировка ещё не решает сбой между созданием объекта во внешней системе и сохранением его идентификатора у вас.
Если внешний API не поддерживает ключи, помогает устойчивый внешний идентификатор в самом объекте и последующая сверка. Его уникальность и возможность поиска нужно проверить. Когда надёжной сверки нет, неопределённый результат передают оператору. Обещать выполнение «ровно один раз» через любое API нельзя.
Фраза «можете продолжать» в начале беседы не должна превращаться в бессрочное разрешение отправлять любые документы. Перед значимым действием человеку показывают получателя, параметры и ожидаемый эффект. Подтверждение сохраняют вместе с редакцией операции; при отказе действие не запускается.
В n8n есть согласование отдельных инструментов AI-агента . Оно помогает поставить проверку перед выбранными вызовами. Однако права учётной записи, допустимые параметры и защита от дублей всё равно требуют настройки. Согласованное действие тоже может получить тайм-аут.
Чтение карточки и отправка письма имеют разные последствия. Для каждого инструмента определите условия повтора, предел попыток и способ сверки. Нельзя применять общее правило «повторить три раза» ко всем ошибкам: неправильные права или отклонённые реквизиты не исправятся ожиданием, а повтор создания может увеличить ущерб.
При временной недоступности сохраняют задачу и план следующей попытки. При неизвестном результате переходят в состояние сверки. Журнал должен отличать эти ситуации, иначе оператор не поймёт, можно ли безопасно нажать «запустить снова». Доступ к повторному исполнению ограничивают так же, как доступ к первоначальному действию.
Проверка одной успешной демонстрации ничего не говорит о дублях. Нужен управляемый тестовый контур, в котором можно разорвать соединение после фактического создания объекта и воспроизвести повтор события.
— Доставьте одно событие дважды: должен сохраниться один результат.
— Запустите два обработчика одновременно: проверьте атомарность регистрации.
— Потеряйте ответ после выполнения: система должна сверить операцию.
— Измените сумму после подтверждения: отправка должна остановиться до нового решения.
— Перезапустите сервис между выполнением и записью результата.
— Повторите запрос после истечения срока хранения ключа у провайдера.
Отчёт фиксирует не только количество ошибок, но и фактические объекты во внешней системе. По одному журналу агента нельзя доказать отсутствие дубля: запись могла не сохраниться именно в момент сбоя.
Достаточно ли написать агенту «не повторяй действие»? #
Нет. Повторы возникают не только в рассуждении модели, но и в очередях, сетевых клиентах и повторной доставке событий. Защита должна работать независимо от формулировки инструкции и сохранности диалога.
Что делать, если API не позволяет найти результат по нашему идентификатору? #
Зафиксировать ограничение и выбрать безопасный маршрут для неопределённых результатов. Иногда это ручная сверка; иногда — изменение интеграции или создание посредника. Слепой повтор не становится безопасным только потому, что другого метода пока нет.
Поможем проверить действия агента в ваших системах #
Если помощник должен работать с CRM, документами или внутренними заявками, NetLab поможет спроектировать AI-ассистента для сотрудников , отделить предложения модели от исполнения и проверить восстановление после сбоев. Отправьте описание сценария : какие записи агент создаёт и что происходит при повторном запросе.