TL;DR
RBC — способ отобрать, какие «уроки» из самописной памяти агента (плейбука) стоит подавать в промпт. Уроки группируются в 8 тематических блоков. На практических задачах каждый блок случайно включается или выключается (как монетка). Разница в успехе между запусками «с блоком» и «без» показывает, помогает блок или вредит. Оставляют блоки с положительным эффектом. Выращивают несколько версий плейбука и подают ту, что лучше всех показала себя на свежих задачах. «Без плейбука» всегда участвует как один из кандидатов.
Главная находка: самописная память агента может ощутимо вредить, и сам агент этого не видит. Один и тот же процесс обучения на тех же задачах, но в другом порядке, даёт то полезный плейбук, то вредный. В худшем случае успех падал почти на 70 пунктов ниже уровня «вообще без памяти». Агент помечает правило как полезное, потому что оно звучит разумно, а не потому что оно повышает успех. Например, правило «всегда вызывай завершение задачи с ответом» выглядело аккуратным и получило 123 пометки «полезно» и ноль «вредно». При этом оно заставляло модель выдавать ответ там, где его не ждали: в 69% задач против 37,5% без правила. Связь между пометками агента и реальным эффектом блоков почти нулевая.
Метод заменяет «агент сам решает, что оставить» на «решает измерение». Шагов три: измерить эффект каждого блока случайным включением, оставить положительные в рамках бюджета токенов, проверить кандидатов на свежих задачах. Итог: в среднем 66,9 успеха против 55,5 у полного плейбука и 54,1 вообще без плейбука.
Схема метода
ШАГ 0: Агент растит K=3 плейбука (задачи в разном порядке) → K списков уроков
ШАГ 1: Уроки → 8 тематических блоков (кластеризация по смыслу)
ШАГ 2: Практические задачи: каждый блок включён с вероятностью 1/2, независимо
→ разница среднего успеха «с блоком» − «без блока» = эффект блока
ШАГ 3: Оставить блоки с эффектом > 0, лучшие первыми, до бюджета (40% токенов)
→ «обрезанный» плейбук для каждого из K прогонов
ШАГ 4: Кандидаты: K обрезанных + K полных + «без плейбука»
→ прогнать на СВЕЖИХ практических задачах → подавать лучшего
В исследовании шаги 1–4 делает код (кластеризация и регрессия). Агент и сами уроки остаются прежними.
Пример применения
Задача: вы ведёте Telegram-магазин на Ozon и Wildberries. Claude Code уже полгода чинит бота заказов и после каждой задачи сам дописывает «уроки» в CLAUDE.md. Там набралось 140 правил. Последние недели агент стал странно себя вести: лезет в лишние файлы, переспрашивает очевидное, чаще ломает то, что работало. Нужно понять, какие блоки правил помогают, а какие вредят. Агента спрашивать бесполезно: он считает все свои правила полезными.
Промпт (в обычный чат, см. шаблон ниже в заполненном виде):
Ты помогаешь провести ручной эксперимент по методу Randomized Block Curation.
Контекст: у меня файл CLAUDE.md на 140 правил, которые агент написал себе сам после рабочих задач. Агент — Claude Code, работает с репозиторием Telegram-бота для заказов Ozon/Wildberries.
Шаг 1. Я пришлю правила. Раздели их на 8 тематических блоков (работа с git, тесты, API маркетплейсов, стиль кода, завершение задачи и т.д.). Выведи название блока и номера правил.
Шаг 2. Составь таблицу рандомизации на 24 тестовых запуска: строки — запуски, столбцы — блоки, в каждой клетке 1 (блок включён) или 0 (выключен), с вероятностью 1/2 независимо. К каждому запуску добавь собранный список файлов-блоков, которые нужно вставить в CLAUDE.md.
Шаг 3. Я прогоню 12 типовых задач из моего бэклога (каждую дважды, в разных строках таблицы) и верну оценку каждого запуска: 1 — задача решена, 0 — нет.
Шаг 4. Для каждого блока посчитай: средний результат запусков, где блок включён, минус средний результат запусков, где выключен. Сравнивай внутри одной и той же задачи.
Шаг 5. Оставь блоки с положительной разницей, начиная с самой большой, пока не наберётся 40% исходного объёма. Если положительных нет — рекомендуй работать без CLAUDE.md.
Шаг 6. Предложи проверку трёх кандидатов — «обрезанный файл», «полный файл», «пустой файл» — на 12 новых задачах, которых не было в шагах 2–4.
Начни с шага 1. Вот правила:
{вставить содержимое CLAUDE.md}
Результат: модель разобьёт правила на блоки, выдаст таблицу из нулей и единиц для 24 запусков со сборкой набора блоков под каждый. После ваших прогонов она посчитает эффект по блокам и предложит, что оставить. Вероятно, у какого-то блока (например, «правила завершения») эффект окажется отрицательным, хотя агент считал его самым полезным. В конце вы получите план финальной проверки «обрезанный против полного против пустого».
Почему это работает
Слабость: агент видит свои уроки только в тех запусках, где они применялись. Сравнить «с правилом» и «без правила» он не может. Поэтому оценка «полезно» превращается в оценку «звучит разумно». Правило, которое влияет на каждый запуск, собирает пометки «полезно» в каждом из них, даже если его эффект отрицательный. Модели вообще плохо и предвзято оценивают собственные выводы. К тому же результат зависит от случайности роста: плейбук одного прогона помогает, плейбук другого вредит.
Сильная сторона: случайное включение делает запуски «с блоком» и «без блока» сравнимыми. Разница в успехе напрямую показывает эффект блока на успех, а не на правдоподобность. Все 8 блоков измеряются в одних и тех же запусках, а не по одному, поэтому нужно в 4,5 раза меньше запусков. Блоки (а не отдельные уроки) выбраны потому, что одно правило редко сдвигает успех сильнее шума при нескольких сотнях запусков.
Рычаги управления: - Число блоков (8) → влияет мало; можно взять 5–10. - Бюджет токенов (40%) → 20% и 60% сработали хуже; оставьте около 40% как старт. - Число прогонов роста K (3) → больше версий плейбука повышают шанс найти хорошую; два прогона с обрезкой равны трём прогонам без обрезки. - «Без плейбука» среди кандидатов → страховка. Если все версии вредят, победит пустая. - Свежие задачи для финального выбора → не используйте те же запуски, на которых мерили эффект, иначе победитель переоценён.
Шаблон промпта
Метод в статье реализован кодом. Ниже его ручной вариант с сохранением логики: блоки → случайное включение → разница средних → отбор по бюджету → проверка кандидатов, включая пустую память.
Ты помогаешь провести эксперимент Randomized Block Curation для самописной памяти агента.
<Контекст>
Агент: {агент_и_задачи}
Файл памяти (уроки, написанные агентом сам): {файл_памяти}
Критерий успеха одного запуска: {критерий_успеха}
Типовые задачи для проверки: {число_задач} задач из реального бэклога
Контекст>
<Шаги>
ШАГ 1 — БЛОКИ: раздели уроки на {число_блоков} тематических блоков (по умолчанию 8). Выведи: название блока, номера уроков, объём в токенах.
ШАГ 2 — РАНДОМИЗАЦИЯ: составь таблицу на {число_запусков} запусков. Столбцы — блоки. В клетке 1 (блок включён) или 0 (выключен), с вероятностью 1/2 независимо от других блоков. Для каждого запуска собери итоговый список блоков, который нужно вставить в файл памяти. Каждая задача должна встречаться в таблице несколько раз с разными наборами блоков.
ШАГ 3 — ПРОГОН: я выполню запуски и пришлю оценки (1/0 или от 0 до 1). Не интерпретируй до получения результатов.
ШАГ 4 — ЭФФЕКТ: для каждого блока посчитай средний успех запусков с блоком минус средний успех запусков без блока, сравнивая внутри одной и той же задачи. Выведи таблицу «блок — эффект» по убыванию.
ШАГ 5 — ОТБОР: оставь блоки с эффектом > 0, начиная с наибольшего, пока не наберётся {бюджет}% исходного объёма. Если ни у одного блока эффект не положителен — результат «пустая память».
ШАГ 6 — ПРОВЕРКА: если у меня несколько версий файла памяти (запуски роста), повтори шаги 1–5 для каждой. Затем предложи кандидатов: обрезанные версии, полные версии, пустая память. Опиши, как прогнать их на НОВЫХ задачах, которых не было в шагах 2–4, и как выбрать лучшего по среднему успеху.
Шаги>
Не оценивай уроки по тому, насколько они звучат разумно. Единственный критерий — эффект на успех из таблицы.
Начни с ШАГА 1. Вот файл памяти:
{файл_памяти}
Что подставлять:
- {агент_и_задачи} — какой агент и что делает;
- {файл_памяти} — текст файла (CLAUDE.md, AGENTS.md, сохранённый «чит-лист»);
- {критерий_успеха} — то, что можно проверить однозначно: тесты прошли, заказ оформлен, ответ совпал с эталоном;
- {число_блоков}, {число_запусков}, {бюджет} — 8, 24–50 и 40 как отправная точка.
🚀 Быстрый старт — вставь в чат:
Вот шаблон метода Randomized Block Curation. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, как выглядит ваша память, чем измерять успех запуска и сколько задач вы реально можете прогнать. Критерий успеха нужен, потому что без него разницу «с блоком» и «без блока» не посчитать. Размер выборки определяет, сколько блоков можно честно сравнить.
Ограничения
⚠️ Нужна проверяемая метрика успеха: метод измеряет эффект по результату запуска. Если «хорошо или плохо» решается на глаз и спорно, разница средних утонет в шуме.
⚠️ Нужно много запусков: в исследовании оценка опиралась на сотни и тысячи запусков. Ручной вариант на 24 запуска даёт грубую оценку знака эффекта, а не точные числа. Выводы о блоках с небольшим эффектом ненадёжны.
⚠️ В исследовании метод — код: кластеризацию, рандомизацию и регрессию с поправкой на сложность задач в статье делает программа. Ручной вариант выше — упрощение. Его можно собрать с помощью LLM, но шумов в нём больше.
⚠️ Плейбук, который переписывается целиком: в Dynamic Cheatsheet уроки менее отделимы друг от друга, и обрезка не дала выигрыша (61,1 против 61,3 у полного). Метод режет только тогда, когда блоки реально разделимы.
⚠️ Основной выигрыш — от выбора, а не от обрезки: большая часть эффекта приходит из двух вещей: вырастить несколько версий и сравнить их с «пустой» памятью на свежих задачах. Обрезка по блокам добавляет сверху около одного пункта на ACE (67,2 против 66,1) и экономит токены. Если сил на полный метод нет, начните с простого A/B «память против без памяти».
⚠️ Взаимодействие блоков: эффект блока усредняется по всем сочетаниям. Блок, который работает только в паре с другим, получит заниженную оценку. Финальная проверка целых плейбуков страхует от этого.
⚠️ Тестировали на агентных бенчмарках: AppWorld, WebShop, ALFWorld — с автоматической оценкой. Перенос на офисные и творческие задачи не проверялся.
Как исследовали
Команда начала с вопроса «а нужна ли вообще починка?». Они выращивали по три плейбука на каждую из 11 комбинаций «модель + бенчмарк» в системе ACE. Модели были открытые: Qwen и Gemma. Плейбук считали вредным, если он отставал от запуска без плейбука больше чем на 5 пунктов; повторный замер двигал оценку максимум на 5, поэтому такая разница не шум. Результат оказался жёстким: на одной связке «модель + бенчмарк» плейбук поднимал успех с 74,9 до 97,5, а на другой каждый плейбук вредил, один из них — на 69,6 пункта. Один и тот же процесс на тех же задачах в другом порядке давал результаты 82,5, 58,9 и 30,0 при 78,4 без памяти.
Следующий вопрос: а пусть агент сам выкинет вредные уроки по своим пометкам «полезно/вредно»? Не помогло: в трёх из четырёх случаев «обрезанный по пометкам» плейбук всё равно вредил. Корреляция между пометками агента и измеренным эффектом блоков оказалась всего 0,21. Самые вредные блоки несли больше пометок «полезно», чем почти все остальные. Это и есть главное открытие: агент оценивает правдоподобие, а не пользу.
Затем RBC сравнили с шестью подходами: «без плейбука», «целиком», по пометкам агента, по сходству с задачей (как в ReasoningBank), случайный отбор и сильный конкурент Best-Full, который выбирает лучший целый плейбук или пустую память по практическим задачам. Все методы получали одни и те же плейбуки и задачи при одинаковом бюджете токенов. Константы RBC подобрали на четырёх настройках без использования их тестовых задач и оставили неизменными на остальных пятнадцати. Итог на 19 настройках: 66,9 у RBC против 55,5 у «целиком» и 54,1 «без плейбука». На ACE RBC ни разу не проседал больше чем на 0,8 пункта ниже «без плейбука», а любой другой метод проседал минимум на 5,4.
Любопытная деталь: пять прогонов роста с выбором лучшего догоняют RBC на трёх, но подают на 27% больше токенов. Значит, обрезка не заменяется простым «выращу побольше». Ещё одна находка для практики: на Dynamic Cheatsheet, где уроки склеены в единый текст, обрезка не помогла, а RBC это распознал на практических задачах и просто вернул целый плейбук.
Адаптации и экстраполяции
💡 Адаптация для файла правил агента (CLAUDE.md, AGENTS.md): тот же принцип без регрессии. Берёте один файл, делите на 4–5 блоков, прогоняете одинаковый набор задач в 8–10 вариантах («всё», «без блока 1», «без блока 2» и т.д.), сравниваете. Это грубо, но показывает блок-вредителя. В исследовании так не делали (там случайное включение), но логика та же: оценивайте блок по эффекту, а не по тому, как он звучит.
Вот мой файл инструкций агента: {файл}
Раздели его на 5 тематических блоков. Составь план из 10 тестовых прогонов:
вариант 0 — все блоки, варианты 1–5 — все блоки кроме одного, вариант 6 — пустой файл.
Для каждого варианта укажи, какие блоки вставить. Потом я пришлю результаты
на {число_задач} одинаковых задач, и ты скажешь, какие блоки вредят.
🔧 Техника: пометь «подозрительные» правила → ускоряет поиск вредителей. В статье вредным оказалось правило, которое затрагивает каждый запуск (вызов завершения задачи). Практика: сначала проверяйте блоки правил, срабатывающие во всех задачах, потому что они собирают больше всего «ложных подтверждений».
Выпиши из файла правил те, которые применяются в КАЖДОЙ задаче (завершение, формат ответа,
общие запреты). Для каждого объясни, какое поведение оно толкает и в каких случаях
оно может навредить. Эти блоки проверим первыми.
Экстраполяция: правило «память — это решение, а не умолчание». Любой файл заметок, который агент ведёт сам (память в ChatGPT, проектные заметки, «уроки»), стоит иметь в двух вариантах и периодически сравнивать «с памятью» и «без» на пяти-десяти реальных задачах. Если разницы нет, оставляйте пустой вариант: он дешевле по токенам и не рискует занести вредное правило. Выводы статьи про память (RBC) на такую практику прямо не проверялись, это перенос логики.
Ресурсы
- Работа: Reliable Memory from Unstable Growth: Curating Self-Written Agent Playbooks with Randomized Experiments
- Авторы: Hoang Pham, Cong-Duy Nguyen, Dong Le, Ponhvoan Srey, Anh Tuan Luu — Nanyang Technological University и VinUniversity
- Код: анонимный репозиторий anonymous.4open.science/r/rbc (указан в статье)
- Связанные системы: ACE (Zhang et al., 2026), Dynamic Cheatsheet (Suzgun et al., 2026), ReasoningBank (Ouyang et al., 2026), RSEA / Best-Full (Nguyen et al., 2026)
- Бенчмарки: AppWorld, WebShop, ALFWorld
- Близкие идеи: ContextCite (Cohen-Wang et al., 2024), значение Банцафа (Banzhaf, 1965)
