Локальный AI coding agent: Qwen, DeepSeek и свой код

Локальная модель не становится умной только потому, что вентилятор ноутбука взлетел. Но она даёт контроль над кодом, стоимостью и доступностью сервиса. Для российского проекта это иногда важнее последнего процента в чужом benchmark — особенно когда облачный API сегодня работает, а завтра просит другую карту и другой регион.

Автор — Дмитрий Тыльный · опыт Senior DevOps · 7 сентября 2026 · 12 мин

Коротко. Для первого стенда возьмите Ollama, совместимый coding model и небольшой репозиторий. Подключите клиент через локальный OpenAI-compatible endpoint, ограничьте разрешённые каталоги и команды, работайте маленькими diff. Модель выбирайте не по рекламе, а по трём задачам из своего кода, задержке, памяти и числу исправлений после неё.

Зачем вообще локально

  • Приватность. Код и контекст не обязаны уходить внешнему провайдеру.
  • Предсказуемость. Нет оплаты за каждый повтор и зависимости от лимита аккаунта.
  • Доступность. Стенд продолжает работать без внешнего API и региональных сюрпризов.
  • Контроль. Вы выбираете модель, runtime, логирование и срок хранения.

Обратная сторона тоже честная: железо стоит денег, большие контексты едят память, локальная модель может быть медленнее и слабее на сложной архитектуре. «Данные не уходят в облако» верно только если сам клиент, плагины и телеметрия тоже не отправляют их наружу.

Qwen, DeepSeek или что-то ещё

Qwen и DeepSeek — семейства моделей, а не одна кнопка. Внутри есть размеры, версии, coding-варианты и разные лицензии. Конкретный тег в Ollama и требования к памяти меняются, поэтому перед установкой проверяйте карточку выбранной модели, а не старый скриншот из статьи.

Для агента важны не только ответы на алгоритмические задачи. Он должен уверенно применять patch, держать инструкции, читать несколько файлов, вызывать инструменты и останавливаться после проверки. Маленькая быстрая модель полезнее огромной, если огромная выдаёт один ответ пять минут и вы перестаёте ей пользоваться.

Железо без магических цифр

Грубое правило: веса модели должны поместиться в доступную RAM или VRAM вместе с KV cache и runtime. Квантизация уменьшает память, но может снизить качество. Рост контекста тоже требует памяти, даже если размер модели не изменился.

  • не покупайте GPU до теста нужной модели на реальной задаче;
  • начните с меньшей квантизованной версии;
  • замерьте tokens per second и время до первого полезного diff;
  • следите за swap: формально модель запустилась, практически работать невозможно;
  • для команды сравните одну мощную машину с сервером vLLM и несколько локальных Ollama.

Первый стенд: Ollama и Qwen Code

Официальный сценарий Qwen Code поддерживает локальный OpenAI-compatible endpoint. Минимальный путь выглядит так:

ollama pull qwen3:32b
ollama serve

Имя и размер модели — пример. Если машина не тянет 32B, выберите доступный coding-вариант и укажите его точное имя в конфигурации. Клиенту нужен локальный endpoint:

{
  "modelProviders": {
    "local": {
      "baseUrl": "http://127.0.0.1:11434/v1",
      "apiKey": "ollama",
      "models": [{
        "id": "qwen3:32b",
        "name": "Local Qwen",
        "contextWindowSize": 131072
      }]
    }
  }
}

Не выставляйте 11434 наружу без авторизации и сетевой границы. Локальный API часто доверяет клиенту и не рассчитан на весь интернет.

Когда нужен vLLM

Для общей GPU-машины и нескольких пользователей удобнее отдельный model server. Пример запуска совместимой модели:

vllm serve Qwen/Qwen3-32B \
  --host 127.0.0.1 \
  --port 8000

Здесь тоже сначала проверяйте идентификатор, лицензию и требования выбранной версии. Перед reverse proxy добавьте аутентификацию, лимиты, TLS и метрики. Открытый endpoint быстро становится бесплатной видеокартой для всего интернета.

Большое окно не равно хорошему контексту

Свалить 100 тысяч токенов из всего репозитория — простой способ сделать ответ дороже и хуже. Сначала дайте карту проекта, инструкции и конкретные файлы. Поиск должен находить кандидатов, а не отправлять модели node_modules, бинарники, логи и secrets.

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

Рабочий цикл

  1. Чистый git status и отдельная ветка.
  2. Одна задача с проверяемым результатом.
  3. План и список файлов до правок.
  4. Diff не больше нескольких связанных файлов.
  5. Тест, линтер и сборка обычными инструментами.
  6. Ручное чтение каждой строки.
  7. Commit только после объяснения решения своими словами.

Spec-driven и проверка кода разобраны в статье про AI coding agents. Локальность не отменяет этот процесс.

Песочница важнее бренда модели

Не запускайте агента под пользователем с production SSH-ключами, kubeconfig и доступом ко всему домашнему каталогу. Рабочая директория, allowlist команд, ограниченная сеть и одноразовый контейнер полезнее обещания модели «быть осторожной».

Инструменты MCP подключайте с раздельными правами и короткими токенами. Полная модель угроз есть в материале про безопасность MCP.

Свой benchmark за вечер

Возьмите три закрытые задачи из собственного репозитория:

  1. найти и объяснить существующую ошибку без изменений;
  2. добавить маленькую функцию и тест;
  3. провести рефакторинг в трёх файлах без изменения поведения.

Для каждой модели запишите время, память, число tool calls, размер diff, прошедшие тесты, сколько ошибок исправили руками и можете ли вы защитить решение. Повторите по три раза: один удачный ответ ничего не доказывает.

Победитель — не тот, кто написал больше кода, а тот, после кого осталось меньше неизвестного и меньше ручного ремонта.

Проект для портфолио

Поднимите Ollama или vLLM, подключите coding client, ограничьте ему тестовый репозиторий и соберите dashboard: latency, tokens, память, успешность тестов и доля принятых diff. Сравните две модели на одинаковых задачах и опишите вывод без фанатизма.

Добавьте тест утечки: положите ложный токен в запрещённый файл и убедитесь, что агент его не читает и не пишет в лог. Это уже DevOps-проект вокруг AI, а не очередное «спросил модель сделать TODO».

Частые вопросы

Можно работать только на CPU?
Да, с подходящей моделью и терпимой задержкой. Решает не факт запуска, а скорость вашего реального цикла.

DeepSeek хуже или лучше Qwen?
Без конкретных версий, размера, квантизации и ваших задач вопрос бессмысленен. Сравните на своём репозитории.

Локальная модель гарантирует приватность?
Нет. Проверьте клиент, плагины, телеметрию, сетевой egress, логи и доступ других пользователей к серверу.

Benchmark на своём коде

Чужая таблица не знает вашу архитектуру, железо и терпение.

Настроить рабочий цикл