Вашему ИИ-агенту не нужно быть умнее. Ему нужно быть идемпотентным
Большинство рабочих ИИ-агентов выходят из строя не из-за ошибок в рассуждениях. Они выходят из строя из-за сетевых ошибок.
Модель выбирает правильный инструмент. Она заполняет верные детали. А затем она дважды списывает деньги с клиента.
Это происходит потому, что агенты с возможностью записи работают в ненадежных сетях.
- Запросы завершаются по таймауту.
- Соединения разрываются.
- Фреймворки повторяют шаги, которые уже были завершены.
Для агента, работающего только на чтение, повторная попытка ничего не стоит. Для агента с возможностью записи повторная попытка — это второе необратимое действие.
Решение — идемпотентность.
Рассмотрим типичный сценарий сбоя:
- Агент вызывает функцию для отправки счета.
- Сервис создает счет.
- Соединение разрывается до того, как ответ доходит до агента.
- Агент фиксирует таймаут и повторяет попытку.
- Теперь у вас два счета.
Более умная модель это не исправит. Более умная модель может даже ухудшить ситуацию, если будет слишком агрессивно повторять попытки.
Можно поучиться у платежных систем, таких как Stripe. Они используют Idempotency-Key. Сервер сохраняет результат первого запроса. Если клиент снова отправляет тот же ключ, сервер возвращает сохраненный результат вместо повторного выполнения действия.
Для ИИ-агента этот ключ необходимо извлекать из намерения (intent).
Не используйте случайные ID. Используйте хеш от имени инструмента и его стабильных параметров.
Пример:
- Tool:
charge_customer - Params:
{customer_id: 42, amount: 500} - Key:
hash(tool + params)
Если агент повторит точно такое же списание, ключ останется прежним. Система распознает его и предотвратит дублирующее списание.
Предостережение: надежность вашего ключа напрямую зависит от того, насколько точно вы определили понятие «одиночного действия».
- Если вы включите временную метку (timestamp) в хеш, каждая повторная попытка получит новый ключ. Защита перестанет работать.
- Если вы включите тело сообщения, написанное LLM, модель может изменить всего одно слово. Это создаст новый ключ и приведет к дублированию действия.
Всегда используйте в качестве ключа стабильные данные, такие как ID клиента или ID счета. Исключайте всё, что модель может изменить.
Перестаньте пытаться повысить надежность агентов с помощью более качественных промптов.
Надежность заключается в том, чтобы свести стоимость повторного принятия решения к нулю. Если ваш агент выполняет одно и то же действие дважды, ничего не должно сломаться.
Дополнительное сообщество для обучения: https://t.me/GyaanSetuAi
