Все системы работают Ваш IP: 216.73.217.113 info@cloudhosting.lv +371 66 66 29 69 Личный кабинет

← Все вопросы

OpenClaw и Ollama: запуск локальных моделей

Обновлено:

OpenClaw может работать полностью на локальной модели: установите Ollama, скачайте модель с поддержкой вызова инструментов (tool calling) и укажите OpenClaw на нативную конечную точку Ollama на порту 11434 с настройкой провайдера api: "ollama". Правило, на котором спотыкается большинство, записано в официальной документации: не используйте для Ollama OpenAI-совместимый URL /v1, потому что он ломает вызов инструментов, и модель начинает печатать сырой JSON вызова инструмента как текст. Модель класса 9B, например qwen3.5:9b или gemma4, помещается в GPU на 12-16 ГБ и даёт вам приватного ассистента с нулевой стоимостью каждого сообщения; на машине только с CPU она тоже работает, но придётся подождать.

Зачем запускать OpenClaw на локальной модели

OpenClaw является шлюзом персонального AI-агента: он стоит между мессенджером (в нашей конфигурации Telegram) и LLM и от имени модели запускает инструменты, например команды оболочки, браузер или MCP-серверы. Укажите его на Ollama, и каждый промпт, файл и результат инструмента остаётся на оборудовании, которое контролируете вы, без платы за токены и без лимитов провайдера. Цена вопроса состоит в возможностях: модель, помещающаяся в один GPU, слабее всего именно в том, что делает агента агентом, то есть в выборе инструмента и формировании корректного вызова.

Шаг 1: установите Ollama и скачайте модель с поддержкой инструментов

На Linux официальный установщик настраивает Ollama как сервис systemd на 127.0.0.1:11434:

curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3.5:9b
curl http://localhost:11434/api/tags

Последняя команда выводит список моделей на диске; если она отвечает, демон работает. Ollama также поставляется как Docker-образ: docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama, для карт NVIDIA добавьте --gpus=all, а для AMD используйте тег ollama/ollama:rocm вместе с --device /dev/kfd --device /dev/dri.

Выбор модели важнее всего. Страница настройки OpenClaw задаёт минимум: поддержка инструментов и контекст не менее 16K токенов. Собственная страница интеграции Ollama с OpenClaw рекомендует для локальных моделей не менее 64K. Каждая страница библиотеки Ollama показывает значки возможностей; ищите "tools" (на ollama.com/search есть фильтр по нему). По состоянию на сентябрь 2026 года подходят и qwen3.5 (зрение, инструменты, рассуждение), и gemma4 (зрение, инструменты, рассуждение, аудио); gemma4 является вариантом по умолчанию, который предлагает страница настройки OpenClaw. Модель без значка tools прекрасно общается и молча отказывает в тот момент, когда OpenClaw просит её что-то выполнить.

Шаг 2: укажите OpenClaw на Ollama (нативный API, а не /v1)

Когда Ollama и шлюз находятся на одной машине, самый быстрый путь состоит в автообнаружении (discovery):

export OLLAMA_API_KEY="ollama-local"
openclaw models list --provider ollama
openclaw models set ollama/qwen3.5:9b
openclaw models status

Согласно документации по обнаружению моделей, когда задан OLLAMA_API_KEY и нет явного блока провайдера, OpenClaw опрашивает http://127.0.0.1:11434, читает каталог из /api/tags и через /api/show запрашивает у каждой модели размер контекстного окна и её флаги зрения, инструментов и рассуждения. Значение ollama-local служит заполнителем для локальных хостов и хостов в LAN; документация говорит, что там подойдёт любое значение.

Для всего, что выходит за рамки умолчаний (другой хост, зафиксированный контекст, таймауты), объявите провайдера явно в файле ~/.openclaw/openclaw.json. Документация читает этот файл как JSON5, поэтому обычный JSON, как в блоке ниже, принимается всегда. Этот блок повторяет официальный рецепт:

