3,583 papers
arXiv:2610.04433 76 3 окт. 2026 г. FREE

Обвязка агента (harness): почти не влияет на долю решённых задач, но решает, сколько вы заплатите

КЛЮЧЕВАЯ СУТЬ
Одна модель, три обвязки (всё вокруг модели: системный промпт, инструменты, сокращение истории). Решённых задач почти поровну, а счёт за задачу различается до 3 раз. Находка позволяет понять, за что вы платите при работе с кодовым агентом, и найти, что можно срезать. Фишка: деньги задаёт не вывод инструментов, а преамбула — системный промпт плюс описания инструментов, которые уходят с каждым шагом. В Claude Code она весит около 16 тысяч токенов, в OpenCode около 7 тысяч, в mini-SWE-agent меньше тысячи.
Адаптировать под запрос
⚡

TL;DR

Обвязка агента (harness) — это всё вокруг модели: системный промпт, набор инструментов, способ возвращать модели вывод инструментов и сокращение истории, когда она разрослась. Исследователи взяли одну и ту же модель и прогнали её через три популярные обвязки: тяжёлую (Claude Code), лёгкую (mini-SWE-agent) и среднюю (OpenCode). Тяжёлая и лёгкая решают практически одинаковое число задач. Зато счёт за задачу различается до трёх раз.

Главная находка: разница между обвязками на «сложных» задачах равна разнице между двумя запусками одной и той же обвязки. Сегодня агент решил одну задачу, завтра при том же запуске решил другую. Поэтому фраза «наша обвязка даёт +2–3 пункта» чаще всего просто шум одного прогона. Единственный эффект, который выше шума, — потеря задач. OpenCode проигрывает, а заметная часть проигрыша — обрывы: когда ответ модели упирается в лимит длины, обвязка не просит продолжить. Выиграть задачу обвязка не помогает ни разу.

Деньги определяются не тем, что возвращают инструменты (по объёму текста за вызов обвязки почти равны). Их определяет преамбула: системный промпт плюс описания инструментов, которые уходят с каждым шагом агента. В Claude Code она около 16 тысяч токенов, в OpenCode около 7 тысяч, в mini-SWE-agent меньше тысячи. Счёт задаётся на первом вызове и умножается на число шагов.

🔬

Схема метода

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

ШАГ 1: Зафиксировать модель, версию обвязки, лимит шагов, набор задач
ШАГ 2: Прогнать каждую конфигурацию минимум 2 раза → измерить разброс «сам с собой»
ШАГ 3: Сравнить конфигурации на тех же задачах → разница в решённых задачах
ШАГ 4: Если разница ≤ разброса между повторами → это шум, не эффект
ШАГ 5: Отдельно посчитать токены и деньги по единому прайсу → именно здесь реальная разница
ШАГ 6: Для каждой проваленной задачи записать, чем закончился запуск
        (сам остановился / лимит вывода / переполнение контекста / лимит шагов)
🚀

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

Задача: Вы ведёте разработку интернет-магазина на Claude Code. Счёт за API растёт. В CLAUDE.md за полгода накопилось 6000 токенов правил, и ещё подключено восемь MCP-серверов. Вы хотите понять, что из этого окупается, а что просто едет с каждым шагом агента и стоит денег.

Промпт:

Ты — аудитор инструкций для кодового агента. Ниже мой CLAUDE.md и список подключённых инструментов.

Контекст: всё, что лежит в системной инструкции и описаниях инструментов, отправляется модели заново на КАЖДОМ шаге работы агента. Если агент делает 100 шагов, каждая лишняя тысяча токенов превращается в сто тысяч. Задача аудита — найти, что можно убрать без потери качества, и что нельзя.

Сделай по шагам:
1. Оцени вес каждого раздела CLAUDE.md в токенах (грубо) и построй таблицу «раздел — вес — нужен ли на каждом шаге».
2. Раздели правила на три группы:
   (а) нужны всегда (стиль кода, запреты, команды запуска тестов);
   (б) нужны только в особых задачах (миграции, деплой, работа с платёжкой) — предложи вынести в отдельные файлы, которые агент читает по запросу;
   (в) дубли, устаревшее, общие слова вроде «пиши качественный код» — предложи удалить.
3. Для списка инструментов: какие из них агент реально вызывал бы в типичной задаче, а какие просто занимают место в описании.
4. Предложи урезанную версию CLAUDE.md и список из 3 проверочных задач, на которых я сравню старую и новую версии. Для каждой задачи — по 2 прогона на версию, чтобы увидеть разброс.
5. Отдельно напомни, что именно мне записывать в каждом прогоне: прошла ли задача, число шагов, число токенов, чем закончился запуск.

Не придумывай цифры. Если не хватает данных — задай вопрос.

