AnythingLLM + Ollama: локальный RAG по PDF и документам без облака
AnythingLLM · Ollama · RAG · PDF · локальный ИИ

AnythingLLM + Ollama: как сделать локальный RAG по PDF и документам и почему он иногда плохо ищет

AnythingLLM превращает папку PDF, DOCX, TXT и других документов в поисковую базу для LLM: файлы разбиваются на chunks, превращаются в embeddings и попадают в vector database, после чего Ollama получает только найденные фрагменты. Это позволяет держать документы локально, но качество ответа зависит не столько от красивого интерфейса, сколько от parsing, embeddings, retrieval settings и самой модели.

1.16.1 последний stable GitHub release на момент проверки
topN = 4 текущий default workspace retrieval в schema проекта
MIT ядро AnythingLLM распространяется по MIT License
Суть проекта

AnythingLLM — self-hosted платформа вокруг документов, RAG, workspaces и AI-agents

AnythingLLM можно использовать как обычный AI-чат, но его главный практический смысл — объединить LLM, embedder, vector database и документы в одном интерфейсе. Каждый workspace может иметь свои документы, model provider, system prompt, retrieval settings и историю.

01 LLM отдельно

AnythingLLM может использовать Ollama, OpenAI-compatible API, Anthropic, OpenAI и другие providers.

02 Embedder отдельно

Модель для embeddings не обязана быть той же, что отвечает пользователю.

03 Vector DB отдельно

По умолчанию для локального сценария часто используется LanceDB, но доступны и другие backends.

04 Workspace как граница контекста

Документы и retrieval-настройки можно разделить по проектам, темам или пользователям.

Не дубль Open WebUI

AnythingLLM и Open WebUI пересекаются, но фокус у них разный

ЗадачаAnythingLLMOpen WebUI
Обычный чат с моделямиДаДа
Workspaces для документовОдин из основных сценариевЕсть knowledge/RAG
RAG tuningWorkspace topN, threshold, modesНастройки retrieval есть, но UI более chat-centric
Desktop appОтдельное полноценное приложениеВ основном web/self-hosted
Agents / toolsДаДа
Основной UXДокументы + workspace + assistantУниверсальный AI chat frontend

Если задача — «один красивый интерфейс ко всем моделям», Open WebUI обычно естественнее. Если задача — «загрузить массив документов, разбить их на рабочие области и постоянно задавать вопросы по ним», AnythingLLM заслуживает отдельного рассмотрения.

Docker · self-hosted

Как развернуть AnythingLLM 1.16.1 с persistent storage

Для серверной установки официальный проект поддерживает Docker. Важнее всего не потерять /app/server/storage и файл .env при пересоздании контейнера.

Linux / macOS

export STORAGE_LOCATION=$HOME/anythingllm
mkdir -p "$STORAGE_LOCATION"
touch "$STORAGE_LOCATION/.env"

docker run -d \
  --name anythingllm \
  -p 3001:3001 \
  --cap-add SYS_ADMIN \
  --add-host=host.docker.internal:host-gateway \
  -v "$STORAGE_LOCATION:/app/server/storage" \
  -v "$STORAGE_LOCATION/.env:/app/server/.env" \
  -e STORAGE_DIR="/app/server/storage" \
  --restart unless-stopped \
  mintplexlabs/anythingllm:1.16.1

После запуска интерфейс доступен на http://localhost:3001. Для Windows логика та же, но host path задаётся PowerShell-путём.

Storage /app/server/storage

Здесь лежат SQLite database, documents, vector cache, models и другие persistent data.

.env Монтировать отдельно

Иначе настройки окружения могут не пережить пересоздание container.

Image tag 1.16.1

Фиксированный stable tag воспроизводимее, чем плавающий latest.

Network LAN/VPN

Текущий stable нельзя бездумно выставлять напрямую в интернет: ниже есть отдельный security-раздел.

Подключаем локальную модель

AnythingLLM в Docker должен видеть Ollama по адресу хоста, а не через localhost контейнера

Типичная ошибка: указать http://127.0.0.1:11434 внутри AnythingLLM container. Для контейнера localhost — это сам контейнер, а не основная система.

LLM_PROVIDER=ollama
OLLAMA_BASE_PATH=http://host.docker.internal:11434
OLLAMA_MODEL_PREF=qwen3.5:8b

