3,583 papers
arXiv:2610.33029 88 12 окт. 2026 г. FREE

Lessons from Luck: самописные уроки агента превращают случайный сбой в правило

КЛЮЧЕВАЯ СУТЬ
Обнаружено: агент, который сам пишет себе «уроки», записывает в память обычное невезение. Следующий запуск читает этот урок и начинает выбирать худший инструмент. Метод позволяет агенту с памятью не превращать один случайный сбой в совет на будущее. Автора урока заставляют сначала оценить решение, а не исход, и разрешают написать «менять ничего не нужно». Пример: надёжный инструмент (сбои в 10% запусков) один раз упал. Без защиты урок звучит так: «он ломается, бери другой» (сбои в 40%). Фишка: модель пишет такой совет не потому, что есть новые данные, а потому что инструкция требует вывод из провала. Защита сильно режет ложные выборы, но до нуля их не доводит.
Адаптировать под запрос
⚡

TL;DR

Исследование показывает, что агент с памятью, который пишет себе «уроки» из каждого запуска, может записать в память чистое невезение. Модель видит провал и превращает его в совет на будущее. Следующая сессия читает этот совет и меняет решение. Защита простая и лежит в тексте инструкции: заставить автора урока сначала оценить само решение, а не результат, и разрешить ему написать «менять ничего не нужно».

Боль знакома тем, кто настраивал самообучающихся агентов. Есть два взаимозаменяемых инструмента: надёжный (сбои в 10% запусков) и ненадёжный (сбои в 40%). Надёжный один раз упал по случайной причине. Агент пишет урок: «этот способ ломается, используй другой». Следующая сессия видит в логе, что надёжный инструмент лучше. Но урок звучит убедительно, и она в части случаев выбирает худший. Без урока такого выбора практически нет. Модель оценивает решение по исходу, а не по тому, что было известно в момент решения. Урок закрепляет эту ошибку и делает её долгоживущей.

Метод в двух вариантах. Первый: в инструкцию записи уроков добавляют пункт из трёх предложений. «Оцени, было ли решение обоснованным при тех данных, что были до результата. Один исход ничего не доказывает. Советуй другое действие, только если решение было необоснованным». Второй: одна и та же инструкция для успеха и провала, плюс фраза «если ничего менять не нужно — так и скажи». Оба варианта сильно снижают ложные выборы, но не устраняют их полностью.

🔬

Схема метода

БЕЗ ЗАЩИТЫ (так ломается):
  Запуск → исход (случайный провал) → инструкция "сделай вывод из провала"
        → урок "не используй X" → следующая сессия выбирает худший вариант

С ЗАЩИТОЙ (вариант 1, пункт про оценку решения):
  ШАГ 1: Автор урока оценивает решение по данным ДО исхода → вердикт "обосновано / нет"
  ШАГ 2: Один исход ≠ доказательство → совет менять действие только при "необоснованно"

С ЗАЩИТОЙ (вариант 2, нейтральная инструкция):
  ШАГ 1: Одна инструкция для успеха И провала (без разной "маршрутизации")
  ШАГ 2: Явная опция "ничего менять не нужно" → урок может быть пустым

ДОПОЛНИТЕЛЬНО: в лог/контекст читателя — явная фраза, что сбои случайны и независимы

Всё делается в одном промпте-инструкции. Отдельные запросы не нужны.

🚀

Пример применения

Задача: Вы ведёте интернет-магазин на Tilda и настроили агента (Claude Code или сценарий в n8n). Он каждую ночь выгружает заказы в Google Таблицу. Есть два способа. API-выгрузка: за последние 300 запусков успешна в 92% случаев. Скрипт на Google Apps Script: успешен в 60%. Агент после каждого запуска дописывает «уроки» в файл LESSONS.md и читает его перед следующим запуском. Вчера API-выгрузка один раз упала с ошибкой «таймаут, повторите позже». Без защиты агент запишет «API нестабилен, используй скрипт», и через неделю половина выгрузок будет идти худшим путём.

Промпт (фрагмент инструкции для записи уроков):

Ты — эксперт по запуску операционных задач. Тебе дан протокол одного запуска.
Извлеки из него до 3 пунктов памяти для будущих запусков: заголовок, краткое описание, содержание.

