项目整体架构
Dify 是一个 LLM 应用开发平台,这个项目是其后端 API 服务,基于 Flask 框架构建。项目采用了模块化设计,遵循领域驱动设计(DDD)原则,将不同功能划分为独立的模块。

核心目录结构与功能
1. 应用核心 (core/)
app/: 应用程序核心逻辑
apps/: 不同类型的应用实现(聊天、完成、工作流等)
app_config/: 应用配置管理
features/: 应用特性(注释回复、托管审核、速率限制等)
agent/: 智能代理实现
llm_generator/: LLM 生成器和输出解析器
rag/: 检索增强生成相关组件
datasource/: 数据源连接器(向量数据库、关键词搜索等)
embedding/: 嵌入模型处理
extractor/: 数据提取器(网页爬虫、非结构化数据处理等)
splitter/: 文本分割器
tools/: 工具集成
builtin_tool/: 内置工具(音频、代码、时间、网页抓取等)
custom_tool/: 自定义工具
plugin_tool/: 插件工具
workflow/: 工作流引擎
nodes/: 工作流节点(代理、回答、代码、HTTP请求等)
graph_engine/: 工作流图执行引擎
2. API 控制器 (controllers/)
console/: 控制台API(应用、认证、计费、数据集等)
service_api/: 服务API(应用、数据集、工作区等)
web/: Web前端API
inner_api/: 内部API
3. 数据模型 (models/)
定义数据库模型,包括账户、数据集、引擎、模型、工具等
4. 服务层 (services/)
实现业务逻辑,如应用服务、对话服务、数据集服务、工作流服务等
5. 配置 (configs/)
deploy/: 部署配置
middleware/: 中间件配置(缓存、存储、向量数据库)
feature/: 功能特性配置
6. 扩展与集成
extensions/: 框架扩展
plugin/: 插件系统
model_runtime/: 模型运行时,支持多种LLM提供商
7. 测试 (tests/)
integration_tests/: 集成测试
unit_tests/: 单元测试
artifact_tests/: 工件测试
8. 基础设施
docker/: Docker相关配置
migrations/: 数据库迁移脚本
tasks/: 异步任务定义
events/: 事件处理系统
技术特点
-
模块化设计: 清晰的目录结构和职责分离
-
可扩展性: 支持多种LLM、向量数据库和工具集成
-
工作流引擎: 复杂AI工作流的编排和执行
-
RAG系统: 完整的检索增强生成实现
-
多租户: 支持工作区和用户管理
-
可观测性: 集成了多种追踪和监控工具
这个项目是一个复杂的AI应用开发平台后端,提供了从LLM调用、知识库管理到工作流编排的全套功能。
代码结构
├─configs # 配置文件目录
│ ├─deploy # 部署相关配置
│ ├─enterprise # 企业版特性配置
│ ├─extra # 额外配置选项
│ ├─feature # 功能特性配置
│ │ └─hosted_service # 托管服务特性配置
│ ├─middleware # 中间件配置
│ │ ├─cache # 缓存中间件配置
│ │ ├─storage # 存储中间件配置
│ │ └─vdb # 向量数据库配置
│ ├─observability # 可观测性配置
│ │ └─otel # OpenTelemetry配置
│ ├─packaging # 打包配置
│ └─remote_settings_sources # 远程配置源
│ ├─apollo # Apollo配置中心
│ └─nacos # Nacos配置中心
├─constants # 常量定义
├─contexts # 上下文管理
├─controllers # API控制器
│ ├─common # 通用控制器
│ ├─console # 控制台API
│ │ ├─app # 应用管理API
│ │ ├─auth # 认证API
│ │ ├─billing # 计费API
│ │ ├─datasets # 数据集API
│ │ ├─explore # 探索API
│ │ ├─tag # 标签API
│ │ └─workspace # 工作区API
│ ├─files # 文件处理API
│ ├─inner_api # 内部API
│ │ ├─plugin # 插件内部API
│ │ └─workspace # 工作区内部API
│ ├─mcp # MCP(Model Context Protocol)API
│ ├─service_api # 服务API
│ │ ├─app # 应用服务API
│ │ ├─dataset # 数据集服务API
│ │ └─workspace # 工作区服务API
│ └─web # Web前端API
├─core # 核心功能模块
│ ├─agent # 智能代理实现
│ │ ├─output_parser # 代理输出解析器
│ │ ├─prompt # 代理提示模板
│ │ └─strategy # 代理策略
│ ├─app # 应用核心
│ │ ├─apps # 应用类型实现
│ │ │ ├─advanced_chat # 高级聊天应用
│ │ │ ├─agent_chat # 代理聊天应用
│ │ │ ├─chat # 基础聊天应用
│ │ │ ├─common # 通用应用组件
│ │ │ ├─completion # 文本补全应用
│ │ │ └─workflow # 工作流应用
│ │ ├─app_config # 应用配置
│ │ │ ├─common # 通用配置
│ │ │ │ ├─parameters_mapping # 参数映射
│ │ │ │ └─sensitive_word_avoidance # 敏感词过滤
│ │ │ ├─easy_ui_based_app # 基于易用UI的应用配置
│ │ │ │ ├─agent # 代理配置
│ │ │ │ ├─dataset # 数据集配置
│ │ │ │ ├─model_config # 模型配置
│ │ │ │ ├─prompt_template # 提示模板配置
│ │ │ │ └─variables # 变量配置
│ │ │ ├─features # 特性配置
│ │ │ │ ├─file_upload # 文件上传
│ │ │ │ ├─more_like_this # 相似内容推荐
│ │ │ │ ├─opening_statement # 开场白
│ │ │ │ ├─retrieval_resource # 检索资源
│ │ │ │ ├─speech_to_text # 语音转文本
│ │ │ │ ├─suggested_questions_after_answer # 回答后推荐问题
│ │ │ │ └─text_to_speech # 文本转语音
│ │ │ └─workflow_ui_based_app # 基于工作流UI的应用配置
│ │ │ └─variables # 工作流变量
│ │ ├─entities # 应用实体定义
│ │ ├─features # 应用特性
│ │ │ ├─annotation_reply # 注释回复
│ │ │ ├─hosting_moderation # 托管内容审核
│ │ │ └─rate_limiting # 速率限制
│ │ └─task_pipeline # 任务流水线
│ ├─base # 基础组件
│ │ └─tts # 文本转语音基础组件
│ ├─callback_handler # 回调处理器
│ ├─entities # 核心实体定义
│ ├─errors # 错误定义
│ ├─extension # 扩展机制
│ ├─external_data_tool # 外部数据工具
│ │ └─api # 外部数据API
│ ├─file # 文件处理
│ ├─helper # 辅助工具
│ │ └─code_executor # 代码执行器
│ │ ├─javascript # JavaScript执行器
│ │ ├─jinja2 # Jinja2模板执行器
│ │ └─python3 # Python3执行器
│ ├─llm_generator # LLM生成器
│ │ └─output_parser # 输出解析器
│ ├─mcp # Model Context Protocol实现
│ │ ├─auth # MCP认证
│ │ ├─client # MCP客户端
│ │ ├─server # MCP服务器
│ │ └─session # MCP会话
│ ├─memory # 对话记忆管理
│ ├─model_runtime # 模型运行时
│ │ ├─callbacks # 模型回调
│ │ ├─docs # 文档
│ │ ├─entities # 模型实体
│ │ ├─errors # 模型错误
│ │ ├─model_providers # 模型提供商
│ │ │ └─__base # 基础模型提供商
│ │ │ └─tokenizers # 分词器
│ │ ├─schema_validators # 模式验证器
│ │ └─utils # 工具函数
│ ├─moderation # 内容审核
│ │ ├─api # 审核API
│ │ ├─keywords # 关键词审核
│ │ └─openai_moderation # OpenAI审核
│ ├─ops # 运维和可观测性
│ │ ├─aliyun_trace # 阿里云追踪
│ │ ├─arize_phoenix_trace # Arize Phoenix追踪
│ │ ├─entities # 运维实体
│ │ ├─langfuse_trace # Langfuse追踪
│ │ ├─langsmith_trace # LangSmith追踪
│ │ ├─opik_trace # Opik追踪
│ │ └─weave_trace # Weave追踪
│ ├─plugin # 插件系统
│ │ ├─backwards_invocation # 向后调用
│ │ ├─endpoint # 插件端点
│ │ ├─entities # 插件实体
│ │ ├─impl # 插件实现
│ │ └─utils # 插件工具
│ ├─prompt # 提示模板
│ │ ├─entities # 提示实体
│ │ ├─prompt_templates # 提示模板库
│ │ └─utils # 提示工具
│ ├─rag # 检索增强生成
│ │ ├─cleaner # 数据清洗
│ │ ├─datasource # 数据源
│ │ │ ├─keyword # 关键词搜索
│ │ │ └─vdb # 向量数据库
│ │ ├─data_post_processor # 数据后处理
│ │ ├─docstore # 文档存储
│ │ ├─embedding # 嵌入模型
│ │ ├─entities # RAG实体
│ │ ├─extractor # 数据提取器
│ │ ├─index_processor # 索引处理器
│ │ ├─models # RAG模型
│ │ ├─rerank # 重排序
│ │ ├─retrieval # 检索
│ │ └─splitter # 文本分割器
│ ├─repositories # 核心仓库
│ ├─tools # 工具集成
│ │ ├─builtin_tool # 内置工具
│ │ ├─custom_tool # 自定义工具
│ │ ├─entities # 工具实体
│ │ ├─mcp_tool # MCP工具
│ │ ├─plugin_tool # 插件工具
│ │ ├─utils # 工具辅助函数
│ │ ├─workflow_as_tool # 工作流作为工具
│ │ └─__base # 基础工具
│ ├─variables # 变量管理
│ └─workflow # 工作流引擎
│ ├─callbacks # 工作流回调
│ ├─entities # 工作流实体
│ ├─graph_engine # 图执行引擎
│ ├─nodes # 工作流节点
│ │ ├─agent # 代理节点
│ │ ├─answer # 回答节点
│ │ ├─base # 基础节点
│ │ ├─code # 代码节点
│ │ ├─document_extractor # 文档提取节点
│ │ ├─end # 结束节点
│ │ ├─event # 事件节点
│ │ ├─http_request # HTTP请求节点
│ │ ├─if_else # 条件分支节点
│ │ ├─iteration # 迭代节点
│ │ ├─knowledge_retrieval # 知识检索节点
│ │ ├─list_operator # 列表操作节点
│ │ ├─llm # LLM节点
│ │ ├─loop # 循环节点
│ │ ├─parameter_extractor # 参数提取节点
│ │ ├─question_classifier # 问题分类节点
│ │ ├─start # 开始节点
│ │ ├─template_transform # 模板转换节点
│ │ ├─tool # 工具节点
│ │ ├─variable_aggregator # 变量聚合节点
│ │ └─variable_assigner # 变量赋值节点
│ ├─repositories # 工作流仓库
│ └─utils # 工作流工具
├─docker # Docker配置
├─events # 事件系统
│ └─event_handlers # 事件处理器
├─extensions # 框架扩展
│ └─storage # 存储扩展
├─factories # 工厂类
├─fields # 自定义字段
├─libs # 通用库
├─migrations # 数据库迁移
│ └─versions # 迁移版本
├─models # 数据模型
├─repositories # 数据仓库
├─schedule # 定时任务
├─services # 业务服务
│ ├─auth # 认证服务
│ ├─enterprise # 企业版服务
│ ├─entities # 服务实体
│ ├─errors # 服务错误
│ ├─plugin # 插件服务
│ ├─recommend_app # 应用推荐服务
│ ├─tools # 工具服务
│ └─workflow # 工作流服务
├─tasks # 异步任务
│ └─annotation # 注释任务
├─templates # 模板文件
│ └─without-brand # 无品牌模板
└─tests # 测试
├─artifact_tests # 工件测试
├─integration_tests # 集成测试
└─unit_tests # 单元测试