pimenov.ai

База знаний

Как поднять свою LLM и подключить к Codex

Как поднять локальную LLM через Ollama и Open WebUI и подключить её к Codex CLI: рабочий контур для приватной работы с моделями без утечки данных.

Опубликовано Обновлено

Практическое руководство по локальному контуру на базе Ollama, Open WebUI и Codex CLI. Такой контур можно использовать для кода и документов, если внешние функции и сетевые подключения настроены с учётом требований к данным.

📌
Главная мысль: локальная модель даёт контроль над маршрутом данных, но не гарантирует полную изоляцию. Codex, Open WebUI, плагины, MCP-серверы (внешние серверы инструментов) и веб-поиск нужно настраивать отдельно.

Целевая архитектура локального контура

Ollama запускает локальную модель и предоставляет частично совместимый с OpenAI API интерфейс на http://localhost:11434/v1/. Open WebUI использует Ollama для чата и RAG (retrieval-augmented generation, поиск по документам с добавлением найденного контекста), а Codex CLI подключается к совместимому API как кодинг-агент.

flowchart LR
    A[Mac или Linux] --> B[Ollama и локальная модель]
    B --> C[API localhost:11434]
    C --> D[Open WebUI]
    C --> E[Codex CLI]
    D --> F[Чат и документы]
    E --> G[Локальный репозиторий]

Локальными остаются запросы, которые идут к локальной модели без внешних функций. Веб-поиск, облачные модели, подключения Open WebUI к сторонним провайдерам и инструменты, работающие через внешние API, могут отправлять данные за пределы машины.

Чеклист быстрой проверки

Пройдите эти пункты до работы с чувствительными данными:

Ollama установлен с официального сайта.
Нужная модель заранее скачана на машину.
http://localhost:11434/v1/models возвращает список моделей.
Для задачи хватает памяти и контекста.
Если запускается Codex, контекст выбранной модели соответствует рекомендации не менее 64K токенов.
Порт 11434 не опубликован в интернет.
Ненужное облачное подключение OpenAI в Open WebUI удалено.
В Codex отключён веб-поиск, если нужен изолированный сеанс.
Плагины, MCP-серверы и другие внешние инструменты не подключены без необходимости.
Мониторинг сети не показывает неожиданных исходящих соединений во время тестовой задачи.

Рекомендация о контексте от 64K относится к длительным агентным сессиям Codex. Модели Qwen2.5-Coder из каталога Ollama имеют контекст 32K, поэтому их следует рассматривать для чата и ограниченных кодовых задач, а не как универсальный вариант для длинного агентного сеанса.

Что потребуется

  • Ollama — рантайм модели и локальный API.
  • Docker — рекомендуемый способ запуска Open WebUI.
  • Codex CLI — устанавливается командой npm install -g @openai/codex.
  • Свободная память — потребление зависит от модели, квантования, длины контекста и ускорителя.
  • Модель с поддержкой инструментов — API Ollama поддерживает вызов инструментов, но конкретная модель должна уметь корректно ими пользоваться.

Не оценивайте требования только по числу параметров. Карточка Qwen2.5-Coder в каталоге Ollama указывает размеры артефактов около 4,7 ГБ для 7B, 9,0 ГБ для 14B и 20 ГБ для 32B. Это размер файлов модели, а не универсальная оценка пикового потребления памяти во время работы.

⚖️
Ограничение Qwen2.5-Coder: все перечисленные варианты этой серии в каталоге Ollama имеют контекст 32K, тогда как руководство Ollama по интеграции с Codex рекомендует не менее 64K. Для длинных агентных сессий выбирайте модель с большим контекстом и проверяйте поддержку инструментов.

Установка Ollama и проверка API

Установите Ollama с официального сайта. Затем скачайте модель, например:

ollama pull qwen2.5-coder:14b

Проверьте OpenAI-совместимую конечную точку:

curl http://localhost:11434/v1/models

Успешный результат — JSON со скачанными моделями. Ollama поддерживает /v1/chat/completions, /v1/responses и вызов инструментов. Совместимость с OpenAI API частичная, поэтому наличие конечной точки не означает поддержку каждого поля и сценария клиента.

