Dify默认不保留子文件夹路径,需在上传前配置preserve_path: true或UPLOAD_PRESERVE_PATH=true;启用后可按路径前缀过滤、权限隔离及精准替换旧文档。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你把数百份制度文档按“数据治理/标准规范/2025版”“数据治理/流程制度/审批类”“技术架构/中间件/Redis”这种多层嵌套目录结构上传到Dify知识库时,系统默认会抹平所有层级,只保留文件名,导致后续无法按业务逻辑分类检索、权限隔离失效、版本更新时找不到对应路径下的旧文档。
确认Dify是否识别子文件夹路径
登录Dify控制台 → 进入目标知识库 → 点击「文档管理」→ 查看任意已上传文档的「详情」。若「路径」字段显示为空或仅含文件名(如data_governance_policy_v2.pdf),说明当前配置未启用路径保留功能。【必须在上传前开启,已上传文档不会自动补全路径信息】
这一步操作起来很简单,直接点开文档就能验证,但很多人跳过它,直到问答召回结果混乱才回头排查。
启用子文件夹路径保留的两种方法
方法一:修改config.yaml全局启用(推荐用于生产环境)
编辑Dify项目根目录下的config.yaml文件,在document节点下添加preserve_path: true配置项:
document:
preserve_path: true
max_file_size: 104857600
保存后重启dify-api服务。此后所有新上传文档将自动记录完整相对路径,例如data_governance/standards/2025/data_governance_policy_v2.pdf。
方法二:Docker部署时通过环境变量注入(适合CI/CD流水线)
在docker-compose.yml中为dify-api服务添加环境变量:
environment:
- UPLOAD_PRESERVE_PATH=true
该方式无需修改配置文件,部署即生效,但要求Dify版本≥0.12.3。低于此版本会忽略该变量,【务必先执行dify --version确认】。
利用路径字段实现精准分类与权限控制
第一步:在知识库设置中启用「路径前缀过滤」
进入知识库「设置」→「高级设置」→ 勾选「启用路径前缀匹配」。此时系统会将文档路径按/分割,生成可筛选的层级标签。
第二步:为不同路径前缀绑定角色权限
① 进入「成员管理」→ 点击「添加成员」→ 输入邮箱后不立即保存;
② 在角色下拉框旁点击「高级权限」→ 展开「路径白名单」输入框;
③ 输入允许访问的路径前缀,支持通配符,例如:
data_governance/standards/*
tech_arch/middleware/redis/
④ 保存后,该用户仅能看到匹配前缀的文档,且问答结果也受此限制——问“Redis连接超时怎么调”,不会返回data_governance目录下的内容。
注意:路径白名单对API调用同样生效,Bearer Token携带的权限角色会自动过滤/v1/knowledge-base/{kb_id}/retrieve接口返回的文档片段。
批量更新时按子文件夹定位旧文档
当收到新版《数据标准规范(2026修订)》需替换原data_governance/standards/2025/下的旧版时:
① 进入文档管理页 → 点击右上角「筛选」→ 在「路径」栏输入data_governance/standards/2025/ → 回车;
② 页面仅显示该路径下全部文档,勾选目标PDF → 点击「删除」;
③ 点击「上传文档」→ 将新版文件拖入上传区 → 在弹出的「上传设置」中,确保「覆盖同名路径文档」已勾选 → 点击确认。
这一步的关键在于:Dify判断“同名路径文档”的依据是完整路径+文件名,而非仅文件名。若未勾选覆盖选项,系统会保留旧版并新增一个同名文档,造成知识污染。


