Перед тем как писать:
- Оцени, было ли решение агента обоснованным, исходя только из того, что было известно ДО исхода.
- Один исход сам по себе не доказывает, что решение было верным или неверным.
- Рекомендуй другое действие, только если решение было необоснованным при тех данных.

Если ничего о том, как нужно выполнять задачу, менять не требуется, так и скажи.

Контекст: ночная выгрузка заказов магазина в Google Таблицу.
Способы: API-выгрузка и скрипт Apps Script. По журналу за 300 запусков
API успешен в 92% запусков, скрипт — в 60%. Стоят они одинаково.
Сбои любого способа — независимые разовые события, прошлый запуск не влияет на следующий.

Результат: Автор урока сначала напишет оценку решения: выбор API был обоснован журналом. Затем сообщит, что один таймаут ничего не меняет. В памяти окажется запись «менять способ не нужно» или нейтральное замечание. Совета «используй скрипт» быть не должно. Следующая сессия увидит в LESSONS.md короткую пометку, а не рекомендацию отказаться от API.

🧠

Почему это работает

Слабость. Модель, которой сказали «сделай вывод из провала», ищет, что именно сломалось и что надо менять. Инструкция предполагает, что менять что-то нужно, и модель подчиняется. Урок звучит как опыт, хотя новой информации в нём нет: всё, что в нём есть, уже лежало в логе. Но читатель этого не знает и воспринимает урок как накопленный опыт.

Сильная сторона. Модель умеет различать «решение было разумным» и «результат оказался плохим», если её об этом явно попросить до написания вывода. Умеет она и написать «менять нечего», если такой вариант разрешён.

Как метод это использует. Пункт про оценку решения заставляет модель сначала пройти по данным «до исхода», а потом уже писать совет. Опция «ничего не менять» убирает давление «нужно что-то посоветовать». Фраза в логе «сбои независимы» помогает читателю самому отличить случайность от поломки.

Рычаги управления: - Пункт про оценку решения → добавляй, если уроки пишутся после провалов. Эффект сильный, но не полный. - Опция «ничего менять не нужно» → самый сильный из проверенных рычагов. Используй с одной общей инструкцией для успеха и провала. - Фраза «сбои независимы, это разовые события» в логе/контексте → сильно снижает эффект, но только если это правда для вашей задачи. - Вид инструкции → избегай «разных инструкций для успеха и для провала». Провал-инструкция в оригинале просила «конкретные рабочие процедуры восстановления» и подталкивала к смене действия.

📋

Шаблон промпта

Это шаблон инструкции для агента, который пишет уроки в память (в CLAUDE.md, LESSONS.md, поле памяти кастомного GPT, узел «Запись в память» в n8n).

Ты — эксперт по {область_задачи}. Тебе дан протокол одного запуска: задача, шаги, результат.
Запиши до {число} пунктов памяти для будущих запусков: заголовок, краткое описание, содержание.

Перед тем как писать:
- Оцени, было ли решение агента обоснованным, исходя только из того, что было известно ДО исхода.
- Один исход сам по себе не доказывает, что решение было верным или неверным.
- Рекомендуй другое действие, только если решение было необоснованным при тех данных.

Если ничего о том, как нужно выполнять задачу, менять не требуется, так и скажи.

Справка по задаче: {контекст_и_статистика_по_способам}.
{фраза_про_независимость_сбоев_если_правда}

Подставляйте так: - {область_задачи} — чем занят агент: выгрузка, рассылка, сборка отчёта. - {число} — сколько пунктов можно писать (в оригинале до трёх). - {контекст_и_статистика_по_способам} — что известно о надёжности вариантов: сколько запусков, какие доли успеха. - {фраза_про_независимость_сбоев_если_правда} — например: «Сбоев-цепочек не было: каждый сбой любого способа — разовое независимое событие».

🚀 Быстрый старт — вставь в чат:

Вот шаблон инструкции для записи уроков агентом. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, какие способы выполнения есть у агента, как часто каждый срабатывает и можно ли считать сбои независимыми. Это нужно, чтобы автор урока мог оценить решение по данным до исхода, а не по результату.

