RAGFlow — RAG-движок с DeepDoc и агентами

· 3 мин чтения
rag open-source self-hosted context-engineering ai-agents
📂 Исходный код на GitHub

Открытый RAG-движок, объединяющий RAG с агентными возможностями: глубокое понимание документов, шаблонная нарезка на чанки, проверяемые цитаты и агентные workflow поверх контекстного слоя для LLM.

RAGFlow — RAG-движок с DeepDoc и агентами

RAGFlow — открытый движок для Retrieval-Augmented Generation от компании infiniflow. Он берёт на себя ровно ту часть работы, которая обычно и ломает обычный RAG: превращение сложных документов в структурированные фрагменты, которые действительно можно процитировать. Поверх этого добавлен агентный слой: готовые шаблоны агентов, исполнение кода на Python и JavaScript, поддержка MCP и памяти агента. Лицензия Apache-2.0, проект живой — репозиторий обновляется постоянно, а свежие релизы собраны на странице релизов.

Если хочется посмотреть на систему без установки, есть облачный сервис: https://cloud.ragflow.io/

Что внутри

Ключевая идея проекта — «качество на входе даёт качество на выходе». Обычный RAG-пайплайн режет документ на куски и надеется, что нужный фрагмент попал в выдачу. В RAGFlow над этим работает отдельный слой понимания документов — DeepDoc, который разбирает неструктурированные данные сложных форматов и умеет находить «иголку в стоге» буквально неограниченного объёма токенов.

Дальше конвейер выглядит так:

  1. Парсинг — DeepDoc разбирает документ и восстанавливает его структуру.
  2. Нарезка на чанки по шаблонам — алгоритм объяснимый, шаблонов много, есть визуализация результата, чтобы человек мог вмешаться и поправить разбиение вручную.
  3. Извлечение и recall — несколько стратегий отбора кандидатов плюс повторное ранжирование (re-ranking) с их слиянием.
  4. Ответ со ссылками — ключевые источники видны сразу, на каждый утверждённый факт есть трассируемая ссылка на конкретный фрагмент.

Последний пункт — самый недооценённый. Когда модель отвечает и показывает, из какого куска документа взят каждый тезис, галлюцинации становятся заметны, а не просто подозрительны. В RAGFlow это встроено в интерфейс, а не оставлено на промпт.

Поддерживаются Word, Slides, Excel, TXT, изображения, сканы, структурированные данные и веб-страницы. С недавних релизов добавлены синхронизация данных из Confluence, S3, Notion, Discord и Google Drive, а также альтернативные движки парсинга — MinerU и Docling. Есть оркестрируемая ingestion-пайплайн: загрузка, очистка, разбиение и индексация выстраиваются в явную цепочку, а не в один неразборчивый шаг.

Агентные возможности

Агентный слой вырос из понимания, что одного RAG мало: нужен не только поиск, но и выполнение действий над найденным.

  • Шаблоны агентов и готовый контекстный слой — context engine, на котором строятся рабочие сценарии.
  • Кодовый исполнитель — компонент для запуска Python и JavaScript прямо в агенте. Требует gVisor: инструкция по установке.
  • MCP — поддержка Model Context Protocol, так что агент умеет ходить во внешние инструменты.
  • Память агента — механизм Memory, добавленный в декабре 2025 года.
  • Мультимодальность — мультимодальная модель может разбирать изображения внутри PDF и DOCX.
  • Оркестрация ingest — загрузка и обработка данных как управляемый процесс.
  • Каналы чата — Feishu, Discord, Telegram, Line и другие мессенджеры как интерфейс к системе.
  • Модели — поддерживаются DeepSeek, серия GPT-5, Gemini 3 Pro и другие; конкретный список провайдеров и ключи настраиваются в конфиге. Сами LLM и embedding-модели конфигурируются, внешние сервисы не вендорятся.

Отдельная деталь: для OpenClaw существует официальный скилл RAGFlow для доступа к датасетам RAGFlow.

Требования

Самый честный момент — RAGFlow нельзя поставить на ноутбук «на пробу». Минимальные требования:

Ресурс Значение
CPU 4 ядра и больше
RAM 16 ГБ и больше
Диск 50 ГБ и больше
Docker >= 24.0.0
Docker Compose >= v2.26.1
Python >= 3.13

Docker-образы собраны только под x86. На ARM64 придётся собирать образ самостоятельно по этой инструкции. Образ slim — около 2 ГБ. До версии v0.22.0 существовали два варианта образа: полный с моделями эмбеддингов (~9 ГБ) и slim без них (~2 ГБ). Начиная с v0.22.0 поставляется только slim, а суффикс -slim в теге больше не добавляется.

Запуск через Docker

Порядок такой. Сначала поднимаем лимит отображений памяти — Elasticsearch к нему чувствителен:

