3,583 papers
arXiv:2609.27277 71 23 сент. 2026 г. FREE

TimeEvo: агент учится на своих ошибках и принимает правку только если она чинит больше, чем ломает

КЛЮЧЕВАЯ СУТЬ
Обнаружено: один проход «перепроверь свой ответ» изменил 147 ответов. 49 он починил, 56 верных сломал, 42 просто заменил одну ошибку другой. Средняя точность осталась на месте. Метод TimeEvo позволяет принимать любую правку агента только по честному счёту «починил против сломал», а не по среднему баллу. Фишка: агент группирует свои ошибки по недостающему умению и пишет под каждую группу инструмент, который отдаёт только числа, а не ответ. Инструмент попадает в набор лишь после парной проверки на вопросах, которых агент не видел. Результат: улучшение на всех 10 задачах и всех 3 моделях, в среднем +7–9 пунктов.
Адаптировать под запрос
⚡

TL;DR

TimeEvo — цикл самоулучшения агента. Он собирает свои неправильные ответы в группы по причине ошибки. Для каждой группы он пишет себе небольшой инструмент, который считает недостающие цифры. Инструмент попадает в набор только после парной проверки: на отложенных вопросах сравнивают ответы «до» и «после». Если починено заметно больше, чем сломано, инструмент принимают. Если нет, раунд отбрасывают.

Главная находка: «перепроверь свой ответ» почти ничего не меняет в итоговой точности, хотя ответы при этом меняются. Один проход самопроверки изменил 147 ответов. 49 он исправил, а 56 ранее верных сломал. Остальные 42 просто заменили одну ошибку другой. Среднее число правильных ответов осталось на месте, поэтому вред не виден. Тот же эффект повторился на всех трёх моделях. Второй неприятный результат: набор из 21 инструмента, собранный экспертами, помогал на одних задачах и вредил на других. Точность по обнаружению аномалий падала на всех моделях, хотя инструмент для аномалий в наборе был.

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

🔬

Схема метода

РАУНД (повторяется):
ШАГ 1: Прогнать агента на тренировочных вопросах → список ошибок
ШАГ 2: Сгруппировать ошибки по недостающему умению → корзины
        (ошибки «инструмент сработал» и «инструмента не было» — отдельно)
ШАГ 3: Для каждой корзины → «контракт измерения»:
        причина · что измерить · входы · критерий успеха · область + анти-область
        + действие: CREATE / REFINE / RESCOPE / RETIRE
ШАГ 4: Написать инструмент (до 3 попыток) → он выдаёт только числа, не вердикт
ШАГ 5: Быстрый фильтр на ≤32 ошибках корзины → нужен минимум 1 засчитанный ремонт
ШАГ 6: Парный допуск всей библиотеки на валидации:
        helped (было неверно → стало верно) vs harmed (было верно → стало неверно)
        → допуск только если нижняя граница разницы > 0
ШАГ 7: Не прошла → один раз убрать явно вредные инструменты → повторить проверку
        Не прошла снова → раунд отброшен, агент не меняется

ПРИ ОТВЕТЕ: агент отвечает как обычно → инструмент пересматривает ответ
только на вопросах из своей области → заменить ответ можно лишь явным решением

Шаги 1–3 можно сделать в чате вручную. Шаги 4–7 в оригинале требуют кода.

🚀

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

Задача: Вы сделали агента-аналитика для интернет-магазина на Ozon. Он смотрит выгрузку продаж по дням и отвечает на вопросы: «есть ли аномалия за эту неделю?», «тренд растёт или падает?», «это сезонность или акция?». На 40 тестовых вопросах с известными ответами он ошибся 14 раз. Метод здесь работает хорошо, потому что ответ можно проверить по эталону.

Промпт:


Ты — диагност ошибок аналитического агента. Ты не отвечаешь на вопросы
сам. Ты группируешь ошибки и составляешь планы измерений.



Ниже 14 вопросов, на которых агент ошибся. Для каждого: вопрос, ответ
агента, эталонный ответ, короткое описание данных.
1. «Есть ли аномалия 12–18 марта?» — агент: «нет», эталон: «да (скачок -40% 15 марта)»
2. «Тренд растёт?» — агент: «растёт», эталон: «падает после промоакции»
[...вставь остальные ошибки...]



