如何使用 RAGFlow:构建可靠 RAG 应用的实用指南
如果您尝试构建过检索增强生成 (RAG) 系统,您可能已经遇到了经典的痛点:幻觉、检索不稳定、管道速度慢以及文档预处理混乱。RAGFlow 作为一个端到端的工作流工具,可以帮助您编排文档摄取、分块、向量化、检索和生成,并提供更多的控制和可观察性。
本指南采用实用且以解决方案为导向的方法。我们将介绍一个清晰的设置,展示如何使用 RAGFlow 处理真实文档,并分享实际减少幻觉并提高答案质量的模式。
什么是 RAGFlow,为什么要使用它?
RAGFlow 是一个用于构建检索增强生成管道的系统。在典型的 RAG 设置中,您需要:
RAGFlow 添加了带有倾向性的默认设置、工作流块和防护措施,以便您可以更快地迭代并发布更可靠的应用程序。如果您想要以下功能,它尤其有用:
- :以更少的重写次数从 notebook 转移到生产环境。
快速开始:从零开始构建一个可用的 RAGFlow 管道
以下是一个最小的端到端工作流程,您可以对其进行调整。即使您的环境不同,该序列和防护措施也是可移植的。
1) 准备您的环境
- (例如,Pinecone、Weaviate、Qdrant 或本地)
- 设置一个项目目录,例如
ragflow-project/,其中包含以下文件夹:
2) 摄取具有干净元数据的文档
良好的元数据 = 更好的检索。标准化标题、作者、日期和来源。
- 将元数据附加到每个块:
source、section、page、timestamp、version
提示:保留 doc_id 和 chunk_id 以支持引用和重新摄取。
3) 选择适合您内容的分块策略
分块会严重影响检索质量和延迟。
- 对于技术文档:使用 混合分块(语义 + 固定窗口)
建议的起始设置:
4) 选择嵌入和向量存储
- 从强大的通用嵌入模型开始(例如,text-embedding-3-large 或现代本地模型)。如果隐私至关重要,请考虑自托管嵌入。
要测试的索引设置:
5) 检索编排
实现一个两阶段检索器:
添加元数据过滤器:source:"handbook" AND section:"benefits" AND version:"v2" 以将答案限制为可信文档。
6) 具有结构的有根据的生成
您的提示应强制执行引用,并在证据不足时拒绝回答。
示例系统提示:
- 以 [doc_id:chunk_id] 的形式内联引用来源。
- 如果上下信息不足,请说“提供的文档中信息不足。”
- 不要捏造事实。
用户提示模板:
上下文:
{top_chunks}
说明:
- 首先提供简洁的答案,然后提供详细信息。
- 在每个事实性声明后包括引用。
7) 添加防护措施以减少幻觉
- :在生成之前,询问一个小模型:“检索到的块中是否有直接证据?” 如果没有,则返回一个澄清问题。
8) 评估和持续改进
创建一个 eval/ 集,其中包含:
测量:
迭代:
完整的 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 个 token)以获得精确的答案
工程文档和代码
法律和合规
实际有效的提示模式
- :“根据上下文解释为什么选项 A 比 B 更好。” 这迫使使用证据
示例查询重写步骤:
重写:“带薪休假结转政策;假期展期;最大小时数;策略版本最新”
可观察性和反馈循环
- 捕获赞/踩,并提供简短的理由;将其反馈到检索器调整中
- 在部署任何模型更改之前,每周在您的 eval 集上运行回归测试
性能调优备忘单
- 如果答案感觉过于通用:增加
candidate_top_k 并添加更强大的重排序器
- 如果延迟很高:缓存嵌入,预先计算查询重写,使用较小的重排序器
- 如果成本飙升:降低生成温度,缩短提示,尝试使用较小的 LLM 进行第一遍
安全性和治理要点
- 使用每个索引的访问控制;按团队或数据敏感性进行分段
- 维护数据沿袭记录:文档源 URL、校验和和摄取时间戳
案例研究快照:从混乱的 PDF 到可信的答案
一个支持团队摄取了 1,200 页的 PDF。初始检索不一致;代理不信任该机器人。在切换到语义-混合分块(800 个 token,80 个重叠),启用交叉编码器重排序并强制执行引用或沉默后,top-k 命中率从 62% 提高到 89%,代理采用率翻了一番。关键不是更大的 LLM,而是更干净的块和更严格的检索。
工具提示:使用 AI 侧边栏进行快速迭代
值得注意的是:如果您正在跨许多文档试验提示和检索片段,那么一个允许您直接从浏览器通过 PDF、网页和代码进行聊天的 AI 助手可以加速迭代。顺便说一下,Sider.AI(https://sider.ai/)提供了一个 AI 侧边栏,可让您从您所在的页面中提取上下文,快速总结和优化提示。在您正式确定管道之前,它可以方便地用于原型设计 RAG 提示和测试块质量。 RAGFlow 故障排除:快速修复
- 过滤
version = latest;弃用或删除过时的文档
后续步骤:使您的 RAGFlow 在生产中可靠
- 从一个小型、可信的语料库开始;首先完善分块和过滤器
- 构建一个包含 100 个问题的评估集,并每周跟踪命中率
主要要点:
通过这些实践,RAGFlow 成为有根据的答案的可靠支柱——无论您是为帮助机器人、开发人员副驾驶还是内部知识助手提供支持。
FAQ
Q1: 什么是 RAGFlow,我该如何使用它进行文档问答?
RAGFlow 是一个用于构建检索增强生成管道的框架。您可以通过摄取、分块、嵌入、检索和生成带有引用的答案来减少幻觉并提高准确性。Q2: 我应该如何在 RAGFlow 中对文档进行分块?
使用语义或混合分块,块大小为 600-1,000 个 token,重叠为 50-100 个 token。对于代码,按函数或类进行分块,并包括周围的上下文。Q3: 哪个向量数据库最适合 RAGFlow?
选择一个支持混合搜索、元数据过滤器和重排序的存储——Qdrant、Weaviate、Pinecone 或本地选项都是常见的选择。Q4: 如何在 RAGFlow 应用程序中防止幻觉?
强制执行引用或沉默策略,在生成之前添加可回答性检查,并保持提示严格,仅使用检索到的上下文。Q5: 我应该跟踪哪些指标来评估 RAGFlow?
监控检索命中率、答案忠实度、延迟和每 100 个查询的成本,并维护一个小型但具有代表性的评估集。