开源AI Agent开发平台Dify源码剖析系列(二)

项目整体架构

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/: 事件处理系统

技术特点

  1. 模块化设计: 清晰的目录结构和职责分离

  2. 可扩展性: 支持多种LLM、向量数据库和工具集成

  3. 工作流引擎: 复杂AI工作流的编排和执行

  4. RAG系统: 完整的检索增强生成实现

  5. 多租户: 支持工作区和用户管理

  6. 可观测性: 集成了多种追踪和监控工具

这个项目是一个复杂的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 # 单元测试

相关推荐
三花AI19 分钟前
OpenArt Story 一键生成完整叙事短视频
开源
霍格沃兹测试开发1 小时前
Kimi K2开源炸场,1万亿参数碾压GPT-4.1,成本仅Claude 4的1/5!
人工智能
三桥君1 小时前
AI智能体从请求到响应,这系统过程中究竟藏着什么?
人工智能·agent
算家计算1 小时前
全链路开源+PBR物理渲染!Hunyuan3D-2.1本地部署教程:重新定义工业级3D生成
人工智能·开源
k01k011 小时前
大模型微调介绍
人工智能
杨小扩1 小时前
第7章:是骡子是马,拉出来遛遛 - 应用的工程化
人工智能
华酱1079791 小时前
scikitlearn中的线性回归
人工智能
天选之女wow1 小时前
【Gaussian Haircut论文】在Deepseek和Chatgpt的帮助下慢速了解核心方法
人工智能·深度学习·计算机视觉·3d
汀丶人工智能1 小时前
AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架,涵盖全参数/PEFT训练与分布式优化
人工智能
mit6.8241 小时前
[Meetily后端框架] 多模型-Pydantic AI 代理-统一抽象 | SQLite管理
c++·人工智能·后端·python