CLAUDE.md:
{вставить}

Подключённые инструменты и MCP-серверы:
{список}

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

🧠

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

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

Сильная сторона: современные модели уже сами умеют работать с репозиторием. Им хватает одного простого инструмента (командной строки) и короткой инструкции. Длинная преамбула почти не добавляет качества, зато оплачивается на каждом шаге.

Как использовать: смотрите на обвязку как на статью расходов, а не как на источник качества. Рычаги управления: - Размер постоянной части (системный промпт, CLAUDE.md, описания инструментов) → меньше вес, дешевле каждый шаг. - Число шагов → если агент ходит кругами, счёт растёт даже при лёгкой обвязке. У DeepSeek лёгкая обвязка сделала больше шагов и в итоге передала больше токенов. - Повторы запусков → два прогона на конфигурацию, чтобы увидеть шум, прежде чем объявлять победителя. - Причина остановки → фиксируйте, как закончился провал. Если агент оборвался на лимите вывода, это поломка обвязки, а не слабость модели.

📋

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

Шаблон простой, быстрый старт не нужен. Это промпт-аудит: он находит лишний вес и план проверки.

Ты — аудитор инструкций для кодового агента.

Факт: системная инструкция и описания инструментов отправляются модели заново на каждом шаге. Чем больше шагов, тем дороже каждая лишняя строка.

Проанализируй {файл_инструкций} и список инструментов {инструменты}:
1. Таблица: раздел — вес в токенах — нужен на каждом шаге или только в особых задачах.
2. Три группы: «нужно всегда» / «вынести в отдельный файл по запросу» / «удалить (дубли, общие слова, устаревшее)».
3. Какие инструменты агент вряд ли вызовет в типичной задаче {тип_задач}.
4. Урезанная версия инструкции.
5. План проверки: {число_задач} задач, по {число_прогонов} прогона на версию; в каждом прогоне записывать результат, число шагов, число токенов и причину остановки.

Не придумывай цифры. Если данных мало — спроси.

Что подставлять: {файл_инструкций} — текст вашего CLAUDE.md, AGENTS.md или системного промпта; {инструменты} — список MCP-серверов и команд; {тип_задач} — чем агент чаще всего занят (баги, рефакторинг, тесты); {число_задач} — обычно 3–5; {число_прогонов} — минимум 2.

⚠️

Ограничения

⚠️ Один бенчмарк: вся работа построена на исправлении багов в Python-репозиториях. Для вёрстки, аналитики, документации или длинных многоступенчатых проектов вывод «обвязка не влияет на качество» никто не проверял.

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

⚠️ Узкое окно контекста — другой случай: по обзору литературы в статье, управление контекстом (сжатие истории) сильно помогает, когда окно маленькое. Вывод «лёгкая обвязка не хуже» относится к моделям с большим окном.

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

⚠️ Деньги посчитаны не для всех: реальную цену в рублях и юанях считали только для двух моделей через API. Для локальных моделей были только токены, для Claude Opus — подписка. Если вы платите подпиской, разница 3× проявится в лимитах, а не в счёте.

⚠️ Причина обрывов неизвестна: авторы не знают, что именно в OpenCode заставляет модель останавливаться раньше. Пересадка подсказки «продолжай» из Claude Code в OpenCode вернула задачи в количестве, неотличимом от нуля.

🔍

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

Идея была простой: перестать верить громким заявлениям вендоров и посмотреть, насколько результат сдвигается при смене обвязки по сравнению с простым перезапуском той же самой обвязки. Взяли три готовые обвязки: Claude Code, mini-SWE-agent и OpenCode. Пять моделей прогнали через все три, а Claude Opus 5 — только через Claude Code, как «потолок». Задачи брали из SWE-bench Verified: 45 самых сложных отдельно, чтобы увидеть, где обвязка должна быть важна, и ещё 447 остальных, чтобы мощности хватало на малые эффекты. Для каждой конфигурации делали повторные прогоны, чтобы измерить «шум». Все запуски шли без интернета: в ранних прогонах с сетью 71% запусков DeepSeek и Qwen просто скачали готовое исправление с GitHub, эти данные выбросили. Стоимость считали по единому прайсу из токенов каждого запуска.

Результат оказался неожиданным. Тяжёлая и лёгкая обвязки на 447 задачах эквивалентны в пределах 5 пунктов. На сложных задачах смена обвязки меняет исход у 13% задач, и перезапуск той же обвязки тоже у 13%. Причём какие именно задачи «выигрывает» обвязка, в следующем прогоне не повторяется. Единственное, что превышает шум, — проигрыш OpenCode (до 9 пунктов), и половина проигрыша сидит в запусках, оборванных лимитом вывода, где обвязка не просит модель продолжить. Деньги же различаются в разы: преамбула в Claude Code 16 тысяч токенов против менее тысячи у mini-SWE-agent, а рост истории за шаг у всех трёх близок. Практический инсайт: цена задаётся на первом вызове и умножается на число шагов. Кэш входных токенов масштабирует счёт, но порядок обвязок по цене не меняет. Ещё одна оценка: при таком шуме 45 задач ловят разрыв в 13 пунктов лишь в половине случаев, а 447 задач — около 5 пунктов. Многие опубликованные «улучшения обвязок» находятся ниже этих порогов.

