Недавно я задался вопросом: можно ли организовать полноценный agent dev loop (то есть, цикл разработки агентов), используя только локальные модели? Идея заманчивая — гонять агента по задачам бесконечно, не оглядываясь на счета от OpenAI или Anthropic и не переживая за утечку кода.

Чтобы проверить это, я выделил кластер и столкнул лбами три тяжеловеса из мира open source. Спойлер: архитектурно они все — Senior‑разработчики, но когда дело доходит до docker-compose up, начинаются проблемы.

Что и на чём тестировали

Для тестов я выбрал три модели с Hugging Face (без квантования, в полных весах):

  1. Qwen3.5–122B‑A10B — надежда на «убийцу GPT-4» от Alibaba.

  2. Qwen3.5–27B — младшая модель, чтобы понять, есть ли смысл в 100B+ параметров.

  3. Gpt‑oss-120b — специализированный «кодер» от OpenAI.

Инференс — vLLM внутри Kubernetes. Скорость работы была вполне комфортной, хотя итерации затягивались из‑за попыток моделей исправить собственные ошибки.

Почему стандартные бенчмарки нам не подошли?

Когда речь заходит об оценке кодинговых способностей LLM, все обычно смотрят на HumanEval или MBPP. Это классика, но у них есть огромная проблема: они проверяют «алгоритмический интеллект» в вакууме. Модель может идеально написать «быструю сортировку» или решить задачку с LeetCode, но при этом полностью завалить проектирование реального микросервиса.

Вот, что нас не устраивало в существующих решениях:

  1. Snippet‑level vs System‑level. Большинство бенчмарков (включая популярный BigCode Bench) тестируют написание одной изолированной функции. В реальности же нам нужно, чтобы модель понимала структуру проекта, умела в Dependency Injection и видела связи между слоями.

  2. Проблема заучивания (Data Contamination). Популярные задачи из бенчмарков уже давно попали в обучающие выборки моделей. Мы же хотели проверить работу на «свежем» ТЗ, которое модель не видела в интернете.

  3. Игнорирование архитектуры. Существует SWE‑bench, который проверяет умение исправлять баги в реальных репозиториях. Это круто, но это тест на «сообразительного джуна‑ремонтника». Мы же хотели проверить роль «ведущего инженера» (Architect), который проектирует систему с нуля (Greenfield).

  4. Отсутствие «эффекта домино». В обычных тестах каждая задача независима. В нашем Progressive Benchmark ошибка на уровне L1 (неправильно настроенный Alembic) гарантированно «взрывала» проект на уровне L3. Это проверка на долгосрочную консистентность решений, которую почти никто не замеряет.

Ближе всего к нашей задаче стоит Aider Leaderboard, но он фокусируется на редактировании существующего кода. Мы же пошли дальше и создали замкнутый цикл: локальный инференс → Greenfield‑задача → автоматическое ревью «строгим судьёй» (Sonnet 4.6).

Методология «Greenfield в пять шагов»

Чтобы тест был максимально приближен к реальности, я разбил процесс создания сервиса на пять этапов. В индустрии такие задачи принято называть User Stories (или просто «стори») — это описание функциональности с точки зрения ценности для проекта.

Для оценки прогресса я ввел внутреннюю шкалу сложности — Levels of Complexity (L1–L3). Это позволило мне понять, на каком именно этапе «интеллект» модели начинает пасовать перед инженерными реалиями:

  • L1 (Foundation): Скелет и окружение.
    Это «нулевой цикл» строительства. Модель должна развернуть структуру папок, настроить зависимости и убедиться, что приложение просто стартует. Тест на знание инструментов (FastAPI, Alembic, Docker).

  • L2 (Core & Architecture): Сердце и правила.
    Здесь мы проверяем «чистоту» мышления. Модель должна спроектировать бизнес‑логику и правильно связать компоненты через Dependency Injection (DI). Здесь нет внешних баз данных, только чистые архитектурные паттерны.

  • L3 (Infrastructure & Runtime): Выход в реальный мир.
    Самый сложный этап. Приложению нужно научиться общаться с внешними системами — PostgreSQL и RabbitMQ. Здесь проверяется умение работать с асинхронностью, транзакциями и сетевыми задержками. Именно на L3 мы обычно прощаемся с надеждами на «полную автоматизацию».

Каждая следующая стори строилась на коде предыдущей. Если модель допускала архитектурную ошибку на L1, она неизбежно «стреляла себе в ногу» на L3.

Я не стал просить модели написать «сортировку пузырьком». Вместо этого я предложил им реализовать микросервис с нуля, проходя через 5 уровней сложности:

  • L1-01 (Skeleton): База на FastAPI, Alembic, PostgreSQL и структура папок по DDD.

  • L2-01 (DI & Use Cases): Внедрение зависимостей, репозитории через Protocol.

  • L2-02 (Domain Logic): Проектирование агрегата с инвариантами и иммутабельными Value Objects.

  • L3-01 (Persistence): Настоящий маппинг Domain ↔ ORM и транзакции.

  • L3-02 (Async Consumer): Интеграция с RabbitMQ (aio‑pika) с обработкой ретраев и идемпотентностью.

