3,583 papers
arXiv:2610.33178 70 23 окт. 2026 г. FREE

AOS-Bench: агент по одной задаче держится хорошо, а в потоке задач резко теряет в качестве

КЛЮЧЕВАЯ СУТЬ
Парадокс: два агента решают одиночные задачи одинаково (74,9% и 74,3%). Но когда задачи идут потоком, один доводит до конца 54%, другой 68%. Бенчмарк AOS-Bench показывает, что поток задач ломает не ум агента, а то, как он берёт и распределяет работу. Фишка: агент берёт одну задачу и не смотрит в очередь, пока не закончит. У GLM-5.3 так и осталось нетронутыми 25% задач, у DeepSeek-V4-Pro 48%, у Claude Opus 5 только 0%. При этом ядра процессора простаивают: медианная загрузка не выше 30%. Статья проверяла не промпт, а лимиты в диспетчере задач. Текст для CLAUDE.md ниже — моя адаптация, её никто не мерил.
Адаптировать под запрос
⚡

TL;DR

Когда агенту (Claude Code, Codex и подобным) подкидывают задачи потоком, он теряет заметную долю результата по сравнению с теми же задачами, выданными по одной. При этом сама способность решать задачу почти не объясняет потери. Два агента с одинаковым результатом на одиночных задачах (74,9% и 74,3%) в потоке доводят до конца 54% и 68% задач. Разница в том, как агент берёт работу и распределяет её. Исследование называет это «агент как менеджер нагрузки» (AOS-Bench).

Главная проблема, которую показал эксперимент, — агент берёт задачи по одной и не берёт новые, пока не закончит текущую. Остальное просто лежит. У GLM-5.3 и DeepSeek-V4-Pro часть задач так и не была взята в работу: 25% и 48% соответственно, у Claude Opus 5 — 0%. Если принудительно заставить агента работать строго по очереди, на тяжёлой нагрузке 73% задач остаются нетронутыми. При этом процессор в среднем простаивает: медианная загрузка не превышает 30% выделенных ядер, пока задачи ждут.

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

🔬

Схема метода

Это не техника, а бенчмарк с экспериментом на вмешательствах. Устроен так:

ШАГ 1: Берут реальные задачи из CLI-бенчмарков (сборка, обработка данных, компиляция)
ШАГ 2: Прогон «по одной» (individual) → эталон: что агент умеет на изолированной задаче
ШАГ 3: Прогон «потоком» (stream) → те же задачи приходят в течение 20–60 минут
        в общую песочницу (4 CPU, 8 ГБ памяти)
ШАГ 4: Независимые проверки (verifiers) оценивают итоговые файлы → доля доставленного
ШАГ 5: Вмешательства (на одной модели): строго по очереди / как сам решит /
        с подсказкой / фиксированно 2 параллельно
🚀

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

Метод — это бенчмарк, и промпта в нём нет. Ниже моя адаптация выводов на практическую ситуацию. Статья этот текст не проверяла: она проверяла лимиты параллельности в диспетчере.

Задача: Основатель небольшого интернет-магазина на Wildberries держит Claude Code на рабочем сервере. Утром ему в одну сессию прилетает три задачи: пересобрать парсер карточек, обработать выгрузку заказов на 2 ГБ, сконвертировать 40 видеообзоров для карточек. Агент берёт первое и тянет его два часа, остальное лежит.

Промпт (в CLAUDE.md):

## Правила работы с потоком задач

- Если пользователь прислал несколько задач или они приходят пока ты работаешь,
  не жди завершения текущей. В начале сессии выведи список всех известных задач
  и их статусов: «не взята / в работе / готово / заблокирована».
- Бери в работу не больше 2 задач одновременно. Остальные оставляй в очереди,
  но не теряй: когда одна из двух закончена, сразу бери следующую.
- Тяжёлые по CPU и памяти задачи (сборка, конвертация видео, обработка больших
  файлов) одновременно не запускай.
