在 RAG 系统中,知识库的构建是决定最终问答质量的基石。文档上传、解析与入库这一整套流程,目标是将各种格式的原始资料转化为可供检索的标准化知识单元。一个清晰、健壮的流水线,能确保信息不缺不漏、元数据完整、后续更新高效。
1. 整体流程概览
上传 → 格式识别与文本提取 → 清洗 → 切块 → 向量化 → 写入向量数据库
↓
保存元数据
每一步都会对最终效果产生影响,需要根据实际文档类型和业务特点进行设计。
2. 上传:接收与预处理
上传环节看似简单,但需要考虑以下几点:
- 支持多来源:可以是用户手动上传的单个文件,也可以对接网盘、内部 wiki、接口定时拉取等。
- 文件大小与类型检查:限制单文件体积,避免超大文件(如几百 MB 的扫描版 PDF)拖垮处理流程。常见支持的类型包括 PDF、Word、Markdown、TXT、HTML 等。
- 安全与隐私:对上传文件进行病毒扫描,并确保存储路径、访问权限符合企业内部安全策略。
实用建议:为每个上传的文档记录一份处理状态(待解析、解析中、已完成、失败),方便追踪和重试。
3. 格式识别与文本提取
不同格式需要不同的解析策略:
- 纯文本类(TXT、Markdown、HTML):直接读取,移除 HTML 标签或 Markdown 符号即可得到干净文本。
- Word 文档:使用 python-docx 等库提取文本,同时可保留标题层级等结构信息。
- PDF:这是最复杂的情况。PDF 分为两类:
- 原生可复制 PDF:文字已嵌入,可用 PyMuPDF、pdfplumber 等提取,效果较好。
- 扫描件/图片 PDF:需要先经 OCR 识别。可以使用 tesseract 等开源工具,或调用云服务 OCR API。识别质量直接影响下游问答可用性,建议对扫描件做人工抽检。
- 表格数据:尽量保持结构,或转换为“表头+行数据”的描述句,便于模型理解。
- PPT、Excel 等其他格式:同样需要针对性提取文本。
实用建议:解析时同时提取目录或标题结构,用于生成片段元数据(如章节名),这对溯源引用极有价值。
4. 文本清洗
解析得到的原始文本常包含干扰内容,需要进行基础清洗:
- 去除页眉页脚、页码、水印等重复出现的噪音。
- 合并被换行符打断的完整句子(特别是 PDF 常见的硬换行),恢复段落自然语义。
- 统一编码,规范空白字符,去除乱码。
- 删除版权声明、法律条款等与问答无关的固定模板内容(如果业务不需要)。
清洗不宜过度,以免丢失有效信息。保留原始文档的合理副本,以便溯源时回查。
5. 文本切块(Chunking)
切块的质量直接影响检索召回率。核心原则是:每个块应包含一段语义相对完整的上下文。
- 分块大小:需结合嵌入模型的最大 token 数和回答所需的信息量。常见块大小在 300-800 token(汉字约 200-500 字),并可与相邻块保留 10%-20% 的重叠,防止重要信息被割裂。
- 分块策略:
- 固定长度切分:简单但容易在句子中间截断。
- 按自然段落或标题切分:能保持语义完整性,效果更好。
- 自适应切分:根据文档结构(如为 Markdown 时按 # 标题拆分)生成不同粒度的块。
- 块与元数据绑定:每个块在存入向量库时,需附带来源文档 ID、文件名、章节、页码等元数据,以便在回答中引用。
实用建议:条件允许时,可先按文档内建结构(标题)分块,若某个块仍过长再进行二次切分,尽量保持语义完整。
6. 向量化嵌入
切分好的文本块需转换成向量,才能进行相似度搜索。
- 选择嵌入模型:根据语言、领域和性能要求选择,如通用中英文嵌入模型或领域微调过的模型。
- 批量处理:通常调用嵌入模型的 API 或本地部署模型进行批量向量化,注意限速和出错重试。
- 维度与数据库匹配:确保生成向量的维度与向量数据库所需的维度一致。
实用建议:嵌入后的向量可以缓存,在知识库小幅更新时避免全量重复计算。
7. 写入向量数据库
最后一步是将向量块及其元数据存入向量数据库(如 Milvus、Pinecone、Weaviate、Qdrant 等)。
- 建立索引:选择与数据规模、查询延迟要求相匹配的索引类型(如 HNSW、IVF)。
- 元数据存储:元数据也应存入库内或关联的关系数据库,支持按文档来源、日期等过滤。
- 版本控制:推荐保存每个块的文档版本号,方便更新时覆盖旧版本,实现知识库的增量同步。
- 完整性校验:入库后抽查几条向量,在库中搜索验证其文本内容正确,确保链路无误。
实用建议:设计幂等的入库接口,即将同一条知识块重复写入不会产生重复记录(基于文档 ID+ 块序号去重),保障更新流程的稳定。
8. 流水线管理
在真实环境中,通常使用任务队列(如 Celery、Kafka)来编排上述步骤,主要考虑:
- 异步处理:大文件解析和向量化耗时,避免阻塞请求。
- 失败重试与告警:记录每个步骤状态,解析或向量化失败时自动重试或人工介入。
- 并行处理:大文档可拆分成多页并行解析、多块并行向量化,加快入库速度。
一条健壮的文档处理流水线,让运营或业务人员可以像使用网盘一样上传资料,系统自动将其变为可问答的知识,这是 RAG 知识实时更新的基础。