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
- translation_of
- little-coder-scaffold-model-fit
- 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 - страница блога Инбарра