Перейти к содержимому
19 мин чтения

Локальная модель в OpenClaw: как запустить агента на своём железе

openclawлокальная модельollamallama.cpplm studioself-hostedии-агентыприватность данных

Коротко. Локальная модель в OpenClaw — это штатный режим, а не обходной путь: агент запускается полностью на вашем железе, без облачных API-ключей и без счёта за токены. Путей три: управляемый сервер llama.cpp, который OpenClaw ставит и ведёт сам; Ollama; и любой OpenAI-совместимый сервер (LM Studio, vLLM, MLX, SGLang, LiteLLM). Но исход решают не они, а три вещи. Первая — память хоста: самый маленький рецепт из штатного каталога требует 8 ГиБ, а всё крупнее 9B штатная установка рекомендует только с GPU. Вторая — вызов инструментов: модель, которая бодро отвечает текстом, часто не умеет звать инструменты, и тогда агент перестаёт быть агентом и превращается в чат. Третья, и самая частая ошибка — адрес Ollama с /v1 на конце: это переключает OpenClaw в OpenAI-совместимый режим, где вызов инструментов ненадёжен, и модель начинает печатать JSON вызова прямо в чат вместо того, чтобы что-то сделать. Ниже — рабочие конфиги для каждого пути, порядок проверки и честный список того, что вы при этом теряете.

На чём это проверено

Все команды, ключи конфигурации, значения по умолчанию и требования к памяти сверены с официальной документацией проекта 15 сентября 2026 года. Актуальный релиз на эту дату — OpenClaw 2026.9.4 (опубликован 11 сентября 2026 года). В реестре npm канал latest — 2026.9.4, канал extended-stable — 2026.6.35. Конфигурация лежит в файле ~/.openclaw/openclaw.json в формате JSON5 (допускает комментарии и висящие запятые); если файла нет, OpenClaw работает на значениях по умолчанию.

Проект выпускает релизы часто, и локальные провайдеры — та часть, которая меняется активнее прочих. Прежде чем копировать конфиг в боевой контур, сверьтесь с разделом Local models официальной документации: дальше по тексту мы ссылаемся на конкретные её страницы, чтобы каждый ключ можно было перепроверить за минуту.

Зачем локальная модель — и когда она не нужна

У локального запуска ровно два честных мотива.

Данные не покидают ваш контур. Это главный аргумент для юристов, медицины, бухгалтерии и всего, что подпадает под внутренние регламенты обработки персональных данных. Ни один запрос, ни один фрагмент документа не уходит стороннему провайдеру — потому что уходить некуда, модель крутится на вашей же машине.

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

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

Железо: с чего начинается разговор

Всё остальное вторично. Официальный каталог рецептов для управляемого сервера llama.cpp выглядит так — каждый рецепт использует контекст 65 536 токенов и поддерживает вызов инструментов:

МодельРазмер загрузкиМинимум памяти хоста
Qwen3.5 4B Q4_K_Mоколо 2,7 ГБ8 ГиБ
Qwen3.5 9B Q4_K_Mоколо 5,7 ГБ16 ГиБ
Gemma 4 12B IT Q4_K_Mоколо 7,1 ГБ24 ГиБ и GPU-ускорение
Qwen3.8 27B UD-Q4_K_Mоколо 16,5 ГБ32 ГиБ и GPU-ускорение
Muse Glimmer 30B Q4_K_Mоколо 16,8 ГБ32 ГиБ и GPU-ускорение

Источник — страница llama.cpp Provider в документации OpenClaw. Три вещи, которые из этой таблицы не видны, но важнее самих цифр.

Это пороги отбора, а не гарантия скорости. Формулировка в документации прямая: пороги не гарантируют ни то, что модель поместится, ни то, что она будет работать быстро. Установщик дополнительно резервирует память под операционную систему, кэш контекста, рантайм и модель эмбеддингов — и может предложить вариант поменьше, если на хосте уже есть нагрузка.

К загрузке чата добавляется модель эмбеддингов — по умолчанию EmbeddingGemma, около 0,3 ГБ. Она нужна для поиска по памяти агента. Заложите её в расчёт места на диске.

Две видеокарты не складываются. Установщик не считает, что модель поместится, на основании суммы памяти отдельных NVIDIA-карт. 2 × 12 ГБ — это не 24 ГБ.

Отдельно — таблица исполнительных бэкендов для управляемого сервера. Здесь прячется сюрприз, из-за которого половина установок на арендованном сервере разочаровывает:

Хост GatewayУправляемый бэкенд
macOS на Apple siliconMetal, общая память
macOS на IntelCPU
Linux x64 или arm64CPU
Windows x64 с поддерживаемой NVIDIACUDA 12.4
Windows x64 без совместимой CUDA, Windows arm64CPU

Прочитайте строку про Linux ещё раз: штатный управляемый сервер на Linux работает на CPU, даже если в машине стоит видеокарта. Для проверенной сборки Windows CUDA нужны драйвер NVIDIA 551.78 или новее и вычислительная способность 5.0 или новее. Если вы взяли GPU-сервер под Linux и хотите, чтобы карта действительно использовалась, управляемый путь вам не подходит — нужно поднимать сервер самостоятельно (Ollama, vLLM, собственный llama-server) и подключать его к OpenClaw как внешний. Именно об этом вторая и третья части статьи.

Путь 1. Управляемый сервер llama.cpp

Самый короткий путь, если у вас Mac на Apple silicon или Windows с NVIDIA. OpenClaw сам посмотрит на железо, предложит модель, скачает её, проверит и только потом переключит на неё агента.

openclaw plugins install @openclaw/llama-cpp-provider
openclaw onboard

В мастере выберите Managed local server. Дальше установщик покажет имя хоста, исполнительный бэкенд, модель и размер загрузки — и будет ждать подтверждения. Читайте имя хоста внимательно: если вы открыли веб-интерфейс браузером, подключённым к удалённому Gateway, модель скачается и будет работать на этом Gateway, а не на компьютере, где открыт браузер.

Что именно проверяет установщик

Здесь у OpenClaw сделано то, чего не хватает большинству инструкций из интернета: установка не считается успешной, пока модель не доказала, что она годится в агенты.

  • Проверяются контрольные суммы файлов модели и сборки llama.cpp.
  • Поднимается конечная точка на локальной петле и делается настоящий запрос на генерацию.
  • Отдельно проверяется вызов инструмента: модель просят прочитать временный файл через инструмент OpenClaw и вернуть его содержимое. Проверка идёт в изолированном рабочем каталоге, без инструкций вашего агента. Просто текстовый ответ эту проверку не проходит.
  • На каждую проверку отводится 90 секунд. Изменение agents.defaults.timeoutSeconds этот срок не продлевает — в отчёте об ошибке будет указано, что именно не уложилось: ответ или вызов инструмента.

Если проверка не прошла или вы её отменили, прежняя модель по умолчанию остаётся выбранной — агент не сломается на полпути. Скачанные файлы могут остаться в кэше для повторной попытки.

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

Именно здесь обычно и выясняется, что задача не про конфиг, а про инфраструктуру: подобрать карту, поставить драйверы, не дать серверу уснуть, следить за температурой, памятью и обновлениями. Если возиться с этим некому — подготовим сервер с GPU и будем держать локальную модель в строю, а вы вернётесь к настройке агента уже на готовой машине.

Путь 2. Ollama — самый частый выбор

Ollama выбирают, когда хочется управлять моделями отдельно от агента: своя библиотека моделей, привычные команды, служба, которая живёт сама по себе. OpenClaw это поддерживает, но с одной оговоркой, которая стоит того, чтобы вынести её в отдельный подзаголовок.

Главная ошибка: /v1 в адресе

OpenClaw разговаривает с Ollama по её родному API — /api/chat, а не по OpenAI-совместимому /v1. Правильный адрес выглядит так:

baseUrl: "http://127.0.0.1:11434"   // без /v1

Если дописать /v1, провайдер переключится в OpenAI-совместимый режим. Симптом ровно один и его ни с чем не спутать: модель печатает JSON вызова инструмента как обычный текст. Выглядит так, будто «модель тупая», а на самом деле сломан транспорт. Чтобы гарантировать родное поведение, задайте режим явно:

{
  models: {
    providers: {
      ollama: {
        baseUrl: "http://127.0.0.1:11434",
        api: "ollama",
      },
    },
  },
}

Учётные данные: для локального хоста они фиктивные

Ollama на локальной петле, в частной сети, на .local или на голом имени хоста не требует настоящего токена. OpenClaw использует для таких адресов маркер ollama-local:

export OLLAMA_API_KEY="ollama-local"

Настоящий ключ нужен только для публичных удалённых хостов и для https://ollama.com. Это ровно то место, где люди застревают на полчаса, решив, что «нужно где-то завести ключ» — не нужно.

