- BrainTools - https://www.braintools.ru -
Когда я решил использовать веб-поиск в OpenWebUI результат оказался бесполезным. Гайд по настройке, чтобы получать хоть сколько-то приемлемый результат найти не удалось ни на русском, ни на английском. Поэтому решил собрать всё что удалось найти в этой статье.
Очевидно, что это не сравнится с проприетарными и платными сервисами. Но могут быть разные причины для использования локальных моделей: запрет или нежелание передавать данные третьим лицам, невозможность оплатить сервисы, желание использовать Unrestricted/Derestricted/Oblitirated модели.
Настройка для видеокарты NVIDIA 3090 24Gb и 32Gb RAM на Windows 10 (22H2).
Обновляем [1] драйвера для видеокарты.
Качаем [2] llama.cpp для Windows x64 (CUDA 13) и CUDA 13.1 DLLS. Распаковать в одну папку. В моём случае это “G:llama-b8477-bin-win-cuda-13.1-x64”. Так же у llama.cpp есть Docker образы. (Чтобы при каждом обновлении не класть DLL можно скачать [3] и установить Nvidia CUDA Toolkit 13.1)
Качаем модели в gguf формате в одну папку. В моём случае это “G:llm”.
Главная модель, которая собственно будет давать ответы Qwen3.5-27B-UD-Q4_K_XL [4]. Так же скачайте mmproj-BF16.gguf оттуда же из “Files and versions” и переименуйте в “Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.gguf” – благодаря этой штуке модель может распознавать картинки.
Для для эмбеддинга при веб поиске Qwen3-Embedding-4B-f16 [5].
Для сортировки результатов веб поиска Qwen3-Reranker-4B-f16 [6].
Модель для мелких задач (сгенерить название чата, сгенерить текст для веб запроса, мб ещё для чего-то используется) Qwen3.5-2B-BF16 [7].
Теперь в папке, куда загрузили модели, создаём файл с параметрами запуска моделей. Например, “start-all.ini” в “G:llm”.
[*]
# Global defaults — applied to every model unless overridden
no-mmap = true
metrics = true
cache-ram = 0
sleep-idle-seconds = 1200
n-gpu-layers = all
batch-size = 2048
ubatch-size = 2048
[Qwen3.5-2B-BF16]
model = G:llmQwen3.5-2B-BF16.gguf
ctx-size = 65536
top-p = 1.0
top-k = 20
min-p = 0.0
temp = 0.5
repeat-penalty = 1.0
presence-penalty = 2.0
load-on-startup = false
parallel = 4
chat-template-kwargs = {"enable_thinking":false}
[Qwen3-Embedding-4B-f16]
model = G:llmQwen3-Embedding-4B-f16.gguf
embedding = true
pooling = mean
ctx-size = 32768
load-on-startup = false
parallel = 8
[Qwen3-Reranker-4B-f16]
model = G:llmQwen3-Reranker-4B-f16.gguf
reranking = true
pooling = rank
embedding = true
ctx-size = 32768
load-on-startup = false
parallel = 8
[Qwen3.5-27B-UD-Q4_K_XL-thinking]
model = G:llmQwen3.5-27B-UD-Q4_K_XL.gguf
mmproj = Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.gguf
ctx-size = 65536
top-p = 0.95
top-k = 20
min-p = 0.0
temp = 1.0
repeat-penalty = 1.0
presence-penalty = 1.5
load-on-startup = false
parallel = 1
[Qwen3.5-27B-UD-Q4_K_XL-instruct]
model = G:llmQwen3.5-27B-UD-Q4_K_XL.gguf
mmproj = Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.gguf
ctx-size = 65536
top-p = 0.8
top-k = 20
min-p = 0.0
temp = 0.7
repeat-penalty = 1.0
presence-penalty = 1.5
load-on-startup = false
parallel = 1
chat-template-kwargs = {"enable_thinking":false}
Теперь создаём bat файл, в котором запустим llama-server. Например, “start-all.bat”:
G:llama-b8477-bin-win-cuda-13.1-x64llama-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 [8])
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 – одноверменно грузить в память [9] только одну модель. Основная модель с контекстом занимает всю VRAM. Если будет загружена ещё одна модель, то будет сильно тормозить. В идеале нужна возможность указывать не количество моделей, а количество занимаемой памяти. Например, чтобы помещалась одна крупная модель или несколько мелких. Но пока такой настройки нет. Возможно, будет в будущем. Новые фичи добавляют постоянно. Следите за обновлениями.
Про остальные можно прочитать здесь [10].
Запускаем start-all.bat и видим что-то подобное:

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

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

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

Теперь создаём 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-net
networks:
webui-net:
driver: bridge
Открываем командную строку в каталоге, где лежит docker-compose.yaml, выполняем команду “docker compose up -d”, ждём пока скачаются образы и поднимутся контейнеры:

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

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

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

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

