游乐游手机版
首页/AI热点日报/热点详情

如何在Dify应用中实现另类关键词检索

类型:热点整理2026-05-29
探索Dify应用中关键词检索的创新用法,通过三种检索模式对比揭示最佳实践方案。 核心内容: Dify 1 2 0元数据功能的局限性分析 向量检索 全文检索 混合检索三种模式的详细对比实验 中医案例测试展示不同检索模式的实际效果差异 背景 之前用RAGFlow的时候,发现它的分片功能有个不错的特性——

探索Dify应用中关键词检索的创新用法,通过三种检索模式对比揭示最佳实践方案。

核心内容:

  • Dify 1.2.0元数据功能的局限性分析
  • 向量检索/全文检索/混合检索三种模式的详细对比实验
  • 中医案例测试展示不同检索模式的实际效果差异

dify应用:另类的关键词检索

背景

之前用RAGFlow的时候,发现它的分片功能有个不错的特性——自动提取关键词。检索时可以通过调整语义和关键词的权重来互补,实现更精准的知识匹配。但到了Dify的RAG体系里,关键词这个维度是缺失的。

直到Dify 1.2.0版本,新增了元数据功能,可以给文档设置元数据,在检索时通过元数据作为关键词来过滤内容。不过,这个功能只停留在文档级别,无法精确匹配到分段内容层面。

下面直接进入实验环节,看看实际效果到底如何。

dify中的检索实验

Dify一共提供了三种检索模式:

  • 向量检索:把用户问题向量化,生成数学向量后跟知识库里每个文本片的向量做距离比较,找到最相近的分段。
  • 全文检索:就是最传统的关键词匹配,索引文档里的所有词汇,用户输入后直接拿明文关键词去匹配,类似搜索引擎的精确匹配。
  • 混合检索:同时跑全文检索和向量检索,再通过权重或Rerank模型筛选出最优结果。

知识库配置

为了排除变量干扰,实验采用同一个文档、同一个向量模型(bge-m3)、四个独立知识库

  • 知识库1:bge-m3 - 向量检索
  • 知识库2:bge-m3 - 全文检索
  • 知识库3:bge-m3 - 混合(权重)
  • 知识库4:bge-m3 - 混合(rerank)

知识库1:bge-m3 - 向量检索

知识库2:bge-m3 - 全文检索

知识库3:bge-m3 - 混合(权重)

知识库4:bge-m3 - 混合(rerank)

测试文档

选用的是三个中医案例,内容包含症状、理论依据、配xue和操作流程:

## 案例1:风寒感冒

- **症状描述**:鼻塞流清涕、畏寒无汗、头痛、咳嗽白痰、舌淡苔白
- **理论依据**:《伤寒论》太阳病理论,寒邪束表致卫阳被遏。大椎为诸阳之会可散寒解表,风门为风邪出入门户,合谷属阳明经通调肺气
- **配xue方案**:大椎、风门、合谷
- **操作流程**:先灸大椎20分钟至潮红,再灸风门15分钟,最后灸合谷10分钟。每日1次,连续3天

## 案例2:脾胃虚寒型胃痛

- **症状描述**:胃脘冷痛、喜温喜按、食少便溏、四肢不温、舌淡胖有齿痕
- **理论依据**:《针灸甲乙经》"中脘主腹胀不通",配合胃经合xue足三里健运脾土,神阙温补元阳
- **配xue方案**:中脘、足三里、神阙
- **操作流程**:神阙隔姜灸5壮,中脘悬灸25分钟,足三里双xue各灸15分钟。饭前操作,隔日1次

## 案例3:寒凝血瘀型痛经

- **症状描述**:经前小腹冷痛拒按、经血紫暗有块、得热痛减、面色青白
- **理论依据**:《妇人大全良方》寒客胞宫理论,关元为任脉与三阴经交会xue,三阴交统调阴经,次髎温通胞宫
- **配xue方案**:关元、三阴交、次髎
- **操作流程**:经前3天开始灸,关元灸30分钟,三阴交双xue各15分钟,次髎20分钟。每日1次至经期第2天

分片设置

四个知识库采用统一的分片规则:父子分段模式。父段标识为##,子段标识保持默认。

检索结果

测试词选择的是“健运脾土”——这是中医里描述健脾功效的专有词汇,出现在案例2的理论依据里。按照直觉,全文检索应该能精准匹配到这个词,但结果让人意外:向量检索顺利召回了包含该词的片段,而全文检索反而没有找到。

混合检索(无论权重还是rerank)也都成功召回了。全文检索的缺失令人困惑——而且知识库不过几个文档,全文检索却耗时2~3秒,性能明显不理想。这背后应该是实现层面的细节问题,需要回头翻翻源码。

这只是单次测试的一个词,实际检索效果高度依赖query与文本embedding的相似度,存在不确定性。全文检索在这样的小规模场景下性能也不够好,后续会进一步研究源码。

既然内置的全文检索不够可靠,那么如何给Dify的知识库加上“关键词”能力,让检索更精准?

关键词设置

思路来源于父子分段中的子分段机制:既然子分段可以作为独立单位被检索,而最终实际返回的是整个父分段作为上下文,那么能不能把数据预处理时提取的关键词,单独作为子分段存进去

这样,子分段就是一个个独立的关键词向量,检索时理论上可以提升召回率——但注意,子分段仍然会经过embedding语义化,并不是精确的字符匹配,效果仍取决于向量模型的语义表达能力。

用大模型生成关键词后,将其添加到文档的子分段中,然后重新索引。

实际测试时发现,添加了关键词子分段后,某些查询的分数依然很低。检查代码后发现Dify并没有对query做改写处理,那么分数低的原因需要进一步琢磨——包括向量模型本身、关键词与上下文的语义距离等。这些细节值得深入源码和做更多样本测试。

来源:https://www.53ai.com/news/LargeLanguageModel/2025061248013.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。