Dify知识库文档可通过元数据expires_at字段实现自动过期下架。需上传时手动填写标准格式YYYY-MM-DD的expires_at值,再通过定时任务(自托管版)或API调用(云/自托管版)比对当前日期并归档过期文档,归档后不可逆。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

需要让Dify平台上的知识库文档在超过有效期后自动失效,避免用户检索到陈旧信息。这要求系统能识别文档中明确标注的“有效期至”字段,并在当前日期超过该日期时,将对应文档从可检索状态中移除。
在文档元数据中添加有效期字段
上传文档前,必须为每份PDF或TXT文件手动补充一个名为expires_at的元数据字段,格式为YYYY-MM-DD(如2025-03-15)。Dify不解析文档正文中的日期文字,只读取上传时填写的元数据。
进入Dify控制台→知识库→选择目标知识库→点击“上传文档”→在弹出窗口中展开“高级设置”→在“元数据”栏输入{"expires_at": "2025-03-15"}→确认上传。这一步漏填或格式错误(如写成2025/03/15或2025-3-15)会导致后续判断完全失效。
配置定期执行的过期检测任务
方法一:使用Dify自带的定时任务(仅限自托管版)
编辑dify/docker/.env文件,在末尾新增一行:EXPIRE_CHECK_CRON=0 0 * * *,表示每天凌晨0点执行一次检查。
重启Dify服务:docker-compose down && docker-compose up -d。重启后系统会自动加载新配置,无需额外部署脚本。
方法二:通过外部调度器调用Dify API(云托管版或自托管版均适用)
准备一个Python脚本,使用requests向Dify管理API发送GET请求:GET /v1/knowledge-base/documents?status=active,需携带X-Tenant-Id和Authorization: Bearer 请求头。
遍历返回的每个文档,提取其metadata.expires_at值,与datetime.date.today()比较;若expires_at ,则发起PUT请求到/v1/knowledge-base/documents/{id},传入{"status": "archived"}。注意:该操作【不可逆】,归档后的文档无法通过API恢复为active状态,只能重新上传。
验证文档是否已下架
第一步:在Dify控制台的知识库文档列表页,筛选状态为“已归档”,确认目标文档出现在其中。
第二步:使用普通用户身份(非管理员Token)调用检索API:POST /v1/chat-messages,提问如“最新版报销流程是什么”,观察返回结果是否不再包含已过期文档的片段。
第三步:登录数据库(PostgreSQL),执行SELECT id, status, metadata->>'expires_at' FROM documents WHERE knowledge_base_id = 'kb_xxx';,核对过期文档的status字段是否已更新为archived。










