AnythingLLM против Open WebUI: что выгоднее и когда
Оба разворачиваются одним контейнером, дают чат в браузере поверх ваших моделей и документов и на демонстрации выглядят почти одинаково. Разница вылезает на второй неделе: документов стало триста, пользователей восемь, а чат просят встроить в сайт. Разберём, AnythingLLM или Open WebUI выгоднее там, где переиграть решение уже дорого: структура знаний, права, API и лицензия.
Содержание
- AnythingLLM или Open WebUI: в чём принципиальная разница
- Знания: рабочее пространство против общей коллекции
- Модели, агенты и инструменты
- Люди: роли, доступ к документам и публичный виджет
- API: чем один встраивается в продукт, а второй остаётся интерфейсом
- Стоимость владения: обновления, лицензия, телеметрия, бэкап
- Какой сервер брать в MAATRIX
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →AnythingLLM или Open WebUI: в чём принципиальная разница
AnythingLLM от Mintplex Labs — приложение на Node.js в контейнере mintplexlabs/anythingllm, порт 3001: интерфейс, API-сервер и коллектор документов с headless-Chromium в одном процессе. Состояние — каталог STORAGE_DIR=/app/server/storage: SQLite anythingllm.db, индекс LanceDB в lancedb/, текст в documents/, кэш векторов в vector-cache/. Центральное понятие — рабочее пространство: документы плюс свои настройки поиска, промпт и список участников.
Open WebUI — приложение на Python и FastAPI в контейнере ghcr.io/open-webui/open-webui, порт 8080. Состояние — том /app/backend/data: SQLite webui.db, ChromaDB в vector_db/, файлы в uploads/. Центральное понятие другое — чат и «модель»: пресет из модели, промпта, инструментов и коллекции знаний. Документы лежат разделом Knowledge и подключаются к модели или разово через #.
Короче: AnythingLLM — это база знаний, к которой приделали чат, а Open WebUI — чат, к которому приделали базу знаний.
| Критерий | AnythingLLM | Open WebUI |
|---|---|---|
| Порт | 3001 | 8080 |
| Единица организации | рабочее пространство | чат и «модель» |
| Векторная база | LanceDB, встроенная | ChromaDB, встроенная |
| Эмбеддер | свой ONNX-движок | sentence-transformers на torch |
| Настройки поиска | свои у каждого пространства | общие на инстанс |
| Ollama | выбор модели из списка | список, pull и удаление из UI |
| Виджет для сайта | есть из коробки | нет |
| Расширения | агенты, MCP-серверы | Functions, Tools, Pipelines |
| Лицензия | MIT | Open WebUI License, пункт о брендинге |
Знания: рабочее пространство против общей коллекции
В AnythingLLM документ попадает в общее хранилище, а затем «вшивается» в конкретное пространство — вектора считаются под него. У пространства своя вкладка настроек: провайдер и модель, температура, системный промпт, режим ответа (Chat — с общими знаниями модели, Query — только по документам), число фрагментов в контексте (по умолчанию четыре) и порог схожести, из коробки стоящий на «без ограничений». Для договоров — высокий порог и Query, для заметок — свободный чат, на одном сервере.
В Open WebUI конвейер общий на весь инстанс: эмбеддер, чанк и перекрытие, число фрагментов, гибридный поиск с реранкером лежат в админке в разделе Documents и действуют на все коллекции. Разное поведение для разных баз задать нельзя — только промптом «модели». По умолчанию: чанк 1000 символов, перекрытие 100, RAG_TOP_K=3, порог релевантности 0.
-e VECTOR_DB=chroma \
-e RAG_EMBEDDING_ENGINE=ollama \
-e RAG_EMBEDDING_MODEL=bge-m3 \
-e CHUNK_SIZE=1000 \
-e CHUNK_OVERLAP=100 \
-e RAG_TOP_K=3 \
-e ENABLE_RAG_HYBRID_SEARCH=true
Переменные RAG_* помечены как PersistentConfig: читаются один раз при первом старте и дальше живут в базе, правки в compose ничего не меняют. У AnythingLLM наоборот: интерфейс пишет настройки в storage/.env, но переменные из environment: попадают в процесс раньше и при конфликте выигрывают.
Эмбеддер по умолчанию у обоих по сути один — all-MiniLM-L6-v2 на 384 измерения, только AnythingLLM гоняет его через ONNX в том же Node-процессе, а Open WebUI тащит torch и sentence-transformers. Для русскоязычной базы этой модели мало обоим: берите bge-m3 через Ollama или text-embedding-3-large. Правило, стоящее переиндексации: смена эмбеддера меняет размерность вектора, а старый индекс с новой размерностью несовместим. Типовые обрывы конвейера — в разборе, почему AnythingLLM не индексирует документы.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть AnythingLLMМодели, агенты и инструменты
Если модели крутятся локально, преимущество у Open WebUI: список Ollama подтягивается сам, скачать или удалить модель можно из браузера — при переборе квантований это десятки сэкономленных заходов по SSH. Есть образ :ollama с обоими сервисами в одном контейнере и вариант :cuda под видеокарту, а ENABLE_DIRECT_CONNECTIONS разрешает пользователю добавить свой эндпоинт.
AnythingLLM работает с Ollama как с обычным провайдером: адрес, список по /api/tags, выбор. Скачивать модели из интерфейса нельзя — ollama pull qwen3:8b выполняется на хосте. Зато провайдер переопределяется на уровне пространства: юристам модель подороже, справочнику семибиллионник на своём железе.
Грабля AnythingLLM всплывает на длинных ответах: для универсального OpenAI-совместимого провайдера окно контекста и лимит ответа вводятся руками — поля Token context window и Max tokens. Поставили 4096 там, где модель держит 32 000, — RAG-контекст молча обрезается, и причину ищут в качестве поиска. Написали 128 000 при реальных 8192 — ошибка провайдера про превышение контекста.
Инструменты есть у обоих, философии разные. У AnythingLLM это агенты: пишете @agent, и модель получает навыки — поиск в интернете, сбор страницы, SQL-запрос, диаграмма; сюда же подключаются MCP-серверы, конфигурация которых лежит JSON-файлом в storage/plugins/. У Open WebUI три механизма: Tools (функции для модели), Functions (pipe, filter, action — меняют интерфейс) и Pipelines на отдельном контейнере с портом 9099. Свои фильтры и еженедельный перебор моделей — это Open WebUI (локальный запуск LLM через Ollama).
Люди: роли, доступ к документам и публичный виджет
AnythingLLM по умолчанию однопользовательский: либо пароль на инстанс, либо мультиюзерный режим в настройках безопасности. Ролей три — Admin, Manager и Default. Пользователь видит только те пространства, куда его добавили, — это единственный контур приватности: внутри пространства документы общие. Полноценного OIDC нет — есть passthrough (SIMPLE_SSO_ENABLED), когда ваша система сама выдаёт одноразовую ссылку на вход через API.
Open WebUI идёт от учётной записи: первый зарегистрировавшийся становится администратором, дальше регистрацию закрывают через ENABLE_SIGNUP=false либо ставят новичков в очередь через DEFAULT_USER_ROLE=pending. Есть группы и права на модели и коллекции, тумблеры вида USER_PERMISSIONS_CHAT_FILE_UPLOAD, встроенные LDAP и OAuth/OIDC — корпоративный каталог подключается переменными.
Функция, которой у Open WebUI нет вовсе, — встраиваемый виджет чата. В AnythingLLM вы создаёте embed для пространства и получаете тег вида <script data-embed-id="…" data-base-api-url="https://kb.example.com/api/embed" src="https://kb.example.com/embed/anythingllm-chat-widget.min.js"></script> — консультант по вашей документации на сайте за десять минут. Оговорки честные: виджет ходит к серверу без авторизации, поэтому белый список доменов и лимиты чатов обязательны — иначе это открытый доступ к вашей квоте у провайдера. Режим для публичного embed почти всегда Query — чат, отвечающий из общих знаний модели, рано или поздно скажет от лица компании то, чего компания не говорила. Аналога у Open WebUI нет: только свой фронт поверх API.
API: чем один встраивается в продукт, а второй остаётся интерфейсом
Наружу HTTP отдают оба, но устроен он по-разному. У AnythingLLM ключ создаётся в разделе Developer API, а живая документация лежит на самом сервере по адресу /api/docs.
curl -s http://127.0.0.1:3001/api/v1/auth -H "Authorization: Bearer $ALLM_KEY"
{"authenticated":true}
curl -s http://127.0.0.1:3001/api/v1/openai/models \
-H "Authorization: Bearer $ALLM_KEY" | jq -r '.data[].id'
support-kb
docs-ru
В списке моделей — слаги ваших пространств: у AnythingLLM есть OpenAI-совместимый эндпоинт, где имя модели равно базе знаний.
curl -s http://127.0.0.1:3001/api/v1/openai/chat/completions \
-H "Authorization: Bearer $ALLM_KEY" -H "Content-Type: application/json" \
-d '{"model":"support-kb","stream":false,
"messages":[{"role":"user","content":"Какой у нас срок возврата?"}]}'
Любой OpenAI-совместимый клиент — n8n, ваш бэкенд, плагин — получает ответы по вашим документам, не зная про RAG: поиск и сборка промпта происходят на сервере. Родной POST /api/v1/workspace/{slug}/chat с телом {"message":"…","mode":"query"} вдобавок возвращает массив sources.
У Open WebUI API вторичен. Ключ создаётся в профиле пользователя, общий выключатель — ENABLE_API_KEY. Формат похож, но знания подключаются иначе:
curl -s http://127.0.0.1:3000/api/chat/completions \
-H "Authorization: Bearer $OWUI_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini",
"messages":[{"role":"user","content":"Какой у нас срок возврата?"}],
"files":[{"type":"collection","id":"e1f2c3d4-5a6b-7c8d-9e0f-1a2b3c4d5e6f"}]}'
Идентификатор коллекции берётся из адресной строки при открытии базы знаний. Разница принципиальная: клиент обязан знать внутренние идентификаторы Open WebUI, то есть код на другой стороне всё равно пишется. Пара ENABLE_API_KEY_ENDPOINT_RESTRICTIONS=true и API_KEY_ALLOWED_ENDPOINTS="/api/models,/api/chat/completions" сужает ключ до чтения моделей и генерации.
Стоимость владения: обновления, лицензия, телеметрия, бэкап
Обновления. Образ AnythingLLM пересобирается из master часто, миграции Prisma выполняются при старте и назад не откатываются: latest однажды принесёт базу, которую прежняя версия не откроет. Закрепляйте тег вроде mintplexlabs/anythingllm:1.16.1 и снимайте копию перед docker compose pull. У Open WebUI релизы почти еженедельные, тег :main так же подвижен — фиксируйте ghcr.io/open-webui/open-webui:v0.6.32 или свежее.
Бэкап. У AnythingLLM это архив каталога, у Open WebUI — тома:
docker compose stop anythingllm
tar -czf /backup/allm-$(date +%F).tar.gz -C /opt/anythingllm storage
docker compose start anythingllm
docker run --rm -v open-webui:/data -v /backup:/backup alpine \
tar -czf /backup/owui-$(date +%F).tar.gz -C /data .
Контейнер на время архивации останавливают оба: SQLite копируют не на ходу. Куда уходит диск, показывают docker system df -v и du -sh /opt/anythingllm/storage/*: в AnythingLLM каждое пространство держит свою копию индекса, и документ в трёх пространствах займёт место трижды.
Лицензия. AnythingLLM под MIT: делайте что угодно, включая ребрендинг и продажу в своём продукте. Open WebUI с версии 0.6.6 живёт под собственной Open WebUI License — BSD-3 плюс пункт о защите брендинга: убирать название и логотип нельзя, если развёртывание не укладывается примерно в полсотни пользователей и вы не купили корпоративную лицензию. Код до 0.6.5 остаётся под BSD-3. На внутреннее использование это не влияет, для своего бренда MIT спокойнее (сравнение Open WebUI с LibreChat).
Телеметрия. Оба по умолчанию шлют анонимную статистику: в AnythingLLM гасится DISABLE_TELEMETRY="true", в Open WebUI — набором SCARF_NO_ANALYTICS=true, DO_NOT_TRACK=true и ANONYMIZED_TELEMETRY=false.
Миграции между ними нет. Документы перезальёте, но вектора придётся считать заново, а переписку не перенести: форматы экспорта разные, импортёра чужого нет ни у одного — тестируйте оба в первую неделю. И честное про приватность: данные на диске не шифрует ни один, а как только в промпты попадают персональные данные, база чатов становится хранилищем ПДн по 152-ФЗ.
Какой сервер брать в MAATRIX
Конфигурация считается по объёму знаний и числу людей, а не по модели; расчёт ниже — для модели, работающей снаружи.
| Сценарий | vCPU | RAM | Диск |
|---|---|---|---|
| Open WebUI к внешнему API, до 5 человек | 2 | 4 ГБ | 40 ГБ |
| AnythingLLM, одна база до тысячи страниц | 2 | 4 ГБ | 40–60 ГБ |
| AnythingLLM, несколько пространств и виджет | 4 | 8 ГБ | 80–120 ГБ |
| Любой из двух рядом с Ollama и моделью 7–8B | 6–8 | 16 ГБ | 100+ ГБ |
Честный минимум — 2 vCPU и 4 ГБ. Документация AnythingLLM называет минимумом 2 ГБ памяти и два ядра, но это граница запуска, а не работы: веб-сервер, коллектор с Chromium и эмбеддер живут в одном процессе, и первая партия PDF эти два гигабайта съедает. У Open WebUI официальных требований нет — всё решает, грузится ли модель эмбеддингов в тот же процесс (разбор по компонентам). Симптом нехватки один: контейнер перезапускается сам, а journalctl -k | grep -i "killed process" показывает работу OOM-killer.
Комфортный вариант — 4 vCPU, 8 ГБ RAM, 80–120 ГБ NVMe. Разница видна не в чате, а в индексации: разбор PDF и расчёт эмбеддингов — процессорная работа. Восьми гигабайт хватает на несколько пространств, десяток пользователей и переиндексацию. Модель на том же сервере — другой класс машины: 7B в четырёхбитном квантовании занимает около 4,5 ГБ только весами, и они лежат в памяти постоянно.
Локация — Лондон. Интерфейсы интерактивны, задержка чувствуется на каждом действии, а из Москвы и Европы путь до Лондона короче, чем до Нью-Йорка. Британский адрес спокойно принимают OpenAI, Anthropic и Google — отказ unsupported_country_region_territory не грозит, а GDPR-периметр упрощает разговор с европейскими контрагентами. Франция равноценна для ЕС, Нью-Йорк берут под сервисы с требованием американского IP, Россию — когда модель локальная и 152-ФЗ важнее пинга.
Приложение из каталога apps.maatrix.io ставится автоматически при заказе сервера — вводить команды не нужно, работает и на Ubuntu, и на Debian. Адрес панели и ключи появятся в личном кабинете, в разделе «Доступ»: останется войти, подключить провайдера модели и залить первые документы. Оплата — картами российских банков, по СБП, криптовалютой или токеном MAAT. Пошагово — AnythingLLM на VPS и Open WebUI на VPS, выбор площадки — VPS в Великобритании для нейросетей.
Развернуть за пару минут
Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Развернуть AnythingLLMОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Что взять под базу знаний по документам компании?
AnythingLLM: у пространств разные пороги и промпты, доступ раздаётся пространствами, а наружу ответ уходит одним OpenAI-совместимым запросом, где имя модели — слаг базы. Open WebUI выигрывает, когда первично общение с моделями, а документы эпизодичны.
Можно ли перенести документы и историю чатов из одного в другой?
Документы перезальёте вручную, вектора пересчитаются заново, а переписку не перенести: форматы экспорта разные, импортёра чужого нет.
Можно ли поставить оба на один сервер?
Технически да, порты 3001 и 8080 не конфликтуют. Но на 4 ГБ два встроенных эмбеддера встретятся на индексации, и OOM-killer выберет жертву сам. Для теста берите 8 ГБ либо вынесите эмбеддинги в Ollama или во внешний API.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.