惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Open WebUI (с веб-поиском) + llama.cpp
bars_arseniy · 2026-04-25 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели96

Туториал

Когда я решил использовать веб-поиск в OpenWebUI результат оказался бесполезным. Гайд по настройке, чтобы получать хоть сколько-то приемлемый результат найти не удалось ни на русском, ни на английском. Поэтому решил собрать всё что удалось найти в этой статье.

Очевидно, что это не сравнится с проприетарными и платными сервисами. Но могут быть разные причины для использования локальных моделей: запрет или нежелание передавать данные третьим лицам, невозможность оплатить сервисы, желание использовать Unrestricted/Derestricted/Oblitirated модели.

Настройка для видеокарты NVIDIA 3090 24Gb и 32Gb RAM на Windows 10 (22H2).

Установка и запуск llama.cpp

  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 можно скачать и установить Nvidia CUDA Toolkit 13.1)

  3. Качаем модели в gguf формате в одну папку. В моём случае это “G:\llm”.

    1. Главная модель, которая собственно будет давать ответы Qwen3.5-27B-UD-Q4_K_XL. Так же скачайте mmproj-BF16.gguf оттуда же из “Files and versions” и переименуйте в “Qwen3.5-27B-UD-Q4_K_XL-mmproj-BF16.gguf” - благодаря этой штуке модель может распознавать картинки.

    2. Для для эмбеддинга при веб поиске Qwen3-Embedding-4B-f16.

    3. Для сортировки результатов веб поиска Qwen3-Reranker-4B-f16.

    4. Модель для мелких задач (сгенерить название чата, сгенерить текст для веб запроса, мб ещё для чего-то используется) Qwen3.5-2B-BF16.

Теперь в папке, куда загрузили модели, создаём файл с параметрами запуска моделей. Например, “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:\llm\Qwen3.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:\llm\Qwen3-Embedding-4B-f16.gguf
embedding = true
pooling = mean
ctx-size = 32768
load-on-startup = false
parallel = 8

[Qwen3-Reranker-4B-f16]
model = G:\llm\Qwen3-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:\llm\Qwen3.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:\llm\Qwen3.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-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-net

networks:
  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.