⚠️

Ограничения

⚠️ Защита не полная: с пунктом про оценку решения ложных выборов остаётся заметная доля. С нейтральной инструкцией их меньше, но они тоже есть. Авторы не показали, что любая из защит работает у каждой модели.

⚠️ Модели ведут себя по-разному: уроки переносили шанс у части моделей (Gemini, Grok, Qwen, DeepSeek, Mistral, Kimi). У моделей Claude и GPT-6.1 Sol эффект был ограничен сверху (верхняя граница ниже порога), но «ограничен» не значит «нулевой». Для Haiku и GPT-6 Luna оценка была малой, но положительной. Не считай, что твоя модель безопасна.

⚠️ Нейтральный вариант N сравнивали «пакетом»: он отличается от оригинала двумя вещами сразу (нет разной инструкции для успеха и провала плюс есть опция «ничего менять»). Какая из двух частей даёт эффект, неизвестно.

⚠️ Тесты только с «шумными» исходами: защиту проверяли на случаях, где исход не указывал на реальную поломку инструмента. Если инструмент действительно сломался, фраза «ничего менять не нужно» может навредить. Авторы это не проверяли.

⚠️ Сильно зависит от того, что написано в логе: где в логе не было сказано, что сбои независимы, эффект был в разы больше. Если у вашей задачи сбои на самом деле связаны (например, реальная авария API), фразу про независимость писать нельзя.

⚠️ Синтетика и один шаг: лабораторный мир, один выбор из двух инструментов, один урок, прочитанный один раз. Накопление уроков, поиск по памяти и реальные агенты не тестировали. Как часто в реальных агентах возникают такие ситуации, неизвестно.

⚠️ Нет доказательства вреда после «удачи»: после случайного успеха худшего инструмента эффект был ограничен сверху. Это граница, а не доказательство того, что вреда нет.

🔍

Как исследовали

Автор построил 256 «миров». Каждый мир — повторяющаяся рабочая задача (выгрузка данных, отправка счетов, пересборка поискового индекса) с двумя одинаковыми по цене инструментами. У надёжного успех 80–93%, у ненадёжного 50–70%, и журнал показывает последние 180–365 запусков. Дальше сценарий «прошлого запуска» задавали вручную: взять надёжный или ненадёжный инструмент, и закончить успехом или случайным сбоем. Одна модель писала по этому запуску «урок» инструкцией из ReasoningBank (метод памяти для агентов). Потом свежая сессия той же модели, у которой на руках полный журнал и результат прошлого запуска, выбирала, какой инструмент взять первым. Ей давали один из восьми кусочков памяти: свой урок, урок из противоположного исхода, нейтральный факт, прямую команду «бери худший» и другие.

Ключевая идея дизайна: читатель видит ровно то, что и без урока, и получает один дополнительный текст. Значит, разницу в выборе можно приписать только уроку. Протокол заморозили и отметили в блокчейне до первого запроса. 11 моделей дали около 90 тысяч ответов.

Результат неожиданный: после случайного сбоя надёжного инструмента урок, написанный из этого сбоя, увёл читателей на худший инструмент в 11,6% запусков. С нейтральным фактом это было 0,4%, с уроком из успеха тоже 0,4%. И урок вредит только вместе с сообщением о сбое: после успеха тот же урок давал 0,2%. Фраза «сбои независимы» в журнале снизила эффект с 0,181 до 0,042. Два дополнительных приёма снизили долю до 7,5% (пункт про оценку решения) и 3,1% (нейтральная инструкция). Но ни один не выполнил заранее заданное правило «вред снижен на каждой модели».

Любопытная деталь: у двух моделей слабый отклик на голую команду «бери худший» сочетался с сильным откликом на уроки. Урок с рассуждением убеждает лучше, чем приказ без причины.

📄

Оригинал из исследования

Полные тексты инструкций ReasoningBank (RB) приведены в приложении A, которого нет во входных данных. Поэтому даю дословно только то, что есть в тексте статьи.

Добавленный пункт RBD (защита №1, три предложения):

Before writing, judge whether the agent's decision was sound given only what was known before the outcome. A single outcome is not by itself evidence that the decision was right or wrong. Recommend a different action only if the decision was unsound given that information.