На Linux для host.docker.internal обычно нужен --add-host=host.docker.internal:host-gateway. Если Ollama работает на отдельном сервере, используйте его LAN/VPN address.

Не публикуйте Ollama API в интернет без отдельного authentication layer.

AnythingLLM и Ollama в домашней сети лучше соединять по LAN или VPN. Открытый :11434 — плохой способ организовать удалённый доступ.

RAG без магии

Почему LLM не читает все ваши 300 PDF при каждом вопросе

RAG не отправляет модели весь архив документов. Это было бы слишком дорого и быстро упёрлось бы в context window. Вместо этого AnythingLLM ищет несколько наиболее похожих chunks и передаёт только их.

PDFизвлечение текста
→
Chunksнебольшие фрагменты
→
Embeddingsвекторное представление
→
Vector searchпоиск похожих chunks
→
LLMответ по найденному контексту
Если нужный фрагмент не попал в retrieval, сильная LLM его уже не «угадает» из документа.

Поэтому качество локального RAG нужно диагностировать отдельно от качества самой chat model.

Главный problem-intent

Почему AnythingLLM «не находит то, что точно есть в PDF»

01Текст плохо извлечён

Сканированный PDF может выглядеть нормально человеку, но содержать почти пустой или испорченный text layer.

02Неподходящие chunks

Слишком большой chunk смешивает темы, слишком маленький теряет контекст между соседними абзацами.

03Слабый embedder

Поиск зависит от embedding model не меньше, чем от основной LLM.

04topN слишком мал

Текущий default — 4 chunks. Для вопроса, требующего сопоставить несколько документов, этого может не хватить.

05Threshold отбрасывает нужное

Default similarity threshold 0.25 может фильтровать chunks, которые кажутся embedder недостаточно похожими.

06Запрос слишком общий

«Расскажи всё о проекте» хуже для retrieval, чем вопрос с конкретными сущностями, датами и терминами.

07Нужная информация в таблице/изображении

Парсер может потерять структуру таблицы или вовсе не извлечь визуальный текст.

08Слишком много похожих документов

Множество однотипных chunks конкурируют между собой и вытесняют более редкий релевантный фрагмент.

Диагностика по порядку

1Проверить извлечённый текст

Сначала убедиться, что нужная фраза вообще присутствует после parsing/OCR.

2Проверить простой точный вопрос

Использовать редкое имя, номер, код или заголовок из документа.

3Увеличить topN

Например, протестировать 8–12 вместо 4 и посмотреть, улучшился ли recall.

4Проверить threshold

Снижать постепенно только если нужные chunks действительно отбрасываются.

5Сравнить embedder

Для многоязычных архивов отдельно проверить качество русского/английского retrieval.

6Только потом менять chat LLM

Если retrieval плохой, более крупная LLM не исправит отсутствие исходного контекста.

Текущие defaults

topN = 4 и similarityThreshold = 0.25 — стартовые значения, а не универсальный optimum

В актуальной Prisma schema AnythingLLM workspace имеет topN = 4 и similarityThreshold = 0.25 по умолчанию. Это разумный безопасный старт, но не настройка для любого corpus.

Малый topN Выше precision, ниже recall

Меньше мусора в prompt, но можно потерять нужный фрагмент из другого документа.

Большой topN Выше recall, больше шума

Модель видит больше источников, но часть контекста может оказаться нерелевантной.

Высокий threshold Строже фильтрация

Хорошо против случайных совпадений, но опасно для сложных переформулированных запросов.

Низкий threshold Больше кандидатов

Помогает recall, но может пропустить в prompt семантически слабые chunks.

Не копируйте чужие настройки 0 / 12 / rerank вслепую.

Есть реальные self-hosted проекты, которые используют threshold 0 и topN 10–12 вместе с reranking, но это рабочая конфигурация конкретного corpus, а не официальный универсальный preset AnythingLLM.

Embedder — отдельная модель

Для локального RAG можно использовать Ollama и для embeddings

EMBEDDING_ENGINE=ollama
EMBEDDING_BASE_PATH=http://host.docker.internal:11434
EMBEDDING_MODEL_PREF=nomic-embed-text:latest

Это пример из Docker configuration проекта. Конкретную embedding model нужно выбирать под язык и corpus. Для русско-английской базы важно отдельно проверить multilingual retrieval, а не ориентироваться только на leaderboard.