Минимальный рабочий сценарий

ollama serve
ollama pull gemma4
export OLLAMA_API_KEY="ollama-local"
openclaw models list --provider ollama
openclaw models set ollama/gemma4

Проверка, что всё сошлось:

# демон виден с этой машины
curl http://127.0.0.1:11434/api/tags

# каталог OpenClaw и выбранная модель
openclaw models status

# прямая проба модели
openclaw infer model run --model ollama/gemma4 --prompt "Reply with exactly: ok"

Если вы предпочитаете мастер, есть и неинтерактивный вариант — удобно для скриптов развёртывания:

openclaw onboard --non-interactive --accept-risk --skip-health \
  --auth-choice ollama \
  --custom-base-url "http://ollama-host:11434" \
  --custom-model-id "qwen3.5:27b"

Почему OpenClaw «не видит» установленную модель

Второй по частоте вопрос после /v1. Автоматическое обнаружение при первичной настройке учитывает только модели, уже загруженные в память (по данным /api/ps), у которых подтверждена поддержка инструментов и не менее 16K контекста (по данным /api/show). Модель, установленная на диск, но простаивающая, кандидатом не считается: обнаружение никогда не скачивает и не загружает модель само.

Отсюда два выхода. Либо прогреть модель перед настройкой — сделать к ней любой запрос, чтобы она попала в память. Либо задать её в конфиге руками: непустой ручной список моделей обнаружение пропускает и берёт то, что написано.

Рабочий конфиг для LAN-хоста с GPU

Типовая схема для малого бизнеса: агент живёт на дешёвом сервере, а модель — на отдельной машине с видеокартой в той же сети.

{
  models: {
    providers: {
      ollama: {
        baseUrl: "http://gpu-box.local:11434",
        apiKey: "ollama-local",
        api: "ollama",
        timeoutSeconds: 300,
        maxTokens: 8192,
        models: [
          {
            id: "qwen3.5:9b",
            name: "qwen3.5:9b",
            reasoning: true,
            input: ["text"],
            contextTokens: 32768,
            params: {
              num_ctx: 32768,
              thinking: false,
              keep_alive: "15m",
            },
          },
        ],
      },
    },
  },
  agents: {
    defaults: {
      model: { primary: "ollama/qwen3.5:9b" },
    },
  },
}

Если серверов с моделями несколько, заводите отдельные идентификаторы провайдеров — у каждого свой хост, свой список моделей, своя авторизация и свой таймаут. Ссылка вида ollama-large/qwen3.5:27b работает как обычно: OpenClaw снимает префикс провайдера перед обращением к Ollama и отправляет ей qwen3.5:27b.

Путь 3. LM Studio и любой OpenAI-совместимый сервер

