网安研途智能体:基于数据治理与Dify平台的垂直领域RAG智能体研发实践与优化 数据治理 基于python脚本的文本分割
二 数据治理2.4基于python脚本的文本分割由于Dify直接文本分割功能对单个文件的大小限制为15MB部分文件因超出该限制而无法上传。为此我采用更具灵活性与可控性的替代方案基于 Python 脚本实现自定义文本分割。首先将资料按种类与时间划分为四类进行存储如图 2-4 所示。接下来将详细阐述数据标准化与结构化方案、Chunking 策略的设计思路分析其对检索效果的影响并探讨后续优化方向。图2-4 文件结构元数据字段采用 JSON 格式定义示例如下{category: vulnerability_mining, // 类别英文标识category_cn: 漏洞挖掘, // 类别中文名称year: 2024, // 发表年份section: Abstract, // 所属章节char_count: 685, // 字符数source_file: paper1.pdf, // 来源文件title: Title of the Paper // 论文标题}在数据标准化环节年份信息优先从文件夹路径中提取章节名称则通过映射规则将非标准表述如“1. Introduction”统一为标准名称如“Introduction”。文本清洗流程包括移除页码和页眉页脚、标准化空白字符、过滤过短段落、保留数学公式中的特殊符号如Σ,∫,→。具体操作步骤如下1. 原始文本提取使用 PyMuPDF 工具库提取 PDF 文档所有页面的文本内容。2. 空白字符标准化将连续的多个空格、换行符、制表符统一替换为单个空格。3. 段落过滤剔除字符数少于 20 的段落以去除无效或噪声内容。4. 特殊符号保留确保数学公式中常用的特殊符号不被清洗或转义。针对章节的识别与提取设计了专门的识别策略。首先构建章节模式库覆盖学术论文的常见章节标题如Abstract、Introduction、Related Work 等。采用多模式正则表达式匹配章节标题并记录每个标题在文档中的起始位置。基于位置信息对全文进行切分提取各章节对应的文本片段。最后对提取出的标题进行标准化映射使非标准标题如“1. Introduction”统一转换为标准名称。经过上述处理各章节内容与论文级别的元数据形成结构化关联为后续检索与分析奠定基础。文本分割策略采用章节感知的语义分割方法其核心设计思路为首先按章节边界进行切分以保持语义单元的完整性继而在章节内部引入滑动窗口机制合理控制文本块大小最后在句子边界处完成精细切分确保语义连贯性。为阐明该策略的优越性我对几种常见分割方法进行了对比分析1固定长度分割按固定字符数切分不考虑语义边界。其优势在于实现简单、块大小均匀且处理速度快但缺点显著可能切在单词或句子中间导致语义完整性差、句子碎片化。2按标题递归分割依据章节标题递归切分章节内可进一步细分。该方法语义完整性高、符合文档逻辑结构但存在文本块大小不均、可能产生超大块的问题且依赖明确的标题标记实现复杂度较高。3语义分割基于语义相似度在低相似处切分。该策略语义完整性最高、话题转换明确但需要嵌入模型计算处理速度慢且块大小不可控需调优阈值。相较之下章节感知的语义分割策略具有以下突出优势1. 平衡性最佳在语义完整性与文本块大小可控性之间取得良好平衡2. 专为学术论文设计充分考虑论文的章节结构特点贴合实际应用场景3. 实现复杂度适中无需嵌入计算仅依赖文档结构信息4. 处理速度较快具备线性时间复杂度适合大规模处理5. 语义连贯性好在句子边界处切分有效避免语义割裂。Chunking 策略对检索效果具有显著影响其关键参数的选择直接决定了知识库的质量与下游任务的性能。以下从 Chunk 大小、重叠窗口、语义边界及章节信息保留四个维度展开分析并结合实际应用给出优化建议。对于Chunk大小过小的 Chunk 300字符易导致上下文信息不足、背景缺失检索结果呈现碎片化。这会降低检索相关性生成回答时需多次检索拼凑信息难以提供完整答案。过大的 Chunk 1500字符时单个块内可能混杂多个话题噪声信息增多相似度计算精度下降。这会造成检索噪声大、相关性排序不准同时显著增加 Token 消耗。因此最佳范围应该为500-800字符该区间能够容纳完整上下文保持话题相对单一检索准确性高兼顾了信息密度与语义完整性。对于Chunk重叠若无重叠则可能导致信息可能被切断、边界信息丢失等问题继而产生检索时可能遗漏信息、生成回答时缺少关键信息等影响若是过大的重叠 300字符则会导致信息冗余、检索结果重复、Token消耗大等问题从而产生检索效率低和成本高等影响。因此最佳重叠应为100-200字符可以保证信息连续性、避免信息丢失和冗余可控。对于语义边界当前策略采用在句子边界切分优势为句子完整、语义清晰、便于阅读理解、生成回答时句子连贯若是在单词中间切分按固定长度则会产生单词被切断、句子不完整和影响理解等问题若是在段落边界切分虽然可以使得语义完整性最高且符合自然阅读习惯却会产生段落可能很长以及超出最大chunk大小限制等问题。另外如果保留章节信息则可以在检索时可按章节筛选、理解上下文位置和区分不同类型的陈述可以便于检索筛选如只查询Method章节、回答生成区分方法描述和实验结果和引用定位快速定位到相关章节。基于上述分析最终确定采用以下参数配置Chunk大小设置为700字符Chunk重叠大小设置为150字符。按资料类别统计的Chunk数量分别为LLM安全9924个、漏洞挖掘11576个、漏洞修复2974个、其他4216个总计28690个文本块。总之当前策略具备以下优势1平衡性良好在语义完整性与块大小可控性之间取得合理折中2贴合学术论文结构充分考虑论文的章节组织特点适配性强3实现复杂度适中处理流程具备线性时间复杂度执行效率高4实际效果已验证应用于检索任务时表现良好满足预期需求。同时该策略亦存在若干局限1Chunk大小固定未根据章节重要性或内容密度动态调整块长度2重叠策略单一采用固定重叠值未结合文本复杂度进行自适应调节3章节识别依赖预定义模式需预先构建章节模式库对新文档结构的泛化能力有限。针对上述局限的优化方案将在后续“未来展望”部分详细阐述。此外完整的数据处理代码已整理为可复用脚本随本报告一并提交以便后续学习、验证与进一步改进。