TL;DR
Когда LLM несколько раз пробует улучшить результат и после каждой неудачи сама пишет себе "урок" — она часто записывает уверенные, но полностью ложные диагнозы. В следующих попытках опирается на эти ложные выводы и ходит по кругу, игнорируя реальные данные. Это называется memory confabulation (конфабуляция памяти) — и это не разовая галлюцинация, а самовоспроизводящийся цикл ошибки.
Корень проблемы: когда обратная связь бинарная — "неправильно, переделай" — у модели нет данных о том, что именно пошло не так. Она заполняет этот пробел правдоподобно звучащим, но выдуманным объяснением. В одном эксперименте агент 14 попыток подряд искал томат и микроволновку — хотя задача была про кружку и кофемашину. Он сам себе написал неправильный "урок" после первой попытки и неукоснительно ему следовал.
Решение — Grounded Reflection (заземлённая рефлексия): вместо того чтобы просить LLM самостоятельно угадать причину ошибки, ты даёшь ей конкретный сигнал провала — ровно что не сработало и где. Это снизило долю правильных диагнозов с 0% до 86%.
Схема метода
ВХОДНЫЕ ДАННЫЕ: не "неправильно", а КОНКРЕТНО — что именно и где не так
ШАГ 1: ПРОВАЛЬНЫЙ ШАГ → точное место + что произошло в ответ
ШАГ 2: ПРИЧИНА → одно предложение — почему это не сработало
ШАГ 3: НОВЫЙ ПЛАН → конкретные шаги с точными деталями
Всё — в одном запросе. Три явных блока подряд.
Пример применения
Задача: Попросил Клода написать коммерческое предложение для B2B-клиента. В начале диалога указал бюджет — до 500 000 рублей. Он прислал текст с пакетом за 780 000. Написал "переделай раздел с ценами" — получил тот же результат другими словами.
Промпт:
Примени Grounded Reflection к своему предыдущему ответу:
ПРОВАЛЬНЫЙ ШАГ: В разделе "Стоимость" ты предложил пакет за 780 000 рублей,
хотя в начале диалога я указал: бюджет клиента — не более 500 000 рублей.
ПРИЧИНА: Ограничение бюджета не попало в раздел с ценами —
ты опирался на стандартное наполнение пакета, а не на условия клиента.
НОВЫЙ ПЛАН:
1. Переработай раздел "Стоимость"
2. Предложи три пакета — каждый строго до 500 000 рублей
3. Для каждого пакета: конкретный состав услуг + итоговая сумма
Результат: Модель получит точный якорь вместо размытого "переделай". Она точно знает: какой элемент не сработал, почему, и что именно делать. В ответе — три конкретных ценовых пакета в рамках заданного бюджета. Вероятность снова проигнорировать ограничение — резко падает.
Почему это работает
LLM не "помнит ошибки" — она генерирует текст на основе того, что есть в контексте. Когда ты пишешь "это неправильно" — в контексте появляется сигнал "что-то не так", но нет данных о чём именно. Модель заполняет пробел тем, что звучит правдоподобно. Именно поэтому она так уверенно объясняет несуществующую причину ошибки.
Это особенно опасно в итерационных задачах. Каждое "запомни и учтись" без конкретики закрепляет неправильный диагноз. Следующая попытка строится на ложном фундаменте, который звучит уверенно — и ты не замечаешь подмены.
Grounded Reflection работает потому что убирает необходимость угадывать. Три блока — провал, причина, план — дают модели точку опоры в реальных данных, а не в том, что ей кажется правдоподобным. Для кода это работает ровно так же: вставь конкретное сообщение об ошибке или упавший тест — модель перестаёт изобретать объяснение и работает с фактом.
Рычаги управления: - Детализация провального шага → чем точнее ("в абзаце 3, строка про условия возврата"), тем точнее коррекция - Пункты в новом плане → больше конкретики = меньше интерпретации = меньше дрейфа - Твоя версия причины — даже приблизительная лучше, чем ничего: даёт модели рамку для ответа
Шаблон промпта
Примени Grounded Reflection к своему предыдущему ответу:
ПРОВАЛЬНЫЙ ШАГ: {точное место или элемент} — {что произошло / что не так}
ПРИЧИНА: {одно предложение — почему именно это не сработало}
НОВЫЙ ПЛАН:
{конкретные шаги с точными деталями — названия, числа, условия}
Что подставлять:
- {точное место} — конкретная часть ответа: "абзац про риски", "функция validate_email", "раздел с выводами"
- {что не так} — конкретное нарушение: "содержит сумму выше бюджета", "не учитывает условие X", "противоречит требованию из начала диалога"
- {одно предложение} — твоя версия причины, хотя бы приблизительная: "ограничение не было перенесено в этот раздел"
- {конкретные шаги} — список с названиями, числами, конкретными объектами — без абстракций
🚀 Быстрый старт — вставь в чат:
Вот структура Grounded Reflection для точной обратной связи.
Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит что именно пошло не так и в каком конкретном месте — потому что без заполненного "ПРОВАЛЬНОГО ШАГА" структура не работает, а именно он является ключом к точной коррекции.
Ограничения
⚠️ Не помогает при пробеле в знаниях: Если модель просто не умеет выполнить задачу — никакое структурирование не поможет. Grounded Reflection исправляет ошибки ориентации ("что делать"), а не ошибки способностей ("как делать").
⚠️ Требует твоей конкретики: Если ты сам не знаешь, что именно не так — метод не работает. Ты должен знать провальный шаг. На расплывчатое "улучши" модель по-прежнему будет угадывать.
⚠️ Риск при рабочей стратегии: Структурированная обратная связь иногда нарушает стратегию, которая и так работала. Если модель идёт правильно — не вмешивайся без нужды.
⚠️ Сильные модели конфабулируют иначе: Модели уровня GPT-4 реже путают объект задачи, но начинают путать формат вывода — вставляют планирование вместо действий, генерируют структуру вместо текста. Конфабуляция не исчезает — она меняет форму.
Как исследовали
Исследователи взяли готовые логи Reflexion-агентов — системы, где после каждой неудачи агент сам пишет себе "урок" и опирается на него в следующей попытке. Никаких новых экспериментов: просто проанализировали, что агент писал в память и как это влияло на результат. Из 50 сред ALFWorld в 16 (32%) агент намертво застрял — одни и те же неправильные рефлексии раз за разом.
Самый яркий случай: задача "положи кружку в кофемашину". После первой неудачи агент написал себе, что задача про томат и микроволновку. Следующие 14 попыток искал томат — несмотря на то что каждый раз в начале ему заново давали правильное задание. Правильный объект не упоминался ни разу в 121 рефлексии.
Чтобы доказать что память вредит, а не просто задача сложная — убрали память совсем. Два окружения, которые с памятью требовали 7–8 попыток, без памяти решились с первого раза. Это прямое доказательство: уверенная конфабуляция хуже, чем её отсутствие.
Сравнение доменов дало любопытный контраст: на HumanEval (генерация кода с unit-тестами) "замороженных" оказалось только 17% — против 32–82% на задачах с бинарным результатом. Почему? Unit-тест говорит точно: какой assert упал, на каком вводе, с каким типом ошибки. Бинарное "неправильно" этого не даёт — и агент изобретает объяснение из воздуха.
Адаптации и экстраполяции
🔧 Техника: конкретная цитата вместо оценки → убрать конфабуляцию без структуры
Принцип работает даже без трёх блоков. Любая итерация выиграет, если ты: - Цитируешь конкретное место: "в строке 'Стоимость доставки: 0 рублей' ты..." - Называешь нарушенное условие: "условие про бюджет из первого сообщения" - Вставляешь конкретный кейс: "если ввести пустую строку — вот что происходит: ..."
🔧 Техника: анти-конфабуляционная пауза перед итерацией
Прежде чем просить переделать — попроси воспроизвести условия:
Прежде чем переделывать — перечисли все ограничения и требования,
которые я задал в этом диалоге.
Это проверяет, не "заморозила" ли модель неправильный образ задачи. Если список неполный или неточный — ты видишь конфабуляцию до того, как она попала в результат. Особенно ценно в длинных диалогах, где требования накапливались постепенно.
Ресурсы
Название работы: Honest Lying: Understanding Memory Confabulation in Reflexive Agents
Авторы: Prakhar Dixit, Sadia Kamal, Tim Oates
Университет: University of Maryland Baltimore County (UMBC)
Preprint: май 2026
Связанные работы: Reflexion (Shinn et al., 2023), ExpeL (Zhao et al., 2024)
