公司动态
Dify分隔符功能
✅ Dify分隔符功能 问题理解当使用Dify上传CSV时如果使用\n\n或.pdf等常见字符作为分段标识符会导致chunk被错误切割破坏元数据的完整性。 解决方案在每个chunk的末尾添加一个唯一的、不会出现在正文中的特殊分隔符Dify使用这个分隔符来准确切割chunk。 实现内容1. 核心配置文件:src/pdf_processor/config.pyOUTPUT_CONFIG { # Dify专用chunk分隔符用于Dify上传时的分段标识符 dify_chunk_separator: , }2. 功能实现文件:src/pdf_processor/metadata_manager.py在format_for_dify()方法中自动添加分隔符分隔符添加在每个chunk的末尾保持原有元数据结构不变3. 命令行参数文件:process_papers.py新增参数--add-separator- 启用分隔符默认--no-separator- 禁用分隔符--separator- 自定义分隔符4. 测试工具新增文件:test_dify_separator.py验证分隔符是否正确添加显示CSV文件内容检查所有chunk都有分隔符 输出示例CSV格式Dify分段效果使用正确的分隔符Chunk-1: content: This paper presents a novel approach for vulnerability detection using deep learning. Our method achieves state-of-the-art performance. metadata: {category:vulnerability_mining,year:2024,section:Abstract,chunk_id:1} source: test_paper.pdf Chunk-2: content: The proposed method consists of three main components... metadata: {category:vulnerability_mining,year:2024,section:Method,chunk_id:2} source: test_paper.pdf✅元数据完整保留chunk边界准确 使用方法默认使用推荐python process_papers.py --input ./papers每个chunk末尾会自动添加Dify导入步骤上传生成的CSV文件到Dify在分段设置中设置分段标识符开始处理自定义分隔符python process_papers.py --input ./papers \ --separator MY_CUSTOM_SEPARATOR然后在Dify中设置对应的分段标识符。✅ 测试结果所有测试通过✅ 默认分隔符正常工作✅ 自定义分隔符正常工作✅ 禁用分隔符功能正常✅ CSV输出格式正确✅ 所有chunk都有分隔符 分隔符设计原则独特性包含特殊字符不会出现在正文中长度适中43个字符描述性强明确标识这是chunk结束包含日期避免未来重复易于识别便于用户查看和设置 文档新增文档DIFY_SEPARATOR_GUIDE.md- 完整使用指南更新文档QUICK_REFERENCE.md- 添加分隔符相关命令 测试工具# 验证分隔符功能 python test_dify_separator.py 优势与之前方案的对比方案问题解决方案使用\n\nchunk中的换行会被误切✅ 使用唯一分隔符使用.pdf文件名会被切分✅ 使用唯一分隔符使用---正文中的分隔符会导致错误✅ 使用独特分隔符当前方案-✅完美解决核心优势元数据完整性每个chunk的元数据准确对应准确分段Dify按指定分隔符切割灵活配置支持自定义分隔符易于验证测试工具可验证CSV输出模式Merged模式推荐默认问题在标准CSV格式中分隔符在content列末尾后面还有metadata和source列Dify可能无法正确分段。解决方案使用merged模式将所有信息合并到content列确保分隔符在最末尾。CSV格式对比Standard模式content,metadata,source 文本内容...,{category:...},paper.pdf⚠️ 问题分隔符后面还有列Dify可能无法正确分段Merged模式推荐content,metadata,source 文本内容...[Metadata: {...}] [Source: paper.pdf],,✅ 优势所有信息在content中分隔符在最末尾准确分段使用方法# 默认使用merged模式推荐 python process_papers.py --input ./papers # 显式指定merged模式 python process_papers.py --input ./papers --csv-mode merged # 使用standard模式不推荐 python process_papers.py --input ./papers --csv-mode standard测试工具# 测试两种CSV模式 python test_csv_modes.py 元数据精简精简前包含冗余字段chunk_id: 在merged模式下不需要精简后仅保留核心检索字段category: 论文类型category_cn: 中文类型year: 发表年份section: 章节char_count: 字符数source_file: 来源文件title: 论文标题这些字段对检索和筛选最有价值移除了对业务逻辑无用的字段。 常见问题Q: 分隔符会出现在正文中吗A: 默认分隔符非常独特几乎不可能出现在学术论文正文中。Q: Dify支持这种分隔符吗A: 支持。Dify的分段标识符可以设置为任意字符串。Q: 分隔符会影响检索质量吗A: 不会影响。分隔符只是用于分段检索时仍然基于内容本身。 总结现在的实现完全符合需求✅ 在Python代码中每个chunk末尾添加统一特殊分隔符✅ 分隔符是唯一的不会出现在正文中✅ Dify使用这个分隔符准确切割chunk✅ 保持了元数据的完整性