需构建多路径同步机制实现dify知识库自动更新:notion通过授权绑定实时同步(5分钟内生效);mysql支持binlog监听或时间戳轮询,须带x-source头;文件系统用inotifywait监控目录并防重复上传;所有来源须统一document_id格式以保障幂等与冲突处理。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Dify知识库同时从Notion、数据库和文件系统三类源头自动获取最新内容,避免人工反复上传导致问答答案过期,必须构建一套能识别变更、区分来源、按需触发的多路径同步机制。
配置Notion实时同步通道
进入Dify控制台→数据集→新建数据集→选择“同步自Notion内容”→点击“去绑定”。
跳转至Notion授权页后,授予pages:read、databases:read权限,务必勾选“包含子页面”选项,否则嵌套结构的知识条目将被遗漏。
绑定成功后,在Notion中任一同步数据库添加新页面或修改已有页面标题/正文,【5分钟内】该变更会自动触发Dify端的切分与向量化流程。
对接MySQL数据库增量同步
方法一:基于binlog监听(推荐)
在MySQL侧启用binlog(binlog_format=ROW),部署Debezium Connector连接到Kafka;消费者服务监听dify-kb-updates主题,提取kb_articles表的INSERT与UPDATE事件,调用Dify Knowledge API提交变更文档。
方法二:时间戳轮询(轻量场景)
配置Dify后台定时任务,每3分钟执行一次SQL:SELECT id, title, content FROM kb_articles WHERE updated_at > ?,参数填入Redis中存储的dify:last_sync_time值;查询结果经JSON序列化后POST至/api/kb/{kb_id}/documents接口,【注意:必须携带X-Source: mysql请求头,否则Dify无法区分该批次来自数据库而非Notion】。
挂载本地文件系统热更新目录
第一步:在服务器上创建专用监控目录,例如/opt/dify-sync/watch/
第二步:使用inotifywait监听该目录下CREATE与MODIFY事件,捕获到PDF/MD文件后立即执行:curl -X POST https://your-dify.com/api/kb/{kb_id}/documents -F "file=@/opt/dify-sync/watch/$filename" -H "Authorization: Bearer $API_KEY"
第三步:为防止重复提交,脚本需在上传前检查文件名是否已在Redis中存在(key格式:dify:watched_files:{md5sum}),若已存在则跳过。
这一步操作起来很简单,直接把文件拖进去就行,但要注意不要放入临时编辑中的半成品文件——Dify一旦开始处理就不可中断,错误内容将进入向量索引并影响后续检索准确率。
统一处理冲突与幂等性
① 所有同步源提交的数据必须携带唯一document_id字段,格式统一为{source}_{original_id}(如notion_abc123、mysql_4567、fs_f8d9a)
② Dify接收到重复document_id时自动覆盖旧版本,无需额外配置
③ 若同一语义内容由Notion和数据库分别推送,以最后到达的为准——Dify不支持跨源内容合并逻辑,【必须由上游系统保证业务主数据唯一性】
④ 每次同步完成,写入Redis记录:SET dify:sync_status:{source} "{ts}:{doc_count}",供运维看板实时拉取










