Нейросеть для кода C++: сборка, ошибки компиляции и санитайзеры
C++ прощает модели многое на этапе компиляции и наказывает позже. Разбираем, как построить цикл «сборка, тесты, санитайзеры» и сколько он стоит на разных моделях.
5 мин · · разработка · агенты
Если вы подбираете нейросеть для кода C++, главная особенность языка в том, что «компилируется» ещё не значит «работает». Модель легко напишет код, который собирается без замечаний и при этом содержит неопределённое поведение, гонку данных или висячую ссылку. Поэтому ценность ИИ-агента в C++ определяется не столько выбором модели, сколько циклом проверки вокруг неё: сборка, тесты, санитайзеры. Ниже: как этот цикл организовать, как скармливать агенту ошибки компиляции и сколько это стоит.
Что нейросеть делает в C++ хорошо и где нужна проверка
Типичные задачи, где агент экономит время: каркас класса и операторов, преобразование цикла в алгоритмы STL, перенос кода на новый стандарт, написание unit-тестов, разбор длинного сообщения компилятора о шаблонах, рутинная правка CMake. Мы не утверждаем, что какая-то модель лучше пишет C++: это нужно проверить на вашем коде.
Где ошибки обходятся дороже всего и поэтому нужна машинная проверка:
- время жизни объектов (ссылки на временные значения, итераторы после изменения контейнера);
- многопоточность и порядок доступа к памяти;
- знаковое переполнение, выход за границы массива, использование неинициализированных данных;
- несовместимость с вашим стандартом (
C++17противC++20) и вашим компилятором.
Дайте агенту команды сборки
Агент без команд сборки угадывает. Запишите их в файл инструкций проекта: CLAUDE.md для Claude Code или AGENTS.md для Codex (подробнее: как писать CLAUDE.md, AGENTS.md для Codex). Пример блока для CMake-проекта:
## Сборка и проверка
- Стандарт: C++20, компилятор clang или gcc, указан в CMakeLists.txt. Не меняй стандарт.
- Конфигурация: `cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug`
- Сборка: `cmake --build build -j`
- Тесты: `ctest --test-dir build --output-on-failure`
- Санитайзеры: `cmake -S . -B build-asan -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer"`, затем сборка и ctest в `build-asan`
- Не добавляй зависимости и не правь CMakeLists.txt без вопроса.
- После каждой правки: сборка без предупреждений, затем тесты.Флаги -fsanitize=address,undefined понимают gcc и clang; для Windows и MSVC набор опций другой, сверьтесь с документацией вашего компилятора. Санитайзер потоков (-fsanitize=thread) нельзя включать вместе с адресным, его гоняют отдельной сборкой.
Включите предупреждения (-Wall -Wextra, при желании -Werror на CI): они ловят часть ошибок раньше любых тестов и дают агенту точный текст, от которого можно оттолкнуться. Полезен и clang-tidy, если он у вас уже настроен.
Как скармливать агенту ошибки компиляции
Частая ошибка: вставить в чат весь вывод сборки на тысячу строк. Для C++ работает другое правило: первая ошибка важнее остальных, потому что остальные часто её следствие. Дайте модели:
- первые 30-50 строк вывода, начиная с первого
error:; - файл и строку, на которые указывает компилятор, с десятком строк вокруг;
- вашу версию стандарта и компилятора.
Если вы работаете через консольного агента, он сам запустит сборку и прочитает вывод. Если нужен собственный скрипт, вот минимальный пример на Python с OpenAI SDK:
import subprocess
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")
def build() -> str:
p = subprocess.run(
["cmake", "--build", "build", "-j"],
capture_output=True, text=True,
)
return "" if p.returncode == 0 else (p.stdout + p.stderr)
log = build()
if log:Этот скрипт только объясняет, а не правит файлы: в C++ автоматическое применение правок без проверки тестами опасно. Если будете превращать его в цикл, ограничьте число итераций (например, пятью) и не позволяйте ему бесконечно «чинить» одно и то же.
Санитайзеры как судья
Тесты проверяют сценарии, которые вы придумали. Санитайзеры проверяют то, что реально происходит в памяти. Рабочий порядок для задачи с изменением кода:
- Агент вносит правку и собирает проект.
- Запускаются тесты в обычной сборке.
- Те же тесты запускаются в сборке с
address,undefined. - Если санитайзер что-то нашёл, его вывод (стек и тип ошибки) идёт обратно агенту.
Отчёт санитайзера содержит стек вызовов и тип нарушения, поэтому это очень информативный вход для модели. Попросите её сначала объяснить причину и только потом предлагать правку: так проще заметить, что она «лечит симптом». И обязательно прочитайте правку сами: модель может заглушить предупреждение, а не устранить причину.
Какую модель пробовать
Мы не ранжируем модели по качеству кода, только по цене, контексту и индексу силы (Intelligence Index, Artificial Analysis). Цены на 18 октября 2026, $ за 1M токенов:
| Модель | Вход / выход | Контекст | Индекс |
|---|---|---|---|
claude-opus-5-5 | 0.8 / 4 | 1M | 58 |
gpt-6.1-sol | 0.27 / 1.32 | 1M | 52 |
claude-sonnet-5-5 | 0.4 / 2 | 1M | 48 |
deepseek-v4.1-flash | 0.013 / 0.038 | 1M | 39 |
Разумная схема: дешёвую модель держите для рутины (разбор ошибок, тесты), сильную подключайте для трудных мест вроде шаблонов и многопоточности. Проверьте обе на одном и том же наборе из 5-10 ваших задач и сравните не только результат, но и число итераций. Контекст в 1M токенов у C++ тоже пригодится: заголовки раздувают вход.
Пример расчёта: исправление ошибок сборки
Допущение: 15 итераций «сборка, правка», на каждую 20 000 токенов входа (файлы и лог) и 1 000 токенов выхода. Итого вход 15 × 20 000 = 300 000, выход 15 × 1 000 = 15 000.
claude-sonnet-5-5: 0.3 × $0.4 + 0.015 × $2 = $0.12 + $0.03 = $0.15.gpt-6.1-sol: 0.3 × $0.27 + 0.015 × $1.32 = $0.081 + $0.0198 = $0.1008.deepseek-v4.1-flash: 0.3 × $0.013 + 0.015 × $0.038 = $0.0039 + $0.00057 = $0.00447.
Это без учёта кэша. В агентах на Anthropic-формате (Claude Code) повторяющийся префикс читается из кэша дешевле, у GPT-моделей чтение кэша видно в обоих форматах; подробности и расчёт сессии — в статье сколько стоит агент с кэшем. Свои числа смотрите в разделе «Использование» кабинета. Цены меняются — актуальные отдаёт GET https://api.zukko.pro/v1/models.
Как подключить
Для Claude Code укажите ANTHROPIC_BASE_URL=https://api.zukko.pro (без /v1) и ANTHROPIC_AUTH_TOKEN с ключом fetch_... по инструкции. Для скриптов и OpenAI-клиентов используйте адрес https://api.zukko.pro/v1. Ключ создаётся в кабинете; поставьте на него дневной лимит в долларах, чтобы цикл «чини ошибку» не ушёл в минус.
Частые вопросы
Может ли нейросеть заменить отладчик в C++?
Нет. Она помогает прочитать вывод отладчика или санитайзера и предложить гипотезу, но проверять гипотезу нужно запуском и тестами.
Что делать с огромными ошибками шаблонов?
Давайте первую ошибку и 30-50 строк вокруг, а не весь вывод. Просите объяснить цепочку инстанцирования простыми словами и указать строку вашего кода, где всё началось.
Подойдёт ли дешёвая модель для C++?
Для рутины (документация, тесты, разбор простых ошибок) может подойти, но это нужно проверять на вашем коде. Для тонких вопросов с временем жизни и потоками сравните её с более сильной моделью на реальных задачах.
Нужно ли агенту доступ ко всему репозиторию?
Нужен доступ к файлам задачи и командам сборки. Ограничьте правила в CLAUDE.md или AGENTS.md: не менять зависимости и CMake без вопроса.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Промпт-инъекция: что это и как защитить бота и агентаОбъясняем, как работает промпт-инъекция через пользовательский ввод и чужие документы, и какие меры снижают ущерб: изоляция данных, права инструментов, лимиты ключа.
- Claude Code YOLO: режимы разрешений и работа без подтвержденийОтдельного режима YOLO в Claude Code нет, зато есть шесть режимов разрешений и гибкие правила. Разбираем, как перестать нажимать «Да» и не лишиться файлов.
- Claude Code: чек-лист лучших практик для ежедневной работыПривычки, которые делают работу с Claude Code предсказуемой: короткий CLAUDE.md, план перед правками, мелкие задачи, проверка результата и контроль расхода.
- MCP-сервер на Java: минимальный пример с одним инструментомПишем минимальный MCP-сервер на Java с одним инструментом, регистрируем его в Claude Code и учимся находить причину, если агент его не видит.