---
read_when:
    - Вы хотите обслуживать модели со своего собственного компьютера с GPU
    - Вы подключаете LM Studio или OpenAI-совместимый прокси
    - Вам нужны самые безопасные рекомендации по локальной модели
summary: Запускайте OpenClaw на локальных LLM (LM Studio, vLLM, LiteLLM, пользовательские конечные точки OpenAI)
title: Локальные модели
x-i18n:
    generated_at: "2026-06-28T22:58:00Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 671c92d78fa29c778fd34b6df027cc8f9e7ad507c9d446700d97cd789becd041
    source_path: gateway/local-models.md
    workflow: 16
---

Локальные модели вполне возможны. Но они также повышают требования к оборудованию, размеру контекста и защите от prompt injection — небольшие или агрессивно квантизованные карты обрезают контекст и ослабляют безопасность. Эта страница — практическое руководство для локальных стеков высокого уровня и пользовательских локальных серверов, совместимых с OpenAI. Для самого простого онбординга начните с [LM Studio](/ru/providers/lmstudio) или [Ollama](/ru/providers/ollama) и `openclaw onboard`.

Для локальных серверов, которые должны запускаться только тогда, когда они нужны выбранной модели, см.
[Сервисы локальных моделей](/ru/gateway/local-model-services).

## Минимальный уровень оборудования

Ориентируйтесь на мощную конфигурацию: **≥2 Mac Studio в максимальной комплектации или эквивалентный GPU-стенд (~$30k+)** для комфортного агентного цикла. Один GPU на **24 GB** подходит только для более легких промптов с большей задержкой. Всегда запускайте **самый крупный / полноразмерный вариант, который можете разместить**; небольшие или сильно квантизованные контрольные точки повышают риск prompt injection (см. [Безопасность](/ru/gateway/security)).

## Выберите бэкенд

| Бэкенд                                               | Когда использовать                                                         |
| ---------------------------------------------------- | --------------------------------------------------------------------------- |
| [ds4](/ru/providers/ds4)                                | Локальный DeepSeek V4 Flash на macOS Metal с совместимыми с OpenAI вызовами инструментов |
| [LM Studio](/ru/providers/lmstudio)                     | Первая локальная настройка, GUI-загрузчик, нативный Responses API           |
| LiteLLM / OAI-proxy / пользовательский OpenAI-совместимый прокси | Вы проксируете API другой модели и хотите, чтобы OpenClaw обрабатывал его как OpenAI |
| MLX / vLLM / SGLang                                  | Высокопроизводительная самостоятельная подача моделей через OpenAI-совместимую HTTP-точку доступа |
| [Ollama](/ru/providers/ollama)                          | CLI-процесс, библиотека моделей, автономный сервис systemd                  |

Используйте Responses API (`api: "openai-responses"`), когда бэкенд его поддерживает (LM Studio поддерживает). В остальных случаях используйте Chat Completions (`api: "openai-completions"`).

