Dify v1.1.0 发布:自定义元数据过滤,让知识检索更高效!

0 前言

Dify v1.1.0,以元数据作为知识过滤器,对数据精确过滤和访问控制来提高准确性、安全性和效率,对有效的RAG管理至关重要。

“元数据作为知识过滤器”的新功能。元数据过滤通过利用自定义元数据属性,增强知识库中相关数据的检索能力和准确性:

  • 以前,用户须搜索整个庞大数据集,而无法根据特定需求进行过滤或控制访问权限,因此难将搜索结果缩小到最相关信息
  • 而用元数据,数据本质上被标记和分类,从而显著提高检索效率和准确性。这一概念在RAG的背景下尤为重要,因为在 RAG 中需高效管理和访问大量信息

1 元数据过滤是啥?

元数据本质上是“关于数据的数据”。它提供描述主要数据的附加上下文或属性,实现更精确的搜索和检索。如文档管理系统中,元数据可能包含文档的名称、作者、创建日期等。这些结构化信息使系统能够根据特定条件筛选结果,从而提高检索内容的相关性。

2 应用元数据过滤的优势

元数据过滤功能可帮助用户快速找到相关文档,同时最大程度减少不相关结果,提高搜索准确性:

  • 通过强制访问控制来增强数据安全性,确保只有授权用户才能查看敏感信息
  • 通过优化查询范围、提高效率和节省计算资源来优化搜索性能。这种定制功能可提升用户体验,尤其是在企业环境中,能够更快速、更直观地浏览大型文档存储库

下图展示访问控制的比较,展示元数据过滤如何实现细粒度的访问管理。本例应用了三个过滤条件:privacylevel、uploader 和 update_date。

通过调整隐私级别,可控制用户对 RAG 2.0 路线图的访问。这使得管理员能够精确管理哪些用户可以检索或查看特定信息,从而提高数据访问的安全性和效率。

元数据充当智能知识过滤器,通过添加上下文层和访问控制,实现更智能、更安全、更高效的信息检索。这在 RAG系统中尤为重要,因为维护知识的隐私和相关性至关重要。

3 咋用元数据作为知识过滤器?

步骤1:向知识库中的文档添加元数据

用户可添加和管理知识库中文档的元数据。每个文档在创建时都会自动分配一些默认元数据,如文件名、上传者、上传日期等。用户还可手动添加新的元数据字段、设置字段名称和数据类型,以及对现有文档进行批量编辑或修改。此标记过程允许用户向文档添加额外的结构化信息,使其更易于日后搜索和管理。

步骤2:在应用程序中配置元数据过滤

用户可以在 Chatbot 的上下文部分或 Chatflow 或 Workflow 的知识检索节点中找到元数据过滤功能,它使用户能够根据元数据属性精确地过滤和检索信息。用户可以选择自动或手动元数据过滤选项。在自动模式下,元数据过滤条件从用户查询中提取并生成。在手动配置时,用户可以根据元数据字段类型(例如字符串、数字或时间)设置过滤条件,并进一步将多个条件之间的关系设置为“与”或“或”。

4 三种类型的元数据及其应用

支持三种类型的元数据:字符串、数字和时间。每种类型都可以根据实际用例灵活应用。示例如下:

4.1 字符串元数据——增强上下文相关性

有助过滤不相关信息,从而优化搜索结果。例如,当用户搜索“项目报告”时,“市场营销”或“研发”等元数据标签可确保仅返回与特定部门或项目相关的文档。

4.2 数字元数据——强制访问控制

数字元数据可用于根据预定义标准限制访问。例如,用户只能检索隐私级别高于特定阈值的文档,从而确保数据访问的安全性和适当性。

4.3 时间元数据——管理文档版本

时间元数据可以区分文档的新旧版本。当内容更新并重新上传时,基于时间的过滤功能可确保搜索优先显示最新版。当上传者设置为自身时,用户可以方便地对不同批次上传的多个版本进行比较检索测试,并保持文档处理的一致性。

### 如何在 Dify 工作流中获取知识检索元数据 Dify 是一种支持本地化部署的知识库工具,能够通过连接大语言模型(LLM)实现高效的问答功能。为了使 Dify 的回答基于用户的私有知识库并提供相应的元数据,可以按照以下方法配置和操作。 #### 配置 Embedding 模型 要在 Dify 中启用知识检索的功能,首先需要添加一个嵌入式(Embedding)模型来处理知识库中的文本数据。这种模型会将文本转换成向量形式以便于后续的相似度计算[^2]。 可以通过如下方式加载 Embedding 模型: ```python from sentence_transformers import SentenceTransformer model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(["样本句子"]) print(embeddings) ``` 上述代码展示了如何利用 `sentence-transformers` 库加载预训练好的 Embedding 模型,并将其应用于文本编码过程。 #### 创建本地知识库 一旦 Embedding 模型被成功集成到项目中,下一步就是构建本地化的知识库。此步骤涉及上传文档、解析内容以及存储对应的 Embedding 向量。具体流程可能包括以下几个方面: - **文档上传**: 支持多种格式文件(PDF, DOCX, TXT 等),并将这些文件的内容提取出来。 - **分词与索引**: 将每篇文档分割为较小单元(如段落或句子),随后生成其 Embedding 并存入数据库供快速查询。 - **持久化存储**: 使用专用的数据结构或者第三方服务保存所有的 Embedding 和原始资料关联关系。 #### 获取知识检索元数据的方法 当用户发起请求时,系统会对输入提问执行同样的 Embedding 转换逻辑,接着对比已有的知识条目寻找最接近的结果项。在此过程中产生的中间状态信息即所谓的“元数据”,它通常涵盖了匹配得分、源材料位置以及其他辅助描述字段等内容。要捕获这类细节,可尝试调整 API 响应模式或是直接访问底层搜索引擎接口。 例如,在某些框架下允许自定义回调函数监听整个查找事件链路,则可以在其中截取所需参数;又或者是修改返回 JSON 结构体增加额外维度记录相关属性值。 以下是假设的一个伪代码片段展示如何扩展标准调用来附加多背景线索: ```python def search_with_metadata(query_text): query_embedding = embedder.embed_query(query_text) results = knowledge_base.search( embedding=query_embedding, include=['score', 'source'] ) metadata_list = [] for result in results: metadata_entry = { "similarity_score": result['score'], "document_id": result['source']['id'], "page_number": result['source'].get('page_num'), # Add other desired fields here... } metadata_list.append(metadata_entry) return {"results": results, "metadata": metadata_list} ``` 以上示例说明了怎样构造一个新的搜索方法,该方法不仅反馈常规的最佳答案列表而且还提供了丰富的补充情报关于每一个候选项的信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值