Локальный LLM-агент для кода: Ollama и LM Studio

Локальный LLM-агент для кода на Ollama или LM Studio: какие CLI работают с локальными эндпоинтами, нужное железо, приватность, компромиссы и гибридная схема.

Solviera Teknoloji 9 мин чтения

Локальный LLM-агент для кода — это кодинг-CLI, например opencode, Aider, Goose, Qwen Code, Crush или Codex, направленный не на облачный API, а на модель, которая работает на вашей машине через Ollama или LM Studio. Вы запускаете локальный сервер (Ollama слушает http://localhost:11434, LM Studio — http://127.0.0.1:1234), выбираете модель с поддержкой вызова инструментов, поднимаете длину контекста заметно выше значения по умолчанию и указываете CLI этот эндпоинт. Это работает, код остаётся у вас, а за токены ничего платить не нужно. Но такой агент медленнее и слабее лучших облачных моделей, поэтому большинство в итоге приходит к гибридной схеме.

Что здесь на самом деле значит «локально»

Кодинг-агент состоит из двух частей: CLI, который читает файлы, запускает команды и правит код, и модели, которая решает, что делать дальше. Переход на локальный вариант заменяет только вторую часть. CLI выполняет тот же цикл, просто отправляет запросы на сервер на localhost, а не в API провайдера.

Оба распространённых локальных сервера понимают OpenAI-совместимый API:

СерверАдрес по умолчаниюКак запустить
Ollamahttp://localhost:11434/v1Приложение Ollama или ollama serve
LM Studiohttp://127.0.0.1:1234/v1Вкладка Developer → «Start server» или lms server start

В документации Ollama отмечено, что OpenAI-клиентам нужно значение API-ключа, но Ollama его игнорирует, поэтому для локального сервера подойдёт любая заглушка.

Настройка, которую все упускают: длина контекста

Прежде чем выбирать CLI, исправьте это. Агенты отправляют много контекста: системный промпт, описания инструментов, содержимое файлов и вывод команд. Локальный сервер с маленьким окном тихо отрежет большую часть.

Контекстное окно Ollama по умолчанию зависит от VRAM: 4k токенов при памяти меньше 24 GiB, 32k от 24 до 48 GiB и 256k при 48 GiB и больше. В документации Aider добавлено, что Ollama молча отбрасывает контекст, не помещающийся в окно. В документации Goose значение по умолчанию в 4096 токенов названо слишком низким, а в собственном руководстве Ollama по Codex просят не меньше 64k.

Увеличьте его при запуске сервера и проверьте:

OLLAMA_CONTEXT_LENGTH=64000 ollama serve
ollama ps   # CONTEXT column shows the allocated length

В приложении Ollama в настройках есть ползунок длины контекста, который делает то же самое. Если ollama ps показывает в столбце PROCESSOR, что модель частично на CPU, значит, контекст или модель слишком велики для вашего GPU, и всё будет работать медленнее.

Какие CLI поддерживают локальные модели

Ниже то, что подтверждает документация каждого инструмента. Мы перечисляем только те конфигурации, которые смогли проверить.

CLIЛокальный путьГде настраивается
Codex--oss с Ollama или LM StudioФлаг или oss_provider в config.toml
opencodeЛюбой OpenAI-совместимый провайдерРаздел provider в opencode.json
Aiderollama_chat/<model> или openai/<model>Переменные окружения
GooseOllama, LM Studio и другие провайдерыgoose configure
Qwen CodeЛюбой OpenAI-совместимый эндпоинтПеременные OPENAI_* или ~/.qwen/settings.json
CrushТипы провайдеров ollama и lmstudioЕго конфиг провайдеров

Codex

У Codex самый короткий путь. По его документации, он может работать с локальным «open source»-провайдером, например Ollama или LM Studio, если передать --oss:

codex --oss                     # default local model
codex --oss -m gpt-oss:120b     # a specific model

Провайдер по умолчанию задаётся в ~/.codex/config.toml через oss_provider = "ollama" (или "lmstudio"). У Ollama также есть ollama launch codex, который настраивает профиль за вас. Внутри Codex команда /model переключает установленные модели с поддержкой инструментов.

opencode

opencode принимает любой OpenAI-совместимый сервер как собственного провайдера в opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (local)",
      "options": { "baseURL": "http://localhost:11434/v1" },
      "models": { "qwen3": { "name": "Qwen3 (local)" } }
    }
  }
}

Для LM Studio используйте http://127.0.0.1:1234/v1 как базовый URL и идентификатор модели, показанный в LM Studio. В документации opencode есть полезный совет: если вызовы инструментов не работают, увеличьте num_ctx в Ollama, начиная примерно с 16k–32k.

Aider

Aider работает с Ollama напрямую. В его документации рекомендуется префикс ollama_chat/:

export OLLAMA_API_BASE=http://127.0.0.1:11434
aider --model ollama_chat/<model>

