3,583 papers
arXiv:2610.11450 77 8 окт. 2026 г. FREE

Параметр вместо константы: как агент-программист перестаёт тащить устаревшие значения в новую задачу

КЛЮЧЕВАЯ СУТЬ
Из скриптов, которые агент написал до смены задачи, он бросил 74%. Причина простая: в коде зашиты числа прошлой задачи. Метод позволяет не получать красивые, но неверные результаты, когда агент повторно использует свой код (отчёты за новый месяц, другой клиент, другой кабинет). Фишка: константу в коде превращают в параметр, который надо задавать заново для каждой задачи. Вместо DIRECTION = -1 пишут solve(direction, ...). Агент не может молча унаследовать значение. Он обязан подставить его явно или проверить оба варианта.
Адаптировать под запрос
⚡

TL;DR

Исследователи проследили, как агент, который хранит знания в файлах (скрипты и текстовые заметки), живёт при смене задачи. Старые скрипты почти не вызываются повторно: в них зашиты числа текущей задачи, и на следующей они ломаются. Агент вместо этого пишет новый скрипт заново, оставляет общие правила, а детали прежней задачи выбрасывает. Из скриптов, написанных до смены задачи, 74% он бросил и не использовал больше.

Самая дорогая ошибка: значение, которое верно в одной задаче и неверно в следующей. Агент записал «кнопка влево сближает маркеры», на уровне 5 всё поменялось, а он по инерции сделал по-старому. Журнал действий эту ошибку не выдаёт: на первом уровне она была правдой. Заметки агента только пухнут. Поправка дописывается под ложной фразой, и обе остаются в файле.

Фикс, который агент нашёл сам: превратить константу в параметр, который надо задавать заново для каждой задачи. Вместо DIRECTION = -1 в коде стоит solve(direction, ...). Агент вынужден явно подставить значение или перебрать оба варианта. Вторая опора — сырой журнал всех действий, который агент не редактирует. По нему разрешаются противоречия в заметках.

🔬

Схема метода

ШАГ 1: Значение зависит от уровня/клиента/периода?
        → не константа в коде, а аргумент функции/скрипта
ШАГ 2: Новая задача → значение передаётся заново
        (или проверяются оба варианта за пару действий)
ШАГ 3: Заметки — датированный журнал убеждений, а не «истина»
        → спорное сверяется с сырым журналом, который не редактируется
ШАГ 4: Скрипты можно смело выбрасывать:
        раз журнал цел, знание восстановимо

Всё это можно закрепить в одной инструкции агенту. Шаги не требуют отдельных запросов.

🚀

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

Задача: Вы руководите небольшим селлером на Wildberries. Агент (Claude Code) каждый месяц собирает отчёт по юнит-экономике. В марте он написал скрипт со строкой COMMISSION = 0.17 и колонками из мартовской выгрузки. В апреле у категории другая комиссия, а в выгрузке сдвинулись столбцы. Скрипт молча считает по старым числам, и маржа в отчёте красивая, но неверная.

Промпт (в CLAUDE.md или в начале сессии):

Правила для скриптов, которые ты пишешь в этом проекте:

1. Любое значение, которое может отличаться между месяцами, категориями
   или кабинетами (комиссия WB, ставка НДС, логистика, названия и порядок
   колонок, диапазон дат), не пиши константой в коде.
   Делай аргументом: def calc_margin(commission, vat, columns, ...).
   Значения передавай при каждом запуске явно.

2. Перед запуском на новом месяце выпиши список таких параметров
   и откуда ты взял каждое значение (файл, строка выгрузки, моё сообщение).
   Если источника нет — спроси меня, не подставляй значение с прошлого месяца.

3. Файл notes.md — журнал, а не истина. Новые факты дописывай с датой.
   Если факт опровергнут, пометь старую строку «ОТОЗВАНО (дата, причина)»,
   не оставляй её без пометки.

