分享
11 - Dify中的高质量索引模式实现过程
输入“/”快速插入内容
11 - Dify中的高质量索引模式实现过程
飞书用户4443
2024年12月10日修改
思考在什么情况下会使用到高质量索引模式呢?第1种情况是在知识库中上传文档,文档被拆分为段落后需要进行编码(增加);第2种情况是在召回测试的时候,需要对
query
进行编码(查询);第3种情况是当文档中的段落增加和更新时需要进行编码(增加和更新)。索引模式是针对知识库设置的,即对该知识库中所有的文档都生效。本文主要解释
Dify
中的高质量索引模式实现过程。
一.高质量索引模式操作
调用 大模型(比如
OpenAI
) 的嵌入接口进行处理,以在用户查询时提供更高的准确度。可在模型供应商中设置默认的系统推理模型、
Embedding
模型和
Rerank
模型。
在
datasets
数据表中会记录使用的
embedding_model
、
embedding_model_provider
、
retrieval_model
。其中
retrieval_model
内容格式如下:
代码块
JSON
{
"top_k": 2,
"search_method": "semantic_search",
"reranking_model": {
"reranking_model_name": "",
"reranking_provider_name": ""
},
"score_threshold": null,
"reranking_enable": false,
"score_threshold_enabled": false
}
semantic_search
就是向量检索,即通过生成查询嵌入并查询与其向量表示最相似的文本分段。除此外还有全文检索(索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段)和混合检索(同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,需配置
Rerank
模型
API
)。
二.触发异步任务
源码位置:dify\api\services\dataset_service.py\save_document_with_dataset_id()
在知识库中上传文件提交后,就会触发文档索引任务,或重复文档索引任务。如下所示:
代码块
Python
document = Document.query.filter_by(
dataset_id=dataset.id,
tenant_id=current_user.current_tenant_id,
data_source_type='upload_file',
enabled=True,
name=file_name
).first() # 根据条件判断documents是否存在文件记录,如果存在就是重复文件,否则就是新的文件