Для LM Studio или любого другого OpenAI-совместимого сервера задайте OPENAI_API_BASE и OPENAI_API_KEY, затем используйте aider --model openai/<model-name>. Фиксированный размер контекста записывается в .aider.model.settings.yml как num_ctx в разделе extra_params.

Goose

Goose называет Ollama и LM Studio среди провайдеров. Выполните goose configure, выберите Ollama и введите имя модели. Он использует localhost:11434, если OLLAMA_HOST не указывает иное; LM Studio по умолчанию — localhost:1234 без API-ключа. В документации Goose главное ограничение названо прямо: он активно использует вызов инструментов, поэтому модель без него может только вести чат.

Qwen Code

Qwen Code поддерживает любой OpenAI-совместимый эндпоинт, а в его README локальные модели упомянуты через Ollama или vLLM. Направьте стандартные переменные на свой сервер:

export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_API_KEY=ollama   # any placeholder for a local server
export OPENAI_MODEL=<model>
qwen

То же можно хранить в ~/.qwen/settings.json в разделе modelProviders или настроить интерактивно командой /auth.

Crush

Crush поддерживает ollama и lmstudio как типы провайдеров. В его README Ollama добавляется с базовым URL http://localhost:11434/v1. Модель выбирается внутри Crush по Ctrl+L.

Если локальный агент ведёт себя странно

Большинство проблем с локальным кодинг-агентом сводится к нескольким причинам. Проверяйте их по порядку:

  • Он забывает файлы или инструкции посреди задачи. Контекст слишком мал, и сервер его обрезает. Увеличьте OLLAMA_CONTEXT_LENGTH (или num_ctx) и убедитесь через ollama ps.
  • Вызовы инструментов падают или приходят обычным текстом. Возможно, модель не поддерживает вызов инструментов или контекста не хватает на описания инструментов. Попробуйте модель с поддержкой инструментов и окно побольше; в документации opencode советуют начинать примерно с 16k–32k.
  • CLI пишет, что модели не существует. Имя в CLI должно точно совпадать с идентификатором сервера: тег из ollama list или идентификатор на панели сервера в LM Studio.
  • Connection refused. Сервер не запущен, или CLI ждёт другой адрес. У Ollama это 11434, у LM Studio 1234, и некоторым CLI нужен суффикс /v1, а у OLLAMA_API_BASE в Aider его нет.
  • Всё очень медленно. Модель или контекст не помещаются на GPU. ollama ps показывает долю CPU; выберите модель поменьше или более короткий контекст.

Реалии железа

Здесь ожидания обычно и разбиваются. Локальный кодинг-агент — задача тяжелее, чем локальный чат:

  • Модель должна помещаться в память. VRAM видеокарты на ПК, унифицированная память на Apple Silicon. Если не помещается, слои уходят на CPU, и генерация резко замедляется.
  • Контекст тоже занимает память. Окно в 64k поверх весов модели требует гораздо больше места, чем чат на 4k. Поэтому Ollama и привязывает длину контекста по умолчанию к VRAM.
  • Маленьким моделям тяжело с инструментами. Агентам нужны надёжные вызовы инструментов и умение следовать длинному системному промпту. Маленькие модели часто выдают некорректные вызовы, зацикливаются или останавливаются раньше времени. В Goose отмечают, что некоторые модели, например нативная DeepSeek-R1, вообще не поддерживают вызов инструментов.
  • Скорость накапливается. Агент делает на задачу много запросов, каждый с большим промптом. Модель, которая в чате кажется нормальной, может растянуть десятишаговую задачу надолго.

Практичный способ начать: возьмите самую большую кодинговую модель с поддержкой инструментов, которая целиком помещается на ваш GPU при контексте от 32k до 64k, проверьте через ollama ps и испытайте на небольшой реальной задаче, прежде чем доверять ей что-то серьёзнее.

Зачем идти в локальный режим: приватность и контроль

Главная причина в том, что инференс остаётся на вашей машине:

  • Ваши промпты и код не отправляются провайдеру модели.
  • Всё работает офлайн и в изолированных (air-gapped) средах.
  • Нет счетов за токены и лимитов использования, о которые можно удариться.
  • Модель не меняется у вас под руками; вы сами решаете, когда обновляться.

Две оговорки, чтобы не лукавить. Во-первых, CLI всё равно может ходить в сеть: у Codex с профилем запуска от Ollama есть веб-поиск, а у некоторых CLI есть телеметрия. Если ничто не должно покидать машину, проверьте настройки каждого инструмента. Во-вторых, локальный запуск не делает самого агента безопаснее. Он по-прежнему запускает команды и правит файлы, поэтому действуют обычные практики безопасности кодинг-агентов.

Компромиссы по сравнению с облачными моделями

