离线环境下可通过拖拽上传、命令行注入或挂载目录三种方式将本地文档导入dify知识库,需确保dify-api、dify-worker、redis服务正常且/storage挂载有效;推荐使用自建yaml知识流水线实现分块、清洗、嵌入全流程可控。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在无网络或内网隔离环境下将本地文档安全、可控地导入Dify知识库,同时保留对分块逻辑、清洗规则和索引行为的完全控制权。
离线环境验证与基础服务就绪检查
确认Dify所有核心服务已启动且不依赖外部API:执行 docker-compose ps,确保 【dify-api】、【dify-worker】 和 【redis】 状态均为 Up,且 【dify-web】 能正常访问(如 http://127.0.0.1:3000)。若出现 worker 未就绪,知识库上传会卡在“处理中”状态,无法继续。
检查 /app/data 目录挂载是否生效——该路径是Dify默认接收上传文件的临时中转区。若使用自定义挂载点,请同步修改 .env 中的 STORAGE_TYPE=local 及 LOCAL_STORAGE_PATH 值。
离线导入三种可行路径
方法一:直接拖拽上传(仅限单次≤5个文件,总重≤75MB)
打开Dify控制台 → 知识库 → 创建空知识库 → 进入该知识库 → 点击“添加文件” → 将本地TXT/MD/PDF等支持格式拖入上传区。此方式无需额外配置,但不支持断点续传,上传失败需重来。
方法二:命令行注入(推荐用于批量、大文件或自动化场景)
进入Dify项目根目录,执行:docker exec -it dify-worker-1 python manage.py upload_file --file-path /host/path/to/doc.pdf --knowledge-base-id kb_xxx --user-id usr_yyy。
注意:必须提前从数据库查出目标知识库ID(kb_xxx)和用户ID(usr_yyy),ID可通过 psql -U postgres -d dify -c "SELECT id, name FROM knowledge_bases;" 获取;【/host/path/to/ 必须是宿主机上已映射进容器的路径】,否则报错“File not found”。
方法三:挂载文件后触发异步解析(适合超大文档或需预清洗的场景)
将整理好的文档统一放入宿主机指定目录(如 /opt/dify-offline-docs),确保该目录已通过 docker-compose.yml 的 volumes 挂载到容器内 /mnt/offline;
然后执行:docker exec -it dify-worker-1 python manage.py process_offline_dir --dir-path /mnt/offline --kb-id kb_xxx。
此命令会遍历整个目录,自动跳过非支持格式、损坏文件,并记录每份文档的解析日志到 /app/logs/worker.log。
自建知识管道:绕过默认UI流程,接管全文处理链路
第一步:确认Dify版本 ≥ 2.0.0-beta.2
执行 docker exec -it dify-api-1 pip show dify-core | grep Version,输出应为 Version: 2.0.0-beta.2 或更高。低于此版本不支持知识流水线(Knowledge Pipeline)功能,强行操作将返回404错误。
第二步:编写YAML管道定义文件
在宿主机创建 custom_pipeline.yaml,内容如下:
name: offline-corp-policy
description: 内网政策文档专用清洗管道
steps:
- type: file_parser
config:
remove_header_footer: true
remove_hyperlinks: true
- type: text_splitter
config:
chunk_size: 512
chunk_overlap: 64
- type: text_cleaner
config:
remove_extra_spaces: true
normalize_punctuation: true
- type: embedding_generator
config:
model: bge-m3
batch_size: 16
第三步:注册并启用管道
执行:docker exec -it dify-api-1 uv run flask register-pipeline --file /host/path/to/custom_pipeline.yaml。
注册成功后,可在Dify控制台 → 知识库 → 创建知识库 → “通过知识流水线创建”中看到该管道名称;
【注册时若提示“model bge-m3 not found”,需先在Dify后台模型管理页手动部署该嵌入模型】,否则后续所有文档将无法生成向量。
第四步:绑定知识库并触发运行
创建新知识库时选择该管道 → 上传PDF后不点“立即处理”,改点右上角“… → 使用流水线处理” → 选择刚注册的 offline-corp-policy → 提交。此时Dify将跳过默认解析器,全程按你定义的YAML步骤执行。