{
  "models": {
    "providers": {
      "ollama": {
        "baseUrl": "http://127.0.0.1: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" }
    }
  }
}

Важны три детали. Во-первых, у baseUrl нет суффикса /v1. Ollama действительно предоставляет OpenAI-совместимую конечную точку, и большинство сторонних руководств её используют, но документация OpenClaw однозначна: /v1 включает OpenAI-совместимый режим, в котором вызов инструментов ненадёжен, а модели могут выдавать сырой JSON вызова инструмента как текст. Нативный режим общается с /api/chat Ollama, который обрабатывает стриминг и вызов инструментов вместе. Во-вторых, непустой список models отключает автообнаружение, поэтому перечислите каждую нужную модель. В-третьих, ссылки на модели имеют вид provider/model: ollama/qwen3.5:9b.

Шлюз применяет многие изменения конфигурации на лету, но документация говорит, что некоторые требуют перезапуска, поэтому после смены провайдера перезапустите его (в наших развёртываниях он работает как контейнер ghcr.io/openclaw/openclaw). Затем проверьте всю цепочку пробной командой из документации по локальным моделям:

openclaw infer model run --gateway --model ollama/qwen3.5:9b --prompt "Reply with exactly: pong" --json

Какие модели помещаются в какую RAM и VRAM

Размеры загрузки и приведённые цифры VRAM взяты из библиотеки Ollama и страницы интеграции Ollama с OpenClaw, сентябрь 2026; колонка "реальный домашний ПК" является нашей оценкой по этим числам. Размер загрузки равен размеру квантованного файла весов; вам нужно столько памяти плюс место под контекст, а контекст 32K-64K у модели 9B добавляет несколько гигабайт.

Тег моделиЗагрузкаРеальный домашний ПКПримечания
qwen3.5:4b3.4 ГБ8 ГБ RAM, CPU или небольшой GPUЗначок tools; чат и простые команды
qwen3.5:9b6.6 ГБ12-16 ГБ VRAM (Ollama указывает около 11 ГБ)Наш выбор по умолчанию для локальных агентов; инструменты, рассуждение, зрение
gemma4 (e4b)9.6 ГБ16 ГБ VRAM (Ollama указывает около 16 ГБ)Вариант по умолчанию, предлагаемый OpenClaw; инструменты, рассуждение, зрение, аудио
gemma4:12b7.6 ГБ16 ГБ VRAMНативный контекст 256K
qwen3.5:27b17 ГБ24 ГБ VRAM или большеЛучшая дисциплина инструментов; нужна настоящая GPU-машина
qwen3.5:35b / gemma4:31b20-24 ГБ32 ГБ VRAM или два GPUРабочая станция или выделенный AI-сервер

Две проверки. ollama ps показывает колонку PROCESSOR: "100% GPU" означает, что вся модель находится в VRAM, смешанное значение означает, что она разделена с системной RAM и скорость резко падает. А документация OpenClaw по локальным моделям предупреждает, что модель, отвечающая на короткий промпт, всё равно может провалить агентский ход; тестируйте на реальной задаче.

Где работает Ollama: та же VM или отдельная GPU-машина

Та же VM, только CPU. Самый дешёвый вариант; модель 4B-9B с небольшим контекстом работает, но рассчитывайте на ответы за десятки секунд и на ходы с множеством инструментов за минуты, в зависимости от CPU. Подходит, чтобы освоить стек до оплаты GPU-времени. Одна ловушка, когда шлюз работает в Docker, как у нас: внутри контейнера 127.0.0.1 означает сам контейнер, а не VM, поэтому http://127.0.0.1:11434 получает "connection refused"; страница устранения неполадок Ollama в документации OpenClaw перечисляет ровно этот случай, baseUrl, указывающий на localhost, пока шлюз работает в Docker или на другом хосте. Либо запустите Ollama вторым контейнером в той же сети Docker и обращайтесь к ней по имени, либо привяжите Ollama к адресу, отличному от loopback, как описывает FAQ Ollama для systemd:

sudo systemctl edit ollama.service
# add under [Service]:
Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl daemon-reload && sudo systemctl restart ollama

У локального демона Ollama нет встроенной аутентификации (поэтому ключ-заполнитель OpenClaw никогда не проверяется), так что если вы привязываете его ко всем интерфейсам, откройте порт 11434 в файрволе только для хоста шлюза. Никогда не выставляйте его, как и порт шлюза OpenClaw, в интернет: у шлюза уже была уязвимость удалённого выполнения кода в один клик (CVE-2026-25253).

Отдельная GPU-машина в локальной сети. Именно такую схему показывают рецепты OpenClaw: шлюз на небольшой постоянно включённой VM, инференс на машине с нормальным GPU. Укажите в baseUrl этот хост, поднимите timeoutSeconds, чтобы холодная загрузка не упёрлась в таймаут, и зафиксируйте keep_alive, чтобы модель оставалась в памяти (по умолчанию Ollama выгружает её через 5 минут). Документация даже показывает два провайдера Ollama одновременно, ollama-fast на небольшой машине и ollama-large на GPU-машине в качестве резерва. Если своего GPU у вас нет, арендованный с 16-24 ГБ VRAM закрывает диапазон 9B-27B; смотрите наши AI-серверы и статью какой сервер выбрать для локальной AI-модели.

Контекстное окно: настройка, которую все упускают

Длина контекста Ollama по умолчанию равна 4096 токенам. Этого хватает для чата и не хватает для агента: системный промпт OpenClaw, определения инструментов и история сами по себе могут её превысить, и тогда модель теряет начало хода, а работа с инструментами деградирует. Нижняя граница OpenClaw равна 16K; страница Ollama про OpenClaw рекомендует 64K. Поднимите её глобально через OLLAMA_CONTEXT_LENGTH=32768 в окружении сервиса Ollama или для каждой модели в openclaw.json, как выше, где contextTokens ограничивает то, что отправляет OpenClaw, а params.num_ctx сообщает Ollama, сколько выделить (если num_ctx не задан, OpenClaw выводит его из contextTokens, согласно странице расширенных настроек). Контекст стоит памяти, так что именно этот параметр вы размениваете на размер модели при фиксированном GPU.

Задержка и качество в сравнении с облачными API

Облачные модели выигрывают в чистых возможностях и во времени до первого токена. Локальная модель 9B выигрывает в приватности, стоимости при больших объёмах и предсказуемости: нет лимитов, нет снятия моделей с поддержки, нет счёта за ушедший вразнос цикл. Проигрывает она в самой агентской нагрузке; страница OpenClaw по локальным моделям предупреждает о некорректных вызовах инструментов и слишком больших промптах на полных агентских ходах. Два задокументированных способа смягчить проблему: включите Tool Search (tools.toolSearch: { "mode": "tools" }), чтобы модель видела схемы инструментов по запросу, и в крайнем случае задайте провайдеру compat.supportsTools: false, превратив эту модель в обычного чат-бота.

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

Сочетание локальной модели с облачной

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

Цепочка резервов. agents.defaults.model.fallbacks перебираются по порядку, когда основная модель не отвечает. Локальная основная, облачная в резерве: облачный ключ тратится только тогда, когда локальная машина недоступна. Это устойчивость, а не маршрутизация.

Модели на уровне агентов. Под agents.entries каждый агент несёт собственный model, а привязки (bindings) сопоставляют каналы, аккаунты или конкретных собеседников с агентами. Минимальное разделение (идентификаторы моделей как в документации OpenClaw; используйте то, что предлагает ваш облачный аккаунт):

{
  "agents": {
    "entries": {
      "chat": { "default": true, "model": "ollama/qwen3.5:9b" },
      "work": { "model": "anthropic/claude-sonnet-4-6",
                "tools": { "allow": ["exec", "read", "write"] } }
    }
  },
  "bindings": [
    { "agentId": "work", "match": { "channel": "telegram", "accountId": "work-bot" } }
  ]
}