4. Если заметки противоречат друг другу, не выбирай по памяти.
   Сверься с исходной выгрузкой (raw/*.csv): она всегда главнее заметок.
   Исходные файлы не редактируй.

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

🧠

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

Слабость. Агент пишет скрипт под текущую задачу, и числа этой задачи оказываются прямо в коде. В статье 229 из 273 используемых повторно скриптов вшивали пять и более чисел. На следующей задаче такой скрипт либо ломается сразу, либо тихо врёт. Хуже всего второй случай: проверка по журналу первой задачи ничего не покажет, там значение было верным. Переписывание «в лоб» эту ошибку не лечит: новая версия просто заново перепечатывает старую константу.

Сильная сторона. Модель хорошо пишет код с аргументами и умеет быстро перебрать два варианта. Параметр не даёт ей молча унаследовать значение: оно должно прийти снаружи. В игре m0r0 два запуска сделали направление параметром. На новом уровне они проверили оба значения и справились за несколько действий. Третий запуск хранил значение в словаре, правил его и ошибся снова.

Рычаги. - Список параметров, которые надо «задавать заново» (комиссия, период, клиент), задаёт, что считается меняющимся. Чем он шире, тем меньше тихих ошибок. - Строгость пункта «нет источника — спроси» определяет, будет ли агент догадываться или останавливаться. - Пометка «ОТОЗВАНО» лечит то, что в статье агент не делал: ложные строки в заметках оставались без отметки. - Неизменяемые исходные данные дают арбитра. Агент может безбоязненно выбрасывать скрипты, потому что знание можно вывести заново.

📋

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

Важно: в статье готового промпта нет. Системный промпт в эксперименте описывал только интерфейс игры. Шаблон ниже — перенос находки в инструкцию, авторы его не проверяли.

Правила работы со скриптами и заметками в проекте {проект}:

1. Параметры, а не константы.
   Всё, что может отличаться между {единицы_смены: уровни/клиенты/месяцы/кабинеты},
   — аргумент функции, не значение в коде.
   К таким значениям относятся: {список_меняющихся_значений}.

2. Перед запуском на новой {единице_смены} выпиши все параметры
   и источник каждого. Нет источника — спроси, не переноси старое значение.

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

4. {файл_заметок} — датированный журнал убеждений.
   Опровергнутые строки помечай «ОТОЗВАНО ({дата}, {причина})», не оставляй без отметки.

5. Источник истины — {исходные_данные}. Их не редактируй.
   Заметки противоречат друг другу — решай по исходным данным.

6. Скрипт можно выбросить и написать заново, если исходные данные целы.

Что подставлять. {единица_смены} — что у вас меняется от задачи к задаче. {список_меняющихся_значений} — конкретные числа и названия из вашей работы. {исходные_данные} — папка с сырыми файлами, которую агент только читает.

⚠️

Ограничения

⚠️ Одна среда, не бизнес: Все выводы получены на играх ARC-AGI-3, где правила скрыты и меняются между уровнями. Перенос на отчёты, код и автоматизации — наша экстраполяция.

⚠️ Фикс подтверждён на узком материале: Работу параметра наглядно показала одна игра (m0r0) в трёх запусках. Это наблюдение, а не контролируемое сравнение.

⚠️ Запуски несопоставимы: Семь запусков различались моделью, промптом и режимом. Авторы сами не ранжируют их, не приписывают эффект одному фактору и не дают доверительных интервалов.

⚠️ Параметр не гарантирует правильное значение: В одном запуске Qwen параметр, наоборот, «закрыли» обратно в таблицу констант. Если агент подставит старое значение вручную, защита не сработает.

⚠️ Часть выводов требует харнесса: Журнал всех действий создавал сам каркас агента. В обычном чате или в Claude Code его придётся вести отдельно, например сохранять исходные файлы и сессии.

⚠️ Пометки «ОТОЗВАНО» не проверялись: В статье агент заметки не чистил. Что пометки помогут, это логичное предположение, а не результат.

🔍

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

Команда сделала агента, у которого вся «память» — папка с файлами. Он пишет скрипты на Python и текстовые заметки, а каркас складывает каждое действие и ответ игры в logs.txt, куда агент только заглядывает. Агента пустили в ARC-AGI-3: интерактивные игры без инструкций, где правила нужно вычислять самому. Каждый уровень — по сути новая задача, и граница между уровнями никак не объявляется.

Прогнали семь запусков на трёх моделях двух семейств (Opus 4.7, Opus 5 и локальная Qwen). Они прошли от 34 до 183 из 183 уровней. Потом авторы прочитали все файлы: 4 786 скриптов на 689 границах. Каждый скрипт привязали к уровню, на котором он родился, и посмотрели, что с ним случилось дальше: вызван, скопирован, переписан или брошен.

Результаты оказались необычными. Повторное использование через вызов почти не пересекает границу: 33 из 630 ссылок. Ссылались в основном внутри одного уровня, потому что скрипты вшивали параметры уровня, например ROWS=19 и COLS=19. Переписывая скрипт, агент выбрасывал 38–74% функций и сохранял те, что кодировали правила игры. Так он сам отделял закон от частного случая. Заметки не правились вообще: поправки только дописывались. В wa30 «поправка» оказалась ошибочной, а исходная формулировка была верной. Обе версии лежали в файле в 65 строках друг от друга без пометки. Спасал лог: его нельзя переписать, и он решал спор.

Практический вывод: ошибка опасна, когда она верна в прошлой задаче. Её спасает только изменение формы хранения знания: из константы в параметр.

💡

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

🔧 Техника: добавить обязательный «паспорт значений» → заметить тихую ошибку до запуска

Это наше добавление, не из статьи.

Перед каждым запуском скрипта на новой {единице_смены}
выведи таблицу: параметр | значение | источник | чем отличается от прошлого раза.
Если «чем отличается» не заполнено — запуск не делай.

Таблица заставляет агента явно сравнить новую задачу со старой. Это то, что в статье делал только параметр.

Экстраполяция: журнал убеждений + выжимка для чата. Комбинация идеи «сырой журнал + заметки» с обычной практикой веб-чата. Это тоже не проверялось авторами.

В конце сессии сохрани raw_log.md: что я просил, что ты сделал и какие значения подставил (без правок).
Отдельно напиши summary.md — только актуальные правила, с датой.
В новой сессии читай summary.md, а при сомнении — raw_log.md.
Выжимке не верь, если она расходится с журналом.

Выжимку можно переписывать смело: исходный журнал остаётся, и потери восстановимы.

🔗

Ресурсы

  • Tracing the Thoughts of a Coding Agent Playing ARC-AGI-3: Lessons for Continual Learning — Chen Wu, Josh Passenger, Yin Song (AWS), NeurIPS 2026, Workshop: Continual Learning in the Era of Foundation Models and Embodied Agents
  • ARC-AGI-3 — ARC Prize Foundation (интерактивный бенчмарк), метрика RHAE
  • PRO-LONG — Fox et al., 2026 (дизайн агента с программируемой памятью, на котором построена работа)
  • Strands Agents — каркас для запуска агентного цикла ReAct
  • CL-Bench — Asawa et al., 2026 (полный контекст часто бьёт специализированные системы памяти)

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

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

Из скриптов, которые агент написал до смены задачи, он бросил 74%. Причина простая: в коде зашиты числа прошлой задачи. Метод позволяет не получать красивые, но неверные результаты, когда агент повторно использует свой код (отчёты за новый месяц, другой клиент, другой кабинет). Фишка: константу в коде превращают в параметр, который надо задавать заново для каждой задачи. Вместо DIRECTION = -1 пишут solve(direction, ...). Агент не может молча унаследовать значение. Он обязан подставить его явно или проверить оба варианта.

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

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

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

Агент пишет скрипт под текущую задачу, и её числа оказываются прямо в коде. В статье 229 из 273 повторно используемых скриптов вшивали пять и более чисел. На новой задаче такой скрипт либо падает сразу, либо тихо врёт. Второй вариант хуже. Журнал первой задачи эту ошибку не покажет: там значение было верным. Агент записал «кнопка влево сближает маркеры». На уровне 5 правила поменялись, а он сделал по-старому. Переписать скрипт в лоб тоже не помогает. Новая версия просто перепечатывает старую константу. Модель хорошо пишет функции с аргументами. Перебрать два варианта ей тоже недолго. В игре m0r0 два запуска сделали направление параметром. На новом уровне они проверили оба значения и справились за несколько действий. Третий запуск держал значение в словаре, правил его и ошибся снова. Честно: это наблюдение на одной игре в трёх запусках, а не контролируемое сравнение.

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

Агенты-программисты (Claude Code и аналоги) → повторяющиеся расчёты и отчёты, особенно когда значения тихо меняются: комиссия маркетплейса, ставка НДС, порядок колонок в выгрузке, диапазон дат, настройки клиента. Не подходит для разовых скриптов, которые вы запускаете один раз. Там параметры только добавят возни. Ограничения исследования: все выводы получены на играх ARC-AGI-3 с меняющимися правилами. Перенос на бизнес-задачи — экстраполяция. В статье нет готового промпта, а пометки «ОТОЗВАНО» не проверялись. Журнал всех действий вёл сам каркас агента, в обычном чате его придётся вести руками. Параметр тоже не волшебный: в одном запуске Qwen его обратно «закрыли» в таблицу констант.

Мини-рецепт

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

Примеры

[ПЛОХО] : Напиши скрипт, который считает маржу по выгрузке Wildberries за март (в коде окажется COMMISSION = 0.17, и в апреле отчёт молча посчитается по старой комиссии)
[ХОРОШО] : Любое значение, которое может отличаться между месяцами или кабинетами (комиссия WB, ставка НДС, логистика, названия и порядок колонок, диапазон дат), не пиши константой. Делай аргументом: def calc_margin(commission, vat, columns). Перед запуском на новом месяце выпиши все параметры и источник каждого. Нет источника — спроси меня, не подставляй значение с прошлого месяца. Файл notes.md — журнал, а не истина: факты пиши с датой, опровергнутые помечай «ОТОЗВАНО (дата, причина)». При противоречиях сверяйся с raw/*.csv и не редактируй эти файлы. Результат: апрельский расчёт начнётся со списка параметров и вопроса про комиссию, а не с красивой неверной маржи.
Источник: Tracing the Thoughts of a Coding Agent Playing ARC-AGI-3: Lessons for Continual Learning
ArXiv ID: 2610.11450 | Сгенерировано: 2026-10-09 05:00

Проблемы LLM

ПроблемаСутьКак обойти
Агент зашивает значения текущей задачи в код. На новой задаче скрипт тихо считает по старым числамАгент пишет скрипт под текущую задачу. Комиссия, период, порядок колонок, направление попадают в код как константы. Задача меняется. Скрипт не падает, а выдаёт красивый, но неверный результат. Простая проверка не поможет: на старых данных число было верным. Просьба «перепиши скрипт» тоже не лечит. Новая версия снова копирует старую константуНе давай значению жить в коде. Сделай его аргументом функции, который задают заново при каждом запуске. Подробности в методе «Параметр вместо константы»
Заметки агента накапливают ложные факты и не очищаютсяАгент записал правило. Условия изменились, и правило стало неверным. Поправку он дописывает под старой фразой. В файле остаются обе версии без отметки, какая верна. Агент читает их позже и выбирает по памяти или наугад. Заметки только пухнут и противоречат сами себеХрани рядом неизменяемые исходные данные: сырые выгрузки, полный журнал действий. Агент их только читает. Противоречие в заметках решай по ним, не по памяти. Опровергнутые строки помечай «ОТОЗВАНО (дата, причина)». Пометки логичны, но отдельно не проверены

Методы

МетодСуть
Параметр вместо константы — защита от устаревших значенийНайди всё, что может отличаться между задачами: клиенты, месяцы, ставки, названия колонок. Это не константа в коде, а аргумент: calc(commission, vat, columns). Значение приходит снаружи при каждом запуске. Добавь правило: «Перед запуском выпиши параметры и источник каждого. Нет источника — спроси, не подставляй старое». Если сомневаешься в значении, проверь оба варианта на малом примере до полного прогона. Почему работает: Модель не может молча унаследовать значение. Параметр заставляет явно его задать или проверить. Когда применять: повторяющиеся задачи с меняющимися условиями, агент, который хранит скрипты между сессиями. Когда не работает: если агент подставляет в параметр старое значение вручную, не сверяясь с источником. Поэтому правило про источник обязательно. Для одноразовых задач метод лишний
📖 Простыми словами

Tracing the Thoughts of a CodingAgentPlaying ARC-AGI-3: Lessons for Continual Learning

arXiv: 2610.11450

LLM-агенты, которым дали возможность сохранять свой опыт в скриптах, не способны в настоящее continual learning — они тупо хардкодят числа в тело кода. Вместо универсального алгоритма модель каждый раз лепит одноразовый костыль под сиюминутный контекст. В итоге при малейшем сдвиге вводных агент либо выбрасывает свои наработки, либо запускает старый скрипт, порождая тихие и невидимые ошибки.

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

Цифры из исследования это наглядно подтверждают: агент просто выбросил 74% скриптов сразу после смены условий задачи, потому что они оказались мусором. А из тех программ, которые он всё-таки рискнул запустить повторно, 229 из 273 содержали от пяти зашитых чисел. Самый ад здесь — скрытый сбой: скрипт не вылетает с ошибкой, он просто берет старые данные, лепит их на новые рельсы и выдаёт уверенную лажу.

Эксперимент ставили на тестах ARC-AGI, но грабли абсолютно те же в любом реальном бизнесе. Допустим, ты посадил агента считать юнит-экономику для маркетплейса, а тот намертво вшил в код комиссию COMMISSION = 0.17 и структуру мартовского отчёта. В апреле площадка меняет тарифы и столбцы, а твой AI-сотрудник продолжит бодро рапортовать о фальшивой прибыли, пока ты не улетишь в кассовый разрыв.

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

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

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

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