Правила игры были описаны в файле AGENTS.md. Агенту просто скармливали стори и просили: "Please implement the given story".

Кто судил?

Чтобы исключить «вкусовщину», я использовал Reviewer Agent на базе Claude Sonnet 4.6. У него был строгий промпт и 10-балльная шкала по трем метрикам:

  1. IF (Instruction Following): Соблюдение правил из AGENTS.md.

  2. CQ (Code Quality): Корректность архитектуры и выполнение требований стори.

  3. CON (Conciseness): Отсутствие лишнего кода и овер‑инжиниринга.

Результаты лидерборда

Модель

Итоговый балл

Вердикт ревьюера

Qwen-122B‑A10B

41/50

«Архитектор» с тягой к самодеятельности

Qwen-27B

33/50

Хороший теоретик, плохой практик

GPT‑OSS-120B

32/50

Хаотичный Senior под дедлайном

Более подробное распределение баллов можно увидеть на рисунке ниже:

Анатомия провалов: почему код не поехал

С первыми этапами все участники справились сравнительно легко. Самое интересное началось на уровнях L3, где нужно было связать всё воедино. Вот типичные подводные камни, о которые спотыкались модели.

1. Галлюцинации в инфраструктуре (GPT‑OSS-120B)

Модель столкнулась с ошибкой mypy при работе с Pydantic. Вместо того чтобы поправить аннотации, она решила... написать свой Pydantic. В корне проекта появился пакет pydantic/, где BaseModel была пустым датаклассом. Линтер успокоился, но рантайм, конечно, упал с TypeError на первой же попытке инициализировать юзера.

Кроме того, модель проигнорировала требование с PostgreSQL и настроила Alembic на SQLite. Почему? Потому что так проще пройти чеклист.

2. Асинхронные ловушки (Qwen-122B и 27B)

Работа с RabbitMQ (L3-02) также стала камнем преткновения.

  • Qwen-122B выдала отличную структуру, но допустила AttributeError — попыталась обратиться к свойству .queue у объекта канала, которого там нет.

  • Qwen-27B просто забыла про await при подтверждении сообщений (ack/nack). В асинхронном коде Python это фатально: корутина создается, но не выполняется, и сообщения копятся в очереди вечно.

3. Архитектурный карго-культ

Все модели отлично рисуют слои. Они знают, что domain не должен импортировать infrastructure. Но когда дело доходит до сшивки слоев через DI‑контейнер, они часто пасуют. Например, Qwen-27B создала репозиторий, который принимал сессию БД в __init__, но в конфиге DI она забыла её передать. Код выглядит красиво, но падает при первом же вызове эндпоинта.

Выводы: можно ли это использовать?

Мой главный инсайт по итогам эксперимента: локальные LLM знают паттерны, но не знают, что именно «ломается в 2 часа ночи».

В Greenfield‑проектах они идеальны как «генераторы скелетов». Сэкономить 2–3 часа на написании бойлерплейта, папок и базовых моделей — реально. Для agentic dev loop же полагаться на них целиком пока рано. Без внешнего «надсмотрщика» (вроде Sonnet 4.6), который будет бить их по рукам за ошибки в рантайме, они быстро превращают проект в нагромождение красивого, но нерабочего кода.

Самой ценной частью эксперимента оказались не сами модели, а идея с Judge LLM. Использование топовой модели (Sonnet 4.6 на момент написания этой статьи) в качестве автоматического ревьюера позволило выловить критические баги (вроде shadowing Pydantic), которые человеческий глаз может пропустить при беглом просмотре PR.

Что дальше?

Если вы планируете внедрять локальные LLM в разработку, мой совет: не тратьте время на написание идеального системного промпта для кодинга. Лучше инвестируйте в Reviewer Agent.

Если вы не ревьюите код от AI — вы не программируете, вы играете в «русскую рулетку».