<Warning>
**Пользователи WSL2 + Ollama + NVIDIA/CUDA:** официальный Linux-установщик Ollama включает сервис systemd с `Restart=always`. В конфигурациях WSL2 с GPU автозапуск может при загрузке снова загрузить последнюю модель и занять память хоста. Если ваша VM WSL2 многократно перезапускается после включения Ollama, см. [цикл сбоев WSL2](/ru/providers/ollama#wsl2-crash-loop-repeated-reboots).
</Warning>

## Рекомендуется: LM Studio + крупная локальная модель (Responses API)

Лучший актуальный локальный стек. Загрузите крупную модель в LM Studio (например, полноразмерную сборку Qwen, DeepSeek или Llama), включите локальный сервер (по умолчанию `http://127.0.0.1:1234`) и используйте Responses API, чтобы отделять рассуждения от финального текста.

```json5
{
  agents: {
    defaults: {
      model: { primary: "lmstudio/my-local-model" },
      models: {
        "anthropic/claude-opus-4-6": { alias: "Opus" },
        "lmstudio/my-local-model": { alias: "Local" },
      },
    },
  },
  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,
          },
        ],
      },
    },
  },
}
```

**Контрольный список настройки**

- Установите LM Studio: [https://lmstudio.ai](https://lmstudio.ai)
- В LM Studio скачайте **самую крупную доступную сборку модели** (избегайте "small"/сильно квантизованных вариантов), запустите сервер и убедитесь, что `http://127.0.0.1:1234/v1/models` показывает ее в списке.
- Замените `my-local-model` на фактический ID модели, показанный в LM Studio.
- Держите модель загруженной; холодная загрузка добавляет задержку запуска.
- Скорректируйте `contextWindow`/`maxTokens`, если ваша сборка LM Studio отличается.
- Для WhatsApp используйте Responses API, чтобы отправлялся только финальный текст.

Оставляйте размещенные модели настроенными даже при локальном запуске; используйте `models.mode: "merge"`, чтобы резервные варианты оставались доступными.

### Гибридная конфигурация: размещенная основная модель, локальный резерв

```json5
{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-6",
        fallbacks: ["lmstudio/my-local-model", "anthropic/claude-opus-4-6"],
      },
      models: {
        "anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
        "lmstudio/my-local-model": { alias: "Local" },
        "anthropic/claude-opus-4-6": { alias: "Opus" },
      },
    },
  },
  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,
          },
        ],
      },
    },
  },
}
```

### Сначала локальная модель, с размещенной страховкой

Поменяйте местами порядок основной модели и резервов; оставьте тот же блок providers и `models.mode: "merge"`, чтобы можно было переключиться на Sonnet или Opus, когда локальная машина недоступна.

### Региональный хостинг / маршрутизация данных

- Размещенные варианты MiniMax/Kimi/GLM также доступны в OpenRouter с привязанными к региону точками доступа (например, размещенными в США). Выберите там региональный вариант, чтобы удерживать трафик в выбранной юрисдикции и при этом использовать `models.mode: "merge"` для резервов Anthropic/OpenAI.
- Только локальный режим остается самым сильным вариантом для приватности; размещенная региональная маршрутизация — промежуточный вариант, когда нужны функции провайдера, но требуется контроль над потоком данных.

## Другие OpenAI-совместимые локальные прокси

MLX (`mlx_lm.server`), vLLM, SGLang, LiteLLM, OAI-proxy или пользовательские
Gateway работают, если они предоставляют точку доступа OpenAI-стиля
`/v1/chat/completions`. Используйте адаптер Chat Completions, если бэкенд явно
не документирует поддержку `/v1/responses`. Замените блок provider выше на вашу
точку доступа и ID модели:

```json5
{
  agents: {
    defaults: {
      model: { primary: "local/my-local-model" },
    },
  },
  models: {
    mode: "merge",
    providers: {
      local: {
        baseUrl: "http://127.0.0.1:8000/v1",
        apiKey: "sk-local",
        api: "openai-completions",
        timeoutSeconds: 300,
        models: [
          {
            id: "my-local-model",
            name: "Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 120000,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}
```

Если `api` опущен у пользовательского provider с `baseUrl`, OpenClaw по умолчанию использует
`openai-completions`. Пользовательские/локальные записи provider доверяют своему точно настроенному
источнику `baseUrl` для защищенных запросов к моделям, включая loopback, LAN, tailnet
и private DNS hosts. Запросам к другим частным источникам по-прежнему нужен
`request.allowPrivateNetwork: true`; источники metadata/link-local остаются заблокированными
без явного включения. Установите `false`, чтобы отказаться от доверия точному источнику.

Значение `models.providers.<id>.models[].id` является локальным для provider. Не
включайте туда префикс provider. Например, сервер MLX, запущенный с
`mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit`, должен использовать этот
ID каталога и ссылку на модель:

- `models.providers.mlx.models[].id: "mlx-community/Qwen3-30B-A3B-6bit"`
- `agents.defaults.model.primary: "mlx/mlx-community/Qwen3-30B-A3B-6bit"`

Задайте `input: ["text", "image"]` для локальных или проксируемых vision-моделей, чтобы вложения
изображений включались в ходы агента. Интерактивный онбординг пользовательского provider
распознает распространенные ID vision-моделей и спрашивает только о неизвестных именах.
Неинтерактивный онбординг использует то же распознавание; используйте `--custom-image-input`
для неизвестных vision ID или `--custom-text-input`, когда модель с похожим на vision именем
на вашей точке доступа работает только с текстом.

Оставьте `models.mode: "merge"`, чтобы размещенные модели оставались доступными как резервы.
Используйте `models.providers.<id>.timeoutSeconds` для медленных локальных или удаленных серверов
моделей, прежде чем увеличивать `agents.defaults.timeoutSeconds`. Тайм-аут provider
применяется только к HTTP-запросам модели, включая подключение, заголовки, потоковую передачу тела
и общий защищенный fetch abort. Если тайм-аут агента или запуска ниже, увеличьте
и этот предел, потому что тайм-ауты provider не могут продлить весь запуск агента.

<Note>
Для пользовательских OpenAI-совместимых provider сохраняемый несекретный локальный маркер, такой как `apiKey: "ollama-local"`, принимается, когда `baseUrl` разрешается в loopback, частную LAN, `.local` или bare hostname. OpenClaw обрабатывает его как допустимые локальные учетные данные вместо сообщения об отсутствующем ключе. Используйте реальное значение для любого provider, который принимает публичное имя хоста.
</Note>

Примечание о поведении для локальных/проксируемых бэкендов `/v1`:

- OpenClaw обрабатывает их как proxy-style OpenAI-совместимые маршруты, а не как нативные
  точки доступа OpenAI
- формирование запросов, предназначенное только для нативного OpenAI, здесь не применяется: нет
  `service_tier`, нет Responses `store`, нет формирования payload для совместимости с OpenAI reasoning
  и нет подсказок prompt cache
- скрытые заголовки атрибуции OpenClaw (`originator`, `version`, `User-Agent`)
  не добавляются в эти пользовательские proxy URLs

Примечания о совместимости для более строгих OpenAI-совместимых бэкендов:

- Некоторые серверы принимают в Chat Completions только строковый `messages[].content`, а не
  структурированные массивы частей содержимого. Для таких точек доступа задайте
  `models.providers.<provider>.models[].compat.requiresStringContent: true`.
- Некоторые локальные модели выводят отдельные заключенные в скобки текстовые запросы инструментов, например
  `[tool_name]`, за которым следует JSON и `[END_TOOL_REQUEST]`. OpenClaw преобразует
  их в реальные вызовы инструментов только когда имя точно совпадает с зарегистрированным
  инструментом для хода; иначе блок считается неподдерживаемым текстом и
  скрывается из видимых пользователю ответов.
- Если модель выводит JSON, XML или текст в стиле ReAct, похожий на вызов инструмента,
  но provider не выдал структурированный вызов, OpenClaw оставляет это как
  текст и пишет предупреждение с run id, provider/model, обнаруженным паттерном и
  именем инструмента, когда оно доступно. Считайте это несовместимостью provider/model с вызовами инструментов,
  а не завершенным запуском инструмента.
- Если инструменты появляются как текст ассистента вместо запуска, например raw JSON,
  XML, синтаксис ReAct или пустой массив `tool_calls` в ответе provider,
  сначала проверьте, что сервер использует chat template/parser с поддержкой вызовов инструментов. Для
  OpenAI-совместимых бэкендов Chat Completions, у которых parser работает только при принудительном
  использовании инструментов, задайте переопределение запроса для отдельной модели вместо зависимости от текстового
  парсинга:

  ```json5
  {
    agents: {
      defaults: {
        models: {
          "local/my-local-model": {
            params: {
              extra_body: {
                tool_choice: "required",
              },
            },
          },
        },
      },
    },
  }
  ```

  Используйте это только для моделей/сессий, где каждый обычный ход должен вызывать инструмент.
  Это переопределяет стандартное proxy-значение OpenClaw `tool_choice: "auto"`.
  Замените `local/my-local-model` на точную ссылку provider/model, показанную
  `openclaw models list`.

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

- Если пользовательская OpenAI-совместимая модель принимает OpenAI reasoning efforts за пределами
  встроенного профиля, объявите их в блоке compat модели. Добавление `"xhigh"`
  здесь делает уровень доступным для `/think xhigh`, селекторов сессий, проверки Gateway и проверки `llm-task`
  для этой настроенной ссылки provider/model:

  ```json5
  {
    models: {
      providers: {
        local: {
          baseUrl: "http://127.0.0.1:8000/v1",
          apiKey: "sk-local",
          api: "openai-responses",
          models: [
            {
              id: "gpt-5.4",
              name: "GPT 5.4 via local proxy",
              reasoning: true,
              input: ["text"],
              cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
              contextWindow: 196608,
              maxTokens: 8192,
              compat: {
                supportedReasoningEfforts: ["low", "medium", "high", "xhigh"],
                reasoningEffortMap: { xhigh: "xhigh" },
              },
            },
          ],
        },
      },
    },
  }
  ```

## Меньшие или более строгие бэкенды

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

1. **Подтвердите, что сама локальная модель отвечает.** Без инструментов, без контекста агента:

   ```bash
   openclaw infer model run --local --model <provider/model> --prompt "Reply with exactly: pong" --json
   ```

2. **Подтвердите маршрутизацию Gateway.** Отправляет только переданный промпт: пропускает транскрипт, начальную загрузку AGENTS, сборку контекстного движка, инструменты и встроенные MCP-серверы, но по-прежнему проверяет маршрутизацию Gateway, аутентификацию и выбор провайдера:

   ```bash
   openclaw infer model run --gateway --model <provider/model> --prompt "Reply with exactly: pong" --json
   ```

3. **Попробуйте экономный режим.** Если обе проверки проходят, но реальные обращения агента завершаются ошибками из-за некорректных вызовов инструментов или слишком больших промптов, включите `agents.defaults.experimental.localModelLean: true`. Он убирает три самых тяжелых инструмента по умолчанию (`browser`, `cron`, `message`) и по умолчанию скрывает более крупные каталоги инструментов за структурированными элементами управления поиском инструментов, кроме запусков, которым нужно сохранить семантику прямой доставки `message`. Полное объяснение, когда это использовать и как подтвердить, что режим включен, см. в [Экспериментальные функции → Экономный режим локальной модели](/ru/concepts/experimental-features#local-model-lean-mode).

4. **Полностью отключите инструменты как крайнее средство.** Если экономного режима недостаточно, задайте `models.providers.<provider>.models[].compat.supportsTools: false` для этой записи модели. После этого агент будет работать на этой модели без вызовов инструментов.

5. **После этого узкое место находится выше по стеку.** Если бэкенд по-прежнему падает только на более крупных запусках OpenClaw после экономного режима и `supportsTools: false`, оставшаяся проблема обычно связана с вышестоящей моделью или емкостью сервера: контекстным окном, памятью GPU, вытеснением kv-cache или ошибкой бэкенда. На этом этапе это уже не транспортный слой OpenClaw.

## Устранение неполадок

- Gateway может подключиться к прокси? `curl http://127.0.0.1:1234/v1/models`.
- Модель LM Studio выгружена? Перезагрузите ее; холодный запуск часто приводит к «зависанию».
- Локальный сервер сообщает `terminated`, `ECONNRESET` или закрывает поток в середине обращения?
  OpenClaw записывает низкокардинальный `model.call.error.failureKind`, а также снимок RSS/heap процесса
  OpenClaw в диагностике. При нехватке памяти в LM Studio/Ollama
  сопоставьте эту временную метку с журналом сервера или журналом сбоев macOS /
  журналом jetsam, чтобы подтвердить, был ли сервер модели завершен.
- OpenClaw выводит пороги предварительной проверки контекстного окна из обнаруженного окна модели или из неограниченного окна модели, когда `agents.defaults.contextTokens` уменьшает эффективное окно. Он предупреждает ниже 20% с минимальным порогом **8k**. Жесткая блокировка использует порог 10% с минимальным порогом **4k**, ограниченный эффективным контекстным окном, чтобы завышенные метаданные модели не могли отклонить в остальном допустимое пользовательское ограничение. Если вы столкнулись с такой предварительной проверкой, увеличьте лимит контекста сервера/модели или выберите модель большего размера.
- Ошибки контекста? Уменьшите `contextWindow` или увеличьте лимит сервера.
- OpenAI-совместимый сервер возвращает `messages[].content ... expected a string`?
  Добавьте `compat.requiresStringContent: true` в эту запись модели.
- OpenAI-совместимый сервер возвращает `validation.keys` или сообщает, что записи сообщений допускают только `role` и `content`?
  Добавьте `compat.strictMessageKeys: true` в эту запись модели.
- Прямые маленькие вызовы `/v1/chat/completions` работают, но `openclaw infer model run --local`
  завершается ошибкой на Gemma или другой локальной модели? Сначала проверьте URL провайдера, ссылку на модель, маркер аутентификации и журналы сервера; локальный `model run` не включает инструменты агента.
  Если локальный `model run` успешно выполняется, но более крупные обращения агента завершаются ошибкой, уменьшите набор инструментов агента с помощью `localModelLean` или `compat.supportsTools: false`.
- Вызовы инструментов отображаются как сырой текст JSON/XML/ReAct или провайдер возвращает
  пустой массив `tool_calls`? Не добавляйте прокси, который слепо преобразует текст ассистента
  в выполнение инструментов. Сначала исправьте chat template/parser сервера. Если
  модель работает только при принудительном использовании инструментов, добавьте приведенное выше переопределение
  `params.extra_body.tool_choice: "required"` для отдельной модели и используйте эту запись модели
  только для сессий, где вызов инструмента ожидается на каждом обращении.
- Безопасность: локальные модели пропускают фильтры на стороне провайдера; держите агентов узко ограниченными и включайте Compaction, чтобы ограничить радиус поражения prompt injection.

## Связанные материалы

- [Справочник по конфигурации](/ru/gateway/configuration-reference)
- [Переключение моделей при сбое](/ru/concepts/model-failover)