💡

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

🔧 Техника: добавить в инструкцию правило про обрыв → страховка от потери задач

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

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

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

Экстраполяция: проверка любых «улучшений промпта» по правилу шума

Принцип статьи работает не только для агентов. Любую новую версию промпта в рабочем процессе можно проверить так:

Я хочу сравнить две версии промпта на своих задачах.
Версия A: {промпт_A}
Версия B: {промпт_B}
Набор тестовых входов: {входы}

Составь план проверки:
1. Сколько раз прогнать каждую версию на каждом входе, чтобы увидеть разброс «A против самой себя».
2. Как записать результаты: пройдено/не пройдено, длина вывода, расход токенов.
3. Правило решения: считаем B лучше только если разница между A и B больше, чем разница между двумя прогонами A.
4. Отдельно сравни стоимость: какая версия дешевле при одинаковом качестве.
🔗

Ресурсы

  • Работа: «What Does a Harness Buy? Tokens, Mostly», Yangze Liu, Zhongyi Han, Shandong University (препринт).
  • Обвязки в эксперименте: Claude Code (Anthropic), mini-SWE-agent (Lieret et al.), OpenCode (Anomaly Innovations); запуск через Harbor.
  • Бенчмарк: SWE-bench Verified (Jimenez et al.; OpenAI).
  • Связанные работы: Vats & Golev (разница по токенам на решённую задачу до 40×), Bjarnason et al. (десять перезапусков одной конфигурации дают разброс 2,2–6,0 пункта), Ben Sghaier et al. (35 релизов одной обвязки без значимого роста качества при почти удвоенных токенах), Fan et al. (компонентный анализ: управление контекстом помогает при тесном окне, а сильным моделям хватает только bash-инструмента).

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

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

Одна модель, три обвязки (всё вокруг модели: системный промпт, инструменты, сокращение истории). Решённых задач почти поровну, а счёт за задачу различается до 3 раз. Находка позволяет понять, за что вы платите при работе с кодовым агентом, и найти, что можно срезать. Фишка: деньги задаёт не вывод инструментов, а преамбула — системный промпт плюс описания инструментов, которые уходят с каждым шагом. В Claude Code она весит около 16 тысяч токенов, в OpenCode около 7 тысяч, в mini-SWE-agent меньше тысячи.

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

Счёт за задачу = вес преамбулы × число шагов агента. Агент делает 100 шагов. Каждая лишняя тысяча токенов в инструкциях превращается в сто тысяч. Инструменты при этом возвращают примерно одинаковый объём текста во всех трёх обвязках. Значит, разницу создаёт именно постоянный груз. Обвязка — это статья расходов, а не источник качества. Это как чемодан, за который платишь заново на каждой пересадке. Чем больше пересадок, тем обиднее за каждый лишний килограмм.

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

Агент недетерминирован. Сегодня он решил одну задачу, завтра при том же запуске решил другую. Разница между обвязками на сложных задачах оказалась равна разнице между двумя запусками одной и той же обвязки. Поэтому фраза «наша обвязка даёт +2–3 пункта» чаще всего просто шум одного прогона. Единственный эффект выше шума — потеря задач. OpenCode проигрывает, и заметная часть проигрыша — обрывы. Ответ модели упирается в лимит длины, а обвязка не просит продолжить. Выиграть задачу обвязка не помогает ни разу. Причина проста: современные модели уже сами умеют работать с репозиторием. Им хватает командной строки и короткой инструкции. Длинная преамбула качества почти не добавляет, но оплачивается каждый шаг. Тяжёлая обвязка при этом выглядит умнее, и интуиция тут обманывает.

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

Кодовые агенты (Claude Code, OpenCode и похожие) → правка багов в репозитории, особенно когда счёт за API растёт, а CLAUDE.md за полгода разросся до тысяч токенов и подключено много MCP-серверов. Также полезно, когда вы выбираете между двумя настройками агента и хотите понять, разница настоящая или случайная. НЕ подходит как готовый вердикт: исследование проверяло только исправление багов в Python-проектах. Для вёрстки, аналитики и длинных проектов вывод никто не проверял. Для моделей с маленьким окном контекста он тоже не гарантирован: там сжатие истории реально помогает. Если вы платите подпиской, а не за токены, разница в 3 раза проявится в лимитах, а не в счёте.