# Check current value
sysctl vm.max_map_count

# Set it if it is lower than 262144
sudo sysctl -w vm.max_map_count=262144

Чтобы изменение пережило перезагрузку, добавляем строку в /etc/sysctl.conf:

vm.max_map_count=262144

Дальше клонируем репозиторий и фиксируем версию:

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker

# Use a version tag so entrypoint.sh matches the image
git checkout v0.27.2

Запуск на CPU и вариант с GPU для ускорения задач DeepDoc:

# CPU mode
docker compose -f docker-compose.yml up -d

# GPU mode for DeepDoc acceleration
# sed -i S0 .env
# docker compose -f docker-compose.yml up -d

Проверяем, что контейнер поднялся:

docker logs -f docker-ragflow-cpu-1

В логах должна появиться ASCII-логотип RAGFlow и строка * Running on all addresses (0.0.0.0). Пока этого нет, лучше не открывать интерфейс — браузер покажет ошибку сети, потому что система ещё инициализируется.

Дальше заходим в браузер по адресу машины. Порт 80 можно опускать, если не меняли конфигурацию. В файле docker/service_conf.yaml.template выбираем нужную фабрику LLM в user_default_llm и прописываем API_KEY — подробности в документации по ключам.

Файлы конфигурации

Файл Зачем
docker/.env Базовые настройки: SVR_HTTP_PORT, MYSQL_PASSWORD, MINIO_PASSWORD
service_conf.yaml.template Конфигурация бэкенд-сервисов, подставляется из переменных окружения при старте контейнера
docker-compose.yml Собственно оркестрация запуска

Чтобы сменить порт публикации, в docker-compose.yml заменяем 80:80 на <ВАШ_ПОРТ>:80. Переменные окружения из .env доступны как ${ENV_VARS} в шаблоне конфигурации — подробное описание в docker/README. Любые изменения конфигурации требуют перезапуска всех контейнеров:

docker compose -f docker-compose.yml up -d

Elasticsearch или Infinity

По умолчанию RAGFlow хранит полнотекстовые данные и векторы в Elasticsearch. Вместо него можно поставить Infinity от того же проекта:

# Stop containers and delete volumes — data will be lost
docker compose -f docker/docker-compose.yml down -v

Дальше в docker/.env ставим DOC_ENGINE=infinity и поднимаем контейнеры заново:

docker compose -f docker/docker-compose.yml up -d

Ключ -v в down удаляет тома контейнеров вместе с данными. Важно: переключение на Infinity на Linux/arm64 официально не поддерживается.

Сборка своего образа

Если нужно что-то поправить в зависимостях, образ собирается из репозитория:

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
docker build --platform linux/amd64 -f Dockerfile -t infiniflow/ragflow:nightly .

За сборкой из-под прокси прокидываются аргументы сборки:

docker build --platform linux/amd64 \
  --build-arg http_proxy=http://YOUR_PROXY:PORT \
  --build-arg https_proxy=http://YOUR_PROXY:PORT \
  -f Dockerfile -t infiniflow/ragflow:nightly .

Готовые образы лежат в Docker Hub.

Запуск из исходников

Вариант для разработки: поднять зависимости отдельно, бэкенд и фронтенд запустить локально. Хук-и настраиваются один раз:

pipx install uv
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.13
uv run python3 ragflow_deps/download_deps.py
git config --local --unset core.hooksPath
uv tool install lefthook
lefthook install

Сервисы-зависимости (MinIO, Elasticsearch, Redis, MySQL) поднимаются из docker-compose-base.yml, а имена хостов из docker/.env прописываются в /etc/hosts на 127.0.0.1. Дальше — активация окружения и старт бэкенда:

docker compose -f docker/docker-compose-base.yml up -d

source .venv/bin/activate
export PYTHONPATH=$(pwd)
bash docker/launch_backend_service.sh

Фронтенд запускается отдельно:

cd web
npm install
npm run dev

Если нет доступа к HuggingFace, помогает зеркало:

export HF_ENDPOINT=https://hf-mirror.com

Остановить всё после работы:

pkill -f "ragflow_server.py|task_executor.py"

Кому это пригодится

RAGFlow стоит рассматривать, когда документы неудобные: многостраничные PDF с таблицами, сканы, DOCX со смешанной вёрсткой, выгрузки из Confluence и Notion. Слабое место здесь одно и очевидное — ресурсы. Поднимать стек с Elasticsearch, MinIO, Redis и MySQL ради эксперимента на 16 ГБ RAM не хочется, поэтому для первого знакомства есть облако, а для продакшена — готовая документация, гайдлайны для пользователей и план развития. Обсуждения и помощь — в Discord, GitHub Discussions и в гайде по контрибьюту.

Источник: https://github.com/infiniflow/ragflow