今天,我们很高兴地推出 Dify v0.15.0 版本,带来了全新的「父子检索」功能。这是一种在检索增强生成(RAG)系统中实现的高级技术,旨在进一步提升信息获取与上下文理解能力。通过这一功能,Dify 能够为 AI 生成提供更全面、更具上下文关联的信息,从而显著提高 LLM 应用回答的质量与准确度。
上下文与精准度的两难
在使用知识库检索系统时,用户常常面临一个尴尬的两难:搜索结果要么过于零散,导致 LLM 缺乏足够的上下文来理解信息;要么过于宽泛,导致信息过载并牺牲了精准度。这使得 LLM 很难高效地找到并使用所需的信息。
在这种情况下,合适的“分块”大小对 AI 应用生成准确且全面的回应至关重要。因此,Dify 带来了全新的父子检索功能,在精准度和上下文之间找到了理想的平衡,显著提升了知识检索过程整体性能和可靠性。
父子检索:兼顾精准度与上下文
父子检索通过采用双层结构的数据形式,为 RAG 系统带来更灵活、更有效的检索方式,让精准匹配与全面上下文信息二者兼得。其基本机制包括:
- 子块匹配查询
- 将文档拆分为较小、集中的信息单元(如一句话),匹配用户查询时更精准。
- 子块能快速提供与用户需求最相关的初步结果。
2. 父块提供上下文
- 将包含匹配子块的更大部分(如段落、章节甚至整个文档)视作父块并提供给大语言模型(LLM)。
- 父块能为 LLM 提供完整的背景信息,避免遗漏重要细节。
这种分层检索方法在保留上下文的同时,确保了检索结果的准确性。以客户支持为例,父子检索可通过引用详尽的产品文档,提供更加细致且具备全局背景的回答,从而在内容生成上提高语言模型输出的准确度与信息丰富度。
通用检索 VS 父子检索
如下图所示,在相同文档中,采用父子检索所提供的上下文信息会更全面,且在精准度方面也能保持较高水平,大大优于传统的单层通用检索方式。
如何使用父子检索
- 数据源:选择一个数据源并导入用于知识检索的文档。
- 分块设置
- 选择通用分块或父子分块策略,并设置分块大小等参数,随后预览分块结果。
- 如果选择父子分块,有两种模式可用:
- 段落模式:根据分隔符和最大分块长度,将文本拆分成段落,并将这些段落视作父块。适用于拥有清晰且相对独立段落的文档。
- 整文档模式:将整篇文档作为一个父块,适用于需要完整上下文检索的场景。
无论哪种模式,子块都会在父块的基础上进一步细分而成。完成索引方法和检索设置后,用户可以编辑父块或子块。父块编辑时可选择是否重新生成子块,而子块编辑则不会影响父块内容,但可以作为自定义标签,以便更好地检索相应的父块。详情请查看📖 帮助文档。
其他更新亮点:更直观的父子块展示
作为一个低代码平台,Dify 致力于让没有技术背景的用户也能轻松理解并使用父子检索功能。在本次更新中,我们对分块预览做了以下改进:
- 更清晰的块结构:每个父块以独立模块显示,子块在灰色背景下标出,并标注块编号。
- 便捷的鼠标悬停信息:当鼠标悬停在子块上时,子块会被蓝色高亮,并显示字数信息。
- 检索测试预览:在预览窗口的左侧显示父块,所有匹配到的子块则以蓝色高亮并附带相应得分,让用户一目了然。
通过本次更新,Dify 的父子检索功能为 LLM 应用带来了更加精准且全面的检索结果,显著提升了信息获取的效率和准确度,帮助企业和开发者在智能化工作流中实现更高效的知识管理和价值创造。