EnglishРусский Map

little-coder - соответствие scaffold'а модели на Aider Polyglot

title
little-coder - соответствие scaffold'а модели на Aider Polyglot
type
summary
summary
Итай Инбарр показал рост Qwen3.5-9B Q4_K_M с 19.11% в Aider до 45.56% в little-coder на Aider Polyglot за счёт переработки scaffold'а под малые модели
tags
llm, local-models, coding-agent, benchmarks
created
2026-05-13
updated
2026-05-13
lang
ru
source_updated
2026-05-13
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

В статье Итая Инбарра (Itay Inbarr) модель фиксируется, а меняется агентный scaffold. Те же веса (Qwen3.5-9B Q4_K_M, ~6.6 ГБ), тот же бенчмарк Aider Polyglot (225 задач на Python, Go, Rust, JavaScript, C++, Java), тот же контекст на 32K токенов, тот же лимит в две попытки. Один scaffold - Aider со своими настройками по умолчанию. Другой - little-coder, агент, архитектура которого специально адаптирована под особенности поведения малой локальной модели.

Aider с Qwen3.5-9B набирает 19.11% (43 / 225). little-coder с теми же весами модели даёт в среднем 45.56% по итогам двух полных прогонов (SD = 0.94). В 79.1% задач результат (успех или неудача) совпал в обоих прогонах - воспроизводимость заметно превосходит ожидаемый уровень шума. little-coder обходит несколько позиций публичного лидерборда на моделях более чем в 10 раз крупнее, включая gpt-4.5-preview и gpt-oss-120b (high). См. scaffold-model-fit для отдельного описания концепта.

Механизмы scaffold'а

little-coder наследует многошаговый агентный цикл и абстракции инструментов из SafeRL-Lab/clawspring. Адаптации поверх этого составляют основной вклад статьи:

Отказ инструмента Write для существующих файлов. Когда модель вызывает Write для уже существующего файла, инструмент возвращает структурированную ошибку с указанием использовать Edit. Без этой защиты полная перезапись файла может незаметно стереть частично работающий код. Защита срабатывает примерно в 57% задач - больше чем в половине случаев модель иначе уничтожила бы рабочее состояние.

Ограничение бюджета рассуждений с повторной отправкой запроса. Рассуждения ограничены 2048 токенами. При превышении бюджета генерация прерывается, частичный трейс рассуждений сохраняется и повторно внедряется как контекст ассистента, а запрос повторяется с отключённым режимом thinking. Это заставляет модель прекратить бесконечные размышления и перейти к реализации. Лимит срабатывает в среднем ~0.90 раза на задачу - без ограничений рассуждения выходили бы за рамки бюджета почти в каждой задаче.

Условное исследование workspace'а. Запись базы знаний срабатывает на ключевые слова, связанные с кодом, и направляет модель изучить локальную документацию (.docs/instructions.md, README.md) до внесения правок. Glob вызывается в 67% задач, Read - в 100%, то есть директива работает.

Карточки навыков для инструментов вместо статической преамбулы. Справочные материалы передаются по двум экономным каналам вместо длинной преамбулы. Карточки навыков (skill cards) для инструментов занимают ~80-150 токенов каждая и выбираются на каждом шаге по предсказанию намерения, давности использования и сигналам исправления ошибок. Шпаргалки по алгоритмам оцениваются по релевантности сообщению пользователя и внедряются только при совпадении ключевых слов. В сумме оба канала ограничены ~500 токенами на шаг. Это прямой ответ на жалобу Ронахера о том, как универсальные системы навыков сжигают контекст малых моделей.

Парсер некорректного вывода + прерывание зацикливаний. Обёртка над агентным циклом исправляет вызовы инструментов, выданные в markdown-блоках или нестандартном формате, перехватывает пустые ответы и выдуманные имена инструментов, а также прерывает циклы повторов, которые иначе исчерпали бы лимит шагов на одной и той же неудачной попытке.

Тезис Инбарра относительно этих механизмов: scaffold для передовых моделей (frontier models) предполагает, что модель сама себя регулирует по каждому из этих направлений. Малая модель этого не делает. little-coder превращает каждое из них в инфраструктуру.

Сигнал scaffold'а: асимметрия ячеек

На 225 задачах:

  • Решены обоими: 32
  • Не решены обоими: 113
  • Только little-coder: 69
  • Только Aider: 11

