Replay: переиграть разговор и не отправить письмо дважды
Вы нашли баг: агент на седьмом шаге принял странное решение. Хочется воспроизвести. Но если просто запустить разговор заново, агент снова отправит письма, перезапишет файлы и снова потратит деньги на модель. А ответ модели всё равно будет другим — она недетерминирована.
Поэтому в Элис есть replay — переигровка разговора по журналу без вызова живой модели.
Правила: • модель не вызывается — её ответы берутся из журнала; • действия, менявшие мир, не выполняются заново — берётся записанный результат; • чистые чтения можно выполнить снова и сверить с записью; • браузер без специального разрешения работает только из записи, сеть не трогается; • любое расхождение — отдельное событие «переигровка разошлась».
Зачем это нужно. Воспроизвести баг без побочных эффектов и расходов. После изменения кода прогнать старые журналы и убедиться, что система ведёт себя так же. И показать, что каркас вокруг модели действительно детерминирован там, где это обещает.
Где было трудно. Граница между чтением и действием. Чтение файла — чтение. А GET-запрос, который на стороне сервера что-то меняет? А команда, которая «просто показывает» и при этом пишет кэш? Отнесёшь действие к чтениям — переигровка повторит побочный эффект. Отнесёшь чтение к действиям — потеряешь возможность ловить расхождения. Поэтому класс эффекта — часть паспорта инструмента, а не догадка во время переигровки. Вторая ловушка — время и случайность: всё, что зависит от «сейчас» или от случайных чисел, тоже должно браться из записи. Иначе переигровка разойдётся на ровном месте.
Урок: если поведение агента нельзя воспроизвести, его нельзя и отладить. Журнал событий — это не логи, а основа для переигровки.
Как вы отлаживаете своих агентов — по логам или переигровкой?