Chat model

Формирует ответ

Qwen, Llama, Gemma и другая LLM получает вопрос плюс найденный контекст.

Embedding model

Решает, какой контекст найти

Если embedder плохо связывает вопрос с нужным фрагментом, chat model этот текст не увидит.

300 PDF и больше

Большой архив лучше делить по workspaces и темам, а не превращать в одну бесконечную корзину

В свежих обсуждениях локального RAG пользователи регулярно пытаются индексировать сотни PDF или десятки гигабайт документов. Основная проблема при росте corpus — не только время индексации, а падение retrieval precision: похожих chunks становится всё больше.

По проектам Разделить corpus

Отдельные workspaces для договоров, техники, нормативов, клиентов или разных продуктов.

По источникам Не смешивать всё без необходимости

Архив старых документов может вытеснять актуальные версии при semantic search.

По качеству OCR и parsing до embeddings

Плохой текст нельзя исправить хорошей vector database.

По retrieval Тестовый набор вопросов

Соберите 20–50 вопросов с известными источниками и сравнивайте настройки объективно.

RAG надо тестировать как поисковую систему.

Перед оценкой «умности» ответа смотрите, найден ли правильный source chunk. Иначе невозможно понять, сломался retrieval или сама LLM.

Актуально на 21.09.2026

Stable 1.16.1 сейчас имеет опубликованные advisories, исправленные уже после релиза

Это важный нюанс текущего момента. Последний stable GitHub release — 1.16.1 от 27 августа, но в сентябре были опубликованы advisories, где affected range включает <= 1.16.1, а patched versions указаны как конкретные commits и > 1.16.1.

14.09.2026 · Moderate Public embed + Memories

В single-user mode публичный embed widget мог получить private Memories владельца в system prompt. Условие требует включённых Memories и публичного embed.

01.09.2026 · Moderate Stored XSS через MetaGenerator

Manager role мог записать вредоносный title/favicon и атаковать администратора при открытии homepage.

Практический вывод на сегодня: 1.16.1 не стоит публиковать как интернет-facing сервис.

Для домашнего single-user сценария держите AnythingLLM в LAN/VPN, не включайте public embed widgets вместе с Personalization/Memories и дождитесь stable-релиза выше 1.16.1 либо самостоятельно проверяйте patched build.

Security policy AnythingLLM также подчёркивает, что отсутствие authentication является допустимым режимом только для полностью доверенной изолированной среды. Если authentication не включена, любой, кто видит URL, получает доступ к экземпляру.

Agent tools требуют ещё более жёсткой изоляции.

Проект прямо пишет, что filesystem/SQL tools должны ограничиваться правами самой ОС, БД и filesystem. UI-level фильтр не считается security boundary.

Локально — если вся цепочка локальная

AnythingLLM не обязан отправлять документы в Mintplex, но providers выбираете вы

В self-hosted terms указано, что AnythingLLM не требует постоянного соединения с Mintplex Labs для работы; optional telemetry можно отключить. Однако некоторые модели/asset files могут один раз скачиваться из CDN.

Ollama + local embedder + LanceDB Полностью локальный RAG

Documents, embeddings, vector DB и inference можно держать внутри LAN.

Local documents + cloud LLM Chunks уходят провайдеру

В облако отправляется не весь archive, но найденные RAG fragments входят в prompt.

Cloud embeddings Документ участвует во внешней обработке

Текст chunks отправляется embedding provider для построения векторов.

Agent connectors Появляются дополнительные внешние системы

Gmail, web search, SQL, filesystem и другие tools имеют собственные privacy/security boundaries.

Desktop или Docker

Для одного Windows-ПК Desktop проще, для сервера и нескольких устройств — Docker

Desktop Минимум инфраструктуры
  • быстрая установка на Windows/macOS/Linux;
  • можно импортировать GGUF непосредственно в приложение;
  • в 1.16.1 появились built-in Foundry Local и GenieX варианты для поддерживаемого Windows hardware;
  • подходит для одного пользователя.
В Docker встроенный desktop GGUF loader не является основным production-путём.

Документация проекта рекомендует для browser/server версии использовать отдельный inference provider, например Ollama или LM Studio.

Ограничения

AnythingLLM упрощает RAG, но не отменяет сложность retrieval