Ячейка с задачами, решёнными только little-coder, примерно в 6 раз больше ячейки Aider. В этом и заключается сигнал scaffold'а: в 69 задачах модель способна выдать рабочее решение, но scaffold Aider'а не позволяет до него добраться. 11 задач, которые Aider решает, а little-coder проваливает, - честная цена, но они не отменяют этой асимметрии.

Базовый результат Aider сам по себе является открытием

Базовый результат Aider в 19.11% получен с сохранением настроек по умолчанию там, где они описывают сам scaffold (формат правок с полной перезаписью файла, temperature 0, две попытки на задачу). Только две настройки были изменены, чтобы baseline не терял задачи из-за инфраструктурных сбоев, а не ограничений scaffold'а: num_ctx был увеличен до 32 768 для соответствия контексту little-coder, а таймаут запроса в litellm поднят с 600 с до 1800 с, чтобы избежать обрыва долгих генераций с выгрузкой на CPU. Промпты, логика написания кода, механика повторных попыток и код парсинга правок не менялись.

Лидерборд Aider сейчас не публикует результаты для моделей меньше ~10B из-за рабочего предположения, что они не заслуживают отдельного слота. Базовый результат Инбарра на локальной квантованной модели (sub-10B Q4) оказался выше нескольких более крупных участников лидерборда. Отсюда следует наглядный вывод: малые модели исключили из оценки агентного написания кода преждевременно. См. factual-capacity-scaling и mixture-of-experts о параллельном наблюдении: бенчмарки, призванные измерять процедурные способности, перестали измерять накопленные знания. Тезис Инбарра - симметричный случай для сегмента малых моделей.

Результаты по языкам

Язык little-coder Aider Δ
Python ~53% ~18% +35.3 п. п.
Java ~52% - -
C++ (следом) 26.9% -
JavaScript (следом) - -
Go 38.5% 12.8% -
Rust 30.0% (ближе всего) +13.3 п. п.

На Python зафиксирован самый большой разрыв из-за scaffold'а (+35.3 п. п.); на Rust - самый маленький (+13.3 п. п.). Языки, где Aider сильнее всего вредит малой локальной модели, оказались теми, в которых модель в иных условиях наиболее способна.

Временные затраты

little-coder требует больше астрономического времени на задачу:

Успех Неудача Соотношение
Aider 141 с 224 с 1.6
little-coder 177 с 492 с 2.8

Структура Aider с перезаписью файлов целиком и двумя попытками быстро завершает неудачные прогоны (два вызова LLM, два запуска тестов). Агентный цикл little-coder продолжает поиск в пределах лимита в 20 шагов; на сложных сбоях он обычно тратит большую часть этого лимита. Почасовая пропускная способность всё равно в пользу little-coder (4.7 против 2.75 успешных решений в час), но больше половины астрономического времени уходит на задачи, которые в итоге решить не удаётся. Это цена получения дельты в 69 задач за счёт scaffold'а.

Оговорки Инбарра к полученным результатам

  • Переносимость на SWE-bench, реальные сценарии работы с pull request'ами или другие базовые малые модели не доказана. Результат относится конкретно к Aider Polyglot с Qwen3.5-9B.
  • Наблюдаемые показатели механизмов (частота срабатывания защиты Write, лимита thinking, использование glob/read) не являются полноценным абляционным исследованием (ablation study). Они показывают, что механизмы срабатывали, но не то, каким был бы процент успешных решений без них. Покомпонентная абляция обозначена как следующий шаг.
  • Многочасовой локальный инференс сам по себе выступает экспериментальной переменной: в отбракованных прогонах вне двух чистых подпроцесс runner'а Ollama падал и перезапускался прямо посреди бенчмарка, приводя к измеримой деградации после перезапуска. Стабильность среды инференса становится фактором эксперимента, когда сидишь за столом по 16 часов на один прогон Aider.

Связи

  • scaffold-model-fit - отдельный концепт
  • lucumr-local-models - "разрыв в доработке" (polish gap), который механизмы scaffold'а у Инбарра пытаются сократить в одном конкретном направлении
  • local-llm-16gb-vram-tests - в тестах Вячеслава используются OpenCode + похожий контракт в стиле AGENTS.md; little-coder делает следующий шаг, выстраивая структуру scaffold'а без расчёта на саморегуляцию модели
  • thinking-mode-rule-erosion - связь через лимит бюджета на рассуждения; оба тезиса сводятся к "хватит позволять модели самой решать, когда остановиться"
  • clean-code-coding-agents - структура кода важнее при работе с агентами, но здесь взгляд со стороны scaffold'а, а не кодовой базы
  • itayinbarr-blog - страница блога Инбарра