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

推荐订阅源

月光博客
月光博客
N
Netflix TechBlog - Medium
罗磊的独立博客
博客园 - 聂微东
美团技术团队
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园_首页
宝玉的分享
宝玉的分享
G
GRAHAM CLULEY
Microsoft Azure Blog
Microsoft Azure Blog
量子位
SecWiki News
SecWiki News
F
Fortinet All Blogs
J
Java Code Geeks
S
SegmentFault 最新的问题
V
V2EX
Martin Fowler
Martin Fowler
F
Full Disclosure
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
S
Security Affairs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
S
Secure Thoughts
S
Schneier on Security
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
Cloudbric
Cloudbric
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
V2EX - 技术
V2EX - 技术
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
C
Check Point Blog
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
Hacker News - Newest:
Hacker News - Newest: "LLM"
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Tenable 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 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
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.