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 时间元数据——管理文档版本

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

<think>嗯,用户想了解Dify知识库API如何按元数据过滤检索。这个问题很具体,应该是实际开发中遇到了需求。 用户提供了三篇站内引用资料,其中引用1详细介绍元数据过滤功能的价值和操作,引用2展示权限分级实战案例,引用3给出API导入数据的代码示例。虽然这些不是直接讲API过滤,但提供了重要线索:元数据过滤是核心功能,且API文档中应该有相关参数。 用户身份可能是开发者或技术负责人,正在集成Dify知识库到现有系统。深层需求可能是:1)需要精确控制检索范围 2)考虑权限过滤场景 3)避免全量检索的性能损耗。 检索文档发现关键点:查询接口的metadata参数支持JSON格式的过滤条件。比如{"department":"marketing","security_level":{"lte":2}}就能实现跨字段组合查询。这正好解决引用2的权限需求。 用户给的API导入示例虽然不直接相关,但payload结构启示了元数据字段的存储格式。需要提醒用户:导入时就要规范存储metadata,否则过滤无效。 考虑到用户可能需要立即测试,准备提供完整可运行的Python示例,重点展示三类过滤操作: 1. 字符串完全匹配(部门权限) 2. 数字范围(保密级别) 3. 时间区间(文档时效性) 特别加入多条件组合的案例,因为引用2的权限场景必然涉及复合查询。 还要注意风险提示:元数据字段需预先在Dify控制台创建,否则API过滤会失效。这点在引用1的最佳实践里强调过。 最后留优化建议的伏笔——如果用户后续需要复杂逻辑,可以建议结合引用2提到的“工作流”,但当前问题先聚焦API基础能力。 </think>根据Dify知识库API文档及引用资料,按元数据过滤检索的核心实现是通过`metadata`参数传递JSON格式的过滤条件。具体操作如下: ### 一、API请求方法 ```python import requests api_key = "your-dify-api-key" query = "VIP晚宴地点" # 用户查询文本 # 元数据过滤条件(示例:仅市场部+保密级别≤2的文档) metadata_filter = { "department": "marketing", # 字符串精确匹配 "security_level": {"lte": 2} # 数字范围过滤:≤2 } payload = { "query": query, "metadata": metadata_filter, # 关键过滤参数 "top_k": 5 # 返回结果数 } headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } resp = requests.post( "https://api.dify.ai/v1/knowledge-bases/retrieve", headers=headers, json=payload ) print(resp.json()) ``` ### 二、元数据过滤规则详解 1. **字段匹配类型**(引用[1][^1]) ```json { "field_name": "exact_value", // 字符串精确匹配 "numeric_field": {"gt": 10}, // 数字比较:>10 "date_field": {"lte": "2024-01-01"} // 时间范围:≤2024-01-01 } ``` - 支持操作符:`eq`(等于), `ne`(不等于), `gt`(大于), `gte`(大于等于), `lt`(小于), `lte`(小于等于) - 多条件自动组合为`AND`逻辑 2. **权限分级实战案例**(引用[2][^2]) ```python # 技术部员工查询时自动附加过滤 if user_department == "tech": metadata_filter.update({"department": "tech", "security_level": {"lte": user_clearance}}) ``` ### 三、最佳实践 1. **元数据设计原则**(引用[1][^1]) - 必选字段:`department`(部门), `doc_type`(文档类型) - 推荐字段:`security_level`(密级1-5), `expire_date`(过期时间) 2. **性能优化** - 对`security_level`等高频过滤字段创建索引 - 时间范围查询使用ISO格式:`"YYYY-MM-DDTHH:MM:SSZ"` ### 四、响应结构示例 ```json { "data": [ { "content": "2024年VIP晚宴在北京国家会议中心举行", "metadata": { "department": "marketing", "security_level": 1, "source": "internal_doc_2024" }, "score": 0.87 } ] } ``` > ⚠️ **重要提示** > 1. 需在Dify控制台预先定义元数据字段类型(字符串/数字/时间),否则过滤无效[^1] > 2. 通过API上传文档时需同步写入元数据(参考引用[3][^3]的`payload`结构) > 3. 多条件过滤时,单个字段最多支持3个操作符组合
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值