При создании ИИ-агентов стандартный подход к обучению заключается в передаче скользящего окна истории чата непосредственно обратно в LLM на каждом ходу. LLM действует как механизм рассуждения и менеджер состояний. Для простых чат-ботов это нормально...
При создании ИИ-агентов стандартный подход к обучению заключается в передаче скользящего окна истории чата непосредственно обратно в LLM на каждом ходу. LLM действует как механизм рассуждения и менеджер состояний.
Для простых чат-ботов это нормально. Для производственных агентов, выполняющих действия (вызовы API, запись в базу данных), эта архитектура является бомбой замедленного действия.
Проблема: вероятностное состояние
LLM являются вероятностными. Если агент выполняет вызов инструмента (например, charge_credit_card), а время ожидания API истекает, LLM должен угадать, что произошло, на основе строки ошибки. Заряд прошел и связь пропала? Или сразу не получилось?
Если LLM владеет состоянием, он может галлюцинировать успешное списание средств или, что еще хуже, галлюцинировать неудачу и повторить действие, взимая с клиента двойную плату.
Решение: детерминированные внешние циклы
Механизм рассуждений (LLM) должен быть полностью отделен от конечного автомата.
LLM выводит намерение: «Я хочу позвонить charge_credit_card».
Его выполняет внешний цикл: детерминированный традиционный конечный автомат (написанный на Python/TS) перехватывает намерение, регистрирует его в базе данных как ожидающее и выполняет вызов.
Внеполосная проверка: если вызов ti