Добавленная фраза нейтральной инструкции N (защита №2):

If nothing about how the task should be done needs to change, say so.

Фраза-подсказка в журнале (explicit-миры):

There have been no outages: failures of either tool are independent one-off events, and the next run has always started normally.

Контекст: RBD — это RB-инструкция плюс один пункт. N — инструкция успеха из RB, переписанная нейтрально, без разной обработки успеха и провала, плюс одна фраза.

💡

Адаптации и экстраполяции

Это мои переносы идей статьи, авторы их не проверяли.

💡 Адаптация для ручной работы в чате: если вы просите ChatGPT или Claude «сделать выводы» после неудачной рассылки или питча, не спрашивайте «что пошло не так». Спросите: «Оцени, было ли решение разумным при данных, что у меня были до результата. Если ничего менять не нужно, скажи».

🔧 Техника: ввести порог повторений → меньше шума в памяти. В файле инструкций агента можно добавить: «Не записывай рекомендацию отказаться от способа по одному сбою. Записывай факт сбоя без рекомендации; рекомендацию — только если сбой повторился». Идея следует из логики статьи (один исход ≠ доказательство), но порог повторений не тестировался.

🔧 Техника: аудит файла уроков → поймать закрепившиеся «ложные правила». Периодически просите модель: «Пройди по LESSONS.md. Для каждого пункта: основан ли он на одном исходе? Отметь такие». Это не проверено в статье.

🔗

Ресурсы

  • Название: Lessons from Luck: Do LLM-Written Lessons Carry Chance into an Agent's Next Decision?
  • Автор: Kazuki Nakayashiki, Glasp.
  • Упомянутые работы: ReasoningBank (Ouyang et al., 2025), Reflexion (Shinn et al., 2023), ExpeL (Zhao et al., 2023), Agent Workflow Memory (Wang et al., 2024), Dynamic Cheatsheet (Suzgun et al., 2025).
  • Классика об ошибке «оценка по исходу»: Baron & Hershey (1988), Fischhoff (1975).
  • Предрегистрация: депозит на Zenodo (doi:10.5281/zenodo.23253562).

📋 Дайджест исследования

Ключевая суть

Обнаружено: агент, который сам пишет себе «уроки», записывает в память обычное невезение. Следующий запуск читает этот урок и начинает выбирать худший инструмент. Метод позволяет агенту с памятью не превращать один случайный сбой в совет на будущее. Автора урока заставляют сначала оценить решение, а не исход, и разрешают написать «менять ничего не нужно». Пример: надёжный инструмент (сбои в 10% запусков) один раз упал. Без защиты урок звучит так: «он ломается, бери другой» (сбои в 40%). Фишка: модель пишет такой совет не потому, что есть новые данные, а потому что инструкция требует вывод из провала. Защита сильно режет ложные выборы, но до нуля их не доводит.

Принцип работы

Обычная инструкция говорит: «сделай вывод из провала». Модель слышит: «что-то сломалось, найди что менять». И находит, даже если ломаться было нечему. Защита работает в два хода. Первый: оценка решения до исхода. Автор урока смотрит только на то, что агент знал в момент выбора. Один исход ничего не доказывает. Совет менять действие допустим, только если решение было необоснованным. Второй ход: одна общая инструкция для успеха и провала плюс явная опция «ничего менять не нужно». Пустой урок становится законным ответом, и модели не надо изобретать совет ради совета. Представь врача. Пациент выжил после глупого лечения, и врач записывает «метод отличный». Другой пациент умер при грамотном лечении, и врач записывает «метод никуда не годится». Защита заставляет сначала проверить лечение, а потом смотреть на исход.

Почему работает