Для OpenAI-совместимых клиентов поле API-ключа может быть обязательным, но Ollama его игнорирует. В /v1/responses поддерживается только stateless-вариант: previous_response_id и conversation для stateful-сценариев не поддерживаются.

⚠️
Не публикуйте порт 11434 в интернет. Для доступа с другой машины используйте закрытую сеть, VPN или защищённый туннель и ограничьте доступ межсетевым экраном.

Запуск Open WebUI через Docker

В проверенном 8 сентября 2026 года официальном быстром старте Open WebUI рекомендуются Docker и фиксированный WEBUI_SECRET_KEY. Сначала сгенерируйте ключ:

openssl rand -hex 32

Подставьте результат вместо your-secret-key:

docker run -d \
  -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  -e WEBUI_SECRET_KEY=your-secret-key \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Откройте http://localhost:3000. Первая созданная учётная запись получает права администратора. Чаты, пользователи и настройки сохраняются в Docker volume open-webui; не запускайте контейнер без этого тома при обновлении.

В разделе Settings → Admin → Connections Open WebUI подключается к Ollama через http://host.docker.internal:11434 из Docker. Если список моделей пуст, проверьте журналы:

docker logs -f open-webui

Когда Open WebUI работает в Docker, официальная инструкция подключения указывает, что Ollama на хосте должен слушать 0.0.0.0, а не только loopback-интерфейс. Это расширяет сетевую поверхность: ограничьте порт межсетевым экраном и доверенной сетью, но не открывайте его в интернет.

Как уменьшить фоновые обращения Open WebUI

Стандартная установка Open WebUI может проверять версию через GitHub, запрашивать список моделей у подключения OpenAI и проверять обновления локальной модели эмбеддингов через Hugging Face. Для локального сценария добавьте к команде запуска эти переменные окружения до имени образа:

-e ENABLE_VERSION_UPDATE_CHECK=false \
-e ENABLE_OPENAI_API=false \
-e RAG_EMBEDDING_MODEL_AUTO_UPDATE=false

ENABLE_OPENAI_API=false убирает запрос к подключению OpenAI по умолчанию. Если облачное подключение, веб-поиск или сторонний плагин всё же включены, данные могут уйти во внешнюю систему.

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

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

Подключение Codex CLI к Ollama

Быстрый путь через Ollama

Установите Codex CLI:

npm install -g @openai/codex

Затем используйте штатную интеграцию Ollama:

ollama launch codex

Команда обновляет каталог моделей и использует отдельный профиль Codex для текущего сеанса. Подготовить конфигурацию без запуска можно так:

ollama launch codex --config

Удалить профиль Ollama и созданный каталог моделей можно командой:

ollama launch codex --restore

Ручной запуск через --oss

Для запуска Codex с открытой моделью используйте:

codex --oss

Конкретную модель можно передать флагом -m:

codex --oss -m gpt-oss:120b

Перед запуском модель должна быть доступна локальному Ollama. Для Codex также учитывайте рекомендацию о контексте не менее 64K токенов.

Эталонный постоянный профиль

Текущая официальная интеграция Ollama использует отдельный файл наподобие ~/.codex/ollama-launch.config.toml:

# Модель должна быть доступна локальному Ollama.
model = "gpt-oss:120b"
model_provider = "ollama-launch"

# Замените путь на путь к каталогу вашей системы.
model_catalog_json = "/Users/you/.codex/model.json"

[model_providers.ollama-launch]
name = "Ollama"
base_url = "http://localhost:11434/v1/"
# Codex использует Responses API в этом профиле.
wire_api = "responses"

Проще дать ollama launch codex --config сформировать файл, а затем проверить модель, путь к каталогу и провайдера. При ручной сборке профиля сверяйте эти поля с актуальной интеграцией, поскольку конфигурация Codex меняется между версиями.

Веб-поиск и границы локальности

Запросы веб-поиска через профиль Ollama выполняются Ollama как для локальных, так и для облачных моделей. Для использования сервиса веб-поиска требуется вход через ollama signin. Поэтому адрес localhost сам по себе не доказывает отсутствие внешнего трафика.