- Пока тяжёлая задача ждёт ответа внешнего сервиса или идёт долгая команда,
  займись лёгкой задачей из очереди.
- Каждые 15 минут выводи список задач. Если есть «не взята» и свободен слот —
  бери в работу.
- Перед завершением проверь: нет ли задач в статусе «не взята».

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

🧠

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

Слабость. Агент по умолчанию склонен «довести текущую задачу до конца» и не смотрит в очередь. Это видно по тому, что часть моделей перестаёт брать новые задачи и работает по одной. Он не видит общей картины: ни очереди, ни того, что ядра простаивают, пока он ждёт ответ модели или инструмента.

Сильная сторона. Агент хорошо выполняет конкретную задачу, когда её взял. Основная потеря возникает не из-за провала в решении, а из-за невзятых и недоделанных задач и памяти. Это устраняется простым правилом приёма работы, а не умным планированием.

Рычаги. - Лимит параллельности (в статье k=2) → увеличь для лёгких задач, уменьши для тяжёлых. При k=1 результат был самым плохим. - Подсказки про планирование → не усложняй. Подробное «руководство» привело к тому, что на тяжёлой нагрузке агент брал больше, но доставлял меньше. - Явный список статусов → заставляет агента видеть невзятые задачи. Это моя адаптация, статья её не проверяла. - Память → при тяжёлых задачах опасно превысить лимит: все задачи, завершённые после превышения, засчитываются как нулевые.

📋

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

Это адаптация, а не промпт из статьи.

## Управление потоком задач

- В начале сессии и каждые {интервал_минут} минут выводи список задач:
  «не взята / в работе / готово / заблокирована».
- Одновременно в работе не больше {число_параллельных} задач.
- Тяжёлые задачи ({примеры_тяжёлых}) вместе не запускай.
- Пока идёт долгая команда или ожидание, займись лёгкой задачей из очереди.
- Не завершай сессию, пока есть задачи «не взята».

Подставь {число_параллельных} (начни с 2), {интервал_минут} (10–15) и {примеры_тяжёлых} (то, что у тебя ест ядра и память: сборка, конвертация, обработка больших файлов).

⚠️

Ограничения

⚠️ Вывод про вмешательства — на одной модели: сравнение «по очереди / сам / с подсказкой / фиксированно 2» сделано только на GLM-5.3. Для других агентов оно может выглядеть иначе.

⚠️ Малая выборка: на тяжёлой нагрузке всего пять наборов задач. Авторы называют доверительные интервалы там грубой проверкой.

⚠️ Нужна прямая настройка: в исследовании лимит параллельности реализован через диспетчер задач. Его надо превратить в инструкцию для агента, и результат придётся проверять.

⚠️ Только про потоки: если ты даёшь агенту по одной задаче, статья тебе мало что даёт.

⚠️ Нет универсального лимита: «2 параллельно» хорошо сработало в песочнице на 4 ядра и 8 ГБ. На твоей машине число может быть другим.

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

🔍

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

Исследователи взяли задачи из восьми существующих бенчмарков по работе в командной строке, собрали их в общий Docker-образ и запускали на пяти парах «модель + агентная оболочка». У каждой пары был эталон: те же задачи по одной, каждая в своей песочнице. Потом сравнивали этот эталон с потоком, где задачи приходят в течение 20–60 минут в общую среду на 4 ядра и 8 ГБ памяти.

Идея в том, чтобы отделить умение решать от умения управлять нагрузкой. Результат: рейтинги по этим двум критериям не совпали. Лучшая по одиночным задачам GPT-5.6-sol потеряла 14,5 пункта, а Kimi-K3 с более слабым эталоном — только 6,3. Разбор потерь показал, что на тяжёлой нагрузке основная часть связана с задачами, которые не взяли, не закончили или закончили после превышения памяти. Ошибки решения вносят в сумму не больше 1,3 пункта.

