深入解析RAGFlow六阶段架构

下面用"流程图 + 六阶段拆解"的方式,把 RAGFlow 的完整流程逐层剖开,力求把每一步的输入、输出、可选策略、内部机制都讲清楚。

────────────────────────

一、总览图(先建立体感)

用户提问

├─→【阶段1 查询理解】意图解析、关键词扩展、槽位抽取

├─→【阶段2 路由与任务编排】简单问句⇒轻量流程;复杂问句⇒激活多轮/多路/Graph 检索

├─→【阶段3 混合检索】向量+全文+图关系 三路并行召回

├─→【阶段4 精排与重排】粗排→精排→多样性/去重→Top-K 切片

├─→【阶段5 上下文组装】Prompt 模板+引用标注+长度截断策略

├─→【阶段6 答案生成与后处理】LLM 生成、幻觉检测、引用回链、敏感词过滤

回答返回

────────────────────────

二、六阶段详细拆解

阶段1 查询理解(Query Understanding)

  1. 输入:原始用户问句 + 会话历史(多轮场景)。
  2. 关键动作
    • 意图分类:使用轻量模型(如 BERT-mini)把问句分到"事实问答 / 摘要 / 比较 / 分析"等桶;不同意图会触发不同后续工作流。
    • 关键词扩展:内置实体链接模块,把"苹果"⇒{Apple Inc., 苹果水果, 苹果手机} 等候选实体,并计算消歧置信度。
    • 时空间抽取:对"2024 年 Q1 财报"这类时间表达做归一化("2024-01-01~2024-03-31")。
  3. 输出:结构化 Query Object(意图标签、扩展关键词列表、时间区间、地点实体、必须包含/排除词)。

阶段2 路由与任务编排(Router & Workflow Orchestration)

  1. 规则+模型双重决策
    • 简单事实 → 单路向量检索 + 1-shot LLM 回答;
    • 复杂分析 → 激活"Agentic RAG"子流程:并行调用多路检索器、SQL 检索器、外部 API(如财报 API)。
  2. Graph Workflow 描述:RAGFlow 用一张 DAG(有向无环图)描述任务依赖;节点可以是"向量检索""SQL 查询""调用外部工具""LLM 生成"等,边表示数据流向。该 DAG 可在 Web UI 里拖拽生成。
  3. 动态扩展:若第一次召回结果置信度低,DAG 会自动插入"二次检索"节点,扩大时间窗口或更换索引空间。

阶段3 混合检索(Hybrid Retrieval)

  1. 三路召回并行
    • 向量召回:基于嵌入模型(e5-large-v2、BGE 等)把 Query Object 变成向量,在 Milvus/Qdrant 中做 ANN 搜索,召回 top 100。
    • 全文召回:Elasticsearch 做 BM25 + 扩展关键词,召回 top 100。
    • 图谱召回:在 Neo4j 中执行 Cypher,利用实体 ID 做多跳查询(例如"公司→高管→履历→学历"),召回与实体关联的文档 ID 列表。
  2. 结果融合:使用 Reciprocal Rank Fusion (RRF) 把三路分数归一化,取前 N。

阶段4 精排与重排(Rerank & Filtering)

  1. 精排模型:Cross-Encoder(如 BAAI/bge-reranker-large)对 Query-Object 与候选片段逐一打分,输出相关性概率。
  2. 多样性策略:MMR(最大边际相关性)去冗余,保证切片之间信息不重复。
  3. 长度截断:按 token 预算(如 4k)选 Top-K 个片段,K 动态计算:K = min(K_max, floor(预算 / 平均片段长度))。

阶段5 上下文组装(Context Assembly)

  1. Prompt 模板化:系统内置多种模板("你是某领域专家,请基于以下资料回答...引用的段落请以[^id]结尾...")。
  2. 引用溯源:每个片段附带元数据(文件名、页码、段落 ID),在 Prompt 里显式标注,方便 LLM 在回答里插入引用。
  3. 长度控制:若片段总长度仍超预算,优先保留高相关片段;对长片段做滑动窗口二次切分。

阶段6 答案生成与后处理(Generation & Post-processing)

  1. 生成:调用 LLM(OpenAI GPT-4、DeepSeek、本地 Llama-3 等),temperature 按意图动态调整:事实问答 0.1,创意写作 0.7。
  2. 幻觉检测:基于"自洽性检查"------让 LLM 再生成一次,比较两次回答的引用片段是否一致;若差异大,触发重试。
  3. 回链高亮:前端把返回的 [^id] 渲染成可点击锚点,用户点击即可跳转到原文高亮段落,实现"可解释性"。
  4. 敏感词/合规过滤:正则 + 词典双重过滤;不合规内容打码并提示"涉及敏感信息已隐藏"。

────────────────────────

三、可插拔组件与配置要点

  1. 文档解析

    • DeepDoc 解析器支持 PDF、扫描件、图片、表格;表格自动转 Markdown 表格,数字保留两位小数。

    • 支持用户手动调整切片:在 Chunk 页面双击即可修改分块边界、添加关键词权重。

  2. 索引策略

    • "RAPTOR" 召回增强:先在段落级向量检索,再对命中的段落做二次句子级检索,提高细粒度命中率。

    • 图索引:实体-关系三元组实时写 Neo4j,并同步到 Elasticsearch 做全文混合召回。

  3. 部署与扩展

    • Docker Compose 一键启动,支持 GPU 镜像;对外暴露 REST API、WebSocket 流式接口。

    • 多知识库隔离:每个团队独立 ES Index + 向量库,权限粒度到文件级。

────────────────────────

四、小结

RAGFlow 的最大特色是把传统 RAG"两段式"(检索→生成)拆成了"可编排、可观测、可干预"的多阶段流水线。

• 对开发者:提供 DAG 工作流画布,像搭积木一样组合"检索器-重排器-工具-LLM"。

• 对业务:每个阶段的结果都可查看、可人工纠正,大幅降低幻觉,提升最终答案的可信度。