Страница про мультиагентность документирует поля match и их приоритет (сначала точный собеседник, затем аккаунт и канал, вплоть до агента по умолчанию) и показывает ровно эту схему для Telegram: один бот на агента, сопоставляемый по channel: "telegram" плюс accountId, определённому под channels.telegram.accounts. Итого: один бот на локальном агенте для повседневных вопросов, второй на облачном агенте с включённым exec.

Переключение в разговоре. Чат-команда /model меняет модель на лету: /model ollama/qwen3.5:9b -s фиксирует её для текущей сессии, -a обновляет умолчание агента, а -g глобальное умолчание (оба варианта только для владельца). Псевдонимы под agents.defaults.models позволяют писать /model local или /model big.

Чек-лист по устранению неполадок

  • Connection refused: ollama serve, затем curl http://localhost:11434/api/tags; с удалённого шлюза openclaw gateway status --deep. Проверьте файрволы и ловушку loopback в Docker.
  • Вызовы инструментов приходят обычным текстом: вы на /v1. Уберите суффикс и задайте "api": "ollama".
  • Нет доступных моделей: скачайте модель или перечислите её под models.providers.ollama.models.
  • Медленный первый ответ: timeoutSeconds 300 и keep_alive 15m.
  • Странные ответы в длинных чатах: maxTokens 8192, contextTokens и num_ctx 32768, и убедитесь через ollama ps, что модель целиком на GPU.
  • Общее состояние: openclaw doctor --fix.

Если вы предпочитаете пропустить установку шлюза и начать сразу с шага 1 этой статьи, наш готовый сервер OpenClaw (от 9.35 EUR в месяц) поставляется со шлюзом, предустановленным в Docker, привязанным к вашему аккаунту Telegram, с инструментами в песочнице; добавление Ollama сводится тогда к блоку конфигурации выше. Более широкую картину затрат смотрите в статье стоимость собственного AI против API.

Вопросы

Можно ли использовать с OpenClaw OpenAI-совместимую конечную точку /v1 у Ollama?

Документация OpenClaw говорит, что не стоит. Путь /v1 переводит провайдера в OpenAI-совместимый режим, где вызов инструментов ненадёжен и модель может печатать JSON вызова инструмента как текст. Используйте baseUrl без /v1 и "api": "ollama".

С какой локальной модели начать?

Для GPU на 12-16 ГБ подойдут qwen3.5:9b или gemma4; у обеих есть значок tools, и обе названы в документации OpenClaw и Ollama. На машине только с CPU начните с qwen3.5:4b и контекста 16K, чтобы понять, приемлема ли задержка, прежде чем платить за GPU-время.

Направляет ли OpenClaw простые вопросы локальной модели, а сложные облачному API автоматически?

Нет. Задокументированные механизмы состоят из цепочки резервов (облачная модель используется только при отказе локальной), моделей на уровне агентов с привязками по каналу или собеседнику и команды /model для переключения внутри сессии. Более умную маршрутизацию вы строите поверх, например второго бота, привязанного к облачному агенту.

Почему модель, которая нормально общается, ломается, когда OpenClaw использует инструменты?

Обычно по одной из трёх причин: у модели нет поддержки инструментов, контекст остался на умолчании Ollama в 4096, и схемы инструментов вытесняют разговор из памяти, или провайдер сидит на пути /v1. Исправляйте по порядку; если небольшая модель всё ещё формирует некорректные вызовы, включите Tool Search или задайте compat.supportsTools: false.

Хотите, чтобы это работало приватно?
AI-ассистент на своём сервере в ЕС, и данные остаются там, куда вы их положили.
Посмотреть цены

Готовы начать?

Запустите за минуты или обсудите с инженером, что подходит вашему проекту.