Локальная модель для кода на llama.cpp и подключение к VS Code
Замените счета за токены локальной MoE-моделью: выберите квантизацию, настройте флаги llama-server под небольшую видеокарту, подключите Cline или Kilo Code и закройте вопросы безопасности.
ИИ-агенты для программирования умеют читать репозиторий, набрасывать патчи, запускать тесты и объяснять незнакомый код, и команды с ними заметно быстрее. Спорным остаётся счёт. Автономные агенты пожирают токены: один запрос вроде «отрефактори этот модуль и почини падающие тесты» может съесть сотню тысяч входных токенов, прежде чем появится хоть строчка кода.
Между оплатой за каждый токен и отказом от ИИ есть средний путь: запустить модель у себя. Ноутбук с дискретной видеокартой может крутить толковую модель для кода через llama.cpp, отдавать её как OpenAI-совместимый HTTP API и подключать к VS Code через расширения Cline или Kilo Code. Каждый лишний токен ничего не стоит, и данные не покидают вашу сеть. Вот конфигурация, которая заработала.
Что нужно заранее
Железо: очень желательна отдельная видеокарта NVIDIA, и чем больше VRAM, тем лучше. Типичные корпоративные ноутбуки идут примерно с 8 ГБ, и этого хватит, если аккуратно выбрать модель и квантизацию. Оперативная память тоже важна, потому что часть модели вы намеренно вытесните в неё.
Софт: установите CUDA Toolkit версии 13.3 или новее со страницы загрузки NVIDIA, локальным exe-установщиком для своей платформы. Он даёт библиотеки и API, которые выделяют VRAM и запускают модель на видеокарте, и он же понадобится, если когда-нибудь будете собирать llama.cpp сами. Ещё нужны браузер и аккаунт Hugging Face, чтобы скачать веса.
Получаем llama.cpp
llama.cpp — это движок инференса. Он написан на C и C++, эффективно запускает GGUF-модели на обычном железе, использует CUDA и включает HTTP-сервер, имитирующий OpenAI API, — именно на этой возможности держится вся конфигурация.
Исходники берите в репозитории llama.cpp, а готовые бинарники для Windows и Linux лежат на странице релизов. Скачайте сборку под свою версию CUDA, например пакет win-cuda-13.3-x64. Компилировать ничего не нужно. Распакуйте куда-нибудь попроще, например в D:\ai\.
Важны два исполняемых файла:
llama-cli.exeдаёт интерактивный чат в терминале, удобно для проверки установки.llama-server.exeзапускает HTTP-сервер с эндпоинтом /v1 в стиле OpenAI и чат-интерфейсом в браузере.
Выбор модели
Всё остальное — механика. Выигрываете или проигрываете вы именно на выборе модели. Скачивайте с Hugging Face формат .gguf, потому что его читает llama.cpp.
Подбирайте модель под задачу, а не ждите, что одна сделает всё:
- Программирование и агентная работа в IDE — самый требовательный случай. Агенту нужно хорошо следовать инструкциям, надёжно вызывать инструменты и иметь большое контекстное окно, чтобы держать несколько файлов сразу. Qwen3.6 35B A3B здесь хорошо себя показывает и служит выбором по умолчанию для агентной работы в IDE. Её GGUF-сборки можно скачать из репозитория unsloth, а остальное закрывают небольшие плотные модели.
- Быстрые вопросы и ответы, сводки и сообщения коммитов прекрасно делает гораздо меньшая плотная модель, и она будет отзывчивее. И Cline, и Kilo Code позволяют назначить для таких побочных задач лёгкую маленькую модель отдельно от основной.
- Рассуждения над длинными документами требуют длины контекста, а не количества параметров, и VRAM стоит оставить под KV-кэш.
Отдавайте предпочтение моделям Mixture-of-Experts. «A3B» в названии означает 35 миллиардов параметров всего и лишь около 3 миллиардов активных на токен. Вы получаете знания большой модели почти со скоростью маленькой, так что на ограниченном железе MoE легко обгонит плотную модель сопоставимого качества.
Выбирайте квантизацию честно. Квантизация — это степень сжатия весов: чем ниже число Q, тем меньше файл и хуже качество ответов. Размер файла хорошо показывает, сколько VRAM и RAM займёт модель. С 4–8 ГБ VRAM начинайте искать в диапазоне от Q4 до Q2, например UD-IQ4_XS или UD-IQ2_M. Если сомневаетесь, дайте любому ИИ-ассистенту свои характеристики, сначала VRAM, потом оперативку, и спросите, какую квантизацию брать. Это две минуты, и они окупаются.
Сначала дымовой тест
Убедитесь, что связка работает, прежде чем трогать VS Code. Откройте командную строку в папке llama.cpp и выполните:
"D:\ai\llama-b9590-bin-win-cuda-13.3-x64\llama-cli.exe" -m "D:\ai\llms\Qwen3.6-35B-A3B-UD-IQ2_M.gguf"
Проверьте две вещи. Первое: появляется баннер, модель загружается, и в терминале можно общаться, а скорость в токенах выводится. На ноутбучной RTX PRO 2000 получилось примерно 18 токенов в секунду на промпт и 30 на генерацию. Второе: откройте Диспетчер задач, затем Производительность, затем GPU, и убедитесь, что выделенная память GPU подскочила. Если она не меняется, модель работает на CPU и у вас проблема с CUDA или драйвером. Сначала исправьте это, иначе всё дальнейшее будет невыносимо медленным.
Запуск сервера
Теперь по-настоящему. llama-server даёт и интерфейс в браузере, и API, с которым будет говорить IDE:
"D:\ai\llama-b9590-bin-win-cuda-13.3-x64\llama-server.exe" ^
-m "D:\ai\llms\Qwen3.6-35B-A3B-UD-IQ2_M.gguf" ^
--host 0.0.0.0 ^
--port 8080 ^
-ngl all ^
-c 64000 ^
-fa on ^
--cache-type-k q4_0 ^
--cache-type-v q4_0 ^
--n-cpu-moe 22 ^
-b 2048 ^
-ub 2048 ^
--no-mmap ^
--reasoning off ^
--reasoning-format none ^
--reasoning-budget 0
Дождитесь сообщения, что сервер слушает порт 8080 и все слоты свободны, затем откройте http://localhost:8080 в браузере и поздоровайтесь.
Что делают флаги
Не копируйте эту команду вслепую. Именно эти настройки вы будете крутить, когда модель не влезает.
- Основное:
-m— файл весов,--portзадаёт HTTP-порт для интерфейса и API, а--host 0.0.0.0слушает все интерфейсы, чтобы могли подключаться другие машины в локальной сети, при этом локально вы по-прежнему используете localhost. - Размещение на GPU:
-ngl allотправляет стандартные слои, то есть блоки внимания и не-MoE веса, в VRAM.--n-cpu-moe 22держит веса экспертов стольких слоёв в оперативной памяти, чтобы не переполнить VRAM, и это ваша главная ручка настройки на маленькой видеокарте. - Память и контекст:
-c 64000ограничивает контекстное окно в токенах, и больший контекст стоит больше памяти.-fa onвключает ядра FlashAttention, которые ускоряют обработку промпта и снижают расход VRAM.--cache-type-kи--cache-type-vсо значением q4_0 хранят кэши ключей и значений в 4 битах, что даёт большую экономию на длинном контексте. - Пропускная способность:
-bи-ubзадают размер батча для предзаполнения промпта и микробатч на GPU. Держите их равными для лучшей пропускной способности.--no-mmapзагружает всю модель в физическую память сразу, а не подкачивает по частям. - Вывод рассуждений:
--reasoning off,--reasoning-format noneи--reasoning-budget 0отключают встроенную обработку цепочки рассуждений, убирают теги think из потока и дают явным рассуждениям нулевой бюджет токенов.
Последняя группа важнее, чем кажется. Агентные расширения ждут чистого, разбираемого вывода вызовов инструментов, и следы рассуждений в потоке — частая причина, почему локальная модель «просто не работает» с агентом.
Когда модель не влезает, не спешите переходить на более мелкую квантизацию. Действуйте по порядку: уменьшите -c, затем увеличьте --n-cpu-moe, затем квантизуйте KV-кэш. Обычно место находится.
Запуск как службы
Держать окно консоли открытым бесконечно ненадёжно. Windows позволяет зарегистрировать llama-server.exe как службу, чтобы эндпоинт возвращался после перезагрузки. На общей командной машине, а не на личных ноутбуках, это практически обязательно, и перед сервером стоит поставить TLS с помощью --ssl-cert-file и --ssl-key-file, чтобы промпты и код никогда не шли по сети незашифрованными.
Подключаем VS Code
Ценность OpenAI-совместимого эндпоинта в том, что агентные расширения уже умеют с ним работать. Установите Cline из маркетплейса VS Code. При первом запуске он спросит, как вы хотите его использовать. Выберите вариант со своим API-ключом, затем откройте Settings и API Configuration и заполните:
- Provider: пункт OpenAI Compatible.
- Адрес:
http://0.0.0.0:8080/v1, поправьте, если сервер на другом хосте или порту. - API Key: не нужен.
- Model ID: точное имя, которое сообщает сервер, например Qwen3.6-35B-A3B-UD-IQ2_M.
- Context Window Size: 64000.
Контекстное окно должно совпадать со значением -c, с которым вы запустили сервер. Если Cline думает, что у него 128K, а сервер выделил только 64K, вы получите ошибки обрезки посреди задачи и сбитого с толку агента.
В разделе Advanced подумайте о включении отдельных моделей для режимов Plan и Act. Более сильная модель рассуждений составляет план, а более быстрая его выполняет, и локально это так же полезно, как с облачными API.
Kilo Code работает почти так же. Добавьте собственного провайдера, дайте ему ID вроде llamacpp, укажите в Base URL адрес /v1 вашего сервера, и он обнаружит отдаваемую модель. Один урок, выученный на горьком опыте: выбирайте модель явно, а не доверяйте значению по умолчанию, и повторите этот выбор для каждого режима (Code, Ask, Debug, Orchestrator и Plan) в глобальной конфигурации.
Безопасность прежде всего
Одна неверная настройка в агентном расширении может отправить исходный код вашего работодателя в открытый интернет. Локальный запуск как раз и нужен, чтобы этого не случилось, так что охраняйте его тщательно.
- Каждый раз проверяйте Base URL. Он должен указывать на ваш собственный хост. Если куда-то ещё — туда и уйдёт ваш код.
- Отключите телеметрию. В Cline снимите галочки с отчётов об ошибках и использовании в общих настройках.
- Отключите веб-инструменты вроде браузинга и поиска, если у вас нет согласованной причины их использовать.
- Отключите MCP-серверы, которые вы не контролируете, а выполнение команд в shell держите в режиме «спрашивать», а не «разрешать».
- Никогда не включайте режим YOLO для корпоративной кодовой базы. Выполнять сгенерированные агентом задачи без подтверждения так же безрассудно, как звучит.
- Используйте TLS всегда, когда сервер не на localhost. Для общего командного компьютера отдавайте HTTPS и установите сертификат сервера на каждую клиентскую машину, в Windows — через certutil.
- Не загружайте код и дизайн на внешние серверы. Локальный инференс существует, чтобы этого не делать.
Стоит ли оно того?
Посчитайте, и локальный вариант легко выигрывает. Платное место для программирования — это фиксированная плата за человека и месячный лимит токенов. API с оплатой по факту растут вместе с использованием, а с хорошими инструментами использование становится интенсивным. Сервер llama.cpp на своей машине стоит только электричества и видеокарты, которая у вас уже есть.
Компромиссы честные. Локальные модели медленнее передовых облачных и слабее на по-настоящему сложных рассуждениях, и в настройках самого Cline отмечено, что лучше всего он работает с передовыми моделями. Не рассчитывайте заменить лучшую облачную модель в решениях уровня архитектуры.
Но большая часть токенов уходит не на архитектуру. Основная масса — это шаблонный код, рефакторинг, заготовки тестов, объяснения кода, сообщения коммитов и однообразные правки, и разумно выбранная MoE-модель для кода справляется со всем этим на вашем железе с нулевой предельной стоимостью, а ваша интеллектуальная собственность остаётся в здании. Сначала используйте свою видеокарту, а платные места оставьте для работы, которой они действительно нужны.