本项目提供了两种将GitLab中的文档同步到Dify知识库的方案:
- GitLab CI/CD触发Dify工作流:通过GitLab的CI/CD流程触发Dify内置的工作流来实现同步
- 直接在CI/CD脚本中触发同步:通过Python脚本直接与GitLab和Dify API交互实现同步
此方案使用Dify内置的工作流来处理同步任务,提供了4个工作流适配不同场景:
- 文件:
GitLab知识库全量同步.yml - 功能: 将指定分支下的所有文档同步到Dify知识库
- 适用场景: 首次同步或需要完全重建知识库时
- 文件:
GitLab知识库全量同步(含metadata).yml - 功能: 支持解析Markdown文件中的YAML Front Matter元数据并同步到Dify
- 适用场景: 需要保留文档元数据的全量同步
- 文件:
GitLab知识库增量同步.yml - 功能: 仅同步有变更的文件(新增、修改、删除)
- 适用场景: 日常增量更新,提高同步效率
- 文件:
GitLab知识库增量同步(含metadata).yml - 功能: 支持元数据解析的增量同步
- 适用场景: 需要保留元数据的增量更新
此方案通过Python脚本直接调用GitLab和Dify的API完成同步,包含以下组件:
tools/sync-scripts/gitlab_dify_sync.py: 主同步脚本,支持全量和增量同步模式
tools/sync-src/gitlab_client.py: GitLab API客户端tools/sync-src/dify_client.py: Dify API客户端tools/sync-src/full_sync.py: 全量同步处理器tools/sync-src/incremental_sync.py: 增量同步处理器
tools/sync-scripts/sync_config.yaml: 同步配置文件,包含GitLab和Dify的连接信息、同步规则等
.gitlab-ci.yml: GitLab CI/CD配置文件,定义了同步任务的触发规则和执行流程
在GitLab项目中设置以下CI/CD环境变量:
GITLAB_PRIVATE_TOKEN: GitLab私有令牌DIFY_API_KEY: Dify API密钥DIFY_KNOWLEDGE_BASE_ID: Dify知识库ID
.md(Markdown).markdown(Markdown)
- 在Dify中导入对应的YAML工作流文件
- 配置工作流中的环境变量
- 通过GitLab触发相应的Webhook或手动运行工作流
- 配置
sync_config.yaml文件 - 在GitLab CI/CD中运行同步脚本
- 支持通过命令行参数指定同步模式(全量或增量)
| 特性 | 方案一(Dify工作流) | 方案二(Python脚本) |
|---|---|---|
| 实现复杂度 | 中等 | 较高 |
| 配置灵活性 | 较高 | 高 |
| 元数据支持 | 支持 | 支持 |
| 增量同步 | 支持 | 支持 |
| 错误处理 | 内置 | 自定义 |
| 维护性 | 依赖Dify平台 | 独立维护 |
- 确保GitLab私有令牌具有读取仓库内容的权限
- 确保Dify API密钥具有操作知识库的权限
- 敏感信息通过CI/CD环境变量注入,不提交到代码仓库
- 根据实际需要选择合适的同步方案和工作流