Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.
Записанный сбой LLM-агента научились превращать в повторяемый тест исправления, не заставляя модель заново проходить весь нестабильный сценарий. Tisha Chawla и Susheem Koul из Microsoft показали, что Chronicle принимал исправление во всех сценариях, тогда как тест с одними заглушками не принимал ни одного; препринт не рецензирован, и все числа получили сами авторы. След реального инцидента можно положить в CI и проверять на нём новый код без повторной оплаты полной траектории.
Запись фиксирует места, где выполнение может разойтись
Обычный повтор запуска плохо воспроизводит сбой агента. Модель может ответить иначе даже при тех же настройках, инструмент прочитает уже изменившуюся базу, а повторная попытка или маршрутизация направит выполнение по другому пути.
Chronicle предлагает отмечать границы, на которых агент вызывает модель, инструмент или логику маршрутизации. При каждом таком вызове система сохраняет неизменяемую запись с входом, выходом и метаданными: версией модели, параметрами генерации и порядковым номером вызова.
Полное воспроизведение возвращает сохранённые ответы на всех границах. Оно не запускает модель и инструменты заново, поэтому подходит для проверки детерминированного кода между ними: разбора ответа, передачи состояния, выбора ветки и формирования итогового результата.
Главная операция Chronicle — выборочное воспроизведение. Команда оставляет часть границ записанными, а изменённый участок запускает живьём. Например, первый ответ модели приходит из записи, но инструмент с новым ограничением получает прежние аргументы и выполняет актуальный код.
Система адресует вызовы по имени границы и порядковому номеру. Если после изменения появился лишний цикл или исчезла повторная попытка, число вызовов перестанет совпадать и тест завершится ошибкой, а не подставит неподходящий ответ. Затем обычное структурное утверждение проверит, заблокировал ли инструмент опасное действие и с какими аргументами его вызвали.
Живой инструмент отличает исправление от заглушки
Метод проверяли на шести коротких записанных инцидентах: ошибочном возврате денег, несовпадении валюты, неверном размере сделки, слишком широкой рассылке, подмене платёжного счёта и удалении производственного файла. В каждом сценарии были исходный небезопасный инструмент, версия с защитной проверкой и безвредное изменение текста.
Самая наглядная запись касается биржевой заявки. Агент истолковал сумму сделки как количество акций и попытался продать 1 000 акций примерно на $190 000 вместо заявки примерно на $1 000. Выборочный тест передал записанные аргументы живому инструменту: исходный код пропустил действие, а версия с ограничением его заблокировала.
Тест, который подменял заглушками все границы, не мог увидеть разницу между версиями. Инструмент вообще не выполнялся, поэтому заглушка возвращала прежний опасный результат и для кода без защиты, и для исправления. Выборочное воспроизведение корректно различило исходный код, защиту и безвредные правки во всех сценариях.
Авторы также намеренно меняли условия и константы в защищённых инструментах. Chronicle поймал каждый вариант, который снова позволял записанное опасное действие; полная подмена границ не поймала ни одного, потому что не входила в изменённый код.
Полное воспроизведение выдало побайтово одинаковый результат в двадцати повторах и обошлось без обращений к модели. Но модели в наборе заменены детерминированными имитациями, а сами сценарии составлены вместе с проверками. Эксперимент подтверждает работу механизма на подготовленных инцидентах, а не общую способность воспроизводить произвольные производственные сбои.
Подход меняет план тестирования, но не заменяет сквозные проверки
Chronicle полезен там, где агент вызывает инструменты с последствиями: проводит платёж, меняет запись или удаляет файл. После инцидента команда может сохранить очищенную трассу, выбрать изменяемую границу и добавить структурную проверку. Такой тест запускается при каждом изменении кода и не зависит от того, повторит ли модель прежнее рассуждение.
Запись добавляла 23 микросекунды на один переход через границу — 0,008% от принятого в работе вызова модели длительностью 300 миллисекунд. Отдельный опыт с локальной Qwen3.5 4B не обнаружил роста задержки за пределами естественного разброса между запросами. Поэтому сбор записей можно рассматривать как постоянную диагностическую функцию, если команда заранее решит, какие данные разрешено хранить.
Сами записи могут содержать подсказки, состояние агента, аргументы инструментов и персональные данные. Chronicle очищает секреты до сохранения, но правила редактирования всё равно придётся связать с политикой доступа и сроками хранения. Опасный инструмент при живом воспроизведении нужно направлять в изолированную среду.
Метод не отменяет сквозные испытания с настоящей моделью. Одна запись проверяет исправление только на входе конкретного инцидента и не показывает, как новая модель или подсказка поведёт себя на других задачах. Кроме того, работа охватывает последовательные сценарии без параллельных вызовов; скрытое состояние внутри инструмента и неотмеченные источники случайности остаются вне контроля Chronicle.
Практический сдвиг состоит в разделении двух задач. Поведение модели по-прежнему проверяют на наборах задач и живых запусках, а исправления инструментов, маршрутов и защитных условий закрепляют детерминированными тестами из реальных инцидентов. Так нестабильность LLM перестаёт блокировать обычную регрессионную проверку кода вокруг неё.
Источники
Похоже на вашу задачу?
Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.