Шаг 1. Определи 3–5 категорий ошибок по тому, КАКОГО УМЕНИЯ
не хватило агенту (а не по теме вопроса). Не используй названия задач.
Шаг 2. Отнеси каждую ошибку ровно в одну категорию. Категории с одной
ошибкой отложи в сторону.
Шаг 3. Для каждой категории выдай «контракт измерения»:
- причина: почему агент ошибается
- измерение: какое число или признак нужно вычислить из данных
- входы: что нужно для вычисления
- критерий успеха: как поймём, что измерение помогает
- область: когда применять
- анти-область: когда НЕ применять
- действие: CREATE (нового измерения не хватает) / REFINE (измерение есть,
  но агент его игнорирует) / RESCOPE (срабатывает не там) / RETIRE (убрать)
Правило: контракт описывает ИЗМЕРЕНИЕ, а не правильный ответ.
Не пиши «если X, отвечай Y».

Результат: Модель вернёт 3–5 категорий с распределением ошибок по ним. К каждой категории прилагается контракт из семи полей. Контракты будут про то, что посчитать (например, отклонение от скользящего среднего или сравнение до и после даты), а не про готовые ответы. Дальше вы пишете эти измерения в виде правил или скриптов и проверяете парным сравнением на других вопросах (см. «Адаптации»).

🧠

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

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

Сильная сторона. Модель хорошо группирует ошибки и формулирует диагноз («не хватало сравнения с базовой линией»). Ещё она неплохо пишет небольшие функции, которые считают числа. Объективные числа дают ей новую информацию, которой при перечитывании не было.

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

Рычаги управления: - Порог допуска. Строгое «нижняя граница > 0» защищает от случайности, но на маленькой выборке отклоняет даже чистые 3:0. Для небольших проверок можно смягчить: разница не меньше 3 вопросов или 2% выборки, вред не выше 10%. - Область и анти-область. Чем уже область, тем меньше риск вреда. Узкий инструмент вмешивается реже. - Отдельные корзины для «инструмент сработал» и «инструмента не было». Первые говорят о плохом инструменте, вторые о пробеле в покрытии. - Один раунд убирания вредных частей. Повторные раунды подгоняют набор под валидацию, поэтому второго не делают. - Инструмент без вердикта. Если разрешить инструменту выдавать ответ, он начнёт подгонять константы под тест.

🔍

Что показали эксперименты

На десяти задачах про временные ряды и трёх моделях TimeEvo улучшил базового агента на каждой задаче и каждой модели. Средний прирост около 7–9 пунктов, на отдельных задачах до 14–16. Самопроверка, голосование из пяти ответов, пример-подсказки и экспертный набор такой стабильности не дали: у них пики сочетались с провалами. Набор, выращенный на дешёвой модели, продолжил помогать и на более сильных.

📋

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

Это оригинальный диагностический шаг (корзины и контракты). Парную проверку вы делаете сами по таблице.


Ты — диагност ошибок агента. Ты не решаешь задачи, ты находишь
недостающее умение и планируешь его измерение.



Агент решает: {задача_агента}
Формат вопросов: {формат_вопросов}
Как проверяется ответ: {эталон_или_правило_проверки}



{список_ошибок: вопрос | ответ агента | эталон | краткое описание входных данных}



1. Определи {число_категорий} категорий ошибок по НЕДОСТАЮЩЕМУ УМЕНИЮ,
   а не по теме вопроса. Категории с одной ошибкой отложи.
2. Отнеси каждую ошибку ровно в одну категорию.
   Ошибки, где агент пользовался {инструмент_или_правило}, и ошибки,
   где ничего не применялось, разнеси по разным категориям.
3. Для каждой категории выдай контракт:
   - root_cause
   - required_measurement
   - inputs
   - success_criterion
   - scope
   - anti_scope
   - action: CREATE | REFINE | RESCOPE | RETIRE
4. Контракт описывает ИЗМЕРЕНИЕ (число, признак, проверку), а не готовый
   ответ. Никаких правил вида «если X — отвечай Y».



Предложи, как проверить кандидата парно на {валидационные_вопросы}:
сколько ответов было неверно и стало верно (helped),
сколько было верно и стало неверно (harmed).
Допуск: helped > harmed и разница статистически устойчива.
Иначе — отклонить.