LM Studio удобен, когда нужен графический загрузчик моделей: скачали сборку, включили локальный сервер (по умолчанию http://127.0.0.1:1234), проверили, что http://127.0.0.1:1234/v1/models отдаёт список. В отличие от Ollama здесь /v1 как раз уместен — это честный OpenAI-совместимый эндпоинт.

{
  agents: {
    defaults: {
      model: { primary: "lmstudio/my-local-model" },
    },
  },
  models: {
    mode: "merge",
    providers: {
      lmstudio: {
        baseUrl: "http://127.0.0.1:1234/v1",
        apiKey: "lmstudio",
        api: "openai-responses",
        models: [
          {
            id: "my-local-model",
            name: "Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 196608,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}

Три правила, которые нужно запомнить один раз.

  • api: "openai-responses" — только если бэкенд это умеет (LM Studio умеет). Во всех остальных случаях — openai-completions. Если у пользовательского провайдера с baseUrl ключ api не указан вовсе, OpenClaw по умолчанию берёт openai-completions.
  • models[].id пишется без префикса провайдера. Для сервера MLX, запущенного как mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit, в списке моделей будет mlx-community/Qwen3-30B-A3B-6bit, а в agents.defaults.model.primary — mlx/mlx-community/Qwen3-30B-A3B-6bit.
  • models.mode: "merge" сохраняет облачные модели доступными как запасные. Уберёте его — и остаться без ответа при падении локального сервера станет штатным сценарием.

По этой же схеме подключаются vLLM, SGLang, MLX, LiteLLM и любой собственный шлюз, выставляющий /v1/chat/completions. Отдельно стоит знать про ключ localService: он позволяет не держать тяжёлый сервер запущенным круглосуточно, а поднимать его в момент, когда выбрана соответствующая модель, и гасить после простоя. Поля там простые — command (обязательно абсолютный путь, PATH не просматривается), args, healthUrl, readyTimeoutMs (по умолчанию 120 000) и idleStopMs; подробности — на странице Local model services.

Контекст, таймауты и «модель думает пять минут»

Две трети жалоб на локальный запуск — это не про модель, а про три числа, которые живут в разных местах и должны быть согласованы.

ПараметрЧто ограничиваетКогда снижать
contextTokensбюджет входных данных со стороны OpenClawOpenClaw отправляет слишком большой запрос
params.num_ctxконтекст запроса на стороне Ollamaрантайм-контекст великоват для машины
maxTokensдлину генерацииответы получаются слишком длинными

Модели часто заявляют контекст больше того, что ваше железо потянет комфортно. При родных запросах эффективное значение contextTokens уходит на сервер, если его не перекрывает params.num_ctx — поэтому имеет смысл ограничить оба сразу и получить предсказуемое время до первого токена. Для локальных моделей Ollama приложение, интерактивная и неинтерактивная установка используют рантайм-контекст 32 768 токенов или родное окно модели, если оно меньше.

У OpenClaw есть собственный предохранитель по контексту: он предупреждает, когда остаётся меньше 20 % (с нижней границей 8k), и жёстко блокирует запрос ниже 10 % (с нижней границей 4k). Увидели такую ошибку — либо снижайте contextTokens у этой модели, либо поднимайте лимит контекста на сервере.

Отдельная история — холодная загрузка. Большая локальная модель может грузиться долго, и стандартный таймаут запроса её не дождётся. Правильное лечение — поднять таймаут именно у провайдера, а не у всего агента, и по возможности держать модель загруженной между ходами:

{
  models: {
    providers: {
      ollama: {
        timeoutSeconds: 300,
        models: [
          {
            id: "gemma4:26b",
            name: "gemma4:26b",
            params: { keep_alive: "15m" },
          },
        ],
      },
    },
  },
}

timeoutSeconds покрывает весь HTTP-запрос к модели: установку соединения, заголовки, потоковую передачу тела и общий обрыв по защищённой выборке. params.keep_alive передаётся как поле keep_alive верхнего уровня в родных запросах /api/chat — задавайте его для конкретной модели, когда узкое место именно в загрузке на первом ходу. Важное ограничение: таймаут провайдера не может продлить весь прогон — если ниже стоит лимит агента или прогона, поднимать надо и его.

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

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

Практичная схема для тех, кому нужна и приватность, и надёжность. Основная модель локальная, запасная — облачная; при сбое локального сервера агент не замолкает.

{
  agents: {
    defaults: {
      model: {
        primary: "lmstudio/my-local-model",
        fallbacks: ["anthropic/claude-sonnet-4-6"],
      },
    },
  },
  models: {
    mode: "merge",
  },
}

Тот же приём работает и в обратную сторону: облачная модель основная, локальная — запасная на случай, когда провайдер недоступен или вы упёрлись в лимиты; достаточно поменять местами primary и fallbacks, оставив блок провайдеров как есть. Ключевое условие в обоих случаях — models.mode: "merge", чтобы каталог облачных моделей остался на месте.

Вариант «всё через один демон» тоже существует: Ollama умеет отдавать и локальные, и облачные модели (с суффиксом :cloud) через один хост — но для этого на нём нужно выполнить ollama signin, иначе установка останется локальной. Если локальный демон вам вообще не нужен, есть отдельный провайдер ollama-cloud, которому ни вход, ни запущенный сервер не требуются.

Отдельно замечу то, о чём часто забывают: гибрид необязательно про одну модель на всё. Служебные задачи — сжатие истории, поиск по памяти, разметка — можно увести на локальную модель, оставив основную облачной. Это уменьшает счёт и объём данных, уходящих наружу, без потери качества на главном. Как раскладывать задачи по моделям, мы разбирали в отдельном материале про тюнинг OpenClaw.

Инструменты: где локальные модели ломаются

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

  • Модель выдаёт JSON, XML или текст в стиле ReAct, похожий на вызов, — OpenClaw оставит это текстом и запишет предупреждение с идентификатором прогона, провайдером, моделью и обнаружённым шаблоном. Это несовместимость, а не выполненный вызов.
  • Провайдер возвращает пустой массив tool_calls.
  • Модель печатает вызовы в скобочном формате вида [имя_инструмента] с JSON и [END_TOOL_REQUEST]. OpenClaw превратит это в настоящий вызов только если имя точно совпадает с зарегистрированным на этом ходу инструментом; иначе останется скрытым текстом.

Первое, что нужно сделать, — проверить, что шаблон чата и парсер на стороне сервера вообще поддерживают вызов инструментов. И категорическое «нельзя» из документации: не ставьте прокси, который слепо превращает текст ответа в исполнение инструмента. Это готовая дыра в безопасности — модель, подхватившая инъекцию из прочитанного письма, получит через такой прокси право что-то выполнить.

Если парсер работает только при принудительном вызове, есть штатный обход — по одной модели:

openclaw config set agents.defaults.models '{"local/my-local-model":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge

Применяйте его только там, где вызов инструмента ожидается на каждом ходу, — иначе агент начнёт звать инструменты там, где достаточно ответить словами.

Лестница диагностики

Порядок важен: каждая ступень отсекает свой слой, и если пройти их по очереди, причина находится за несколько минут.

  1. Модель вообще отвечает — без инструментов и без контекста агента:
    openclaw infer model run --local --model <провайдер/модель> --prompt "Reply with exactly: pong" --json
  2. Маршрутизация Gateway — отправляется только промпт, минуя транскрипт, загрузку AGENTS, сборку контекста, инструменты и встроенные MCP-серверы, но задействуя маршрутизацию, авторизацию и выбор провайдера:
    openclaw infer model run --gateway --model <провайдер/модель> --prompt "Reply with exactly: pong" --json
  3. Tool Search — если обе пробы прошли, а реальные ходы агента падают на кривых вызовах или слишком больших запросах. Локальные модели Ollama, LM Studio и управляемые локальные сервисы включают структурный Tool Search автоматически, если tools.toolSearch не задан. Остальным бэкендам его включают явно: tools.toolSearch: { mode: "tools" }. Ключ localModelLean при этом оставьте незаданным или false, иначе потеряете часть инструментов.
  4. Отключить инструменты совсем — крайняя мера: compat.supportsTools: false на записи модели. Агент будет работать без вызовов инструментов. Понимайте, что это значит: вы получаете локальный чат, а не агента.

Есть ещё два ключа совместимости для строгих серверов: compat.requiresStringContent: true, если сервер принимает только строковое messages[].content и падает на структурных массивах частей, и compat.strictMessageKeys: true, если он отвергает записи сообщений с чем-либо помимо role и content. Обе ошибки узнаваемы по тексту в логе и лечатся одной строкой.

Безопасность: у локальной модели нет фильтров провайдера

Об этом стоит сказать прямо, потому что мотив «данные не уходят наружу» легко перепутать с «стало безопаснее». Это разные вещи.

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

Второй момент касается сетевого доверия. Записи пользовательских и локальных провайдеров доверяют ровно тому источнику, который указан в их baseUrl, — включая локальную петлю, локальную сеть, tailnet и частный DNS. Метаданные, link-local и адреса NAT64 локального использования (64:ff9b:1::/48) остаются заблокированными без явного согласия. Запросы к прочим частным источникам требуют отдельного разрешения models.providers.<id>.request.allowPrivateNetwork: true.

И бытовое, но важное: у llmman, например, API вообще без аутентификации, поэтому привязку к локальной петле там не стоит менять, пока сеть не ограничена доверенной границей. Это общее правило для любого локального сервера моделей — он не рассчитан на то, чтобы торчать в интернет.

Отдельная большая тема — что агент с локальной моделью может сделать с вашей машиной, если дать ему доступ к терминалу. Мы разбирали её в материале про песочницу OpenClaw в Docker; для локального запуска она актуальна ровно так же, а с учётом отсутствия фильтров провайдера — даже больше.

Что ломается чаще всего

  • /v1 в адресе Ollama. Симптом — JSON вызова инструмента в тексте ответа. Уберите /v1 и задайте api: "ollama" явно.
  • Ollama не обнаружена. Проверьте, что демон запущен и виден: ollama serve, затем curl http://localhost:11434/api/tags. Для обнаружения на локальной петле должен быть задан OLLAMA_API_KEY или профиль авторизации.
  • Моделей нет в списке. ollama list покажет установленные, ollama pull gemma4 добавит новую. Либо опишите модель в конфиге явно.
  • curl работает, а OpenClaw нет. Почти всегда Gateway живёт не там, где вы проверяете: в контейнере, на другой машине или под другой служебной учётной записью. Проверяйте с того же места: openclaw gateway status --deep.
  • Локальный сервер обрывает поток (terminated, ECONNRESET, обрыв посреди хода). OpenClaw записывает в диагностику вид отказа и снимок памяти процесса — сопоставьте отметку времени с логом сервера моделей, чтобы понять, не убила ли его нехватка памяти.
  • Бесконечная перезагрузка WSL2 с NVIDIA. Официальный установщик Ollama для Linux создаёт службу systemd с Restart=always; при автозапуске она грузит GPU-модель во время загрузки WSL2 и закрепляет память хоста, Windows убивает виртуальную машину, systemd поднимает Ollama снова — и так по кругу. Лечится отключением автозапуска (sudo systemctl disable ollama) и строкой autoMemoryReclaim=disabled в секции [experimental] файла %USERPROFILE%\.wslconfig с последующим wsl --shutdown. Исходное обсуждение — ollama/ollama#11317.
  • Модель «висит» на первом запросе в LM Studio. Чаще всего она просто выгружена — загрузите её заново и держите загруженной.

Когда проще не делать самому

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

Локальный контур — это не установка, а эксплуатация. Сервер должен быть жив круглосуточно, модель — прогрета, драйверы — совместимы с рантаймом, обновления OpenClaw — проверены до того, как их увидит бизнес. Каждая смена модели тянет за собой пересборку контекста, таймаутов и проверки вызова инструментов. А диагностика «агент стал тупить» на локальной модели требует пройти всю лестницу выше, а не написать в поддержку провайдера.

Если локальный запуск нужен вам из-за требований к данным, а не из интереса — соберём локальный контур под ключ: сервер, модель, обновления и присмотр. Состав подписки и актуальные тарифы — на отдельной странице; стоимость самого железа и электричества при этом остаётся вашей, и это честнее любой «единой цены за всё».

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

Можно ли обойтись без видеокарты?

Да, но с оговорками. Рекомендации для CPU в штатном каталоге останавливаются на Qwen3.5 9B — крупнее установщик на процессорном хосте не предложит. И первый ответ на машине без GPU может занимать несколько минут даже после успешной проверки установки. Для фоновых задач это терпимо, для живого диалога — нет.

Какую модель брать первой?

Ту, которая укладывается в память с запасом, а не самую большую из влезающих. Порядок рекомендаций в документации — это продуктовая настройка по умолчанию, а не утверждение, что одна модель выигрывает в любой задаче. Возьмите вариант на ступень ниже предела вашей машины, доведите до рабочего состояния вызов инструментов, и только потом пробуйте укрупняться.

Почему OpenClaw не даёт выбрать модель, которая у меня установлена?

Если она объявлена как предназначенная только для эмбеддингов, выбрать её основной моделью чата нельзя — установка сообщит об ошибке и оставит текущую конфигурацию нетронутой. Модели, умеющие и генерацию, и эмбеддинги, при этом остаются доступными.

Локальная модель полностью заменит облачную?

На многошаговых задачах с инструментами — как правило, нет, и планировать стоит из этого. Практичнее гибрид: локальная модель на служебных и чувствительных задачах, облачная — на сложных. Схема с primary и fallbacks выше делает переключение автоматическим.

Нужен ли ключ Ollama, если сервер стоит в моей локальной сети?

Настоящий — нет. Для локальной петли, частной сети, адресов .local и голых имён хостов достаточно маркера ollama-local. Настоящий ключ требуется только публичным удалённым хостам и Ollama Cloud.

Как не держать тяжёлый сервер запущенным круглосуточно?

Ключ localService у записи провайдера: OpenClaw проверит адрес состояния, поднимет процесс, если тот не отвечает, дождётся готовности и только потом отправит запрос. Если процесс запустил сам OpenClaw и задан idleStopMs, он же его и погасит после простоя. Никаких systemd, launchd или Docker для этого не требуется — сервер становится обычным дочерним процессом.

Насколько быстро всё это устаревает?

Каталог рекомендованных моделей и требования к памяти меняются от релиза к релизу — это самая подвижная часть. Ключи конфигурации (baseUrl, api, contextTokens, timeoutSeconds, params.num_ctx) держатся стабильнее. Правило простое: конфиг переносите, цифры перепроверяйте по документации.