Как да използвате RAGFlow: Практическо ръководство за изграждане на надеждни RAG приложения
Ако сте опитвали да изградите система за генериране, подпомогнато от извличане (retrieval-augmented generation - RAG), вероятно сте се сблъсквали с класическите проблеми: халюцинации, нестабилно извличане, бавни тръбопроводи и разхвърляна предварителна обработка на документи. RAGFlow се намесва като инструмент за цялостен работен процес, който ви помага да организирате приемането на документи, разделянето на части, векторизацията, извличането и генерирането с повече контрол и наблюдаемост.
Това ръководство възприема практичен и ориентиран към решения подход. Ще ви преведем през чиста настройка, ще ви покажем как да използвате RAGFlow за реални документи и ще споделим модели, които действително намаляват халюцинациите и подобряват качеството на отговорите.
Какво е RAGFlow и защо да го използваме?
RAGFlow е система за изграждане на тръбопроводи за генериране, подпомогнато от извличане. В типична RAG настройка вие:
- Приемате документи (PDF файлове, уеб страници, слайдове, код и т.н.)
- Разделяте съдържанието на части, които могат да бъдат извлечени
- Вграждате частите във вектори за семантично търсене
- Извличате топ‑k релевантни части при задаване на въпрос
- Генерирате обоснован отговор, използвайки LLM
RAGFlow добавя утвърдени настройки по подразбиране, работни блокове и предпазни мерки, за да можете да итерирате по-бързо и да създавате по-надеждни приложения. Той е особено полезен, ако искате:
- Последователно разделяне на части и метаданни: По-доброто извличане започва с по-добри части.
- Включващи се embeddings и 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 файлове и слайдове в текст със стабилен парсер
- Запазете структурата: заглавия, списъци, кодови блокове и таблици
- Прикачете метаданни към всяка част:
източник, секция, страница, времеви печат, версия
Съвет: Поддържайте doc_id и chunk_id, за да поддържате цитати и повторно приемане.
3) Изберете стратегия за разделяне на части, която отговаря на вашето съдържание
Разделянето на части силно влияе върху качеството на извличане и латентността.
- За повествователни документи: семантично разделяне на части (разделяне по заглавия/параграфи)
- За технически документи: използвайте хибридно разделяне на части (семантично + фиксиран прозорец)
- За код: разделете на части по функция/клас с малък плъзгащ се прозорец
Препоръчителни настройки за начало:
chunk_size: 600–1000 токена
chunk_overlap: 50–100 токена
max_depth: ограничение на вложените секции до 2–3 нива, за да се избегне фрагментация
4) Изберете embeddings и векторно хранилище
- Започнете със силен embedding модел с общо предназначение (например text‑embedding‑3‑large или модерен локален модел). Ако поверителността е от ключово значение, помислете за самостоятелно хоствани embeddings.
- Използвайте векторна база данни, която поддържа:
- Хибридно търсене (плътно + ключова дума)
- Филтри (ограничения на метаданните)
- Пакетни upserts и индексни показатели
Настройки на индекса за тестване:
top_k = 5–10 за първоначално извличане
similarity_metric = cosine (или dot за определени модели)
- Активирайте максимално маргинална релевантност (MMR), за да намалите излишността
5) Организация на извличането
Внедрете двуетапен инструмент за извличане:
- Бързо извличане на кандидати
- Хибридно търсене (BM25 + плътно)
- Голям
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 реални потребителски въпроса
- Основни верни отговори (или надеждни препратки)
- Очаквани източници (идентификатори на документи), където е приложимо
Измерете:
- Процент на попадение при извличане (появява ли се златният източник в топ‑k?)
- Верност на отговора (твърдения, подкрепени с цитати)
- Латентност (p95 от край до край)
Итерирайте върху:
- Размер и припокриване на части
- Преоценитель срещу по-висок top‑k
- Структура и ограничения на подканата
Пълен RAGFlow тръбопровод: Примерна конфигурация
По-долу е представена концептуална конфигурация, която можете да адаптирате към вашата верига от инструменти. Заменете имената на доставчиците, ако е необходимо.
project: product-handbook-rag
io:
input_path: data/raw/
output_index: product-handbook-index
parsing:
pdf:
strategy: auto
keep_layout: true
extract_tables: true
markdown:
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 токена) за точни отговори
- Увеличете групата кандидати и разчитайте на преоценка, за да намерите точния фрагмент
- Автоматично генерирайте канонични двойки въпроси/отговори, за да увеличите извличането чрез лексикално търсене
Инженерни документи и код
- Разделете на части по функция/модул и включете графиките за импортиране в метаданните
- Активирайте извличането родител-дете: върнете функция + нейния контекст на docstring
- Използвайте преоценитель, който е ориентиран към кода, за да приоритизирате съответните символи
Правни и съответстващи на нормативната уредба
- Изисквайте цитати на ниво параграф
- Добавете логика за отказ при непълен контекст
- Поддържайте златен набор от одобрени от регулатора източници в отделен индекс
Модели на подкани, които наистина работят
- Отговорете, след това цитирайте: Кратък отговор отгоре; цитати в текста след всяко твърдение
- Верига на извличане: Помолете модела първо да обобщи всяка част, след това да синтезира
- Пренаписване на заявка: Разширете потребителските заявки със синоними и термини от домейна преди извличане
- Контрастни подкани: „Обяснете защо опция A е по-добра от B въз основа на контекста.“ Това принуждава използването на доказателства
Примерен етап на пренаписване на заявка:
Оригинал: "каква е нашата политика за прехвърляне на PTO?"
Пренаписване: "политика за прехвърляне на платено отсъствие; прехвърляне на отпуск; максимален брой часове; най-новата версия на политиката"
Наблюдаемост и цикли на обратна връзка
- Регистрирайте кои части са били използвани, техните оценки и кои са били игнорирани
- Заснемайте палци нагоре/надолу с кратка обосновка; върнете това обратно в настройката на инструмента за извличане
- Изпълнявайте седмични регресионни тестове върху вашия набор за оценка, преди да разгърнете каквато и да е промяна в модела
Чийтшийт за настройка на производителността
- Ако отговорите се чувстват общи: увеличете
candidate_top_k и добавете по-силен преоценитель
- Ако в отговорите липсват подробности: намалете размера на частите; леко увеличете лексикалното тегло
- Ако цитатите повтарят една и съща част: активирайте MMR и увеличете разнообразието
- Ако латентността е висока: кеширайте embeddings, предварително изчислете пренаписванията на заявки, използвайте по-малък преоценитель
- Ако разходите скочат: намалете температурата на генериране, съкратете подканите, опитайте по-малък LLM за първи пропуск
Основни неща за сигурност и управление
- Шифровайте съхранените вектори и редактирайте чувствителните полета в метаданните
- Използвайте контрол на достъпа за всеки индекс; сегментирайте по екип или чувствителност на данните
- Поддържайте запис за произхода на данните: URL адрес на източника на документа, контролна сума и времеви печат за приемане
Моментна снимка на казус: От разхвърляни PDF файлове до надеждни отговори
Екип за поддръжка прие 1200 страници PDF файлове. Първоначалното извличане беше непоследователно; агентите не се доверяваха на бота. След преминаване към семантично‑хибридно разделяне на части (800 токена, 80 припокриване), активиране на cross‑encoder преоценка и налагане на цитиране или мълчание, процентът на попадение в топ‑k се повиши от 62% на 89%, а приемането от агентите се удвои. Ключът не беше по-голям LLM – това бяха по-чисти части и по-строго извличане.
Съвет за инструменти: Бърза итерация с AI странична лента
Заслужава си да се отбележи: ако експериментирате с подкани и фрагменти за извличане в много документи, AI асистент, който ви позволява да разговаряте през PDF файлове, уеб страници и код направо от браузъра, може да ускори итерацията. Между другото, Sider.AI (https://sider.ai/) предлага AI странична лента, която ви позволява да извличате контекст от страницата, на която сте, да обобщавате и да прецизирате подкани бързо. Това е полезно за създаване на прототипи на RAG подкани и тестване на качеството на частите, преди да формализирате тръбопровода. Отстраняване на неизправности на RAGFlow: Бързи поправки
- „Моделът е уверен, но греши.“
- Активирайте проверка за възможност за отговор; намалете температурата; изисквайте цитати
- „Търсенето връща почти дубликати.“
- Включете MMR; добавете преоценитель; намалете припокриването на части
- „Латентността скача в пика.“
- Пакетни embeddings; кеширайте пренаписванията на заявки; използвайте генериране на поточно предаване
- „Старите политики продължават да се показват.“
- Филтрирайте по
version = latest; отхвърлете или забравете остарели документи
Следващи стъпки: Направете вашия RAGFlow надежден в производството
- Започнете с малък, надежден корпус; първо усъвършенствайте разделянето на части и филтрите
- Добавете преоценитель, преди да надстроите LLM
- Изградете набор за оценка от 100 въпроса и проследявайте процента на попадение всяка седмица
- Включете обратна връзка от потребителите, за да настроите непрекъснато извличането
Основни изводи:
- Качеството на извличане надвишава размера на модела за RAG
- Разделянето на части, метаданните и преоценката са вашите основни лостове
- Предпазните мерки като цитиране или мълчание увеличават доверието драстично
- Инвестирайте рано в наблюдаемост и оценка
С тези практики RAGFlow се превръща в надеждна основа за обосновани отговори – независимо дали захранвате бот за помощ, помощен пилот за разработчици или вътрешен асистент за знания.
ЧЗВ
Q1:Какво е RAGFlow и как да го използвам за QA на документи?
RAGFlow е рамка за изграждане на тръбопроводи за генериране, подпомогнато от извличане. Вие приемате, разделяте на части, вграждате, извличате и генерирате отговори с цитати, за да намалите халюцинациите и да подобрите точността.
Q2:Как трябва да разделям документите на части в RAGFlow?
Използвайте семантично или хибридно разделяне на части с 600–1000 токена части и 50–100 токена припокриване. За код разделете на части по функция или клас и включете заобикалящия контекст.
Q3:Коя векторна база данни работи най-добре с RAGFlow?
Изберете хранилище, което поддържа хибридно търсене, филтри за метаданни и преоценка – Qdrant, Weaviate, Pinecone или локална опция са често срещани избори.
Q4:Как да предотвратя халюцинации в приложение на RAGFlow?
Приложете политика за цитиране или мълчание, добавете проверка за възможност за отговор преди генериране и поддържайте строги подкани относно използването само на извлечен контекст.
Q5:Какви показатели трябва да проследявам, за да оценя RAGFlow?
Наблюдавайте процента на попадение при извличане, верността на отговора, латентността и цената на 100 заявки и поддържайте малък, но представителен набор за оценка.