Затем на одной модели (GLM-5.3) сравнили четыре политики. «Строго по очереди» дала 39,5% и 28,6%, «как сам решит» — 53,9% и 44,4%, фиксированное «2» — 56,6% и 42,8%. «Подсказка» на средней нагрузке дала 60,2%, а на тяжёлой — 39,2% при том, что брали больше задач. Удивительно, что «глупое» правило почти не уступает «умному» агенту.

💡

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

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

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

Основание: на тяжёлой нагрузке у ряда систем были превышения памяти (до 40%), а после первого такого превышения все завершённые задачи не засчитывались.

🔗

Ресурсы

AOS-Bench: Can LLM Agents Manage Dynamic Workloads? — Erle Zhu, Genrui Zhang, Keyang Hu, Mingyu Su, Hongning Wang (Tsinghua University, Columbia University). Код: https://github.com/AOS-Bench/AOS-Bench. Источники задач: Terminal-Bench, SkillsBench, TerminalWorld, WildClawBench, CompileBench, CompileAgent, ParEval, One Billion Row Challenge. Формат задач: Harbor.


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

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

Парадокс: два агента решают одиночные задачи одинаково (74,9% и 74,3%). Но когда задачи идут потоком, один доводит до конца 54%, другой 68%. Бенчмарк AOS-Bench показывает, что поток задач ломает не ум агента, а то, как он берёт и распределяет работу. Фишка: агент берёт одну задачу и не смотрит в очередь, пока не закончит. У GLM-5.3 так и осталось нетронутыми 25% задач, у DeepSeek-V4-Pro 48%, у Claude Opus 5 только 0%. При этом ядра процессора простаивают: медианная загрузка не выше 30%. Статья проверяла не промпт, а лимиты в диспетчере задач. Текст для CLAUDE.md ниже — моя адаптация, её никто не мерил.

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

Не нужно умное планирование. Нужно простое правило приёма работы. Фиксированный лимит «не больше двух задач одновременно» дал результат в пределах четырёх пунктов от лучшей политики, где агент решал сам. Строго по очереди (k=1) вышло хуже всего: на тяжёлой нагрузке 73% задач остались нетронутыми. Подробные подсказки про планирование тоже навредили. Агент брал больше задач, но заканчивал меньше. Представь официанта, который не берёт новые заказы, пока не донёс первый. Кухня пуста, гости ждут. Лимит «два стола сразу» эту проблему закрывает. Умные советы про то, как организовать зал, только путают.

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

Агент по умолчанию тянет текущую задачу и не видит общей картины. Он не видит очереди. Он не видит, что ядра простаивают, пока он ждёт ответа модели или инструмента. Одиночный тест эту слабость не ловит, потому что очереди там просто нет. Сама способность решать задачу почти не объясняет потери. Потери идут от невзятых задач и недоделанного, а не от провала в решении. Это чинится правилом приёма работы. Ещё есть ловушка с памятью: если тяжёлые задачи превысили лимит, всё завершённое после этого засчитывается как ноль. Честно про данные. Сравнение «по очереди / сам / с подсказкой / два параллельно» сделано только на GLM-5.3. На тяжёлой нагрузке всего пять наборов задач, и сами авторы называют интервалы там грубой проверкой. К тому же задачи в потоке иногда делят файловое пространство и помогают проверке друг друга. Реальные потери чуть больше, чем в цифрах.

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

Агентная работа (Claude Code, Codex и похожие) → когда в одну сессию падает несколько задач сразу или они приходят, пока агент работает, особенно если среди них есть тяжёлые: сборка, конвертация видео, большие выгрузки. НЕ подходит, если ты даёшь агенту по одной задаче: тогда статья почти ничего не даёт. Число «2» не универсально: оно сработало в песочнице на 4 ядра и 8 ГБ, на твоей машине подбирай своё.

Мини-рецепт

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