Мини-рецепт

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

Готовый промпт-аудит: Ты — аудитор инструкций для кодового агента. Системная инструкция и описания инструментов отправляются модели заново на каждом шаге. Проанализируй {файл_инструкций} и список инструментов {инструменты}. 1) Таблица: раздел — вес в токенах — нужен на каждом шаге или только в особых задачах. 2) Три группы: нужно всегда / вынести в отдельный файл по запросу / удалить. 3) Какие инструменты агент вряд ли вызовет в задачах типа {тип_задач}. 4) Урезанная версия инструкции. 5) План проверки: {число_задач} задач, по 2 прогона на версию, записывать результат, число шагов, число токенов и причину остановки. Не придумывай цифры. Если данных мало — спроси.

Примеры

[ПЛОХО] : Поменял CLAUDE.md, прогнал одну задачу — решилась! Новая версия лучше на 3 пункта, оставляем
[ХОРОШО] : Вот мой CLAUDE.md на 6000 токенов и список из 8 MCP-серверов. Агент делает около 100 шагов за задачу. Найди, что можно убрать без потери качества: сделай таблицу «раздел — вес — нужен ли на каждом шаге», вынеси редкие правила в отдельные файлы по запросу, предложи урезанную версию. Затем дай 3 проверочные задачи, по 2 прогона на версию. В каждом прогоне я буду записывать: прошла ли задача, число шагов, число токенов, чем закончился запуск. Не придумывай цифры В первом случае победу объявили по одному жребию. Во втором сравнивают с шумом и считают токены, где разница в 3 раза настоящая.
Источник: What Does a Harness Buy? Tokens, Mostly
ArXiv ID: 2610.04433 | Сгенерировано: 2026-10-06 05:00

Проблемы LLM

ПроблемаСутьКак обойти
Один запуск агента не показывает, стал ли промпт лучшеАгент работает не одинаково от раза к разу. Сегодня решил одну задачу, завтра при тех же условиях решил другую. Меняешь инструкцию, считаешь решённые задачи, видишь +2–3 пункта. Это часто просто разброс, а не эффект. Особенно на сложных задачах и малой выборке. Реальный эффект выше разброса обычно только когда задачи теряются, а не выигрываютсяЗапусти каждую версию инструкции минимум 2 раза на одних и тех же задачах. Сравни разницу между версиями с разницей между двумя запусками одной версии. Если первая не больше второй, это шум. Не объявляй победителя

Методы

МетодСуть
Аудит постоянной части инструкции — дешевле каждый шаг агентаПостоянная часть — это системный промпт, файл правил (CLAUDE.md, AGENTS.md) и описания инструментов. Она уходит модели заново на каждом шаге. Попроси модель разбить правила на три группы. (а) Нужно всегда: стиль, запреты, команда запуска тестов. (б) Нужно только в особых задачах: миграции, деплой, платежи. Вынеси в отдельные файлы, которые агент читает по запросу. (в) Дубли, устаревшее, общие слова вроде «пиши качественный код». Удали. Отдельно спроси, какие инструменты агент вряд ли вызовет в типичной задаче. Они занимают место в описаниях. Почему работает: вес постоянной части умножается на число шагов. Лишняя тысяча токенов на 100 шагах превращается в сто тысяч. Проверка: возьми 3–5 типовых задач. Прогони старую и новую версию по 2 раза. Записывай результат, число шагов, число токенов и чем закончился запуск. Добавь в запрос «не придумывай цифры, при нехватке данных спроси». Модель даёт список кандидатов на удаление, а не вердикт. Не работает: когда окно контекста маленькое и нужно сжимать историю. Не проверено для задач вне исправления кода
📖 Простыми словами

What Does a Harness Buy? Tokens, Mostly

arXiv: 2610.04433

Разработчики обвешивают AI-агентов тоннами инструкций, думая, что растят гения, но по факту сливают бюджет в трубу. Вся эта сложная агентная обвязка — гигантские системные промпты, пачки тулов и алгоритмы сжатия контекста — почти не влияет на результат. Исследователи прогнали одну модель через три среды: монструозную Claude Code, среднюю OpenCode и невесомую mini-SWE-agent. Итог отрезвляет: лёгкая и тяжёлая обвязки решают одинаковое число задач.

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

Цифры бьют по карману: разница в стоимости задачи доходит до 3 раз при нулевой разнице в пользе. Разработчики свято верят в шаманизм: раздувают файл CLAUDE.md до 6000 токенов, подключают пачку MCP-серверов и думают, что это помогло. Но тут правит бал рандомизация LLM — агент нестабилен по своей природе, и разовую победу легко принять за гениальность настройки, хотя это был банальный бросок кубика.

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

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

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

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

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