Когда я решил использовать веб-поиск в OpenWebUI результат оказался бесполезным. Гайд по настройке, чтобы получать хоть сколько-то приемлемый результат найти не удалось ни на русском, ни на английском. Поэтому решил собрать всё что удалось найти в этой статье.
Очевидно, что это не сравнится с проприетарными и платными сервисами. Но могут быть разные причины для использования локальных моделей: запрет или нежелание передавать данные третьим лицам, невозможность оплатить сервисы, желание использовать Unrestricted/Derestricted/Oblitirated модели.
Настройка для видеокарты NVIDIA 3090 24Gb и 32Gb RAM на Windows 10 (22H2).
Установка и запуск llama.cpp
-
Обновляем драйвера для видеокарты.
-
Качаем llama.cpp для Windows x64 (CUDA 13) и CUDA 13.1 DLLS. Распаковать в одну папку. В моём случае это “G:\llama-b8477-bin-win-cuda-13.1-x64”. Так же у llama.cpp есть Docker образы. (Чтобы при каждом обновлении не класть DLL можно скачать и установить Nvidia CUDA Toolkit 13.1)
-
Качаем модели в gguf формате в одну папку. В моём случае это “G:\llm”.
-
Главная модель, которая собственно будет давать ответы Qwen3.5-27B-UD-Q4_K_XL. Так же скачайте mmproj-BF16.gguf оттуда же из “Files and versions” и переименуйте в “Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.gguf” — благодаря этой штуке модель может распознавать картинки.
-
Для для эмбеддинга при веб поиске Qwen3-Embedding-4B-f16.
-
Для сортировки результатов веб поиска Qwen3-Reranker-4B-f16.
-
Модель для мелких задач (сгенерить название чата, сгенерить текст для веб запроса, мб ещё для чего-то используется) Qwen3.5-2B-BF16.
-
Теперь в папке, куда загрузили модели, создаём файл с параметрами запуска моделей. Например, “start-all.ini” в “G:\llm”.
[*]# Global defaults — applied to every model unless overriddenno-mmap = truemetrics = truecache-ram = 0sleep-idle-seconds = 1200n-gpu-layers = allbatch-size = 2048ubatch-size = 2048[Qwen3.5-2B-BF16]model = G:\llm\Qwen3.5-2B-BF16.ggufctx-size = 65536top-p = 1.0top-k = 20 min-p = 0.0temp = 0.5 repeat-penalty = 1.0presence-penalty = 2.0load-on-startup = falseparallel = 4chat-template-kwargs = {"enable_thinking":false}[Qwen3-Embedding-4B-f16]model = G:\llm\Qwen3-Embedding-4B-f16.ggufembedding = truepooling = meanctx-size = 32768load-on-startup = falseparallel = 8[Qwen3-Reranker-4B-f16]model = G:\llm\Qwen3-Reranker-4B-f16.ggufreranking = truepooling = rankembedding = truectx-size = 32768load-on-startup = falseparallel = 8[Qwen3.5-27B-UD-Q4_K_XL-thinking]model = G:\llm\Qwen3.5-27B-UD-Q4_K_XL.ggufmmproj = Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.ggufctx-size = 65536top-p = 0.95top-k = 20min-p = 0.0temp = 1.0 repeat-penalty = 1.0presence-penalty = 1.5load-on-startup = falseparallel = 1[Qwen3.5-27B-UD-Q4_K_XL-instruct]model = G:\llm\Qwen3.5-27B-UD-Q4_K_XL.ggufmmproj = Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.ggufctx-size = 65536top-p = 0.8top-k = 20 min-p = 0.0temp = 0.7 repeat-penalty = 1.0presence-penalty = 1.5load-on-startup = falseparallel = 1chat-template-kwargs = {"enable_thinking":false}
Теперь создаём bat файл, в котором запустим llama-server. Например, “start-all.bat”:
G:\llama-b8477-bin-win-cuda-13.1-x64\llama-server ^--port 9999 ^--models-max 1 ^--models-preset start-all.ini
Пояснения некоторых параметров запуска
-
no-mmap = true — не использовать проецирование файла модели в RAM. В результате модель грузится только в VRAM.
-
metrics = true — отображать метрики модели на /metrics эндпоинте. (Пример: http://127.0.0.1:9999/metrics?model=Qwen3.5-27B-UD-Q4_K_XL-thinking)
-
cache-ram = 0 — нулевой кеш для запросов. В нём нет смысла если один пользователь с разными запросами.
-
sleep-idle-seconds = 1200 — выгружать модель из VRAM через указанное количество секунд.
-
n-gpu-layers = all — какое число слоёв модели грузить в VRAM.
-
ctx-size = 65536 — размер контекста для модели.
-
load-on-startup = false — загружать ли модель при старте.
-
parallel = 4 — на сколько запросов одноверменно будет отвечать модель. При этом контекст из ctx-size делится на это количество (65536 / 4 = 16384).
-
chat-template-kwargs = {“enable_thinking”:false} — отключает рассуждения у модели.
-
–models-max 1 — одноверменно грузить в память только одну модель. Основная модель с контекстом занимает всю VRAM. Если будет загружена ещё одна модель, то будет сильно тормозить. В идеале нужна возможность указывать не количество моделей, а количество занимаемой памяти. Например, чтобы помещалась одна крупная модель или несколько мелких. Но пока такой настройки нет. Возможно, будет в будущем. Новые фичи добавляют постоянно. Следите за обновлениями.
Про остальные можно прочитать здесь.
Запускаем start-all.bat и видим что-то подобное:

Открываем http://127.0.0.1:9999/ и можно пользоваться llama.cpp. При первом запросе надо будет дождаться пока загрузится модель.

Если достаточно чата, то можно остановиться здесь.
Установка и запуск Open WebUI
Поскольку запускать Open WebUI в контейнере, то понадобятся wsl и Docker Desktop.
Чтобы установить wsl надо выполнить комнаду “wsl install”. Однако, когда я удалил wsl “wsl —uninstall”, то установить получилось командой “wsl —update”.

После завершения установки может попросить логин и пароль для создания нового пользователя. Если возникнут проблемы посмотрите эту статью.
Теперь качаем, устанавливаем и запускаем Docker Desktop отсюда. Насколько помню там простая установка и проблем быть не должно.
Выглядеть должно так:

Теперь создаём docker-compose.yml. Создал его в G:\openwebui.
services: open-webui: image: ghcr.io/open-webui/open-webui:v0.8.6 container_name: open-webui restart: unless-stopped ports: - "3000:8080" volumes: - G:/openwebui/volume:/app/backend/data environment: - RAG_SYSTEM_CONTEXT=True - ENABLE_QUERIES_CACHE=True - ENABLE_REALTIME_CHAT_SAVE=False networks: - webui-net tika: image: apache/tika:latest-full container_name: tika restart: unless-stopped ports: - 9998:9998 networks: - webui-netnetworks: webui-net: driver: bridge
Открываем командную строку в каталоге, где лежит docker-compose.yaml, выполняем команду “docker compose up -d”, ждём пока скачаются образы и поднимутся контейнеры:

На скрине процесса скачивания нет, т.к. образы были скачаны ранее.
В Docker Desktop должно быть приблизительно следующее:

Открываем http://localhost:3000/ Попросит почту и пароль для нового админа.
Сверху справа жмём на иконку пользователя. В выпавшем меню выбераем “Панель администратора”:

Там выбираем “Настройки” — “Подключения” и нажмите на “+”

В появившемся окне в поле “URL” указываем “http://host.docker.internal:9999/v1”, жмём “Сохранить”.

Далее выбираем “Интерфейс” и там в “Модель локальной задачи” и “Модель внешней задачи” указываем “Qwen3.5-2B-BF16”

И в нижнем правом углу жмём “Сохранить”.
Теперь жмём слева сверху “Новый чат” — “Arena model”. Там должен появиться список наших моделей. Любая что-то да ответит. Но лучше выбирать “Qwen3.5-27B-UD-Q4_K_XL-instruct” для ответов без рассуждений. И “Qwen3.5-27B-UD-Q4_K_XL-thinking” для ответов с рассуждениями.

Вводим запрос, ждём пока загрузится модель. У меня это занимает до минуты. Получаем ответ:

МОЖЕТ БЫТЬ ПРОБЛЕМА
Если в момент работы модели открыта вкладка с чатом, то 3D раздел видеокарты загружается на 100% и CUDA раздел не используется. В итоге ответа можно не дождаться.

В момент 1 и 3 открыта вкладка с чатом. В момент 2 переключился на вкладку без анимаций или свернул браузер. У меня Firefox. В Edge тоже самое. Если сделать запрос только в llama.cpp (http://127.0.0.1:9999/), то ситуация будет такая же.
С маленькими моделями такой проблемы нет.
Настройки для веб-поиска
Поскольку при веб-поиске используется RAG, надо будет сделать настройки для работы с документами. Стандартные модели и настройки тоже работают, но качество работы плачевное.
Заходим в “Панель администратора” — “Настройки” — “Documents”.
В “Механизм извлечения контента” выбираем Tika и указываем URL “http://host.docker.internal:9998”
В “Движок модели встраивания” URL указываем “http://host.docker.internal:9999/v1” и модель “Qwen3-Embedding-4B-f16”
В “Движок реранжирования” выбираем “Внешнее” и указываем URL “http://host.docker.internal:9999/v1/rerank” и “Модель реранжирования” — “Qwen3-Reranker-4B-f16”
Нажимаем “Сохранить” внизу справа.

И остались настройки Веб-поиска. Я выбрал Brave — даёт $5 каждый месяц, если привязать карту. Так же можно настроить лимит, чтобы не тратить больше.

Не забываем “Сохранить” настройки.
При выполнении запроса включаем использование “Веб-поиска”:

Результат:

При обычном запросе сначала загружается основная модель, поосле того как она ответила загружается маленькая модель (Qwen3.5-2B-BF16) для генерации названия чата. Не используйте рассуждающие модели для этого, т.к. это занимает много времени и часто название чата не генерируется. У меня так было, когда в “Настройки” — “Интерфейс” — “Модель локальной задачи” было указано “Текущая модель”.
При использовании веб-поиска будут так же загружаться эмбеддинг и рерангинг модели. Какие модели загружаются можно посомтреть в логе llama-server.
Что ещё?
-
Документация Open WebUI — там много разных функций.
-
Статья как запутить большую модель, если она не влезат в VRAM Запускаем GPT-OSS-120B на 6 Гб GPU и ускоряем до 30 t/s.
-
Статья на unsloth.ai Qwen3.5 — How to Run Locally. Так же там есть статьи, как запускать дургие модели.
-
Вместо Tika можно использовать Docling для более сложных документов. Сам не пробовал.
-
Есть множество поисковых движков (сам их не пробовал), некоторые предлагают какое-то количество бесплатных запросов в месяц:
-
Для поиска можно запустить в Docker — SearXNG. Пробовал, часто движки поисков банили на время. Так же есть публичные бесплатные инстансы.
docker-compose для SearXNG
searxng: image: ghcr.io/searxng/searxng:latest container_name: searxng ports: - "8888:8080" volumes: - G:/searxng/volume/config:/etc/searxng - G:/searxng/volume/data:/var/cache/searxng networks: - webui-net -
Для “Веб-поиска” “Движок веб-загрузчика” пробовал playwright в Docker. Работает долго, в минутах.
Настройки для playwright
playwright: image: mcr.microsoft.com/playwright:v1.58.0-noble # Version must match requirements.txt container_name: playwright command: npx -y playwright@1.58.0 run-server --port 3000 --host 0.0.0.0 networks: - webui-netВ “Панель администратора” — “Настройки” — “Веб-поиск” в “Движок веб-загрузчика” выбраем playwright, в “Playwright WebSocket URL” — “ws://playwright:3000”, Timeout — пробовать с 30000 мс.

-
В OpenWebUI можно подключить распознавание речи и генерацию картинок.
-
В OpenWebUI можно использвать внедние сервисы для осносновых моделей, эмбеддинга, реранкинга и извлечения контента с веб-страниц: perplexity.ai, openrouter.aiparallel.ai, firecrawl.dev, jina.ai
-
Помимо OpenWebUI, есть и другие веб интерфейсы. Например, LibreChat.
-
Можно настроить OpenCode, чтобы он обращался к уже запущенному llama-server.
ссылка на оригинал статьи https://habr.com/ru/articles/1027676/