Слабость модели. В логе уже лежало всё нужное: 300 запусков, 92% успеха у API и 60% у скрипта. Но урок звучит как накопленный опыт, хотя новой информации в нём ноль. Читатель-агент верит ему больше, чем собственным цифрам. Без урока такого неверного выбора практически нет. Урок сам создаёт ошибку, которой в данных не было: он делает случайность долгоживущей. Сильная сторона. Если модель явно попросить, она различает «решение было разумным» и «результат оказался плохим». Ей только нужно сделать это до написания вывода. И нужно разрешить ответ «менять нечего». Ещё один рычаг: фраза в логе «сбои независимы, это разовые события». Она помогает читателю самому отличить случайность от поломки. Но писать её можно, только если это правда. Без неё эффект ошибки в разы больше. Ограничения честные. Опыты шли на синтетическом мире: один выбор из двух инструментов, один урок. Модели ведут себя по-разному. У части (Gemini, Grok, Qwen, DeepSeek, Mistral, Kimi) уроки переносили шанс. У Claude и GPT-6.1 Sol эффект ограничен сверху, но не нулевой. Какая часть нейтрального варианта даёт эффект, тоже неизвестно: общая инструкция или опция «ничего не менять».

Когда применять

Агенты с памятью → конкретно для задач, где есть два взаимозаменяемых способа и разная надёжность, особенно когда уроки пишутся после каждого запуска. Примеры: ночные выгрузки, рассылки, сборка отчётов, файлы LESSONS.md и CLAUDE.md, узел «Запись в память» в n8n. НЕ подходит, если сбои связаны между собой, например при настоящей аварии API. Тогда фраза «сбои независимы» вредна, а «ничего менять не нужно» может навредить. Авторы такие случаи не проверяли. Модель тоже не считай автоматически безопасной.

Мини-рецепт

1. Найди, где пишутся уроки: файл памяти, узел в n8n или поле в кастомном GPT. Туда пойдёт новая инструкция.
2. Замени «сделай вывод из провала» на три правила: оцени решение по данным ДО исхода. Один исход ничего не доказывает. Меняй действие, только если решение было необоснованным.
3. Дай выход: добавь фразу Если ничего о том, как нужно выполнять задачу, менять не требуется, так и скажи. Это самый сильный из проверенных рычагов.
4. Сделай одну инструкцию для успеха и провала: не пиши отдельную «разбор провала» с процедурами восстановления. Она подталкивает к смене действия.
5. Положи в контекст цифры: сколько было запусков и какая доля успеха у каждого способа.
6. Добавь фразу про независимость, только если это правда: Каждый сбой любого способа — разовое независимое событие.
7. Проверь на своей модели: подсунь случайный провал надёжного способа. Посмотри, не появится ли в памяти совет «бери другой».

Примеры

[ПЛОХО] : Проанализируй протокол запуска и сделай вывод из провала. Запиши, что нужно менять.
[ХОРОШО] : Ты — эксперт по ночным выгрузкам заказов. Тебе дан протокол одного запуска. Запиши до 3 пунктов памяти: заголовок, краткое описание, содержание. Перед этим оцени, было ли решение обоснованным, исходя только из того, что было известно ДО исхода. Один исход сам по себе ничего не доказывает. Рекомендуй другое действие, только если решение было необоснованным. Если менять ничего не нужно, так и скажи. Справка: API-выгрузка успешна в 92% из 300 запусков, скрипт Apps Script — в 60%. Сбои любого способа — разовые независимые события. Результат: один таймаут API больше не превращается в запись «API нестабилен, используй скрипт». В LESSONS.md появляется короткая пометка: «Выбор API был обоснован, менять способ не нужно».
Источник: Lessons from Luck: Do LLM-Written Lessons Carry Chance into an Agent's Next Decision?
ArXiv ID: 2610.33029 | Сгенерировано: 2026-10-29 06:50

Проблемы LLM

ПроблемаСутьКак обойти
Модель превращает случайный провал в правило на будущееПросишь: «сделай вывод из провала». Модель ищет, что сломалось и что менять. Инструкция уже подразумевает, что менять надо. Хотя провал был случайным, а решение разумным. В итоге получается совет «не используй X». Новой информации в нём нет. Эта проблема есть везде, где модель разбирает итоги: разбор ошибок, ретроспективы, самописная память агентаНе проси «вывод из провала». Попроси сначала оценить само решение по данным, известным до результата. Разреши ответ «менять ничего не нужно». Подробности в методах ниже
Записанный урок читается как опыт и перевешивает данныеМодель-автор пишет короткий совет. Другая сессия читает его как накопленный опыт. Хотя всё, что в нём есть, уже лежало в журнале. Совет звучит убедительно, и читатель иногда выбирает худший вариант вопреки цифрам. Так ошибка закрепляется надолгоХрани рядом с уроками сырые цифры: сколько запусков, какая доля успехов. Не оставляй один вывод без данных. Для каждого урока проси указать, на каком числе он держится

