Нейросеть для кода 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-проекта:

bash
## Сборка и проверка
- Стандарт: 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++ работает другое правило: первая ошибка важнее остальных, потому что остальные часто её следствие. Дайте модели:

  1. первые 30-50 строк вывода, начиная с первого error:;
  2. файл и строку, на которые указывает компилятор, с десятком строк вокруг;
  3. вашу версию стандарта и компилятора.

Если вы работаете через консольного агента, он сам запустит сборку и прочитает вывод. Если нужен собственный скрипт, вот минимальный пример на Python с OpenAI SDK:

bash
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++ автоматическое применение правок без проверки тестами опасно. Если будете превращать его в цикл, ограничьте число итераций (например, пятью) и не позволяйте ему бесконечно «чинить» одно и то же.

Санитайзеры как судья

Тесты проверяют сценарии, которые вы придумали. Санитайзеры проверяют то, что реально происходит в памяти. Рабочий порядок для задачи с изменением кода:

  1. Агент вносит правку и собирает проект.
  2. Запускаются тесты в обычной сборке.
  3. Те же тесты запускаются в сборке с address,undefined.
  4. Если санитайзер что-то нашёл, его вывод (стек и тип ошибки) идёт обратно агенту.

Отчёт санитайзера содержит стек вызовов и тип нарушения, поэтому это очень информативный вход для модели. Попросите её сначала объяснить причину и только потом предлагать правку: так проще заметить, что она «лечит симптом». И обязательно прочитайте правку сами: модель может заглушить предупреждение, а не устранить причину.

Какую модель пробовать

Мы не ранжируем модели по качеству кода, только по цене, контексту и индексу силы (Intelligence Index, Artificial Analysis). Цены на 18 октября 2026, $ за 1M токенов:

МодельВход / выходКонтекстИндекс
claude-opus-5-50.8 / 41M58
gpt-6.1-sol0.27 / 1.321M52
claude-sonnet-5-50.4 / 21M48
deepseek-v4.1-flash0.013 / 0.0381M39

Разумная схема: дешёвую модель держите для рутины (разбор ошибок, тесты), сильную подключайте для трудных мест вроде шаблонов и многопоточности. Проверьте обе на одном и том же наборе из 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.