DataFlow知识库清洗流水线:从PDF书籍到RAG知识条目的结构化提取全流程
【免费下载链接】DataFlow基于大模型算子和工作流的高效文本大模型训练数据合成框架项目地址: https://gitcode.com/OpenDCAI/DataFlow
DataFlow 是一个基于大模型算子和工作流的高效文本训练数据合成框架,其中的**知识库清洗流水线(KB-Cleaning Pipeline)**能把你手头的 PDF 书籍、论文、网页自动转化为结构化知识条目和多跳问答对,直接喂给 RAG 系统或用于 SFT 微调,全程无需手工整理数据。
这篇文章面向新手,带你完整走一遍这条流水线:文档解析 → 知识分块 → 文本清洗 → QA 合成 → 训练格式转换,5 个算子串成一条可复现、可复用的数据生产线。
🎯 为什么需要知识库清洗流水线?
做 RAG(检索增强生成)或领域微调时,原始资料往往是一堆"脏"文件:
- PDF 书籍/论文里夹杂页眉页脚、公式乱码、图片占位符
- 网页内容里堆满 HTML 标签、超链接、弯引号
- 知识库条目粒度混乱,有的太长检索不准,有的太短信息不全
人工清洗 100 本书几乎不可能。DataFlow 的思路是:把每个清洗动作封装成一个算子(Operator),再像搭积木一样拼成流水线(Pipeline),用大模型完成语义级的理解与改写。
🧩 DataFlow 知识库清洗流水线:5 个算子的完整链路
整条流水线在 kbcleaning_pipeline.py 中定义,核心就是 5 步:
| 步骤 | 算子 | 作用 |
|---|---|---|
| 1️⃣ | FileOrURLToMarkdownConverter | 用 MinerU 把 PDF/网页解析为干净的 Markdown |
| 2️⃣ | KBCChunkGenerator | 按 token 数把长文切成适中的知识块 |
| 3️⃣ | KBCTextCleaner | 大模型清洗:去 HTML 标签、规范特殊字符 |
| 4️⃣ | Text2MultiHopQAGenerator | 从知识块合成多跳推理问答对 |
| 5️⃣ | QAExtractor | 转为 Alpaca 训练格式,直供 LLaMA-Factory |
每步的输出自动进入下一步的输入,中间结果缓存在.cache目录,方便断点续跑和逐步检查。
Step 1:PDF 文档解析——MinerU 把文档变成 Markdown
第一个算子负责"把文件变成文字"。它支持三种后端,可按算力灵活选择(源码见 mineru_operators.py):
- API 版:调用 MinerU 官方 API,零 GPU、开箱即用,适合新手
- Flash 本地版:用 vLLM 加速本地推理,速度最快,适合大批量书籍
- 官方本地版:纯本地推理,稳定但较慢
输入就是一份"文件清单",每行一个 PDF 或网页 URL。官方示例数据 kbc_test_1.jsonl 长这样:
{"source": "../example_data/KBCleaningPipeline/bitter_lesson.pdf"} {"source": "https://arxiv.org/pdf/2505.07773"}算子自动识别 URL 还是本地文件,解析完成后每个条目多出一个text_path字段,指向解析好的 Markdown 文件。
Step 2:知识分块——把长文切成"检索友好"的知识块
RAG 检索的黄金法则是:块太长召回不精准,块太短语义不完整。KBCChunkGenerator 解决这个问题:
- 默认按token 分块(
split_method="token"),每块 512 token,块间重叠 50 token,保证跨块上下文不丢失 - 分块粒度与你的检索 embedding 模型对齐(示例用
Qwen/Qwen2.5-7B-Instruct的 tokenizer) - 还支持 sentence(句子)、semantic(语义)、recursive(递归)三种切分策略
输出为raw_chunk字段,一本书就被切成了几百个"一页知识"。
Step 3:LLM 文本清洗——去掉噪音但一个字不改事实
解析出来的 Markdown 还残留 HTML 标签、破折号、乱码链接。KBCTextCleaner 调用大模型做语义级清洗,规则很克制:
- 移除冗余 HTML 标签,但保留语义化标签
- 标准化引号/破折号等特殊字符
- 处理超链接时保留链接文本
- 保持原始段落结构和代码缩进
- 事实性内容零修改——只整理格式,不改知识
清洗完成的块写入cleaned_chunk字段,这就是可以直接入库的"干净知识条目"。
Step 4:多跳问答对合成——让知识"活"起来
如果只建检索库,到 Step 3 就够了;若想训练领域问答模型,第 4 步用 Text2MultiHopQAGenerator 从知识块中合成问答对(批量版见 kbc_multihop_qa_generator_batch.py)。
"多跳"是关键:生成的问题不是单句查找,而是需要串联多个事实才能回答。每条 QA 包含question、reasoning_steps(推理步骤)、answer、supporting_facts(支撑事实)和复杂度元数据,天然就是高质量 SFT 数据。示例配置每块生成 5 个问题(num_q=5)。
Step 5:转训练格式——QAExtractor 直通 LLaMA-Factory
最后一步由 QAExtractor 完成:把嵌套的QA_pairs拍平成 Stanford Alpaca 标准的instruction / input / output三列,并导出qa.json——这正是 LLaMA-Factory 训练格式,零转换直接开训。
GPU 版的完整流水线(vLLM 本地推理 + 5 步全链路)在 kbcleaning_pipeline_vllm.py 中,适合有显卡的用户批量处理整柜书籍。
⚡ 快速上手:3 种运行方式
方式一:API 流水线(新手首选)
安装后直接运行官方 API 版流水线,仅需配置 API Key:
pip install uv uv pip install open-dataflow然后参考 kbcleaning_pipeline.py 配置你自己的 LLM 服务即可。
方式二:WebUI 可视化操作
DataFlow 提供 Web 界面,上传 PDF、选模型后端(vllm / api / sglang)、一键跑完整条清洗流水线并导出结果,核心入口在 kbclean_webui.py。
方式三:PDF2Model 一站式命令
如果你想"从 PDF 到训练好的模型"一步到位,可用 CLI 三连:
dataflow pdf2model init # 生成训练配置与流水线脚本 dataflow pdf2model train # 解析→清洗→QA合成→自动开训 dataflow chat # 直接和训练好的领域模型对话该命令内部自动串起 PDF 检测、数据清洗、dataset_info.json生成与 LLaMA-Factory 训练,实现逻辑见 cli_pdf.py(注意:实际路径为 dataflow/cli_funcs/cli_pdf.py)。
📦 核心文件路径速查
| 文件 | 说明 |
|---|---|
| kbcleaning_pipeline.py | API 版知识库清洗流水线 |
| kbcleaning_pipeline_vllm.py | GPU 版(vLLM 本地推理)流水线 |
| knowledge_cleaning/ | 知识库清洗算子目录 |
| qa_extract.py | QA 提取与 Alpaca 格式转换算子 |
| kbcleaning.py | 知识清洗提示词模板 |
| kbclean_webui.py | 知识库清洗 WebUI 入口 |
| kbc_test_1.jsonl | 官方示例输入数据 |
总结:一条流水线,两份产出
DataFlow 知识库清洗流水线的价值在于一份输入、两种产出:
- 清洗后的
cleaned_chunk→ 直接入库,构建高质量RAG 知识库 - 合成的多跳 QA 对 → 转为 Alpaca 格式,微调领域问答模型
从一本 PDF 到可检索的知识条目 + 可训练的数据集,5 个算子、一条命令级别的操作量。想要更完整的上手教程,可参考项目 README 中的 Quick Start 章节与示例数据目录 KBCleaningPipeline/。
【免费下载链接】DataFlow基于大模型算子和工作流的高效文本大模型训练数据合成框架项目地址: https://gitcode.com/OpenDCAI/DataFlow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考