01Не все PDF одинаковы

Скан, таблица, сложная вёрстка и обычный text PDF требуют разного parsing/OCR quality.

02Vector search не понимает всё

Точные номера, коды, даты и редкие имена иногда лучше ищутся keyword/hybrid методами.

03Модель может галлюцинировать

Даже при правильном source chunk ответ нужно сверять с цитатой.

04Большой corpus требует tuning

Default topN и threshold редко оптимальны для сотен похожих документов.

05Agents расширяют риски

Filesystem, SQL и web tools превращают AI из «читателя» в систему с реальными полномочиями.

06Stable 1.16.1 сейчас security-sensitive

Для публичной установки нужно дождаться следующего stable patch или использовать проверенный patched build.

Лучший тест RAG — не красивый ответ, а попадание правильного источника в retrieval.

Сначала измеряйте recall и citations, потом меняйте LLM.

Практический старт

Минимальная локальная схема без лишних компонентов

LLM Ollama

Отдельный inference server на ПК или GPU-сервере.

Embeddings Ollama embedder

Чтобы chunks документов не уходили во внешний API.

Vector DB LanceDB

Простой local default без отдельного database server.

AnythingLLM Docker + persistent storage

Рабочие области, documents, settings и UI.

Доступ LAN / WireGuard / Tailscale

Не публиковать сервис напрямую в интернет.

Контроль качества 20–50 тестовых вопросов

Известный source для каждого вопроса и сравнение retrieval settings.

Первоисточники

Исходники, Docker configuration, release и security AnythingLLM

Материал проверен 21 сентября 2026 года.

Stable 1.16.1 выпущен 27 августа 2026 года. На дату проверки существуют сентябрьские security advisories, у которых patched versions указаны уже после 1.16.1.

Вывод

AnythingLLM удобен для локальных документов, если воспринимать RAG как поиск, а не как магическую память

Связка AnythingLLM + Ollama особенно полезна, когда нужен собственный assistant по документации, техническим архивам, договорам, инструкциям или базе знаний без отправки всего corpus в облачный AI.

Но при сотнях PDF ключевым становится не размер chat model, а retrieval: качество текста после OCR, embeddings, topN, threshold и структура workspaces. Если правильный chunk не найден, LLM уже не сможет компенсировать его отсутствие.

FAQ

Частые вопросы про AnythingLLM и локальный RAG

AnythingLLM — это сама LLM?

Нет. Это приложение вокруг LLM, documents, embeddings, vector database, workspaces и agents. Модель может работать в Ollama или другом provider.

Можно ли сделать полностью локальный RAG?

Да: AnythingLLM + Ollama chat model + локальная embedding model + локальная vector DB. Нужно проверить, чтобы дополнительные tools/providers тоже не использовали облако.

Почему AnythingLLM не находит текст, который точно есть в PDF?

Проверьте parsing/OCR, затем embeddings, topN и similarity threshold. Если source chunk не попал в retrieval, проблема возникает до этапа ответа LLM.

Какой topN использовать?

Default AnythingLLM — 4. Для большого multi-document corpus имеет смысл тестировать большее значение на собственном наборе вопросов, но универсального числа нет.

Что означает similarityThreshold 0.25?

Это default workspace threshold, ниже которого кандидаты могут отбрасываться. Снижать его нужно только после проверки retrieval, потому что низкий threshold увеличивает шум.

AnythingLLM лучше Open WebUI?

Это разные акценты. AnythingLLM особенно интересен для document workspaces и RAG, Open WebUI — как универсальный frontend к нескольким AI providers.

Безопасно ли сейчас выставлять AnythingLLM 1.16.1 в интернет?

Я бы не рекомендовал. На 21 сентября 2026 года есть опубликованные advisories, где 1.16.1 всё ещё входит в affected range. Держите instance в LAN/VPN или используйте проверенный patched build до следующего stable release.

Какая версия актуальна?

Последний stable GitHub release на момент проверки — AnythingLLM 1.16.1 от 27 августа 2026 года.

Локальный ИИ и RAG

Нужно настроить локальный поиск по PDF, инструкциям или рабочим документам?

Можно подобрать Ollama-модель, embedder, структуру workspaces и безопасную схему доступа, а затем проверить retrieval на реальном наборе контрольных вопросов.