Методы

МетодСуть
Сначала оценка решения, потом совет — защита от вывода по исходуПеред выводом попроси модель оценить решение по данным, что были ДО результата. Шаблон: «Оцени, было ли решение обоснованным, исходя только из того, что было известно до исхода. Один исход сам по себе ничего не доказывает. Рекомендуй другое действие, только если решение было необоснованным». Почему работает: модель умеет отличать «решение разумное» от «результат плохой». Но только если её об этом просят до написания вывода. Она сначала проходит по данным, а потом пишет совет. Когда да: разбор провалов, запись уроков, ретроспективы, любые «что пошло не так». Нужно, чтобы у модели были данные о надёжности вариантов. Когда нет: инструмент реально сломался. Тогда оценка по данным «до» даст неверный вердикт. Защита снижает ошибки сильно, но не убирает полностью
Законный выход «менять ничего не нужно» плюс одна инструкция для успеха и провалаДобавь фразу: «Если ничего менять не требуется, так и скажи». Не пиши отдельных инструкций для успеха и для провала. Почему работает: отдельная инструкция для провала толкает искать «процедуры восстановления» и смену действий. Явный выход снимает давление «надо что-то посоветовать». Это самый сильный из простых рычагов. Когда да: любые задачи, где модель пишет рекомендации по итогам. Когда нет: сбои реально связаны между собой или причина известна. Там «ничего не менять» может навредить

Тезисы

ТезисКомментарий
Данные о частотах в контексте помогают отличить случайность от поломкиЕсли модель-читатель знает, что вариант A срабатывает в 92% случаев, один сбой для неё меньше весит. Если добавить фразу «сбои независимы, это разовые события», эффект ещё сильнее. Применяй: давай статистику по вариантам и пиши про независимость сбоев. Осторожно: только если это правда. При реальной аварии такая фраза введёт модель в заблуждение
📖 Простыми словами

Lessons from Luck: DoLLM-Written Lessons Carry Chance into anAgent'sNext Decision?

arXiv: 2610.33029

У автономных агентов с памятью есть тупая уязвимость — они путают чистую случайность с системной ошибкой. Если сказать модели "сделай выводы из неудачи", она послушно выдумает правило там, где был просто минутный сбой. LLM не умеет отличать шум от сигнала, поэтому единичный тайм-аут превращается для неё в «фатальный дефект», который срочно нужно чинить.

Это как если бы ты один раз встал в пробку на скоростном шоссе и решил: «всё, трасса не работает, теперь всегда поеду через разбитую грунтовку». Формально ты среагировал на проблему, но по факту променял 92% надёжности на корявую альтернативу с шансом успеха в жалкие 60%. Модель ведёт себя ровно так же: получает разовый щелчок по носу и в панике ломает нормальный рабочий процесс.

Лечится эта дичь элементарно через исправление промпта рефлексии. Нужно вбить в инструкцию два правила: сначала оценить логику решения, а не сам результат, и прямо разрешить агенту выдать вердикт «менять ничего не нужно». Когда у модели есть легальное право списать инцидент на простое невезение, она перестаёт строчить панические советы в свой журнал и убивать собственную эффективность.

В исследовании гоняли базовые задачи, но принцип универсален. С этим столкнётся любой, кто строит связки на n8n, гоняет Claude Code или вешает агентов на регулярный парсинг данных. Если твой бот ведёт долгосрочную память и читает свои старые заметки перед каждым шагом, он неизбежно превратит случайный сбой сервера в закон природы и начнёт деградировать.

Короче: не давай модели быть «слишком прилежной» там, где мир просто выдал рандомный глюк. Либо ты учишь агента игнорировать шум, либо через пару недель твоя автоматизация превратится в нерабочий костыльный ад. Одно правильное предложение в системной инструкции экономит часы отладки — просто разреши агенту признать, что ему тупо не повезло.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с