Локальная модельОблачная топ-модель
Код покидает машинуНетДа, уходит провайдеру
СтоимостьЖелезо и электричествоЗа токены или по подписке
Лимиты использованияНетЗависят от тарифа
Качество на сложных задачах из нескольких файловНиже, зависит от размера моделиЛучшее из доступного
Надёжность вызовов инструментовЗависит от моделиВысокая
Контекстное окноОграничено вашей памятьюОчень большое
СкоростьЗависит от вашего железаБыстро и стабильно

Разрыв меньше всего на ограниченных задачах: написать тест, объяснить функцию, небольшой рефакторинг, сообщение коммита. Больше всего он на длинной многошаговой работе с множеством файлов, где агент должен держать план и исправлять собственные ошибки.

Гибридная схема, которая работает

Разделение обычно работает лучше, чем «всё или ничего»:

  1. Чувствительная или офлайн-работа идёт локально. Код, который не должен покидать машину, клиентские репозитории со строгими условиями, работа в самолёте.
  2. Рутинные ограниченные задачи идут локально. Тесты, документация, мелкие исправления и объяснения.
  3. Сложные задачи идут облачной модели. Архитектурные изменения, хитрые баги, крупные рефакторинги.
  4. Ревью в свежем контексте. Пусть второй агент проверяет дифф первого, какая бы модель его ни написала.

Проще всего это организовать, запустив одновременно двух и более агентов: один на локальном эндпоинте, другой на облачной модели, каждый в своей папке или git worktree, чтобы они не правили одни и те же файлы.

Локальные и облачные агенты рядом в AgentVera

AgentVera — десктопное приложение, которое запускает много CLI-агентов рядом в одном рабочем пространстве, что подходит для описанной гибридной схемы. Чтобы не было недопонимания, что оно делает, а что нет:

  • Встроенной интеграции с Ollama или LM Studio нет. Каждый агент использует собственную настройку провайдера: goose configure для Goose, собственный конфиг и /connect у opencode, переменные окружения или .aider.conf.yml у Aider, вход или API-ключ у Qwen Code, настройки Crush (Ctrl+L).
  • Поле «Model» передаётся в CLI. Для таких агентов, как Qwen Code, Goose и Aider, то, что вы там вводите, уходит в CLI как --model. Для Goose подсказка гласит: «If left empty, the model chosen with goose configure is used.»
  • У агентов могут быть переменные окружения. В Settings → Accounts → Accounts of other agents аккаунт, добавленный «With an API key», хранит «Variable name» и его значение. Для Qwen Code OPENAI_BASE_URL — одно из предлагаемых имён, а любое другое можно ввести вручную. Это часть переключения аккаунтов в тарифах Pro и Team.
  • Инструменты контекста работают не только с Claude Code. Размер контекста измеряется по собственной истории каждого CLI, а автокомпактинг использует собственную команду compact у того CLI, где она есть. При маленьком локальном окне это важно ещё сильнее.

Так что реалистичная картина такая: вы настраиваете локальную модель в CLI так, как описано в его документации, а AgentVera позволяет запустить этого агента рядом с облачным, следить за обоими и не смешивать их работу.

Вопросы

Какие CLI для кодинга работают с локальной LLM?

opencode, Aider, Goose, Qwen Code, Crush и Codex описывают в документации способ использовать локальный или OpenAI-совместимый эндпоинт. У Codex есть встроенный флаг --oss для Ollama и LM Studio; остальные принимают конфиг провайдера, префикс модели или переменные окружения.

Нужен ли GPU, чтобы запустить локального кодинг-агента?

Строго говоря, нет, но он сильно помогает. Кодинг-агентам нужны вызов инструментов и длинный контекст, а значит, довольно большая модель и много памяти. Без мощного GPU или большого объёма унифицированной памяти ответы становятся такими медленными, что работать с агентом тяжело.

Почему моя локальная модель игнорирует файлы или забывает инструкции?

Обычно контекст слишком мал. Значение по умолчанию в Ollama зависит от VRAM и равно 4k на машинах с памятью меньше 24 GiB, а всё, что не помещается, молча отбрасывается. Увеличьте его через OLLAMA_CONTEXT_LENGTH или настройку num_ctx; для Codex Ollama рекомендует минимум 64k.

Полностью ли приватна локальная модель?

Инференс остаётся на вашей машине, поэтому промпты и код не отправляются провайдеру модели. У самого CLI могут быть телеметрия, веб-поиск и другие сетевые функции, так что если ничего не должно покидать машину, проверьте его настройки.

Поддерживает ли AgentVera локальные модели?

AgentVera запускает рядом друг с другом CLI-агентов, которые их поддерживают, например opencode, Aider, Goose, Qwen Code, Crush и Codex. Каждый CLI хранит собственный конфиг провайдера; AgentVera передаёт значение поля Model и может дать агенту переменные окружения, но собственной встроенной интеграции с Ollama у него нет.

Соберите своих агентов за одним столом.

Скачайте AgentVera бесплатно; ваши установленные CLI уже готовы к работе.

Другие статьи