掘金 人工智能 6小时前
学习 RAGFlow 的知识库配置
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了RAGFlow的知识库配置,从任务消息结构入手,详细介绍了多种文件切片方法,如General、Q&A、Resume、Manual、Table、Paper、Book、Laws、Presentation、One及Tag方法,并阐述了它们在不同文档类型下的应用。此外,文章还涵盖了PDF解析器、分块大小、嵌入模型、PageRank、RAPTOR等高级配置选项,为用户提供了选择最适合配置以优化召回和问答效果的指导。理解这些配置是掌握RAGFlow关键。下一篇将深入解析do_handle_task函数。

📄 **多样的切片方法满足不同文档需求**:RAGFlow提供了General、Q&A、Resume、Manual、Table、Paper、Book、Laws、Presentation、One及Tag等多种切片方法,旨在根据不同文件类型(如文档、问答对、简历、手册、表格、论文、书籍、法律文书、演示文稿、单文档或标签集)优化信息提取和语义完整性,确保用户能为特定场景选择最佳的数据处理策略。

⚙️ **核心解析参数决定处理逻辑**:`parser_id`(切片方法)和`parser_config`(解析配置)是文件解析的关键。`parser_config`中包含如`layout_recognize`(PDF布局分析)、`chunk_token_num`(分块大小)、`delimiter`(文本分隔符)、`embd_id`(嵌入模型)等重要参数,这些参数直接影响着数据如何被分割、处理以及后续的向量化表示。

📊 **高级配置提升检索与问答效果**:除了基础的切片方法,RAGFlow还支持PageRank(提升特定知识库的排名)、自动关键词/问题提取(优化查询相关性)、`html4excel`(表格解析为HTML)、`use_raptor`(用于多跳问答的RAPTOR策略)以及`use_graphrag`(构建知识图谱以增强嵌套逻辑问答)等高级配置,这些功能为用户提供了更精细化的控制和更强大的数据处理能力。

🏷️ **Tag分块方法实现检索优化**:Tag分块方法作为一种特殊的知识库配置,不直接参与RAG流程,而是作为标签集使用。它允许用户定义描述-标签对,用于标记其他知识库的分块,从而实现检索优化。标签集构建完成后,用户查询也会自动应用这些标签,这是一种用户定义的、封闭的标记方式,与大模型提取的开放式关键词有所区别。

书接上回,昨天我们深入学习了如何触发解析任务,如何通过 Redis Stream 作为消息队列投递任务,以及任务执行器如何利用 trio 异步框架和消费者组机制,消费和处理这些任务。我们可以用 Redis 客户端连接到 Redis,看看 rag_flow_svr_queue 队列中的消息是什么样的:

任务消息结构

我们知道,每条 Redis Stream 的消息由 ID 和 Value 组成,Value 是一个字典,包含多对键值对;这里的 Value 只有一对键值对,键为 message,值为一个 JSON 字符串,表示任务的详细信息:

{  "id": "58b8b5a65e5b11f0b6c20242ac120006",  "doc_id": "677bfde25e5a11f09c890242ac120006",  "progress": 0.0,  "from_page": 0,  "to_page": 100000000,  "digest": "81e29dac5b568aca",  "priority": 0,  "create_time": 1752240687243,  "create_date": "2025-07-11 21:31:27",  "update_time": 1752240687243,  "update_date": "2025-07-11 21:31:27"}

很显然,这里的信息还不够完整,因此 collect() 继续通过任务 ID 查询数据库,获取了更详细的任务信息:

详细的任务信息如下:

{  "id": "58b8b5a65e5b11f0b6c20242ac120006",  "doc_id": "677bfde25e5a11f09c890242ac120006",  "from_page": 0,  "to_page": 100000000,  "retry_count": 0,  "kb_id": "e5aa2dbc5b9711f0b0880242ac120006",  "parser_id": "naive",  "parser_config": {    "layout_recognize": "DeepDOC",    "chunk_token_num": 512,    "delimiter": "\n",    "auto_keywords": 0,    "auto_questions": 0,    "html4excel": false,    "raptor": {      "use_raptor": false    },    "graphrag": {      "use_graphrag": false    }  },  "name": "README.md",  "type": "doc",  "location": "README.md",  "size": 9078,  "tenant_id": "fb5e4b9e5ae211f0b4620242ac120006",  "language": "English",  "embd_id": "text-embedding-3-small@OpenAI",  "pagerank": 0,  "img2txt_id": "gpt-4.1-mini@OpenAI",  "asr_id": "whisper-1@OpenAI",  "llm_id": "gpt-4.1-mini@OpenAI",  "update_time": 1752240687243,  "task_type": ""}

这里的 parser_idparser_config 是文件解析时用到的最为重要的两个参数,parser_id 表示切片方法,而 parser_config 则表示文件解析时的配置,包括解析策略、分块大小、分隔符、是否自动提取关键字和问题等。

在继续研究 do_handle_task() 函数的解析逻辑之前,我们需要先了解下 RAGFlow 的知识库配置都有哪些。

切片方法