Для изолированного сеанса отключите поиск явно:

codex --profile ollama-launch -c 'web_search="disabled"'

Не подключайте MCP-серверы и другие инструменты, которые обращаются к внешним API, если задача требует строгой локальности.

Эталонный сценарий запуска

# 1. Проверить Ollama
curl http://localhost:11434/v1/models

# 2. Подготовить профиль Codex
ollama launch codex --config

# 3. Запустить Codex без веб-поиска
codex --profile ollama-launch -c 'web_search="disabled"'

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

Проверка результата

/v1/models возвращает выбранную модель.
Open WebUI открывается на localhost:3000 и отвечает в новом чате.
Codex запускается через ollama launch codex, --oss или профиль ollama-launch.
Если это предусмотрено выбранной моделью, Codex выполняет простую задачу с инструментами.
Веб-поиск Codex отключён для изолированного сеанса.
Ненужные облачные подключения и фоновые проверки Open WebUI отключены.
Во время теста отсутствуют неожиданные исходящие запросы.

Проверять только обращения к api.openai.com недостаточно. Трафик может идти к GitHub, Hugging Face, Ollama или другому настроенному провайдеру.

Полезные сценарии

Код под NDA

Исходные данные — закрытый репозиторий. Запустите Codex с локальным профилем внутри рабочей папки и поручите ему объяснить файл, найти дефект или подготовить правку. Проверяемый результат — локальный diff и пройденные тесты. Сценарий не подходит, если подключённый инструмент отправляет содержимое репозитория наружу.

Обработка чувствительных логов

Исходные данные — локальный access.log с обезличенными или чувствительными записями. Попросите Codex написать и выполнить локальный скрипт агрегации, например для подсчёта ошибок 5xx и создания CSV. Проверьте созданный файл, код и настройки внешних подключений перед запуском.

Чат по внутренним документам

Загрузите документы в Open WebUI и используйте локальный поиск по ним. Проверяемый результат — ответы на контрольные вопросы, сведения для которых действительно присутствуют в документах. Перед загрузкой проверьте модель эмбеддингов, провайдера чата и сетевые соединения.

Работа без интернета

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

Рутинные кодовые задачи

Локальная модель подходит для черновиков тестов, документации и повторяющихся преобразований. Качество проверяйте тестами и ревью; сложные изменения могут потребовать более сильной модели.

Типичные ошибки

  • Модель не помещается в память. Выберите меньшую или сильнее квантованную модель и сократите контекст.
  • Codex зависает на длинном запросе. Проверьте длину контекста, скорость модели и объём переданных файлов.
  • Инструменты не вызываются. Убедитесь, что выбранная модель и используемый API поддерживают вызов инструментов.
  • Open WebUI не видит Ollama. Проверьте host.docker.internal, журналы контейнера и доступность порта с точки зрения контейнера. Для Docker также проверьте сетевую привязку Ollama.
  • Локальный сеанс создаёт внешний трафик. Отключите веб-поиск, облачные подключения, проверки обновлений и сторонние плагины.
  • Ответы слишком слабые для проекта. Используйте локальную модель для чувствительных или ограниченных задач, а сложную работу переносите в разрешённый вашей политикой контур.

Антипаттерны

  • ❌ Выставлять Ollama в интернет без аутентификации и сетевых ограничений.
  • ❌ Считать любой профиль с localhost полностью изолированным без проверки трафика.
  • ❌ Использовать модель с коротким контекстом для большого репозитория.
  • ❌ Загружать приватные документы до проверки провайдера эмбеддингов и плагинов.
  • ❌ Оценивать необходимую память только по размеру файла модели.
  • ❌ Принимать код локальной модели без тестов и ревью.

Когда локальный контур оправдан

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

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

Команды и изменчивые сведения в этом руководстве сверены 8 сентября 2026 года по совместимости API Ollama, быстрому старту Open WebUI, руководству Ollama для Codex CLI и карточке Qwen2.5-Coder. Команды в конкретной конфигурации машины в этом проходе не запускались; перед применением проверьте текущие версии и сетевые ограничения.


Следующий шаг

Codex App — единый справочник по среде от OpenAI

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

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

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov