🔧 Dify分隔符功能说明
功能概述
为了在Dify上传CSV时保持chunk的元数据完整性,在每个chunk的末尾添加一个唯一的、不会出现在正文中的特殊分隔符。Dify可以使用这个分隔符来准确切割chunk,避免误切。
默认分隔符
设计特点
- 独特性:包含特殊字符
<>和下划线 - 长度适中:43个字符,既不太长也不太短
- 包含日期:避免未来重复
- 描述性强:明确标识这是chunk结束分隔符
CSV输出格式
单个chunk的CSV行
"论文文本内容...","{""category"":""vulnerability_mining"",""year"":""2024"",""section"":""Abstract"",""chunk_id"":1}",paper.pdf示例
content,metadata,source "This paper presents a novel approach for vulnerability detection using deep learning.","{""category"":""vulnerability_mining"",""year"":""2024"",""section"":""Abstract"",""chunk_id"":1}",paper.pdf "The proposed method consists of three main components...<>","{""category"":""vulnerability_mining"",""year"":""2024"",""section"":""Method"",""chunk_id"":2}",paper.pdf使用方法
默认使用(推荐)
python process_papers.py --input ./papers禁用分隔符
python process_papers.py --input ./papers --no-separator自定义分隔符
python process_papers.py --input ./papers \ --separator "<<<MY_CUSTOM_SEPARATOR>>>"Dify导入步骤
1. 上传CSV文件
- 登录 Dify Cloud
- 创建或进入知识库
- 点击"文档" → "导入"
- 选择"上传文件" → 选择生成的CSV文件
2. 配置分段设置(重要!)
在Dify的分段设置中:
- 分段标识符:
- 索引模式:高质量
- Embedding模型:选择支持中英文的模型
3. 开始处理
点击"开始处理",Dify会使用你指定的分隔符来切割chunk。
为什么需要分隔符?
问题场景
使用\n\n作为分隔符(不推荐):
CSV内容: "论文内容1\n\n论文内容2" Dify分割: Chunk-1: 论文内容1 Chunk-2: \n论文内容2 ❌ 错误!使用.pdf作为分隔符(不推荐):
CSV内容: "Scaling Laws for Neural Language Models.pdf<<<CHUNK_END...>>>" Dify分割: Chunk-1: Scaling Laws for Neural Language Models ❌ 错误! Chunk-2: <<<CHUNK_END...>>>解决方案
使用自定义分隔符(推荐):
CSV内容: "论文内容..." Dify分割: Chunk-1: 论文内容... ✅ 正确! 元数据完整保留!自定义分隔符建议
原则
- 不要使用常见字符:避免使用
\n、.、,、:等 - 使用特殊符号:
<>|#~等 - 足够长:至少20个字符
- 包含描述性文字:如 "CHUNK_END"、"SEPARATOR" 等
- 添加日期/版本号:避免与现有内容冲突
推荐格式
# 格式1:三尖括号格式 # 格式2:管道符格式 |||||| # 格式3:井号格式 ###CHU2### # 格式4:波浪号格式 ~~~CHU2~~~不推荐的分隔符
# ❌ 太短,容易误切 "###" # ❌ 常见字符,可能出现在正文中 "\n\n" "---" ".pdf" # ❌ 没有描述性 "X" "END"测试工具
验证分隔符功能
python test_dify_separator.py这将显示:
- 默认分隔符
- 每个chunk的处理结果
- CSV文件内容预览
- 验证所有chunk都有分隔符
配置文件修改
如果需要修改默认分隔符,编辑src/pdf_processor/config.py:
OUTPUT_CONFIG = { # ... 其他配置 # Dify专用chunk分隔符 "dify_chunk_separator": "", }常见问题
Q1: 分隔符会出现在正文中吗?
A: 默认分隔符非常独特(包含<>和日期),几乎不可能出现在学术论文正文中。如果担心,可以使用更特殊的分隔符。
Q2: Dify支持这种分隔符吗?
A: 支持。Dify的分段标识符可以设置为任意字符串,包括特殊字符。
Q3: 分隔符会影响检索质量吗?
A: 不会影响。分隔符只是用于分段,检索时仍然基于内容本身。
Q4: 可以禁用分隔符吗?
A: 可以,但不推荐。禁用后Dify会使用其他方式(如按字符数)分段,可能导致元数据不完整。
Q5: 上传到Dify后,chunk中还会保留分隔符吗?
A: 会保留。这是正常的,因为分隔符是chunk的一部分。检索结果中会显示分隔符,但不影响语义理解。
Q6: 如果不小心在正文中包含了分隔符怎么办?
A: 在Dify中可能会出现错误的分段。解决方法:
- 使用更独特的分隔符
- 或者在处理前清洗文本,移除可能的冲突
完整工作流
# 1. 处理论文(添加分隔符) python process_papers.py --input ./papers # 2. 查看生成的CSV # output/cyber_security_papers_XXX.csv # 3. 在Dify中导入 # - 上传CSV文件 # - 设置分段标识符: # - 开始处理 # 4. 测试检索 # - 在知识库中测试查询 # - 验证chunk边界是否正确示例场景
场景1:处理200篇论文
# 使用默认分隔符 python process_papers.py --input ./papers # Dify设置: # 分段标识符:场景2:自定义分隔符
# 使用自定义分隔符(更独特) python process_papers.py --input ./papers \ --separator "" # Dify设置: # 分段标识符:场景3:批量处理多个目录
# 处理漏洞挖掘论文 python process_papers.py --input ./papers/漏洞挖掘 \ --separator "<<<VULN_MINING_CHUNK_END>>>" # 处理LLM安全论文 python process_papers.py --input ./papers/LLM安全 \ --separator "<<<LLM_SECURITY_CHUNK_END>>>"总结
Dify分隔符功能确保了:
✅元数据完整性:每个chunk的元数据准确对应 ✅准确分段:Dify按指定分隔符切割,避免误切 ✅灵活配置:支持自定义分隔符 ✅易于验证:测试工具可验证分隔符是否正确添加
推荐配置:使用默认分隔符