RAGFlow 提供了多种切片方法,以便对不同布局的文件进行分块,并确保语义完整性。我们可以在知识库配置页面中进行选择:

正确选择知识库配置对于未来的召回和问答效果至关重要。下面是官方对每种切片方法的说明:

General 分块方法

这是最简单的一种分块方法,也是最通用的一种,它支持众多的文件格式,包括 MD、MDX、DOCX、XLSX、XLS、PPT、PDF、TXT、JPEG、JPG、PNG、TIF、GIF、CSV、JSON、EML、HTML 等。它的处理逻辑如下:

下面是 General 分块方法的示例:

Q&A 分块方法

此分块方法专门用于问答对的处理,支持 Excel、CSV 和 TXT 文件格式:

注意,RAGFlow 在处理问答对文件时将自动忽略不满足上述规则的文本行。

下面是 Q&A 分块方法的示例:

Resume 分块方法

此分块方法专门用于处理简历文件,将各种形式的简历解析并整理成结构化数据,方便招聘人员搜索候选人。支持 DOCX、PDF 和 TXT 格式。

Manual 分块方法

此分块方法专门用于处理手册文件,目前仅支持 PDF 格式。

RAGFlow 在处理手册文件时,假设手册具有分层的章节结构,将最低层级的章节标题作为文档分块的基本单位。因此,同一章节中的图表和表格不会被分开,这可能会导致分块的篇幅更大。

Table 分块方法

此分块方法专门用于处理表格文件,支持 Excel、CSV 和 TXT 格式。

Paper 分块方法

此分块方法专门用于处理论文文件,目前仅支持 PDF 格式。

论文将按章节进行分块,例如 摘要1.1 节1.2 节 等部分。这种方法使大模型能够更有效地总结论文,并提供更全面、易于理解的回答。然而,它也增加了对话的上下文,进而增加了大模型的计算成本。因此,在对话过程中,可考虑降低 topN 的值。

Book 分块方法

此分块方法专门用于处理书籍文件,支持 DOCX、PDF 和 TXT 格式。对于 PDF 格式的书,请设置页面范围,以去除不必要的信息并缩短分析时间。

Laws 分块方法

此分块方法专门用于处理法律文书,支持 DOCX、PDF 和 TXT 格式。

在法律文书(如合同、宪法、国际条约、公司章程等)中,常常按 篇(Part) - 章(Chapter) - 节(Section) - 条(Article) - 款(Paragraph) - 项(Subparagraph) 这样的层级划分内容。其中 条(Article) 是构成法律文书的基本结构单元,它用于对特定主题或事项进行分点阐述,具有明确的逻辑层级和法律效力。例如《联合国宪章》中的 “Article 51”(第五十一条) 或者合同中的 “Article 3: Payment Terms”(第三条:付款条款)

RAGFlow 在处理法律文书时,将 条(Article) 作为分块的基本单位,确保所有上层文本都包含在该块中。

Presentation 分块方法

此方法专门用于处理幻灯片文件,支持 PDF 和 PPTX 格式。

One 分块方法

此分块方法将每个文档整体视为一个分块,当需要使用大模型对整个文档进行总结,且模型能够处理该上下文长度时适用。支持的文件格式包括 DOCX、XLSX、XLS、PDF、TXT 等。

Tag 分块方法

这是一种特殊的知识库配置,使用 Tag 作为分块方法的知识库不会参与 RAG 流程,而是充当标签集的角色。其他知识库可以使用它来标记自己的分块,对这些知识库的查询也将使用此标签集进行标记。

此知识库中的每个分块都是一个独立的 描述 - 标签 对,支持 Excel、CSV 和 TXT 文件格式。

不符合上述规则的文本行将被忽略。

标签集构建完成后,可以在页面下方看到类似这样的标签云:

关于标签集的用法,我们会在后面专门的文章中进行介绍,可以把它视作一种检索优化的手段,而不是分块方法。

其他配置参数

除了分块方法,知识库配置页面还提供了一些其他参数,包括:

除此之外,还有一些高级配置,比如:

小结

今天我们详细学习了 RAGFlow 的知识库配置。我们首先分析了任务消息的结构,然后重点探讨了 RAGFlow 提供的多种切片方法,如 GeneralQ&ATablePaper 等,并了解了如何根据不同的文档类型选择最合适的配置。此外,我们还介绍了 PDF 解析器、分块大小、嵌入模型以及 PageRank、RAPTOR 等高级设置。

了解这些配置是掌握 RAGFlow 的关键一步。在下一篇文章中,我们将深入 do_handle_task() 函数的实现,揭示 RAGFlow 是如何根据这些配置来具体执行文件解析任务的。

欢迎关注

如果这篇文章对您有所帮助,欢迎关注我的同名公众号:日习一技,每天学一点新技术

我会每天花一个小时,记录下我学习的点点滴滴。内容包括但不限于:

目标是让大家用5分钟读完就能有所收获,不需要太费劲,但却可以轻松获取一些干货。不管你是技术新手还是老鸟,欢迎给我提建议,如果有想学习的技术,也欢迎交流!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

RAGFlow 知识库配置 文件切片 AI 数据处理
相关文章