EnglishРусский Map

Соответствие scaffold'а и модели

title
Соответствие scaffold'а и модели
type
concept
summary
Бенчмарки кодинг-агентов измеряют связку модель × scaffold: малые модели получают задачи, которые scaffold рассчитывал оставить на их самоконтроль
tags
llm, coding-agent, benchmarks
created
2026-05-13
updated
2026-07-29
lang
ru
translation_of
scaffold-model-fit
source_updated
2026-07-29
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-high

Результаты бенчмарков кодинг-агентов измеряют взаимодействие между моделью и окружающей её обвязкой (scaffold'ом), а не одну лишь модель. Стандартная практика оценки считает scaffold константой, а модель - переменной: в такой парадигме результат локальной 9B-модели в Aider "и есть" оценка самой модели. Но scaffold закладывает определённые допущения: сколько автономии ожидать, насколько агрессивно редактировать файлы, как восстанавливаться после сбоев, ограничено ли рассуждение. Эти допущения делались в расчёте на frontier-модели. Когда на их место ставят модель, не способную к такой же саморегуляции, вину за ошибки возлагают на веса модели, хотя ограничивающим фактором выступает именно scaffold.

Статья Итая Инбарра о little-coder - самая наглядная демонстрация этого в wiki. Та же модель (Qwen3.5-9B Q4_K_M), тот же бенчмарк (Aider Polyglot), то же железо. Scaffold A - стандартный в Aider. Scaffold B - little-coder, переработанный под поведенческий профиль модели. Scaffold A набирает 19.11%, scaffold B - 45.56%. Разрыв в 26.5 процентных пункта - это и есть сигнал от scaffold'а.

Что scaffold'ы ожидают от моделей, а малые модели не могут дать

Пять аспектов, в которых scaffold'ы для frontier-моделей рассчитывают на саморегуляцию:

  1. Дисциплина записи файлов. Frontier-модель понимает, когда нужно вызвать Edit, а не перезаписывать (Write) файл целиком. 9B-модель примерно в половине случаев переписывает частично работающую реализацию с нуля. Инструмент Write в little-coder отказывается работать с существующими файлами и возвращает структурированное перенаправление на Edit - это срабатывает примерно в 57% упражнений.

  2. Ограниченное рассуждение. Frontier-модели завершают chain-of-thought, как только собрали достаточно данных для действия. Малые модели уходят в размышления далеко за рамки разумного бюджета. little-coder ограничивает рассуждения 2048 токенами, заново подаёт частичный след мысли в виде контекста и повторяет попытку с отключённым thinking. Срабатывает в среднем в ~0.90 упражнений на бенчмарк.

  3. Исследование workspace'а. Frontier-модели сами находят проектную документацию. Малые модели бросаются редактировать код, даже не прочитав README.md. little-coder внедряет условный блок знаний, который срабатывает по ключевым словам для кодинга и направляет модель сначала сделать glob и прочитать файлы. Glob срабатывает в 67% упражнений, Read - в 100%.

  4. Упаковка справочных материалов. Frontier-модели нормально переносят объёмную статическую преамбулу. Бюджет контекста малых моделей её не выдержит. little-coder использует два экономных канала: карточки навыков инструментов (~80-150 токенов, выбираются на каждом ходе по предсказанию намерений) и шпаргалки по алгоритмам (подбираются по ключевым словам). Общий лимит: ~500 токенов за ход.

  5. Восстановление после повреждённого вывода. Frontier-модели выдают корректные вызовы инструментов. Малые модели оборачивают их в блоки кода, галлюцинируют имена инструментов и зацикливаются на одном и том же неработающем подходе. little-coder оборачивает цикл агента парсером некорректного вывода, детектором пустых ответов и механизмом прерывания повторов.

В каждом из этих случаев scaffold для frontier-моделей полагался на саморегуляцию, тогда как scaffold для малых моделей превращает это допущение в инфраструктуру.

Ячейка асимметрии как оценка сигнала scaffold'а

Наглядный способ измерить scaffold-model fit - составить кросс-таблицу результатов обоих scaffold'ов на уровне отдельных упражнений.

Aider pass Aider fail
little-coder pass 32 69
little-coder fail 11 113

Ячейка со значением 69 - это упражнения, с которыми справляются те же самые веса модели, но до которых не дотягивается scaffold Aider'а. Ячейка со значением 11 - честная цена смены scaffold'а. Асимметрия между 69 и 11 и есть сигнал соответствия scaffold'а. Их соотношение (~6×) даёт порядок величины того, сколько можно выиграть за счёт переработки scaffold'а при неизменной модели.

Почему исключение из лидербордов - категориальная ошибка

Публичный лидерборд Aider Polyglot не публикует результаты для моделей меньше ~10B параметров. Неявное допущение: такие модели не стоят отдельной строчки. Базовый прогон Инбарра (baseline со стандартным scaffold'ом Aider и Qwen3.5-9B) набирает больше баллов, чем несколько позиций лидерборда на базе куда более крупных моделей. Исключение моделей измеряет вовсе не то, что кажется его авторам: оно лишь закрепляет допущение scaffold'а о том, что тестировать стоит только поведение моделей frontier-класса.

Это перекликается с аргументом из статьи по IKP на другом конце шкалы размеров: бенчмарки, созданные для проверки процедурных способностей, перестали измерять накопленные знания, поэтому закон Densing Law кажется верным на бенчмарках, оставаясь ложным по отношению к объёму фактов. Оба довода указывают на одну и ту же системную проблему: бенчмарки фиксируют свои допущения, а сдвиги в возможностях моделей могут опережать эти допущения в любую сторону.

Практические выводы

  • Сравнение моделей на общем scaffold'е информативно только тогда, когда scaffold подходит обеим. Двум моделям с сильно различающимися профилями саморегуляции нужны разные scaffold'ы для справедливой оценки. Подход лидербордов ("ранжировать модели на этом бенчмарке") неявно предполагает, что scaffold не меняет расстановку сил.
  • Наблюдаемость механизмов - это не абляции. Частота срабатывания механизмов в little-coder показывает лишь то, что каждый компонент работал во время бенчмарка, а не то, что конкретный компонент отвечает за определённую долю прироста. Проектирование scaffold'а под поведенческий профиль модели - цельная задача; разложить её на независимые составляющие получается далеко не всегда.
  • Фраза "эта локальная модель плохо пишет код" обычно содержит скрытую претензию к scaffold'у. Прежде чем делать вывод, что ограничивающим фактором являются веса, попробуйте scaffold, который не требует от модели саморегуляции уровня frontier-класса.

Связанные страницы

  • little-coder-scaffold-model-fit - исходная статья
  • lucumr-local-models - дополняющий аргумент Армина Ронахера (Armin Ronacher) о том, что проблема кроется в шлифовке тулчейна; scaffold-model fit находится уровнем выше
  • clean-code-coding-agents - важность структуры кода при работе с агентами; симметричное наблюдение со стороны scaffold'а
  • local-llm-16gb-vram-tests - Вячеслав использует OpenCode с правилами AGENTS.md; OpenCode меньше заточен под frontier-модели, чем Aider, но всё же менее адаптирован под малые модели, чем little-coder
  • thinking-mode-rule-erosion - ограничение бюджета на размышления в little-coder выступает одним из механизмов против этого; общий приём здесь - "перестать позволять модели самой решать, когда остановиться"
  • acceptance-criteria-ids - превращение произвольных правил в верифицируемые идентификаторы; именно это по сути делает ограничение бюджета thinking с повторной попыткой
  • incompressible-knowledge-probes - симметричный аргумент на стороне frontier-моделей о слепых зонах бенчмарков
  • swe-1-7 - модель, обученная внутри своего scaffold'а (Devin) и поставляемая только вместе с ним, из-за чего модель и scaffold невозможно разделить; крайняя степень связывания модели и scaffold'а
  • benchmarking-opus-5-slopcodebench - сталкивается с этим напрямую: моделям давался только голый промпт на решение без обратной связи по качеству в цикле, и то и другое - выбор scaffold'а, а не свойства модели
  • evaluating-quantized-models - та же ошибка при квантовании: KLD и число бит на вес выступают лишь грубыми метриками первичного отбора, и попытка ранжировать варианты для продакшена по ним приводит к выбору неправильного квантования