Комментарии (9)


  1. gerbert_MX
    27.04.2026 09:56

    почему нельзя сразу в начале статьи писать что все это нейрослоп?

    лучше бы просто приложили результаты исследования файлами с кратким очерком о чем они - натравить нейронку для пояснения могу и я сам


  1. house2008
    27.04.2026 09:56

    Это всё прекрасно конечно про локальные, так а облачные модели справились ?


    1. Zailox
      27.04.2026 09:56

      Вряд ли тот же Claude забудет про await или обращение к БД


      1. house2008
        27.04.2026 09:56

        Ну конечно) Я вчера попросил gpt 5.5 xhigh (наминуточку самый топ) создать файл для gitlab-ci.yml с одной просто джобой (10 строк), я подумал что это изи же и поэтому даже не смотрел что внутри сгенерилось так как где тут можно ошибиться не ясно, запушил в репо, открываю gitlab и мне ошибка "invallid syntax" )


  1. nikulin_krd
    27.04.2026 09:56

    Очень «интересный» тест…. Проверять одни модели другой моделью, причем не самой мощной….


    1. Cogitatus
      27.04.2026 09:56

      Похоже на то как команда укуренных разрабов проверяют друг-друга.

      Нейросетям дали подобие внимания, но пока не дали намека на подобие критичного мышления.

      Промт это пока тоже про внимание, даже если там написано что-то другое.


  1. GeorgeBobrov
    27.04.2026 09:56

    Сейчас, в апреле 2026 года, эта статья имеет околонулевую ценность. К сожалению - для статьи, и к счастью - для нас. Сейчас вышли потрясающие новые открытые модели Gemma 4 и Qwen3.6, и они на голову лучше тех моделей, которые тестируются в статье.

    Что касается GPT-OSS-120b, так она вышла вообще в августе 2025г - это больше, чем полгода назад. Темп прогресса в LLM сейчас такой, что пол-года - это уже небольшая эпоха. Сейчас LLM с ~30 миллиардами параметров обходят прошлогодние, у которых было больше 100.

    Вангую, что скоро OpenAI выпустит свой ответ Джемме и последнему Квену - вот тогда можно будет повторить подобное сравнение.


    1. thethee
      27.04.2026 09:56

      [del]

      Не дочитал сначала, написал фигню, удалил


    1. diflux
      27.04.2026 09:56

      Что могу сказать: я второй месяц собираю автономного агента на локальных LLM, в которого можно закинуть идею, а он сам бы её исследовал, расписал, согласовал, разбил на задачи и реализовал. На текущий момент Qwen 3.6-27b для агентских задач — самая продвинутая из доступных для моей 3090Ti локально. Но это всё ещё далеко от качества облачных решений типа Composer 2.0.

      Хочу дополнить резюме автора своим наблюдением: одного Reviewer Agent недостаточно.

      Без жесткой архитектуры это превращается в бесконечный цикл «отклонение → переделка → отклонение», который никогда не закончится, пока не иссякнет контекст или терпение.

      В базе нужна действительно большая модель (уровня Kimi-k2,6), способная удерживать весь контекст проекта, плюс обязательное дообучение (LoRA) под специфические инструменты среды.

      Нужен не просто Reviewer, а комплексная система оркестрации, включающая:

      1. Детерминированный роутинг сценариев: Четкое разделение на роли (Архитектор, Инженер, Тестировщик, Дебаггер и тд), где каждая роль имеет свои права доступа к инструментам и лимиты итераций.

      2. Верификатор как внешний арбитр: Механизм, который не доверяет словам модели, а самостоятельно запускает тесты/линтеры и принимает решение о статусе задачи (done/blocked) только на основе объективных доказательств (DoD).

      3. Safety Kernel и Loop Guards: Жесткие ограничители, которые прерывают цикл после N неудачных попыток и автоматически эскалируют задачу на человека или меняют стратегию (например, переход от «попытки исправить» к «перепланированию»).

      4. Память проекта в виде артефактов: Хранение контекста не в чате, а в версионируемых файлах, чтобы агент мог обращаться к истории решений, а не галлюцинировать заново.

      5. Стратегии сжатия контекста: Автоматическое архивирование старых частей диалога в краткие резюме для освобождения места под текущую работу без потери смысла.

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

      7. Сквозная индексация: Единое промежуточное представление и граф зависимостей, связывающие код, тесты, требования и правила в единую сеть. Это позволяет агенту видеть влияние изменений (если я поменяю эту функцию, какие тесты и модули затронуты?) и поддерживать трассируемость от бизнес-цели до конкретной строки кода.

      8. Управление блокировками и конкурентным доступом: Механизм блокировки файлов и ресурсов, предотвращающий конфликты записи при параллельном выполнении задач разными ролями.

      9. Бюджетирование и лимиты ресурсов: Контроль расхода токенов, времени GPU и стоимости операций в реальном времени с автоматической остановкой при превышении лимитов.

      10. Мета-тестирование поведения агента: Набор адверсарных тестов специально для проверки устойчивости самой системы оркестрации к сбоям и галлюцинациям.

      11. Объяснимость решений: Визуализация цепочки рассуждений и причин принятия решений прямо в UI (почему агент выбрал именно этот файл?).

      12. Реакция на внешние события: Возможность автоматически создавать задачи в при внешних триггерах (падение CI, пуш в репозиторий).

      13. Версионирование промптов и конфигураций: Хранение версий системных промптов и правил ролей в Git для возможности отката поведения агента при деградации качества.

      14. Ну и там много чего еще...