Что подставлять: - {задача_агента} и {формат_вопросов} — что агент делает и в каком виде приходят вопросы. - {эталон_или_правило_проверки} — как вы узнаёте, что ответ верный. - {список_ошибок} — минимум 10–15 реальных провалов. - {число_категорий} — обычно 3–5. - {валидационные_вопросы} — вопросы, которые агент не видел при диагностике.

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

Вот шаблон диагностики ошибок агента (TimeEvo). Адаптируй под мою задачу:
{опиши своего агента и что он делает}.
Задавай вопросы, чтобы заполнить поля.

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

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

📌

Адаптации (мои, не из статьи)

Отдельно от оригинала. Принцип «посчитай починено против сломано» можно применять без кода для любой правки: - Сделали агента с шагом самопроверки или поменяли системный промпт? Прогоните 30–50 вопросов с эталонами «до» и «после». Сведите в таблицу «ID | эталон | до | после». Попросите LLM посчитать, сколько ответов стало верным и сколько стало неверным, и только потом решайте. - Не загружайте агенту десятки инструментов «на всякий случай». Начните с пустого набора и добавляйте инструмент только под группу реальных ошибок.

⚠️

Ограничения

⚠️ Нужен код. Полная версия TimeEvo пишет и запускает Python-инструменты в изолированной среде и ведёт парный прогон. В обычном чате воспроизводятся только шаги диагностики и ручной подсчёт.

⚠️ Нужны вопросы с эталонами. Метод работает, когда правильность ответа проверяется автоматически или по эталону. Для текстов, креатива и мнений парный счёт «починил / сломал» не посчитать.

⚠️ Одна область. Все эксперименты про вопросы по временным рядам и модели одного семейства. Перенос на другие задачи авторы не проверяли.

⚠️ Жёсткий допуск отбрасывает мелкие выигрыши. На малой выборке даже чистое 3 против 0 не проходит. Выигрыш на отдельных задачах небольшой (около 1–2 пунктов).

⚠️ Это не значит «самопроверка всегда вредна». Измерялся один проход общей самопроверки. Вывод: не верьте среднему, считайте починенное и сломанное отдельно.

🔗

Ресурсы

TimeEvo: Failure-Driven Self-Evolution of a Time Series Agent. Jie Yang, Yan Zheng, Jiarui Sun, Xiran Fan, Junpeng Wang, Liang Wang, Zelin Xu, Qinghua Liu, Zhengyu Fang, Yiwei Cai, Philip S. Yu. University of Illinois at Chicago, Visa Research, University of Florida, The Ohio State University, Case Western Reserve University. Код: https://github.com/Muyiiiii/TimeEvo. Связанные работы: Self-Refine (Madaan et al., 2023), TimeART (Wu et al., 2026), Chronos-2 (Ansari et al., 2025), TemporalBench (Weng et al., 2026).


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

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

Обнаружено: один проход «перепроверь свой ответ» изменил 147 ответов. 49 он починил, 56 верных сломал, 42 просто заменил одну ошибку другой. Средняя точность осталась на месте. Метод TimeEvo позволяет принимать любую правку агента только по честному счёту «починил против сломал», а не по среднему баллу. Фишка: агент группирует свои ошибки по недостающему умению и пишет под каждую группу инструмент, который отдаёт только числа, а не ответ. Инструмент попадает в набор лишь после парной проверки на вопросах, которых агент не видел. Результат: улучшение на всех 10 задачах и всех 3 моделях, в среднем +7–9 пунктов.

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

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

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

Слабость в том, что при «проверь ответ» модель не получает новой информации. Она перечитывает собственный текст. Одни верные ответы она портит, другие неверные чинит, и среднее не двигается. Жесть: экспертный набор из 21 инструмента помогал на одних задачах и вредил на других, а точность по аномалиям падала на всех моделях, хотя инструмент для аномалий в наборе был. Набор оценивали по среднему, а полезность считается вопрос за вопросом. Модель хорошо ставит диагноз («не хватало сравнения с обычным уровнем»). Ещё она неплохо пишет небольшие функции для подсчёта. Объективные числа дают ей то, чего при перечитывании не было. Набор, выращенный на дешёвой модели, продолжил помогать и на более сильных.

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

