支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


关于 RAGFlow 项目中 RAG 技术的实现分析

发布日期:2025-06-05 13:57:18 浏览次数: 1594 作者:硅基漫游指南
推荐语

深入探索RAGFlow项目中RAG技术的创新实践和核心实现。

核心内容:
1. RAGFlow项目概述及其在深度文档理解中的应用
2. 多格式文档解析和视觉信息处理技术
3. 文档切分策略和Embeddings模型选择与配置的关键点

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

 

项目概述

RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎。它提供了一个流畅的 RAG 工作流,结合大型语言模型(LLM)提供真实的问答能力,并通过各种复杂格式化数据的引用支持回答。本文通过分析 RAGFlow 的源代码和官方文档,总结其在实现 RAG 技术时采用的最佳实践。

文档处理与切分

深度文档理解(DeepDoc)

RAGFlow 的一个核心特色是其深度文档理解能力,这主要通过deepdoc模块实现:

  1. 1. 多格式文档解析
  • • 支持 PDF、DOCX、Excel、PPT、TXT、图片等多种文档格式
  • • 每种格式都有专门的解析器(如pdf_parser.pydocx_parser.py等)
  • • 能够处理复杂布局和格式,保留文档的结构信息
  • 2. 视觉信息处理
    • • OCR 技术:对图像或扫描文档进行文本提取
    • • 布局识别:识别 10 种基本布局组件(文本、标题、图表、表格等)
    • • 表格结构识别(TSR):处理复杂表格,包括层次标题、跨单元格等
  • 3. 文档切分策略
    • • 基于模板的智能切分(Template-based chunking)
    • • 保留文档的语义结构和上下文关系
    • • 可视化切分结果,允许人工干预和调整

    从源码分析可见,RAGFlow 在deepdoc/parser目录下为不同文档类型实现了专门的解析器,确保能准确提取各类文档的内容和结构。这种深度理解能力是 RAG 系统高质量检索的基础。


    文档切分实现

    rag/nlp/rag_tokenizer.py中,RAGFlow 实现了复杂的文本分词和处理逻辑:

    class RagTokenizer:
        # 实现了多种分词和处理方法
        defdfs_(self, chars, s, preTks, tkslist, _depth=0, _memo=None):
            # 深度优先搜索算法进行文本切分
            # …

        defmaxForward_(self, line):
            # 最大前向匹配算法
            # …

        defmaxBackward_(self, line):
            # 最大后向匹配算法
            # …

    RAGFlow 采用了多种切分策略,包括:

    1. 1. 基于语义的切分:保持语义完整性,避免割裂上下文
    2. 2. 基于长度的切分:控制每个 chunk 的 token 数量,避免过长或过短
    3. 3. 基于结构的切分:尊重文档原有结构(段落、标题等)
    4. 4. 可配置的切分模板:提供多种切分模板选项,适应不同文档类型和检索需求

    这种灵活的切分策略确保了检索时能够获取足够的上下文,同时避免了无关信息的干扰。

    Embeddings 模型选择与配置

    RAGFlow 支持多种 embeddings 模型,在rag/llm/embedding_model.py中实现了丰富的模型接口:

    class DefaultEmbedding(Base):
        # 默认使用FlagEmbedding模型
        def__init__(self, key, model_name, **kwargs):
            # 默认使用BAAI/bge-large-zh-v1.5模型
            # …

    classOpenAIEmbed(Base):
        # OpenAI的embedding模型
        # …

    classQWenEmbed(Base):
        # 通义千问的embedding模型
        # …

    classZhipuEmbed(Base):
        # 智谱AI的embedding模型
        # …

    RAGFlow 的 embeddings 模型选择实践包括:

    1. 1. 多模型支持
    • • 支持主流的 embeddings 模型,如 OpenAI、智谱 AI、通义千问等
    • • 默认使用 BAAI/bge-large-zh-v1.5 模型,针对中英文优化
    • • 支持本地部署的模型(如 Ollama、LocalAI 等)
  • 2. 批处理优化
    • • 实现了批量编码(batch encoding)以提高效率
    • • 自动处理长文本截断,避免超出模型最大长度限制
  • 3. 一致性保证
    • • 确保同一知识库内所有文档使用相同的 embedding 模型
    • • 保证向量空间的一致性,提高检索质量
  • 4. 灵活配置
    • • 允许为不同知识库选择不同的 embedding 模型
    • • 支持通过配置文件调整模型参数

    RAGFlow 的官方 Docker 镜像(非 slim 版本)已预装了两个优化的 embedding 模型:BAAI/bge-large-zh-v1.5 和 maidalun1020/bce-embedding-base_v1,这两个模型专为中英文优化,提供了良好的多语言支持。

    向量数据库选型与实现

    RAGFlow 在向量数据库方面采用了灵活的架构,主要通过rag/utils/doc_store_conn.py实现数据库连接和操作:

    class DocStoreConnection:
        # 向量数据库连接抽象类
        # …

    class OpenSearchConnection(DocStoreConnection):
        # OpenSearch实现
        # …

    RAGFlow 的向量数据库实践包括:

    1. 1. 默认使用 OpenSearch
    • • 作为默认的向量数据库,提供高性能的向量检索
    • • 支持复杂的查询和过滤操作
    • • 良好的水平扩展能力,适合大规模数据
  • 2. 索引设计
    • • 为每个知识库创建独立的索引
    • • 使用命名规则ragflow_{uid}确保索引唯一性
    • • 存储文档元数据和向量数据,支持多种查询方式
  • 3. 混合检索策略
    • • 结合关键词搜索和向量相似度搜索
    • • 使用加权融合(weighted fusion)提高检索质量
    • • 支持多种相似度计算方法(如余弦相似度)
  • 4. 性能优化
    • • 实现了批量操作以提高写入效率
    • • 使用缓存减少重复计算
    • • 支持分片和复制以提高可用性和性能

    RAGFlow 的向量数据库设计注重灵活性和性能,能够处理大规模的文档集合,并支持复杂的检索需求。

    检索实现机制

    RAGFlow 的检索机制主要在rag/nlp/search.py中实现,采用了多种技术提高检索质量:

    class Dealer:
        def search(self, req, idx_names: str | list[str], kb_ids: list[str], emb_mdl=None, highlight=False, rank_feature: dict | None = None ):
            # 实现了复杂的检索逻辑
            # …

        def insert_citations(self, answer, chunks, chunk_v, embd_mdl, tkweight=0.1, vtweight=0.9):
            # 实现了引用插入逻辑
            # …

    RAGFlow 的检索实践包括:

    1. 1. 混合检索策略
    • • 结合全文检索和向量相似度检索
    • • 默认权重配置为:关键词权重 0.05,向量相似度权重 0.95
    • • 支持调整权重以适应不同场景
  • 2. 多阶段检索
    • • 首先进行初步检索获取候选文档
    • • 然后使用重排序(reranking)提高相关性
    • • 最后进行结果过滤和排序
  • 3. 自适应检索
    • • 当结果不足时,自动降低匹配阈值进行二次检索
    • • 支持基于相似度阈值的过滤,确保结果质量
    • • 可配置的检索参数,如 topk、相似度阈值等
  • 4. 引用与溯源
    • • 自动为生成的回答插入引用标记
    • • 支持查看引用来源,提高透明度和可信度
    • • 引用格式为[ID:n],便于用户追踪信息来源
  • 5. 关键词增强
    • • 支持为文档块添加关键词,提高特定查询的排名
    • • 实现了同义词扩展,提高召回率
    • • 支持自定义停用词和权重调整

    RAGFlow 的检索机制注重准确性和可解释性,通过多种技术的组合提高了检索质量,同时提供了灵活的配置选项以适应不同的应用场景。

    RAG 流程集成与优化

    RAGFlow 提供了完整的 RAG 工作流,从文档上传、解析、切分、索引到检索和生成,形成了一套自动化的流程:

    1. 1. 流程自动化
    • • 提供直观的 Web 界面,简化操作
    • • 自动化的文档处理和索引建立
    • • 支持批量处理多个文档
  • 2. 人工干预
    • • 可视化切分结果,允许人工调整
    • • 支持添加关键词和修改文档块内容
    • • 提供检索测试功能,验证配置效果
  • 3. 多模型集成
    • • 支持配置不同的 LLM 作为生成模型
    • • 支持多种 embedding 模型
    • • 支持图像理解模型,处理多模态内容
  • 4. 性能优化
    • • 使用并行处理提高文档解析速度
    • • 批量操作减少 API 调用次数
    • • 缓存机制减少重复计算
  • 5. 可扩展架构
    • • 模块化设计,便于扩展和定制
    • • 支持通过 API 集成到其他系统
    • • 支持 Docker 部署,简化环境配置

    RAGFlow 的整体架构注重易用性和灵活性,适合各种规模的业务需求,从个人使用到大型企业应用都能满足。

    总结

    RAGFlow 在 RAG 技术实现上的最佳实践主要体现在以下几个方面:

    1. 1. 深度文档理解:通过专门的解析器和视觉处理技术,实现对复杂文档的深度理解,为高质量检索奠定基础。
    2. 2. 智能文档切分:采用基于模板的切分策略,保留文档的语义结构和上下文关系,提高检索的准确性。
    3. 3. 灵活的模型支持:支持多种 embeddings 模型和 LLM,允许用户根据需求选择最适合的模型组合。
    4. 4. 高效的向量存储:使用 OpenSearch 作为向量数据库,提供高性能的检索能力和良好的扩展性。
    5. 5. 混合检索策略:结合关键词搜索和向量相似度搜索,通过加权融合提高检索质量。
    6. 6. 可解释性设计:提供引用和溯源功能,增强生成内容的可信度和透明度。
    7. 7. 人机协作:允许人工干预和调整,结合自动化流程提高整体效率。

    RAGFlow 的这些最佳实践为构建高质量的 RAG 系统提供了有价值的参考,特别是在处理复杂文档、提高检索质量和增强生成内容可信度方面的创新设计。

    后续我将就本文列举的各个模块进行更详细的分析。

 


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询