Когда синтетические бенчмарки врут, а реальный код бьет по башке
ELO-рейтинги и HumanEval — это красиво на бумаге. Пока не попробуешь заставить модель дописать команду в существующий, живьем дышащий проект. Теория разбивается о практику. Каждый раз.
Я взял OpenCode Telegram Bot — opensource бота на grammY для управления задачами через Телеграм. Проект на TypeScript, средняя сложность, пара десятков файлов. Задача: добавить команду /rename, которая меняет название существующей задачи. Звучит просто. На деле — нужно понять структуру бота, найти правильное место для хендлера, работать с базой данных, не сломать типы и существующую логику.
Именно такие задачи показывают, где модель реально понимает код, а где просто генерирует синтаксически правильный мусор.
Почему именно /rename? Это идеальный микс: нужно прочитать контекст (как уже работают команды /add, /list), понять схему БД, правильно вписать новую функцию в архитектуру. Не просто написать функцию «в вакууме».
Методология: как мы ломали модели (и свои нервы)
Никаких специально подготовленных промптов. Никаких подсказок по архитектуре. Только:
- Исходный код проекта (репозиторий на GitHub).
- Промпт: «Добавь команду /rename в этого Telegram бота. Команда должна принимать два аргумента: ID задачи и новое название. Нужно обновить запись в базе данных и подтвердить изменение пользователю. Используй существующую структуру проекта.»
- Одна попытка. Без уточнений и доработок.
- Оценка по четырем критериям: Работоспособность (запускается ли код), Интеграция (логично ли вписан в проект), Качество TypeScript (типы, ошибки, null safety), Безопасность (валидация input, обработка ошибок).
Все тесты проводились 12-14 марта 2026 года. Модели запускались локально (где возможно) или через официальные API с одинаковыми параметрами (temperature=0.1, max_tokens=4000).
Участники боя: кто вышел на ринг в 2026 году
Отобрал 8 моделей, которые либо доминируют в рейтингах, либо активно обсуждаются в коммьюнити. Все — самые свежие версии на момент теста.
| Модель | Версия (на 15.03.2026) | Тип | Контекст |
|---|---|---|---|
| DeepSeek Coder | 3.2 Instruct | Локальная / API | 128K |
| Qwen3.5 Coder | 72B Instruct | Локальная | 32K |
| GLM 4 | 4.7 Coder | API | 128K |
| Claude Code | Claude 3.7 Sonnet Coder | Облачный API | 200K |
| MiniMax | M2.1 Coder Specialized | API | 128K |
| Devstral | Small 2 (обновление 2026) | Локальная | 64K |
| Qwen3 Coder Next | 34B (январский релиз) | Локальная | 64K |
| IQuest-Coder | V1-40B-Instruct (финальный патч) | Локальная | 32K |
Да, Claude Code остался в облаке, но его до сих пор используют. Для локальных альтернатив смотрел на новые инструменты 2026 года. GLM 4.7 и MiniMax-M2.1 — прямые конкуренты из Азии, про которых много писали в прошлом году.
Результаты: кто прошел, а кто упал лицом в TypeScript компилятор
| Модель | Работоспособность | Интеграция | Качество TS | Безопасность | Итог |
|---|---|---|---|---|---|
| DeepSeek Coder 3.2 | ✅ С первого раза | Нашла правильный файл bot.ts, добавила хендлер рядом с другими командами | Безупречные типы, использовала существующие интерфейсы | Валидация ID, try-catch на запрос к БД | 9.5/10 |
| Qwen3.5 Coder 72B | ✅ После исправления импорта | Создала отдельный файл rename.ts, что нарушило структуру | Не импортировала тип Task, пришлось править | Нет проверки на существование задачи | 7/10 |
| GLM 4.7 Coder | ⚠️ Ошибка рантайма | Правильное место, но использовала устаревший метод grammY | Использовала any для аргументов команды | Инъекция через название (конкатенация строк в SQL) | 5/10 |
| Claude Code 3.7 | ✅ Идеально | Лучшая интеграция — даже добавила логгирование как в других хендлерах | Типы perfect, создала вспомогательную функцию validateTaskId | Полная валидация, escaping названия | 9.8/10 |
| MiniMax M2.1 | ❌ Не скомпилировалось | Переписала половину bot.ts, сломала существующие команды | Синтаксические ошибки, несовместимые типы | — | 3/10 |
| Devstral Small 2 | ✅ Стабильно | Код рабочий, но стиль отличается от проекта | Использовала unknown вместо конкретных типов | Базовая обработка ошибок | 7.5/10 |
| Qwen3 Coder Next | ✅ Быстро и правильно | Хорошо вписала код, но пропустила middleware авторизации | Отличные типы, async/await корректно | Не проверила права пользователя на задачу | 8/10 |
| IQuest-Coder 40B | ⚠️ Работает, но с багами | Добавила команду, но хендлер срабатывает на любое сообщение | Типы через as assertion, что опасно | Нет валидации вообще | 4.5/10 |
Разбор полетов: как модели облажались по-разному
1 Проблема с контекстом: GLM 4.7 и устаревший grammY
GLM 4.7 Coder использовала метод bot.command('rename', ...) который в grammY 2026 года уже deprecated. Вместо него нужно использовать bot.on('message:text', ...) с фильтрацией. Модель не знала о последних изменениях фреймворка. Это частая болезнь моделей, которые обучаются на датасетах полугодовой давности.
Вывод: всегда проверяйте, на каких данных обучена модель. Если в промпте не указать версию фреймворка, получите устаревший код. Лучшие модели (как DeepSeek 3.2) сами проверяют импорты в проекте и адаптируются.
2 Типобезопасность как индикатор интеллекта
MiniMax M2.1 и IQuest-Coder просто проигнорировали систему типов проекта. Первая использовала const id = ctx.match[1] без преобразования в число (хотя в БД ID — integer). Вторая написала const task = await db.get(taskId) as Task — опасный as, который подавляет проверку TypeScript.
Claude Code и DeepSeek Coder сделали правильно: const id = parseInt(ctx.match[1], 10); if (isNaN(id)) { return ctx.reply('Invalid ID'); }
3 Интеграция vs. Изоляция
Qwen3.5 Coder 72B создала новый файл commands/rename.ts. В теории — модульность. На практике — в проекте все команды были в одном файле bot.ts. Модель не поняла конвенцию проекта. Devstral Small 2 и Qwen3 Coder Next справились лучше, но пропустили middleware (проверка прав). Только Claude Code заметил, что другие команды используют authMiddleware, и добавил его.
Итоговый рейтинг и что брать в работу
- Claude Code 3.7 — безоговорочный лидер. Понимание контекста, безопасность, качество кода. Платишь за облако — получаешь идеальный код. Если бюджет есть, это выбор.
- DeepSeek Coder 3.2 — лучшая локальная модель. Почти догнала Claude, стоит дешевле, работает оффлайн. Для тех, кто ценит стабильность больше скорости.
- Qwen3 Coder Next — сюрприз года. Быстрая, умная, но иногда пропускает детали. Хороший баланс скорости и качества.
- Devstral Small 2 — надежный работяга. Не блещет, но и не подводит. Как универсальный конфиг — всегда пригодится.
Остальные — с оговорками. GLM 4.7 и MiniMax M2.1, несмотря на хайп, показали слабое понимание реальных проектов. IQuest-Coder, как и писалось ранее, действительно превратился в цифровую пыль.
Что делать прямо сейчас? Если нужен продакшен — бери DeepSeek Coder 3.2. Если экспериментируешь с агентами — смотри на Qwen3 Coder Next. И никогда не доверяй моделям безопасность кода на 100%. Проверяй вручную. Всегда.