Далее выбираем “Интерфейс” и там в “Модель локальной задачи” и “Модель внешней задачи” указываем “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/ [11]), то ситуация будет такая же.
С маленькими моделями такой проблемы нет.
Поскольку при веб-поиске используется RAG, надо будет сделать настройки для работы с документами. Стандартные модели и настройки тоже работают, но качество работы плачевное.
Заходим в “Панель администратора” – “Настройки” – “Documents”.
В “Механизм извлечения контента” выбираем Tika и указываем URL “http://host.docker.internal:9998 [16]”
В “Движок модели встраивания” URL указываем “http://host.docker.internal:9999/v1 [15]” и модель “Qwen3-Embedding-4B-f16”
В “Движок реранжирования” выбираем “Внешнее” и указываем URL “http://host.docker.internal:9999/v1/rerank [17]” и “Модель реранжирования” – “Qwen3-Reranker-4B-f16”
Нажимаем “Сохранить” внизу справа.

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

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

Результат:

При обычном запросе сначала загружается основная модель, поосле того как она ответила загружается маленькая модель (Qwen3.5-2B-BF16) для генерации названия чата. Не используйте рассуждающие модели для этого, т.к. это занимает много времени и часто название чата не генерируется. У меня так было, когда в “Настройки” – “Интерфейс” – “Модель локальной задачи” было указано “Текущая модель”.
При использовании веб-поиска будут так же загружаться эмбеддинг и рерангинг модели. Какие модели загружаются можно посомтреть в логе llama-server.
Документация [19] Open WebUI – там много разных функций.
Статья как запутить большую модель, если она не влезат в VRAM Запускаем GPT-OSS-120B на 6 Гб GPU и ускоряем до 30 t/s [20].
Статья на unsloth.ai Qwen3.5 – How to Run Locally [21]. Так же там есть статьи, как запускать дургие модели.
Вместо Tika можно использовать Docling для более сложных документов. Сам не пробовал.
Есть множество поисковых движков (сам их не пробовал), некоторые предлагают какое-то количество бесплатных запросов в месяц:
Для поиска можно запустить в Docker – 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:
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 [27], openrouter.ai [28]parallel.ai [29], firecrawl.dev [30], jina.ai [31]
Помимо OpenWebUI, есть и другие веб интерфейсы. Например, LibreChat [32].
Можно настроить OpenCode [33], чтобы он обращался к уже запущенному llama-server.
Автор: bars_arseniy
Источник [34]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/29346
URLs in this post:
[1] Обновляем: https://www.nvidia.com/en-us/drivers/
[2] Качаем: https://github.com/ggml-org/llama.cpp/releases
[3] скачать: https://developer.nvidia.com/cuda-13-1-1-download-archive
[4] Qwen3.5-27B-UD-Q4_K_XL: https://huggingface.co/unsloth/Qwen3.5-27B-GGUF
[5] Qwen3-Embedding-4B-f16: https://huggingface.co/Qwen/Qwen3-Embedding-4B-GGUF
[6] Qwen3-Reranker-4B-f16: https://huggingface.co/Voodisss/Qwen3-Reranker-4B-GGUF-llama_cpp
[7] Qwen3.5-2B-BF16: https://huggingface.co/unsloth/Qwen3.5-2B-GGUF
[8] http://127.0.0.1:9999/metrics?model=Qwen3.5-27B-UD-Q4_K_XL-thinking: http://127.0.0.1:9999/metrics?model=Qwen3.5-27B-UD-Q4_K_XL-thinking
[9] память: http://www.braintools.ru/article/4140
[10] здесь: https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md
[11] http://127.0.0.1:9999/: http://127.0.0.1:9999/
[12] эту: https://learn.microsoft.com/ru-ru/windows/wsl/install-manual
[13] отсюда: https://www.docker.com/products/docker-desktop/
[14] http://localhost:3000/: http://localhost:3000/
[15] http://host.docker.internal:9999/v1: http://host.docker.internal:9999/v1
[16] http://host.docker.internal:9998: http://host.docker.internal:9998
[17] http://host.docker.internal:9999/v1/rerank: http://host.docker.internal:9999/v1/rerank
[18] забываем: http://www.braintools.ru/article/333
[19] Документация: https://docs.openwebui.com/
[20] Запускаем GPT-OSS-120B на 6 Гб GPU и ускоряем до 30 t/s: https://habr.com/ru/articles/961478/
[21] Qwen3.5 – How to Run Locally: https://unsloth.ai/docs/models/qwen3.5
[22] exa.ai: https://exa.ai/docs/reference/search
[23] tavily: https://www.tavily.com
[24] serper: https://serper.dev/
[25] linkup: https://www.linkup.so/#our-product-1
[26] valyu: https://docs.valyu.ai/overview
[27] perplexity.ai: https://www.perplexity.ai/
[28] openrouter.ai: https://openrouter.ai
[29] parallel.ai: https://parallel.ai
[30] firecrawl.dev: https://www.firecrawl.dev
[31] jina.ai: https://jina.ai/
[32] LibreChat: https://www.librechat.ai/
[33] OpenCode: https://opencode.ai/
[34] Источник: https://habr.com/ru/articles/1027676/?utm_campaign=1027676&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.