Как развернуть Ragflow: база знаний, ИИ-агент и MCP
Docker → dataset и чанкинг → retrieval-тест → Agent с цитатами → MCP в контент-пайплайн
Обычный чат с нейросетью уверенно отвечает по вашим PDF — и часто врёт. Ragflow решает другую задачу: документы компании превращаются в базу знаний, поиск находит нужные куски текста, модель отвечает с цитатами, а агент может отдать этот поиск в Cursor и контент-пайплайн через MCP.
Ниже — практический путь без DevOps-бэкграунда: Docker → модель → dataset и чанкинг → retrieval-тест → Chat/Agent → MCP. Стабильный ориентир установки — тег v0.26.4. Официальный quickstart: документация Ragflow.
Коротко. Цель не «поболтать с файлом», а собрать ИИ-агента на базе знаний: вопрос → поиск по вашим документам → ответ с источниками → человек проверяет черновик перед публикацией.
Почему обычный чат врёт на ваших PDF
Боль: ответы без источников и «уверенный» бред
Загрузили прайс, регламент поддержки и бриф в облачный чат. Модель смешала старую и новую цену, выдумала пункт договора и сформулировала ответ так, будто он из файла. Без ссылки на кусок документа вы это ловите уже после сообщения клиенту или поста в Telegram.
Вторая боль — данные. Корпоративные PDF в чужом SaaS-чате удобны, но для коммерческой тайны и внутренней базы знаний часто нужен свой контур: сервер у вас, доступ по ключу, поиск только по выбранным датасетам.
Что даёт связка «документы → retrieval → агент»
Цепочка простая:
- Документы парсятся и режутся на осмысленные куски.
- По вопросу система ищет релевантные куски (retrieval).
- Модель отвечает, опираясь на найденное, а не «из головы».
- Агент при необходимости вызывает инструменты — в том числе поиск по базе.
- Человек утверждает черновик FAQ, ответа поддержки или поста.
Так вы создаёте ИИ-агента не как «ещё один чат», а как ассистента по документам компании.
Что такое RAG простыми словами
Маркер: простыми словами. RAG (retrieval-augmented generation) — это когда нейросеть сначала ищет факты в вашей базе, а потом пишет ответ на основе найденного. Без поиска модель «вспоминает» из обучения и легко выдумывает.
Retrieval + LLM: откуда берётся цитата
RAG-система = поиск + языковая модель (LLM).
- Retrieval — найти фрагменты документов, похожие на вопрос.
- LLM — собрать из фрагментов связный ответ и показать, откуда взяла мысль.
В Ragflow поиск гибридный: полнотекстовый плюс векторный. Векторный слой строится через embedding-модель — отдельную от чат-модели.
Маркер: простыми словами. Embedding — это способ превратить текст в набор чисел, чтобы искать «похожий смысл», а не только точное совпадение слов. Сменили embedding после индексации — старые и новые числа живут в разных «мирах», база ломается.
Чем RAG-агент отличается от «просто чата с файлом»
Чат с одним загруженным файлом — разовая сессия. RAG-агент держит постоянную базу знаний, умеет ходить в retrieval как в инструмент, может звать другие tools и работать в цепочке: найти → проверить → черновик. Agentic RAG — когда нет жёсткого «всегда сначала поиск, потом ответ»: агент сам решает, когда звать retriever.
От PDF до MCP: пять станций Ragflow
Схема не интерфейс UI, а путь данных: документ парсится, режется на чанки, retrieval находит нужный кусок, агент отвечает с цитатой, MCP отдаёт поиск наружу.
- PDF / документы — вход в dataset, не «просто файл в чат».
- DeepDoc + чанки — осмысленные куски до первого диалога.
- Retrieval → Agent → MCP — поиск, ответ с источником, выдача в Cursor/пайплайн.
Дальше — что именно ставите на свой сервер (Dataset, Chat, Agent) и где установка ломается чаще всего.
Цикл ~42 с · станции: PDF → чанки → retrieval → Agent → MCP out
Ragflow: что ставите на свой сервер
Ragflow (RAGFlow) — open-source движок на глубоком разборе документов. Репозиторий: infiniflow/ragflow на GitHub (лицензия Apache-2.0). Заявленная цель вендора — ответы с обоснованными цитатами по сложным форматам, а не «красивый чат».
Dataset, Chat, Agent — роли блоков
| Блок | Зачем нужен |
|---|---|
| Dataset | База знаний: загрузка файлов, парсинг, чанки, индексы |
| Chat | Диалог по выбранным датасетам, system prompt, цитаты |
| Agent | Рассуждение + tools (в т.ч. Retrieval), шаблоны, reflection |
| API / MCP | Отдать поиск наружу — в Cursor, скрипт, контент-завод |
Когда Ragflow уместнее Langflow и «голого» пайплайна
- Нужны PDF, таблицы, сканы, цитаты и ручная правка чанков — Ragflow.
- Нужен визуальный граф «агентов ради агентов» без уклона в документный OCR — чаще смотрят Langflow и похожие конструкторы.
- Нужен полностью кастомный NLP и особый чанкинг графиков — иногда пишут свой пайплайн (дороже и дольше).
Для маркетолога и владельца бизнеса точка входа обычно такая: self-host Ragflow → база → чат с цитатами → потом Agent и MCP.
Железо и Docker: где установка ломается чаще всего
Compose, RAM/CPU и типичный vm.max_map_count
Минимум по официальному quickstart: CPU от 4 ядер (x86), RAM от 16 GB, диск от 50 GB, Docker ≥ 24.0.0, Compose ≥ v2.26.1. Официальные образы — только x86; на ARM образ собирают сами. Сжатый образ около 2 GB, после распаковки около 7 GB.
Критичная настройка Linux: vm.max_map_count ≥ 262144. Без неё Elasticsearch/Infinity не поднимутся, в логах — ошибка вроде «Can't connect to ES cluster».
UI по умолчанию на порту 80 (http://IP). HTTP API внутри — 9380. Образ без вшитых embedding: infiniflow/ragflow:v0.26.4. GPU для ускорения DeepDoc — опция DEVICE=gpu в .env; иначе парсинг идёт на CPU.
Реалии РФ. Оплата зарубежных GPU/SaaS и доступ к некоторым LLM API бывают нестабильны. Рабочие пути: свой VPS/выделенный сервер в РФ, облачный образ Ragflow у российских провайдеров (например, готовые сценарии у Selectel в их документации), локальные модели через Ollama/Xinference. Чат-модель и embedding можно подключить к доступному из РФ провайдеру или поднять локально.
Чеклист «поднялось / не поднялось»
Железо и ОС
x86, ≥16 GB RAM свободно под Docker.
vm.max_map_count
Выставьте значение и закрепите в sysctl.conf (на Docker Desktop / WSL часто сбрасывается).
Stable-тег + compose
checkout v0.26.4 → docker compose up -d.
UI и model provider
Дождитесь «Running on all addresses», откройте UI по IP (порт 80).
sudo sysctl -w vm.max_map_count=262144
git checkout -f v0.26.4
docker compose -f docker-compose.yml up -dПризнак успеха. Контейнеры healthy/running, веб-интерфейс открывается, можно зайти в настройки и добавить model provider.
Типичные ошибки новичка
- Забыли
vm.max_map_count→ кластер поиска не коннектится. Решение: sysctl + перезапуск compose. - Взяли
nightlyвместоv0.26.4→ нестабильное поведение. Решение: только stable-тег для первого запуска. - Мало RAM / ARM без своей сборки → контейнеры падают или образ не подходит. Решение: ≥16 GB на x86 или сборка под ARM / облачный x86 в РФ.
Модель и embedding: выбор, после которого нельзя «просто поменять»
LLM для ответов vs embedding для поиска
В настройках провайдеров нужны минимум две роли:
- Chat / LLM — пишет ответы в Chat и Agent (можно Gemini, локальную модель через Ollama и т.д. — что реально доступно вам из РФ).
- Embedding — строит векторный индекс для поиска по чанкам.
- По желанию image-to-text — если много скриншотов и сканов.
Маркер: простыми словами. LLM отвечает человеку словами. Embedding молча размечает базу для поиска. Это разные кнопки в настройках; одной «умной» моделью обе задачи закрывать нельзя, если Ragflow ждёт отдельный embedding.
Почему смена embedding после parse ломает базу
Правило вендора жёсткое: выбрали embedding и распарсили файл — менять embedding нельзя, пока не удалите все чанки. Иначе части базы живут в разных embedding-пространствах, и retrieval начинает выдавать мусор.
Практический вывод: на пилоте зафиксируйте embedding сразу и не «переключайте ради интереса» после первой индексации.
Dataset и чанкинг: документы → осмысленные куски
DeepDoc и шаблоны чанков
Dataset в Ragflow — это и есть база знаний: загрузка → парсинг (layout + chunk) → embedding и полнотекстовые индексы. Поддерживаются PDF, DOC/DOCX, TXT/MD, таблицы, картинки, презентации и др.
Маркер: простыми словами. Чанкинг — нарезка документа на куски, по которым потом ищут. Плохая нарезка = модель «видит» обрывки фраз и отвечает мимо. DeepDoc — встроенный разбор сложных документов (сканы, вёрстка, таблицы), чтобы куски были осмысленными, а не случайными абзацами.
Шаблоны чанков (chunk templates) под тип файла: General, Q&A, Manual, Table, Paper, Book, Laws, Presentation, Picture, One, Tag и др. Неверный шаблон даёт semantic loss: ответы формально есть, смысла нет.
С версии 0.21 доступен Ingestion pipeline на Agent canvas (Parser → Transformer → Chunker → Indexer); DeepDoc — парсер по умолчанию для сложных layout.
PDF, таблицы и ручная правка чанков
После parse откройте чанки и вмешайтесь вручную (intervene): поправьте текст, добавьте keywords / questions / tags для ранжирования. Типичные сбои на PDF:
- «Success», но пустые чанки — часто image-based PDF и слабый OCR; сегменты короче ~8 токенов отбрасываются.
- Таблицы режутся слишком мелко или парсер падает — смените template (Table/Paper), попробуйте другой парсер, конвертируйте PDF→DOCX, не жмите Plain Text там, где нужен OCR.
Загружайте файлы аккуратно (через File system + link — удобный путь из документации), не сваливайте в один dataset прайсы, юридические акты и маркетинговые брифы без логики: лучше несколько узких баз.
Retrieval-тест: ловите мусор до первого чата
Как читать score и «пустые» выдачи
До Chat сделайте Retrieval testing. Задайте 5–10 реальных вопросов поддержки или маркетинга. Смотрите, какие чанки приходят и с каким score.
По умолчанию similarity threshold ≈ 0.2, вес векторной схожести ≈ 0.3 (гибрид full-text + vector). Если выдача пустая — порог слишком жёсткий, чанки кривые или вопрос не пересекается со словарём документов.
Когда виноват чанк, а когда запрос
- В топе чужие разделы → плохой template, грязный parse, смешаны разные продукты в одном dataset.
- В топе правильный файл, но обрывок без контекста → ручная правка чанка / другой размер нарезки.
- Запрос сленговый, в PDF — канцелярит → переформулируйте тест или добавьте questions/keywords к чанкам.
Итог блока. Пока retrieval-тест не показывает нужные куски — Agent и MCP только масштабируют ошибку.
Chat с цитатами и Empty response против галлюцинаций
Настройка «нет контекста — нет выдумки»
Создайте Chat assistant, привяжите один или несколько datasets, выберите chat-модель, задайте system prompt.
Маркер: простыми словами. Empty response — фраза, которую бот обязан сказать, если поиск ничего не нашёл (например: «В базе знаний нет данных по этому вопросу»). Если поле пустое, модель может начать импровизировать — так рождаются галлюцинации.
Заполните Empty response сразу. Это главный рубильник «отвечаем только по документам».
Кейс: FAQ и поддержка из корпоративных PDF
Сценарий на один вечер после установки:
- Dataset «Поддержка»: регламент, FAQ, прайс, условия доставки.
- Template под тип файлов (Manual / Q&A / Table).
- Parse → intervene → retrieval-тест на вопросах клиентов.
- Chat с Empty response.
- Ответы с цитатами копируете в черновик для оператора или базы FAQ.
Тот же контур работает для контента: брифы и кейсы → агент готовит черновик поста с опорой на факты → редактор правит тон и публикует.
Agent и tools: когда одного чата уже мало
Шаблоны Agent и границы автономии
С компонента Agent (ориентир с v0.20.5) появляется автономное рассуждение, tools, subagents, reflection. Retrieval подключается как tool. Агент может быть standalone или planner в multi-agent схеме. В User Settings → MCP можно добавить внешние MCP-tools на canvas.
Max reflection rounds по умолчанию 1: больше раундов — дольше ответ и выше расход.
Маркер: простыми словами. Reflection rounds — сколько раз агенту разрешено «передумать и проверить себя» через инструменты. Для FAQ хватает 1; для длинного исследования можно поднять, но пилот лучше оставить коротким.
HITL перед автопубликацией в блог/соцсети
Автономные агенты в продажах и маркетинге без человека часто проигрывают гибриду: черновик делает ИИ, решение — человек. Для контент-завода правило жёсткое:
база знаний → Agent/Chat с цитатами → человек утверждает → только потом публикация.
Не отдавайте агенту кнопку «опубликовать в блог/Telegram» без HITL (human-in-the-loop — человек в контуре).
MCP и API: отдать базу в Cursor и контент-пайплайн
Маркер: простыми словами. MCP (Model Context Protocol) — стандарт, как внешние программы (например Cursor) подключают инструменты. Ragflow может работать как MCP-сервер и отдавать наружу поиск по вашей базе — tool retrieve.
Что отдаёте наружу: поиск по базе, не «весь диск»
MCP-сервер Ragflow выключен по умолчанию, нужен Ragflow ≥ v0.18.0. Порт по умолчанию 9382. В Docker раскомментируют command с --enable-mcpserver, --mcp-port=9382, --mcp-base-url=http://127.0.0.1:9380, режим self-host или host, API key. Подробности — в доке launch MCP server.
Режимы:
- self-host — ключ при старте, доступ к datasets одного tenant;
- host — у каждого клиента свой API key.
Сейчас tool сфокусирован на retrieve: чанки по dataset_ids / опционально document_ids + вопрос. Это не «открой весь диск сервера», а контролируемый поиск.
Безопасность от вендора: MCP ещё зреет, API key — упрощённая авторизация. В публичной сети биндите на 127.0.0.1, не на 0.0.0.0.
API key для HTTP API берётся в UI: аватар → API.
Связка с контент-заводом без второго RAG с нуля
Схема для команды:
- Ragflow хранит и индексирует корпоративные PDF.
- Cursor или другой MCP-клиент вызывает
retrieve. - Агент/редактор собирает черновик поста, FAQ, ответа лиду — с цитатами.
- Человек правит и публикует (WordPress, Telegram и т.д.).
Внешний оркестратор (Make и аналоги) может дергать HTTP API Ragflow — без второй RAG-системы «с нуля». MCP здесь — мост в IDE и агентный контур, а не замена базе знаний.
Ragflow или Dify: короткий выбор без переписывания чужого гайда
Когда нужен документный RAG с цитатами
Выбирайте Ragflow, если узкое место — качество парсинга PDF/таблиц/сканов, цитаты, intervene chunks, retrieval-тест до чата. Для поддержки со скриншотами и OCR «из коробки» Ragflow чаще оказывается удобнее конструкторов без встроенного OCR.
Когда быстрее другой конструктор агентов
Выбирайте Dify (или похожий app studio), если нужен быстрый пилот чат-бота, low-code обвязка приложения и LLMOps «за день», а документный OCR — не главная боль. На сайте Kovcheg уже есть отдельный материал по Dify — здесь только развилка «когда что», без второго полного гайда.
| Ситуация | Что брать |
|---|---|
| Тяжёлые PDF, цитаты, ручные чанки | Ragflow |
| Быстрый app-builder чат-бота | Dify |
| Особый NLP / сложные графики в PDF | Свой пайплайн |
Ошибки, из-за которых «агент тупит»
Слабый chunk template и грязный parse
Самый частый сценарий «агент глупый»:
- Шаблон General на таблице прайса.
- Скан без нормального OCR → пустые чанки при статусе Success.
- Сменили embedding после parse.
- Пустой Empty response → модель додумывает.
- Сразу включили Agent и MCP, не сделав retrieval-тест.
Тест на 5 своих вопросов до продакшена
Перед боем прогоните пять вопросов, которые реально задают клиенты или команда. Для каждого зафиксируйте: нашлись ли правильные чанки, есть ли цитата, сработала ли Empty response на провокации вне базы.
Пока 5/5 не зелёные — не подключайте автопубликацию и не открывайте MCP наружу.
FAQ
Нужен ли код, чтобы поднять Ragflow?
Для базового сценария — нет: Docker Compose, UI, загрузка файлов, Chat. Код понадобится, если пишете свои интеграции через API/MCP или собираете образ под ARM.
Можно ли кормить агента только своими документами?
Да. В этом смысл RAG и Empty response: отвечаем по dataset, а на вопрос вне базы — заранее заданной фразой, без импровизации.
Чем MCP здесь отличается от «просто API»?
HTTP API — универсальные запросы из любого скрипта. MCP — удобный способ отдать tool retrieve IDE и агентам (Cursor и др.) в стандартном протоколе инструментов. Оба опираются на API key; MCP-сервер отдельно включают на порту 9382.
Сколько документов достаточно для первого теста?
Хватит 5–20 понятных файлов одного контура (например, только поддержка). Лучше маленькая чистая база, чем 500 смешанных PDF без retrieval-теста.
Что проверяли по источникам
- Официальный quickstart Ragflow (тег v0.26.4, железо, dataset, Chat, Empty response).
- Документация knowledge base / MCP server / tool
retrieve. - Репозиторий infiniflow/ragflow (релизы и заявленные возможности Agent/MCP).
- Обзоры и кейсы: когда Ragflow уместнее Dify; зачем HITL перед автопубликацией.
