TL;DR
Когда вы даёте LLM сложную многошаговую задачу, существует негласное правило: агент работает в изоляции, вы ждёте результата. Изменить задание посередине — значит либо дождаться неправильного ответа, либо прервать и начать заново с нуля. Авторы называют это транзакционной моделью и предлагают альтернативу: агент и пользователь работают в открытом канале, где изменения поступают в реальном времени и поглощаются без полного перезапуска.
Главная находка: гибкость агента ограничена не качеством алгоритма, не силой модели, не длиной контекста — а обратимостью уже выполненных действий. Отправленное письмо нельзя "отправить обратно", даже если у вас идеальный планировщик. Удалённые данные без бэкапа — нельзя восстановить никакой моделью. Это не баг алгоритма — это структурное свойство пространства действий.
Авторы формализуют это через таксономию обратимости — четыре класса действий: Идемпотентные (не меняют мир), Обратимые (можно отменить точно), Компенсируемые (нельзя отменить, но можно компенсировать с затратами) и Необратимые (отменить невозможно). Чем больше у агента компенсируемых и необратимых шагов — тем дороже любое изменение курса.
Схема метода
Классификация действий → ПЕРЕД стартом задачи:
Каждый шаг задачи → I / R / K / X класс
ВЫПОЛНЕНИЕ:
Шаг 1: Идемпотентные (I) и обратимые (R) действия → выполнить сначала
Шаг 2: Компенсируемые (K) действия → выполнить с предупреждением
Шаг 3: Необратимые (X) действия → отложить на финал, с явным согласованием
ЕСЛИ пришло изменение задачи:
→ Найти самый ранний конфликтующий K/X шаг
→ Всё до него — сохранить
→ Компенсировать конфликтующий шаг
→ Перепланировать только хвост
Все классификации выполняются в одном промпте или серии промптов в чате — без кода и без API.
Пример применения
Задача: Вы просите Claude помочь запустить новый продукт — составить и выслать письма партнёрам, забронировать зал для презентации, подготовить пресс-релиз. В середине работы вы понимаете: концепция изменилась, и письма нужно было писать по-другому.
Промпт:
Помоги мне спланировать запуск нового тарифа «Про» в нашем сервисе.
Перед тем как начать, **классифицируй каждый шаг** по типу обратимости:
- I (идемпотентный) — не меняет реальность: анализ, чтение, расчёты
- R (обратимый) — можно точно отменить: создать черновик, временный файл
- K (компенсируемый) — нельзя отменить точно, но можно исправить с затратами:
отправить письмо (можно послать поправку), забронировать зал (отмена со штрафом)
- X (необратимый) — нельзя отменить: публичный пост, оплата без возврата
Список задач:
1. Составить письма пяти партнёрам
2. Отправить письма
3. Написать черновик пресс-релиза
4. Опубликовать пресс-релиз на сайте
5. Забронировать зал на 15 человек
6. Проверить конкурентные цены
**Правила выполнения:**
- Сначала все I и R шаги
- Перед каждым K шагом — предупреди меня и жди подтверждения
- X шаги — только в финале, с явным моим согласованием
- Если я изменю задачу в процессе — найди самый ранний конфликтующий шаг,
сохрани всё до него, перепланируй только то, что после
Начни с классификации списка.
Результат: Claude выведет пронумерованный список с присвоенными классами (I/R/K/X) и объяснением каждой классификации. Затем предложит порядок выполнения: сначала проверка цен (I) и черновики писем (R), потом — с паузой на согласование — рассылка (K), бронирование (K), и публикация (X) в самом конце. Если вы напишете "стоп, концепция изменилась" после черновиков, но до отправки — модель сохранит черновики и перепишет только хвост.
Почему это работает
Слабость LLM-агентов: Стандартная инструкция "сделай задачу" запускает линейное выполнение. Модель не различает "написал черновик" и "отправил письмо" с точки зрения обратимости — оба просто "шаги плана". Когда вы говорите "стоп, всё изменилось" — непонятно, что сохранить, а что откатить.
Сильная сторона LLM: Модели хорошо следуют явно заданной структуре принятия решений. Если в промпте есть таксономия с чёткими правилами ("K = предупреди перед выполнением"), модель применяет её к каждому шагу последовательно.
Как метод использует это: Таксономия I/R/K/X превращает размытое понятие "обратимость" в конкретный чеклист. Модель не угадывает важность шагов — она применяет явные правила классификации к каждому действию. Вы получаете встроенные контрольные точки именно там, где откат станет дорогим.
Рычаги управления: - Детальность классификации → попросите добавить оценку стоимости компенсации (низкая/средняя/высокая) — получите приоритизацию рисков - Порог согласования → замените "предупреди перед K" на "предупреди перед K и X одновременно" — меньше остановок, больше скорость - Ранний X → если необратимый шаг нельзя отложить, попросите модель явно аргументировать почему он должен быть раньше — это форсирует осознанное решение
Шаблон промпта
Помоги мне выполнить задачу: {описание_задачи}
Список шагов:
{список_шагов}
Перед началом классифицируй каждый шаг:
- I — не меняет реальность (читать, анализировать, считать)
- R — точно обратимый (черновик, временный файл, можно удалить без потерь)
- K — компенсируемый (нельзя отменить точно, но исправимо с затратами:
письмо с корректировкой, отмена брони со штрафом)
- X — необратимый (публичная публикация, платёж без возврата, удаление без бэкапа)
Правила выполнения:
1. Сначала все I и R шаги — без остановок
2. Перед каждым K шагом — предупреди и жди моего "ок"
3. X шаги — только после явного согласования, в самом конце
4. Если я изменю задачу — сохрани всё выполненное до первого
конфликтующего K/X шага, перепланируй только хвост
Начни с таблицы классификации: шаг | класс | почему | стоимость отмены
Плейсхолдеры:
- {описание_задачи} — что нужно сделать в целом ("запустить продукт", "провести мероприятие")
- {список_шагов} — конкретные действия, которые нужно выполнить
🚀 Быстрый старт — вставь в чат:
Вот шаблон Reversibility Taxonomy. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какие конкретные шаги входят в задачу — потому что без этого невозможно составить таблицу классификации. Она возьмёт паттерн из шаблона и адаптирует под вашу ситуацию.
Ограничения
⚠️ Субъективные задачи: Классификация I/R/K/X работает чётко только там, где действия имеют конкретные внешние эффекты. "Написать текст" — R или K? Зависит от того, кто его читает и куда он идёт. В творческих и аналитических задачах без внешних действий польза таксономии снижается.
⚠️ Короткие задачи: Если вся задача — 2-3 шага, накладные расходы на классификацию не окупаются. Метод раскрывается на сложных многошаговых сценариях с реальными внешними действиями.
⚠️ Точность классификации: Модель может неверно классифицировать нестандартные действия — особенно в вашей конкретной ситуации. Проверяйте классификацию перед K и X шагами самостоятельно.
⚠️ Аgentic-контекст: Полная мощь метода проявляется в агентах с инструментами (Claude с веб-доступом, GPT с плагинами). В обычном чате без внешних действий таксономия работает как ментальная модель планирования, а не как технический механизм отката.
Как исследовали
Идея была простой: создать бенчмарк, где агент выполняет реальные многошаговые задачи, а в середине выполнения приходит изменение — и посмотреть, насколько дорого оно обходится. Команда создала StreamBench с тремя сценариями (планирование мероприятия, организация путешествия, подготовка отчёта) по 12-15 шагов каждый. Обратимость контролировалась искусственно: включали/выключали K и X инструменты, чтобы получить задачи с разным соотношением обратимых и необратимых шагов.
Всего провели больше 30 000 запусков — на DeepSeek-V3, Claude Haiku и GPT-4o-mini. Сравнивали пять стратегий: от "игнорировать изменение" до "перезапустить всё с нуля". Качество судил отдельный LLM-судья по шкале 1-5. Интересный дизайн: судья проверял не только декларированный результат, но и конкретные эффекты в мире — что именно написано в письме, на какую дату забронирован отель, какая сумма в платеже.
Результат удивил своей чистотой: Revision Absorber достигал того же качества, что полный перезапуск, но тратил в 14.6 раз меньше шагов впустую. Принципиальный вывод — улучшение объяснялось именно механизмом отката, а не лучшим промптингом: Naive Absorber (просто добавляли изменение без отката) показал значительно хуже. Это подтвердило: дело не в том, насколько умна модель — дело в том, насколько обратимы её уже выполненные действия.
Адаптации и экстраполяции
1. Ментальная модель для любого планирования
Таксономию I/R/K/X можно применять вне агентного контекста — как фрейм для проверки AI-плана перед выполнением:
🔧 Техника: добавить "аудит обратимости" к любому плану
После того как Claude сгенерировал план действий, добавьте запрос:
Теперь пройдись по каждому шагу плана и скажи: что произойдёт, если я захочу отменить именно этот шаг после его выполнения? Отметь дорогостоящие и необратимые точки.Это работает даже без явной таксономии — модель подсветит риски своими словами.
2. Экстраполяция: принцип "дорогое — в конец"
Из теоремы об оптимальности вытекает прикладное правило, применимое в любом проекте:
При составлении плана с LLM всегда задавайте вопрос: "Какие шаги сложнее всего отменить?" — и просите модель переупорядочить план так, чтобы эти шаги шли в конце. Это снижает стоимость любого изменения курса независимо от того, работаете ли вы с агентом или просто планируете проект вручную.
Вот мой план: {список_шагов}
Переупорядочи шаги по принципу: сначала те, которые легче всего
отменить или переделать, в конце — те, которые дорого или невозможно
отменить. Объясни логику порядка.
Ресурсы
Название работы: Revisable by Design: A Theory of Streaming LLM Agent Execution
Код и бенчмарк: github.com/zhiyuanZhai20/stream-agent
Авторы: Xin Wang, Zhiyuan Zhai, Ming Li — Fudan University и Guangming Lab
Связанные работы из статьи: - ReAct (Yao et al., 2023) — базовая архитектура thought-action-observation - Reflexion (Shinn et al., 2023) — самокоррекция агента после завершения - StreamBench — оригинальный бенчмарк авторов - Saga pattern в теории распределённых баз данных (Garcia-Molina & Salem, 1987) — теоретическая база таксономии