Агенты и промпты → любая правка системного промпта, правил или шага проверки, особенно когда есть 30–50 вопросов с эталонными ответами: поддержка, классификация, извлечение данных, аналитика. Полную версию с инструментами на Python нужно запускать кодом. В чате воспроизводятся диагностика ошибок и ручной подсчёт. НЕ подходит для текстов, креатива и мнений. Там нет эталона, и починенное со сломанным не посчитать. Все эксперименты проведены на временных рядах, перенос на другие задачи авторы не проверяли.

Мини-рецепт

1. Собери эталоны: 30–50 вопросов с известными верными ответами. Меньше брать нет смысла.
2. Зафиксируй «до»: прогони агента без правки и сохрани каждый ответ.
3. Внеси правку: новый промпт, шаг самопроверки или инструмент.
4. Прогони «после»: те же вопросы, те же условия.
5. Сведи таблицу: ID | эталон | до | после. Попроси LLM посчитать, сколько стало верным и сколько стало неверным.
6. Решай по двум числам: починено заметно больше сломанного — оставляй. Почти поровну — выкидывай, как бы красиво ни выглядело.
7. Разбери оставшиеся ошибки: сгруппируй по недостающему умению, а не по теме вопроса. Для каждой группы напиши «контракт измерения»: что посчитать, где применять, где нет.
8. Не грузи заранее: начни с пустого набора инструментов. Добавляй инструмент только под группу реальных ошибок.

Примеры

[ПЛОХО]: `Перепроверь свой ответ и исправь ошибки, если они есть`. Ответы меняются, а ты не знаешь, сколько из них испортилось. [ХОРОШО]: `Вот таблица: ID | эталон | ответ до правки | ответ после. Посчитай: сколько строк было неверно и стало верно, сколько было верно и стало неверно, сколько осталось неверными. Выведи два числа и сделай вывод: принимать правку или нет` [ПЛОХО]: `Агент ошибся 14 раз, добавь ему инструментов для аномалий и трендов` [ХОРОШО]: `Вот 14 ошибок агента-аналитика. Сгруппируй их по недостающему умению, не по теме вопроса. Для каждой группы выдай контракт: причина, что измерить, входы, критерий успеха, область, анти-область. Не пиши «если X, отвечай Y». Описывай только измерение`
Источник: TimeEvo: Failure-Driven Self-Evolution of a Time Series Agent
ArXiv ID: 2609.27277 | Сгенерировано: 2026-10-13 10:50

Проблемы LLM

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

Методы

МетодСуть
Парный счёт «починил / сломал» — честная проверка любой правкиПравка — это новый шаг самопроверки, новый системный промпт, новое правило или инструмент. Возьми 30–50 вопросов с эталонными ответами. Прогони агента «до» и «после». Сведи в таблицу: ID \| эталон \| до \| после. Попроси модель посчитать две цифры. Первая: было неверно, стало верно (починено). Вторая: было верно, стало неверно (сломано). Принимай правку, только если починено заметно больше, чем сломано. Почему работает: среднее скрывает встречные изменения. Плюс и минус гасят друг друга. Парный счёт показывает оба. Порог для малой выборки: разница не меньше 3 вопросов или 2% выборки, вред не выше 10%. Строгие статистические тесты на малой выборке отклоняют даже чистое 3:0. Важно: проверяй на вопросах, на которых правку не подгоняли. Не работает: тексты, креатив, мнения. Там нет эталона, который можно сверить
Разбор ошибок по недостающему умению — правка под причину, а не под темуСобери 10–15 реальных ошибок: вопрос, ответ агента, эталон. Попроси модель сгруппировать их по тому, КАКОГО УМЕНИЯ не хватило, а не по теме вопроса. Группы с одной ошибкой отложи. Ошибки, где правило сработало, и ошибки, где правила не было, разнеси по разным группам. Первые говорят о плохом правиле. Вторые — о пробеле. Для каждой группы пусть модель напишет «контракт»: причина, что измерить, входы, критерий успеха, когда применять, когда НЕ применять. Действие: создать, уточнить, сузить область или убрать. Главное правило: контракт описывает измерение (число, признак), а не готовый ответ. Не пиши «если X, отвечай Y». Почему работает: группа по умению даёт одну правку на много ошибок. Правка по теме чинит один случай. Измерение даёт модели новую информацию. Готовое правило ответа превращается в подгонку под проверочные вопросы. Когда нет: мало ошибок или нет эталона

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

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

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