نحوه استفاده از RAGFlow: یک راهنمای عملی برای ساخت برنامههای RAG قابل اعتماد
اگر سعی کردهاید یک سیستم تولید تقویتشده با بازیابی (RAG) بسازید، احتمالاً با نقاط دردناک کلاسیک برخورد کردهاید: توهمات، بازیابی نامنظم، خطوط لوله کند و پیش پردازش نامرتب اسناد. RAGFlow به عنوان یک ابزار گردش کار end-to-end وارد عمل میشود که به شما کمک میکند تا دریافت اسناد، تکهتکه کردن، برداریسازی، بازیابی و تولید را با کنترل و دید بیشتر هماهنگ کنید.
این راهنما یک رویکرد عملی و راه حل محور دارد. ما یک تنظیمات تمیز را مرور خواهیم کرد، به شما نشان خواهیم داد که چگونه از RAGFlow برای اسناد واقعی استفاده کنید و الگوهایی را به اشتراک میگذاریم که به طور واقعی توهمات را کاهش داده و کیفیت پاسخ را بهبود میبخشند.
RAGFlow چیست و چرا از آن استفاده کنیم؟
RAGFlow یک سیستم برای ساخت خطوط لوله تولید تقویتشده با بازیابی است. در یک تنظیمات RAG معمولی، شما:
- دریافت اسناد (PDF، صفحات وب، اسلایدها، کد و غیره)
- تکهتکه کردن محتوا به واحدهای قابل بازیابی
- تبدیل تکهها به بردار برای جستجوی معنایی
- بازیابی k تکه برتر مرتبط در زمان پرسش
- تولید یک پاسخ مستند با استفاده از یک LLM
RAGFlow پیشفرضهای مشخص، بلوکهای گردش کار و محافظها را اضافه میکند تا بتوانید سریعتر تکرار کنید و برنامههای قابل اعتمادتری را ارسال کنید. اگر موارد زیر را میخواهید، به ویژه مفید است:
- تکه تکه کردن و فراداده سازگار: بازیابی بهتر با تکههای بهتر شروع میشود.
- embeddings و LLMهای قابل اتصال: جابجایی OpenAI، مدلهای محلی یا نقاط پایانی سازمانی.
- ارزیابیها و محافظها: اندازهگیری کیفیت بازیابی و کاهش توهمات.
- خطوط لوله قابل استقرار: انتقال از نوتبوک به تولید با بازنویسی کمتر.
شروع سریع: از صفر تا یک خط لوله RAGFlow کارآمد
در زیر یک گردش کار حداقلی و end-to-end وجود دارد که میتوانید آن را تطبیق دهید. حتی اگر محیط شما متفاوت باشد، توالی و محافظها قابل انتقال هستند.
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) یک استراتژی تکه تکه کردن را انتخاب کنید که متناسب با محتوای شما باشد
تکه تکه کردن به شدت بر کیفیت و تأخیر بازیابی تأثیر میگذارد.
- برای اسناد روایی: تکه تکه کردن معنایی (تقسیم بر اساس عناوین/پاراگرافها)
- برای اسناد فنی: از تکه تکه کردن ترکیبی (معنایی + پنجره ثابت) استفاده کنید.
- برای کد: تکه تکه کردن بر اساس function/class با یک پنجره کشویی کوچک
تنظیمات توصیه شده برای شروع:
chunk_size: 600–1000 توکن
chunk_overlap: 50–100 توکن
max_depth: محدود کردن بخشهای تو در تو به 2-3 سطح برای جلوگیری از تکهتکه شدن
4) embeddings و یک فروشگاه برداری را انتخاب کنید
- با یک مدل embedding قوی و چند منظوره شروع کنید (به عنوان مثال، text-embedding-3-large یا یک مدل محلی مدرن). اگر حریم خصوصی کلیدی است، embeddings خود میزبانی شده را در نظر بگیرید.
- از یک DB برداری استفاده کنید که از موارد زیر پشتیبانی کند:
- جستجوی ترکیبی (متراکم + کلمه کلیدی)
- فیلترها (محدودیتهای فراداده)
- Batch upserts و شاخصهای شاخص
تنظیمات شاخص برای آزمایش:
top_k = 5–10 برای بازیابی اولیه
similarity_metric = cosine (یا dot برای مدلهای خاص)
- فعال کردن حداکثر ارتباط حاشیهای (MMR) برای کاهش افزونگی
5) هماهنگی بازیابی
پیاده سازی یک بازیاب دو مرحلهای:
- جستجوی ترکیبی (BM25 + متراکم)
top_k بزرگ (به عنوان مثال، 30–50)
- رتبهبندی مجدد متقابل رمزگذار یا امتیازدهی مبتنی بر 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/ با:
- پاسخهای حقیقت پایه (یا منابع مورد اعتماد)
- منابع مورد انتظار (شناسههای سند) در صورت لزوم
اندازه گیری:
- نرخ ضربه بازیابی (آیا منبع طلایی در top-k ظاهر میشود؟)
- وفاداری پاسخ (اظهارات پشتیبانی شده توسط استناد)
- هزینه (به ازای هر 100 پرسش)
تکرار بر روی:
- رتبهبندی مجدد در مقابل 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 carryover ما چیست؟"
بازنویسی: "سیاست PTO carryover; vacation rollover; حداکثر ساعات; آخرین نسخه سیاست"
قابلیت مشاهده و حلقههای بازخورد
- ورود به سیستم اینکه کدام تکهها استفاده شدهاند، امتیازات آنها و کدام نادیده گرفته شدهاند
- ضبط لایک/دیسلایک با یک منطق کوتاه؛ بازخورد دادن به تنظیم کننده
- قبل از استقرار هرگونه تغییر مدل، تستهای رگرسیون هفتگی را روی مجموعه eval خود اجرا کنید
برگه تقلب تنظیم عملکرد
- اگر پاسخها کلی به نظر میرسند:
candidate_top_k را افزایش دهید و یک رتبهبندی مجدد قویتر اضافه کنید
- اگر پاسخها جزئیات را از دست میدهند: اندازه تکه را کاهش دهید. وزن لغوی را کمی افزایش دهید
- اگر استنادها همان تکه را تکرار میکنند: MMR را فعال کنید و تنوع را افزایش دهید
- اگر تأخیر زیاد است: embeddings را کش کنید، بازنویسی پرسش را از قبل محاسبه کنید، از رتبهبندی مجدد کوچکتر استفاده کنید
- اگر هزینهها افزایش مییابد: دمای تولید را کاهش دهید، اعلانها را کوتاه کنید، یک LLM کوچکتر را برای اولین گذر امتحان کنید
ملزومات امنیت و حکمرانی
- بردارهای ذخیره شده را رمزگذاری کنید و فیلدهای حساس را در فراداده ویرایش کنید
- از کنترل دسترسی در هر شاخص استفاده کنید؛ تقسیم بر اساس تیم یا حساسیت داده
- یک رکورد تبار داده را حفظ کنید: URL منبع سند، مجموع چک و مهر زمانی دریافت
تصویر فوری مطالعه موردی: از PDFهای نامرتب به پاسخهای مورد اعتماد
یک تیم پشتیبانی 1200 صفحه PDF را دریافت کرد. بازیابی اولیه ناسازگار بود؛ نمایندگان به ربات اعتماد نداشتند. پس از تغییر به تکه تکه کردن معنایی-ترکیبی (800 توکن، 80 همپوشانی)، فعال کردن رتبهبندی مجدد متقابل رمزگذار و اعمال استناد یا سکوت، نرخ ضربه top-k از 62٪ به 89٪ افزایش یافت و پذیرش نماینده دو برابر شد. نکته کلیدی یک LLM بزرگتر نبود—بلکه تکههای تمیزتر و بازیابی سختگیرانهتر بود.
نکته ابزار: تکرار سریع با یک نوار کناری هوش مصنوعی
شایان ذکر است: اگر در حال آزمایش با اعلانها و قطعههای بازیابی در بسیاری از اسناد هستید، یک دستیار هوش مصنوعی که به شما امکان میدهد مستقیماً از مرورگر با PDFها، صفحات وب و کد چت کنید، میتواند تکرار را تسریع بخشد. به هر حال، Sider.AI (https://sider.ai/) یک نوار کناری هوش مصنوعی ارائه میدهد که به شما امکان میدهد زمینه را از صفحهای که در آن هستید، خلاصه کنید و اعلانها را به سرعت اصلاح کنید. برای نمونهسازی اعلانهای RAG و آزمایش کیفیت تکه قبل از رسمی کردن خط لوله مفید است. عیبیابی RAGFlow: رفع سریع
- «مدل مطمئن است اما اشتباه میکند.»
- بررسی پاسخگویی را فعال کنید؛ دما را کاهش دهید؛ استنادها را الزامی کنید
- «جستجو موارد تقریباً تکراری را برمیگرداند.»
- MMR را روشن کنید؛ یک رتبهبندی مجدد اضافه کنید؛ همپوشانی تکه را کاهش دهید
- «تأخیر در اوج افزایش مییابد.»
- embeddings دستهای; کش کردن بازنویسی پرسش; از تولید جریانی استفاده کنید
- «سیاستهای قدیمی همچنان ظاهر میشوند.»
- فیلتر بر روی
version = latest; اسناد منسوخ شده را منسوخ یا سنگ قبر کنید
مراحل بعدی: RAGFlow خود را در تولید قابل اعتماد کنید
- با یک پیکره کوچک و مورد اعتماد شروع کنید. ابتدا تکه تکه کردن و فیلترها را کامل کنید
- قبل از ارتقاء LLM، یک رتبهبندی مجدد اضافه کنید
- یک مجموعه eval 100 سوالی بسازید و نرخ ضربه را به صورت هفتگی پیگیری کنید
- بازخورد کاربر را برای تنظیم مداوم بازیابی سیمکشی کنید
نکات کلیدی:
- کیفیت بازیابی از اندازه مدل برای RAG مهمتر است
- تکه تکه کردن، فراداده و رتبهبندی مجدد اهرمهای اصلی شما هستند
- محافظهایی مانند استناد یا سکوت به طور چشمگیری اعتماد را افزایش میدهند
- زودتر در قابلیت مشاهده و ارزیابی سرمایهگذاری کنید
با این شیوهها، RAGFlow به یک ستون فقرات قابل اعتماد برای پاسخهای مبتنی بر واقعیت تبدیل میشود—چه در حال تقویت یک ربات راهنما، یک خلبان کمکی توسعهدهنده یا یک دستیار دانش داخلی باشید.
سوالات متداول
Q1: RAGFlow چیست و چگونه از آن برای QA سند استفاده کنم؟
RAGFlow یک چارچوب برای ساخت خطوط لوله تولید تقویت شده با بازیابی است. شما پاسخها را با استناد برای کاهش توهمات و بهبود دقت، دریافت، تکه تکه، تعبیه، بازیابی و تولید میکنید.
Q2: چگونه باید اسناد را در RAGFlow تکه تکه کنم؟
از تکه تکه کردن معنایی یا ترکیبی با تکههای 600-1000 توکنی و 50-100 توکن همپوشانی استفاده کنید. برای کد، بر اساس تابع یا کلاس تکه تکه کنید و زمینه اطراف را نیز شامل کنید.
Q3: کدام پایگاه داده برداری با RAGFlow بهترین کارایی را دارد؟
یک فروشگاه را انتخاب کنید که از جستجوی ترکیبی، فیلترهای فراداده و رتبهبندی مجدد پشتیبانی کند—Qdrant، Weaviate، Pinecone، یا یک گزینه محلی همه انتخابهای رایج هستند.
Q4: چگونه از توهمات در یک برنامه RAGFlow جلوگیری کنم؟
سیاست استناد یا سکوت را اعمال کنید، یک بررسی پاسخگویی قبل از تولید اضافه کنید و اعلانها را در مورد استفاده فقط از زمینه بازیابی شده سختگیرانه نگه دارید.
Q5: چه معیارهایی را باید برای ارزیابی RAGFlow پیگیری کنم؟
نرخ ضربه بازیابی، وفاداری پاسخ، تأخیر و هزینه به ازای هر 100 پرسش را نظارت کنید و یک مجموعه ارزیابی کوچک اما نماینده را حفظ کنید.