Главная / Статьи / Локальная модель для кода на llama.cpp и подключение к VS Code

Локальная модель для кода на llama.cpp и подключение к VS Code

Замените счета за токены локальной MoE-моделью: выберите квантизацию, настройте флаги llama-server под небольшую видеокарту, подключите Cline или Kilo Code и закройте вопросы безопасности.

1882 слов

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

Между оплатой за каждый токен и отказом от ИИ есть средний путь: запустить модель у себя. Ноутбук с дискретной видеокартой может крутить толковую модель для кода через 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-модель для кода справляется со всем этим на вашем железе с нулевой предельной стоимостью, а ваша интеллектуальная собственность остаётся в здании. Сначала используйте свою видеокарту, а платные места оставьте для работы, которой они действительно нужны.