Как использовать RAGFlow: Практическое руководство по созданию надежных RAG-приложений
Если вы пытались создать систему генерации, дополненную поиском (RAG), вы, вероятно, столкнулись с классическими проблемами: галлюцинации, ненадежный поиск, медленные конвейеры и сложная предварительная обработка документов. RAGFlow выступает в качестве комплексного инструмента для организации процесса обработки документов, разбивки на части, векторизации, поиска и генерации с большим контролем и наблюдаемостью.
Это руководство использует практический и ориентированный на решения подход. Мы рассмотрим чистую настройку, покажем, как использовать RAGFlow для реальных документов, и поделимся шаблонами, которые действительно уменьшают галлюцинации и улучшают качество ответов.
Что такое RAGFlow и зачем его использовать?
RAGFlow — это система для создания конвейеров Retrieval-Augmented Generation (генерации, дополненной поиском). В типичной настройке RAG вы:
- Загружаете документы (PDF-файлы, веб-страницы, слайды, код и т. д.)
- Разбиваете контент на части, удобные для поиска
- Встраиваете части в векторы для семантического поиска
- Извлекаете top‑k релевантных фрагментов при поступлении вопроса
- Генерируете обоснованный ответ, используя LLM
RAGFlow добавляет предопределенные настройки, блоки рабочих процессов и средства защиты, чтобы вы могли быстрее выполнять итерации и выпускать более надежные приложения. Это особенно полезно, если вы хотите:
- Согласованную разбивку на части и метаданные: Более качественный поиск начинается с более качественных фрагментов.
- Подключаемые встраивания и LLM: Заменяйте OpenAI, локальные модели или корпоративные конечные точки.
- Оценки и средства защиты: Измеряйте качество поиска и уменьшайте галлюцинации.
- Развертываемые конвейеры: Переходите от блокнота к производству с меньшим количеством переписываний.
Быстрый старт: от нуля до работающего конвейера RAGFlow
Ниже приведен минимальный сквозной рабочий процесс, который вы можете адаптировать. Даже если ваша среда отличается, последовательность и средства защиты можно перенести.
1) Подготовьте свою среду
- Создайте файл
.env с вашими ключами:
OPENAI_API_KEY (или другого провайдера LLM)
EMBEDDINGS_API_KEY (если используете отдельного провайдера)
VECTOR_DB_URL (например, Pinecone, Weaviate, Qdrant или локальный)
- Установите каталог проекта, например,
ragflow-project/ с папками:
data/raw/ (исходные файлы)
data/processed/ (очищенные фрагменты)
configs/ (YAML/JSON для настроек конвейера)
eval/ (наборы данных и отчеты)
2) Загрузите документы с чистыми метаданными
Хорошие метаданные = лучший поиск. Нормализуйте заголовки, авторов, даты и источники.
- Преобразуйте PDF-файлы и слайды в текст с помощью надежного парсера
- Сохраните структуру: заголовки, списки, блоки кода и таблицы
- Прикрепите метаданные к каждой части:
source, section, page, timestamp, version
Совет: Сохраняйте doc_id и chunk_id для поддержки цитирования и повторной загрузки.
3) Выберите стратегию разбивки на части, которая подходит для вашего контента
Разбивка на части сильно влияет на качество поиска и задержку.
- Для повествовательных документов: семантическая разбивка на части (разделение по заголовкам/абзацам)
- Для технических документов: используйте гибридную разбивку на части (семантическую + фиксированное окно)
- Для кода: разбивайте по функциям/классам с небольшим скользящим окном
Рекомендуемые настройки для начала:
chunk_size: 600–1000 токенов
chunk_overlap: 50–100 токенов
max_depth: ограничьте вложенные разделы до 2–3 уровней, чтобы избежать фрагментации
4) Выберите встраивания и векторное хранилище
- Начните с сильной модели встраивания общего назначения (например, text‑embedding‑3‑large или современной локальной модели). Если важна конфиденциальность, рассмотрите возможность самостоятельно размещенных встраиваний.
- Используйте векторную базу данных, которая поддерживает:
- Гибридный поиск (плотный + по ключевым словам)
- Фильтры (ограничения по метаданным)
- Пакетные операции upsert и метрики индекса
Настройки индекса для тестирования:
top_k = 5–10 для первоначального поиска
similarity_metric = cosine (или dot для определенных моделей)
- Включите максимальную предельную релевантность (MMR) для уменьшения избыточности
5) Организация поиска
Реализуйте двухэтапный поисковик:
- Гибридный поиск (BM25 + dense)
- Большой
top_k (например, 30–50)
- Переранжировщик cross‑encoder или оценка на основе LLM
- Уменьшите до окончательного
top_k (например, 5–8)
Добавьте фильтры метаданных: source:"handbook" AND section:"benefits" AND version:"v2", чтобы ограничить ответы доверенными документами.
6) Обоснованная генерация со структурой
Ваш запрос должен обеспечивать цитирование и отказ, когда доказательств недостаточно.
Пример системного запроса:
Вы — внимательный помощник. Отвечайте ТОЛЬКО информацией, подтвержденной предоставленным контекстом.
- Ссылайтесь на источники внутри текста как [doc_id:chunk_id].
- Если контекста недостаточно, скажите: «Недостаточно информации в предоставленных документах».
- Не придумывайте факты.
Шаблон пользовательского запроса:
Вопрос: {query}
Контекст:
{top_chunks}
Инструкции:
- Сначала дайте краткий ответ, затем подробности.
- Включайте цитаты после каждого фактического утверждения.
7) Добавьте средства защиты для уменьшения галлюцинаций
- Проверка возможности ответа: Перед генерацией спросите небольшую модель: «Есть ли прямые доказательства в извлеченных фрагментах?». Если нет, верните уточняющий вопрос.
- Политика «Цитируй или молчи»: Блокируйте выходные данные, в которых отсутствуют цитаты.
- Фильтры токсичности/PII для корпоративного контента.
8) Оценка и непрерывное улучшение
Создайте набор eval/ с:
- 50–200 реальными вопросами пользователей
- Эталонными ответами (или надежными ссылками)
- Ожидаемыми источниками (идентификаторами документов), где это применимо
Измеряйте:
- Коэффициент попадания при поиске (появляется ли золотой источник в top‑k?)
- Достоверность ответа (утверждения, подкрепленные цитатами)
- Стоимость (за 100 запросов)
Итеративно улучшайте:
- Размер и перекрытие фрагментов
- Переранжировщик против более высокого top‑k
- Структура и ограничения запроса
Полный конвейер RAGFlow: Пример конфигурации
Ниже приведена концептуальная конфигурация, которую вы можете адаптировать к своей цепочке инструментов. Замените имена провайдеров при необходимости.
project: product-handbook-rag
io:
input_path: data/raw/
output_index: product-handbook-index
parsing:
pdf:
strategy: auto
<a8>keep_layout: true</a9><a9>extract_tables: true</a10>markdown:</a10>preserve_headings: true
chunking:
method: semantic_hybrid
target_tokens: 800
overlap_tokens: 80
windowing: 2
metadata:
fields: [doc_id, title, section, page, version, source]
embeddings:
provider: openai
model: text-embedding-3-large
vectorstore:
type: qdrant
url: ${VECTOR_DB_URL}
similarity: cosine
retrieval:
hybrid: true
lexical_weight: 0.35
semantic_weight: 0.65
candidate_top_k: 40
rerank:
enabled: true
model: bge-reranker-large
final_top_k: 7
generation:
llm: gpt-4o
temperature: 0.2
cite_or_silence: true
guardrails:
answerability_check: true
pii_filter: true
toxicity_filter: moderate
monitoring:
log_traces: true
latency_budget_ms: 3500
cost_budget_per_100: 1.25
Как использовать RAGFlow для разных типов контента
Руководства по продуктам и справочники
- Предпочитайте семантическую разбивку на части с четкими границами разделов
- Прикрепите версию и дату вступления в силу, чтобы предотвратить устаревшие ответы
- Используйте строгие фильтры: всегда требуйте
version = latest
Базы знаний и часто задаваемые вопросы
- Используйте более мелкие фрагменты (400–600 токенов) для точных ответов
- Увеличьте пул кандидатов и полагайтесь на переранжирование, чтобы найти точный фрагмент
- Автоматически создавайте канонические пары «вопрос/ответ», чтобы повысить отзыв с помощью лексического поиска
Инженерная документация и код
- Разбивайте по функциям/модулям и включайте графы импорта в метаданные
- Включите поиск «родитель-потомок»: возвращайте функцию + контекст ее строки документации
- Используйте переранжировщик, учитывающий код, чтобы приоритизировать соответствующие символы
Юридические вопросы и соответствие требованиям
- Требуйте цитирования на уровне абзацев
- Добавьте логику отказа для неполного контекста
- Храните золотой набор утвержденных регулирующими органами источников в отдельном индексе
Шаблоны подсказок, которые действительно работают
- Сначала ответ, потом цитата: Краткий ответ вверху; цитаты внутри текста после каждого утверждения
- Цепочка поиска: Попросите модель сначала суммировать каждый фрагмент, затем синтезировать
- Перефразировка запроса: Расширьте запросы пользователей синонимами и терминами предметной области перед поиском
- Контрастные подсказки: «Объясните, почему вариант A лучше, чем B, на основе контекста». Это заставляет использовать доказательства
Пример шага перефразировки запроса:
Оригинал: «Какова наша политика переноса PTO?»
Перефразировка: «политика переноса оплачиваемого отпуска; перенос отпуска; максимальное количество часов; последняя версия политики»
Наблюдаемость и петли обратной связи
- Регистрируйте, какие фрагменты были использованы, их оценки и какие были проигнорированы
- Собирайте лайки/дизлайки с кратким обоснованием; возвращайте это для настройки поисковика
- Еженедельно запускайте регрессионные тесты на вашем оценочном наборе перед развертыванием каких-либо изменений модели
Шпаргалка по настройке производительности
- Если ответы кажутся общими: увеличьте
candidate_top_k и добавьте более сильный переранжировщик
- Если в ответах отсутствуют детали: уменьшите размер фрагмента; немного увеличьте лексический вес
- Если цитаты повторяют один и тот же фрагмент: включите MMR и увеличьте разнообразие
- Если задержка высока: кэшируйте встраивания, предварительно вычисляйте перефразировки запросов, используйте переранжировщик меньшего размера
- Если затраты резко возрастают: уменьшите температуру генерации, сократите подсказки, попробуйте использовать LLM меньшего размера для первого прохода
Основы безопасности и управления
- Шифруйте сохраненные векторы и удаляйте конфиденциальные поля в метаданных
- Используйте контроль доступа для каждого индекса; сегментируйте по команде или конфиденциальности данных
- Ведите запись происхождения данных: URL-адрес источника документа, контрольная сумма и отметка времени загрузки
Краткий обзор практического примера: от грязных PDF-файлов к надежным ответам
Группа поддержки загрузила 1200 страниц PDF-файлов. Первоначальный поиск был непоследовательным; агенты не доверяли боту. После перехода на семантически-гибридную разбивку на части (800 токенов, 80 перекрытий), включения переранжирования cross‑encoder и обеспечения соблюдения политики «цитируй или молчи» коэффициент попадания top‑k вырос с 62 % до 89 %, а число агентов, принявших решение, удвоилось. Ключом был не более крупный LLM, а более чистые фрагменты и более строгий поиск.
Совет по инструментам: Быстрая итерация с помощью боковой панели AI
Стоит отметить: если вы экспериментируете с подсказками и фрагментами поиска во многих документах, помощник AI, который позволяет вам общаться в чате с PDF-файлами, веб-страницами и кодом прямо из браузера, может ускорить итерацию. Кстати, Sider.AI (https://sider.ai/) предлагает боковую панель AI, которая позволяет вам извлекать контекст со страницы, на которой вы находитесь, суммировать и быстро уточнять подсказки. Это удобно для прототипирования подсказок RAG и проверки качества фрагментов перед формализацией конвейера. Устранение неполадок RAGFlow: Быстрые исправления
- «Модель уверена, но ошибается».
- Включите проверку возможности ответа; понизьте температуру; требуйте цитирования
- «Поиск возвращает почти дубликаты».
- Включите MMR; добавьте переранжировщик; уменьшите перекрытие фрагментов
- «Задержка резко возрастает в пиковое время».
- Пакетные встраивания; кэширование перефразировок запросов; использование потоковой генерации
- «Постоянно появляются старые политики».
- Фильтруйте по
version = latest; устаревшие или надгробные документы
Следующие шаги: Сделайте свой RAGFlow надежным в производстве
- Начните с небольшого, надежного корпуса; сначала улучшите разбивку на части и фильтры
- Добавьте переранжировщик перед обновлением LLM
- Создайте набор для оценки из 100 вопросов и еженедельно отслеживайте коэффициент попадания
- Подключите отзывы пользователей для непрерывной настройки поиска
Ключевые выводы:
- Качество поиска превосходит размер модели для RAG
- Разбивка на части, метаданные и переранжирование — ваши основные рычаги
- Средства защиты, такие как «цитируй или молчи», значительно повышают доверие
- Инвестируйте на раннем этапе в наблюдаемость и оценку
Благодаря этим практикам RAGFlow становится надежной основой для обоснованных ответов, независимо от того, поддерживаете ли вы бота помощи, помощника разработчика или внутреннего помощника по знаниям.
FAQ
Q1: Что такое RAGFlow и как его использовать для QA документов?
RAGFlow — это фреймворк для создания конвейеров генерации, дополненной поиском. Вы загружаете, разбиваете на части, встраиваете, извлекаете и генерируете ответы с цитатами, чтобы уменьшить галлюцинации и повысить точность.
Q2: Как следует разбивать документы на части в RAGFlow?
Используйте семантическую или гибридную разбивку на части с фрагментами размером 600–1000 токенов и перекрытием 50–100 токенов. Для кода разбивайте по функциям или классам и включайте окружающий контекст.
Q3: Какая векторная база данных лучше всего работает с RAGFlow?
Выберите хранилище, которое поддерживает гибридный поиск, фильтры метаданных и переранжирование — Qdrant, Weaviate, Pinecone или локальный вариант — все это распространенные варианты.
Q4: Как предотвратить галлюцинации в приложении RAGFlow?
Применяйте политику «цитируй или молчи», добавьте проверку возможности ответа перед генерацией и сохраняйте строгость подсказок в отношении использования только извлеченного контекста.
Q5: Какие метрики следует отслеживать для оценки RAGFlow?
Отслеживайте коэффициент попадания при поиске, достоверность ответа, задержку и стоимость за 100 запросов и поддерживайте небольшой, но репрезентативный набор для оценки.