Шаблон для CLAUDE.md:
Выводи список задач каждые {интервал_минут} минут. В работе не больше {число_параллельных} задач. Тяжёлые задачи ({примеры_тяжёлых}) вместе не запускай. Пока идёт долгая команда, бери лёгкую задачу. Не завершай сессию, пока есть задачи «не взята».

Примеры

[ПЛОХО] : Пересобери парсер карточек, обработай выгрузку заказов на 2 ГБ и сконвертируй 40 видеообзоров — агент два часа тянет парсер, остальное лежит.
[ХОРОШО] : Три задачи: парсер карточек, выгрузка заказов, 40 видео. Сначала выведи список со статусами. В работе не больше 2 задач, конвертацию и сборку вместе не запускай. Пока идёт долгая команда, бери лёгкую задачу. Каждые 15 минут показывай список. Не заканчивай, пока есть «не взята».
Источник: AOS-Bench: Can LLM Agents Manage Dynamic Workloads?
ArXiv ID: 2610.33178 | Сгенерировано: 2026-10-27 23:30

Проблемы LLM

ПроблемаСутьКак обойти
Агент берёт задачи по одной и не смотрит в очередьДаёшь агенту несколько задач сразу или подкидываешь их по ходу работы. Агент берёт первую и тянет до конца. Остальные лежат нетронутыми. У части агентов четверть или даже половина задач так и не берётся в работу. Пока агент ждёт долгую команду, ресурсы машины простаивают. Решать задачу он умеет. Теряется именно приём работы. Это касается любой сессии, где задач больше однойЗадай в постоянной инструкции (например, CLAUDE.md) простые правила приёма работы. 1) Выводи список задач со статусами: «не взята / в работе / готово / заблокирована». 2) Держи в работе не больше 2 задач сразу. Лимит «строго по одной» даёт худший результат. 3) Тяжёлые задачи (сборка, конвертация, большие файлы) вместе не запускай. 4) Пока тяжёлая задача ждёт, бери лёгкую. 5) Не завершай сессию, пока есть «не взята». Важно: жёсткий лимит параллельности проверен через внешний диспетчер задач, а не текстом инструкции. Сработает ли текст, проверь на своём агенте. Число 2 подобрано для машины с 4 ядрами и 8 ГБ памяти. Подбери своё
📖 Простыми словами

AOS-Bench: Can LLM Agents Manage Dynamic Workloads?

arXiv: 2610.33178

LLM-агенты лажают не потому, что они тупые, а потому что не умеют в диспетчеризацию. Когда ты скармливаешь модели одну изолированную задачу, она справляется на ура. Но закинь задачи непрерывным потоком в реальном времени — и начинается полный провал. Проблема вообще не в интеллекте: агенты по своей природе слепы к очереди и не умеют быть менеджерами собственной нагрузки.

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

Бенчмарк AOS-Bench вскрыл эту проблему в сухих цифрах. Два агента с почти равным соло-результатом — 74.9% против 74.3% — в динамическом потоке просели до позорных 54% и 68%. Причина проста: модель намертво залипает на текущем шаге, тупо ждёт ответ от одного инструмента, а ресурсы простаивают, пока агент в упор игнорирует очередь.

Тестировали на коде, но принцип универсален: та же фигня ждёт тебя в автоматизации поддержки, парсинге данных или сложных пайплайнах. Любой мультиагентный сетап без нормального диспетчера захлебнётся, как только входящий трафик чуть подрастёт. Вывод простой: управление нагрузкой нельзя отдавать на откуп самой LLM — ей нужна внешняя операционная система.

Короче: умный агент — хреновый менеджер. Хватит надеяться на хвалёную многозадачность нейросетей из коробки, они зашьются на первом же пике. Строй вокруг агентов жесткие внешние очереди и контролируй параллельность руками, иначе будешь терять до трети результата просто из-за того, что модель поймала ступор на ровном месте.

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

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

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