Локальный AI coding agent: Qwen, DeepSeek и свой код
Локальная модель не становится умной только потому, что вентилятор ноутбука взлетел. Но она даёт контроль над кодом, стоимостью и доступностью сервиса. Для российского проекта это иногда важнее последнего процента в чужом benchmark — особенно когда облачный API сегодня работает, а завтра просит другую карту и другой регион.
Коротко. Для первого стенда возьмите 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 редко исправляет отсутствие навигации.
Рабочий цикл
- Чистый git status и отдельная ветка.
- Одна задача с проверяемым результатом.
- План и список файлов до правок.
- Diff не больше нескольких связанных файлов.
- Тест, линтер и сборка обычными инструментами.
- Ручное чтение каждой строки.
- Commit только после объяснения решения своими словами.
Spec-driven и проверка кода разобраны в статье про AI coding agents. Локальность не отменяет этот процесс.
Песочница важнее бренда модели
Не запускайте агента под пользователем с production SSH-ключами, kubeconfig и доступом ко всему домашнему каталогу. Рабочая директория, allowlist команд, ограниченная сеть и одноразовый контейнер полезнее обещания модели «быть осторожной».
Инструменты MCP подключайте с раздельными правами и короткими токенами. Полная модель угроз есть в материале про безопасность MCP.
Свой benchmark за вечер
Возьмите три закрытые задачи из собственного репозитория:
- найти и объяснить существующую ошибку без изменений;
- добавить маленькую функцию и тест;
- провести рефакторинг в трёх файлах без изменения поведения.
Для каждой модели запишите время, память, число tool calls, размер diff, прошедшие тесты, сколько ошибок исправили руками и можете ли вы защитить решение. Повторите по три раза: один удачный ответ ничего не доказывает.
Победитель — не тот, кто написал больше кода, а тот, после кого осталось меньше неизвестного и меньше ручного ремонта.
Проект для портфолио
Поднимите Ollama или vLLM, подключите coding client, ограничьте ему тестовый репозиторий и соберите dashboard: latency, tokens, память, успешность тестов и доля принятых diff. Сравните две модели на одинаковых задачах и опишите вывод без фанатизма.
Добавьте тест утечки: положите ложный токен в запрещённый файл и убедитесь, что агент его не читает и не пишет в лог. Это уже DevOps-проект вокруг AI, а не очередное «спросил модель сделать TODO».
Частые вопросы
Можно работать только на CPU?
Да, с подходящей моделью и терпимой задержкой. Решает не факт запуска, а скорость вашего реального цикла.
DeepSeek хуже или лучше Qwen?
Без конкретных версий, размера, квантизации и ваших задач вопрос бессмысленен. Сравните на своём репозитории.
Локальная модель гарантирует приватность?
Нет. Проверьте клиент, плагины, телеметрию, сетевой egress, логи и доступ других пользователей к серверу.
Benchmark на своём коде
Чужая таблица не знает вашу архитектуру, железо и терпение.
Настроить рабочий цикл