二:庖丁解牛 Dify:一文读懂 v1.8.0 源码目录设计与模块职责
下面是部分目录结构
./
├── api
│ ├── configs
│ │ ├── deploy
│ │ ├── enterprise
│ │ ├── extra
│ │ ├── feature
│ │ │ └── hosted_service
│ │ ├── middleware
│ │ │ ├── cache
│ │ │ ├── storage
│ │ │ └── vdb
│ │ ├── observability
│ │ │ └── otel
│ │ ├── packaging
│ │ └── remote_settings_sources
│ │ ├── apollo
│ │ └── nacos
│ ├── constants
│ ├── contexts
│ ├── controllers
│ │ ├── common
│ │ ├── console
│ │ │ ├── app
│ │ │ ├── auth
│ │ │ ├── billing
│ │ │ ├── datasets
│ │ │ ├── explore
│ │ │ ├── tag
│ │ │ └── workspace
│ │ ├── files
│ │ ├── inner_api
│ │ │ ├── plugin
│ │ │ └── workspace
│ │ ├── mcp
│ │ ├── service_api
│ │ │ ├── app
│ │ │ ├── dataset
│ │ │ └── workspace
│ │ └── web
│ ├── core
│ │ ├── agent
│ │ │ ├── output_parser
│ │ │ ├── prompt
│ │ │ └── strategy
│ │ ├── app
│ │ │ ├── app_config
│ │ │ │ ├── common
│ │ │ │ │ ├── parameters_mapping
│ │ │ │ │ └── sensitive_word_avoidance
│ │ │ │ ├── easy_ui_based_app
│ │ │ │ │ ├── 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
│ │ │ │ └── variables
│ │ │ ├── apps
│ │ │ │ ├── advanced_chat
│ │ │ │ ├── agent_chat
│ │ │ │ ├── chat
│ │ │ │ ├── common
│ │ │ │ ├── completion
│ │ │ │ └── workflow
│ │ │ ├── entities
│ │ │ ├── features
│ │ │ │ ├── annotation_reply
│ │ │ │ ├── hosting_moderation
│ │ │ │ └── rate_limiting
│ │ │ └── task_pipeline
│ │ ├── base
│ │ │ └── tts
│ │ ├── callback_handler
│ │ ├── entities
│ │ ├── errors
│ │ ├── extension
│ │ ├── external_data_tool
│ │ │ └── api
│ │ ├── file
│ │ ├── helper
│ │ │ └── code_executor
│ │ │ ├── javascript
│ │ │ ├── jinja2
│ │ │ └── python3
│ │ ├── llm_generator
│ │ │ └── output_parser
│ │ ├── mcp
│ │ │ ├── auth
│ │ │ ├── client
│ │ │ ├── server
│ │ │ └── session
│ │ ├── memory
│ │ ├── model_runtime
│ │ │ ├── callbacks
│ │ │ ├── docs
│ │ │ │ ├── en_US
│ │ │ │ │ └── images
│ │ │ │ │ └── index
│ │ │ │ └── zh_Hans
│ │ │ │ └── images
│ │ │ │ └── index
│ │ │ ├── entities
│ │ │ ├── errors
│ │ │ ├── model_providers
│ │ │ │ └── __base
│ │ │ │ └── tokenizers
│ │ │ ├── schema_validators
│ │ │ └── utils
│ │ ├── moderation
│ │ │ ├── api
│ │ │ ├── keywords
│ │ │ └── openai_moderation
│ │ ├── ops
│ │ │ ├── aliyun_trace
│ │ │ │ ├── data_exporter
│ │ │ │ └── entities
│ │ │ ├── arize_phoenix_trace
│ │ │ ├── entities
│ │ │ ├── langfuse_trace
│ │ │ │ └── entities
│ │ │ ├── langsmith_trace
│ │ │ │ └── entities
│ │ │ ├── opik_trace
│ │ │ └── weave_trace
│ │ │ └── entities
│ │ ├── plugin
│ │ │ ├── backwards_invocation
│ │ │ ├── endpoint
│ │ │ ├── entities
│ │ │ ├── impl
│ │ │ └── utils
│ │ ├── prompt
│ │ │ ├── entities
│ │ │ ├── prompt_templates
│ │ │ └── utils
│ │ ├── rag
│ │ │ ├── cleaner
│ │ │ ├── data_post_processor
│ │ │ ├── datasource
│ │ │ │ ├── keyword
│ │ │ │ │ └── jieba
│ │ │ │ └── vdb
│ │ │ │ ├── analyticdb
│ │ │ │ ├── baidu
│ │ │ │ ├── chroma
│ │ │ │ ├── clickzetta
│ │ │ │ ├── couchbase
│ │ │ │ ├── elasticsearch
│ │ │ │ ├── huawei
│ │ │ │ ├── lindorm
│ │ │ │ ├── matrixone
│ │ │ │ ├── milvus
│ │ │ │ ├── myscale
│ │ │ │ ├── oceanbase
│ │ │ │ ├── opengauss
│ │ │ │ ├── opensearch
│ │ │ │ ├── oracle
│ │ │ │ ├── pgvector
│ │ │ │ ├── pgvecto_rs
│ │ │ │ ├── pyvastbase
│ │ │ │ ├── qdrant
│ │ │ │ ├── relyt
│ │ │ │ ├── tablestore
│ │ │ │ ├── tencent
│ │ │ │ ├── tidb_on_qdrant
│ │ │ │ ├── tidb_vector
│ │ │ │ ├── upstash
│ │ │ │ ├── vikingdb
│ │ │ │ └── weaviate
│ │ │ ├── docstore
│ │ │ ├── embedding
│ │ │ ├── entities
│ │ │ ├── extractor
│ │ │ │ ├── blob
│ │ │ │ ├── entity
│ │ │ │ ├── firecrawl
│ │ │ │ ├── unstructured
│ │ │ │ └── watercrawl
│ │ │ ├── index_processor
│ │ │ │ ├── constant
│ │ │ │ └── processor
│ │ │ ├── models
│ │ │ ├── rerank
│ │ │ │ └── entity
│ │ │ ├── retrieval
│ │ │ │ ├── output_parser
│ │ │ │ └── router
│ │ │ └── splitter
│ │ ├── repositories
│ │ ├── tools
│ │ │ ├── __base
│ │ │ ├── builtin_tool
│ │ │ │ └── providers
│ │ │ │ ├── audio
│ │ │ │ │ ├── _assets
│ │ │ │ │ └── tools
│ │ │ │ ├── code
│ │ │ │ │ ├── _assets
│ │ │ │ │ └── tools
│ │ │ │ ├── time
│ │ │ │ │ ├── _assets
│ │ │ │ │ └── tools
│ │ │ │ └── webscraper
│ │ │ │ ├── _assets
│ │ │ │ └── tools
│ │ │ ├── custom_tool
│ │ │ ├── entities
│ │ │ ├── mcp_tool
│ │ │ ├── plugin_tool
│ │ │ ├── utils
│ │ │ │ └── dataset_retriever
│ │ │ └── workflow_as_tool
│ │ ├── variables
│ │ └── workflow
│ │ ├── callbacks
│ │ ├── entities
│ │ ├── graph_engine
│ │ │ ├── condition_handlers
│ │ │ └── entities
│ │ ├── nodes
│ │ │ ├── agent
│ │ │ ├── answer
│ │ │ ├── base
│ │ │ ├── code
│ │ │ ├── document_extractor
│ │ │ ├── end
│ │ │ ├── event
│ │ │ ├── http_request
│ │ │ ├── if_else
│ │ │ ├── iteration
│ │ │ ├── knowledge_retrieval
│ │ │ ├── list_operator
│ │ │ ├── llm
│ │ │ ├── loop
│ │ │ ├── parameter_extractor
│ │ │ ├── question_classifier
│ │ │ ├── start
│ │ │ ├── template_transform
│ │ │ ├── tool
│ │ │ ├── variable_aggregator
│ │ │ └── variable_assigner
│ │ │ ├── common
│ │ │ ├── v1
│ │ │ └── v2
│ │ ├── repositories
│ │ └── utils
│ │ └── condition
│ ├── docker
│ ├── events
│ │ └── event_handlers
│ ├── extensions
│ │ └── storage
│ │ └── clickzetta_volume
│ ├── factories
│ ├── fields
│ ├── libs
│ ├── migrations
│ │ └── versions
│ ├── models
│ ├── repositories
│ ├── schedule
│ ├── services
│ │ ├── auth
│ │ │ ├── firecrawl
│ │ │ ├── jina
│ │ │ └── watercrawl
│ │ ├── enterprise
│ │ ├── entities
│ │ │ ├── external_knowledge_entities
│ │ │ └── knowledge_entities
│ │ ├── errors
│ │ ├── plugin
│ │ ├── recommend_app
│ │ │ ├── buildin
│ │ │ ├── database
│ │ │ └── remote
│ │ ├── tools
│ │ └── workflow
│ ├── tasks
│ │ └── annotation
│ ├── templates
│ │ └── without-brand
│ └── tests
├── dev
│ └── pytest
├── docker
├── images
├── sdks
│ ├── nodejs-client
│ ├── php-client
│ └── python-client
│ ├── dify_client
│ └── tests
└── web
├── app
├── scripts
├── service
│ ├── demo
│ └── knowledge
├── __tests__
│ └── goto-anything
├── themes
├── types
└── utils
🧩 Dify 源码目录功能详解(按模块划分)
一、api/
—— 后端服务核心(AI 引擎 + 业务逻辑)
技术栈:Python (Flask/FastAPI 混合) + SQLAlchemy + Celery + Redis
定位:Dify 的“大脑”,负责 AI 编排、数据管理、权限控制、API 提供。
1. api/configs/
—— 全局配置中心
集中管理系统运行所需的各种配置项,支持多环境、多部署模式。
deploy/
:不同部署方式的配置(本地、云、K8s)enterprise/
:企业版专属功能开关(如 SSO、审计日志)feature/
:功能开关管理(Feature Flag),例如:hosted_service/
:是否为 SaaS 托管服务
middleware/
:中间件配置cache/
:缓存策略(Redis)storage/
:文件存储(本地/S3/OSS)vdb/
:向量数据库连接配置
observability/
:可观测性集成otel/
:OpenTelemetry 链路追踪配置
packaging/
:打包发布相关配置remote_settings_sources/
:支持从远程配置中心拉取配置apollo/
,nacos/
:对接携程 Apollo 或阿里 Nacos
✅ 设计亮点:解耦配置与代码,便于动态调整行为而无需重启服务。
2. api/constants/
—— 常量定义
统一管理所有枚举值、状态码、类型标识等,如:
- 应用类型(chat、agent、workflow)
- 模型提供商(OpenAI、Anthropic、通义千问)
- 节点类型(LLM、Tool、IfElse)
避免“魔法字符串”,提升可维护性。
3. api/contexts/
—— 上下文管理
维护请求级别的上下文信息,如当前用户、工作空间、应用实例等,用于权限校验和数据隔离。
4. api/controllers/
—— 控制器层(MVC 中的 C)
处理 HTTP 请求,返回 JSON 响应。分为多个子系统:
子目录 | 功能说明 |
---|---|
console/ |
面向管理后台的接口(用户、工作区、账单、数据集) |
service_api/ |
面向外部调用者(前端或第三方)的应用级 API |
inner_api/ |
内部微服务间通信接口(如插件系统) |
files/ |
文件上传下载接口 |
mcp/ |
MCP(Model Control Plane)相关接口,模型治理 |
分层清晰,职责分明:
console
是管理端,service_api
是运行时。
5. api/core/
—— 最核心的业务引擎模块
这是 Dify 的“心脏”,实现了 AI 应用的核心能力。
🔹 core/app/
—— 应用运行时核心
app_config/
:解析应用配置(Prompt 模板、变量、功能开关)easy_ui_based_app/
:简单应用(聊天机器人)workflow_ui_based_app/
:复杂工作流应用
features/
:各类增强功能实现file_upload
,speech_to_text
,text_to_speech
:多媒体支持suggested_questions_after_answer
:回答后推荐问题
apps/
:不同应用类型的执行入口chat/
,agent_chat/
,completion/
,workflow/
🔹 core/agent/
—— Agent 行为引擎
prompt/
:Agent 提示词构造strategy/
:决策策略(如 ReAct、Plan-and-Solve)output_parser/
:解析 LLM 输出以判断是否调用工具
🔹 core/llm_generator/
—— 大模型生成器
封装对 LLM 的调用逻辑,支持流式输出、错误重试、上下文拼接。
🔹 core/model_runtime/
—— 模型运行时抽象层
统一接口调用不同厂商的模型服务:
model_providers/
:各家模型适配器(OpenAI、Azure、HuggingFace 等)callbacks/
:回调机制(用于日志、追踪)schema_validators/
:输入参数校验utils/
:工具函数
✅ 核心价值:屏蔽底层差异,上层逻辑无需关心具体用哪家模型
🔹 core/rag/
—— RAG 全流程引擎
完整实现检索增强生成链路:
子目录 | 作用 |
---|---|
datasource/ |
支持多种向量数据库 → 极其丰富! 包括: chroma , qdrant , weaviate , milvus , pgvector , elasticsearch , tidb_vector , analyticdb 等 |
extractor/ |
文档内容提取unstructured (通用解析)、firecrawl (网页抓取) |
splitter/ |
文本切片策略 |
embedding/ |
调用 embedding 模型生成向量 |
retrieval/ |
检索器,支持关键词+向量混合检索 |
index_processor/ |
构建索引的处理器 |
cleaner/ |
数据清洗 |
rerank/ |
重排序(Reranker)支持 |
💡 亮点:支持 20+ 种向量数据库,真正做到了“插件化”存储。
🔹 core/tools/
—— 工具系统(Tooling)
实现 Agent 调用外部能力的核心机制:
builtin_tool/
:内置工具(时间、代码执行、音频处理)custom_tool/
:用户自定义工具(HTTP 请求、脚本)plugin_tool/
:插件化工具(通过 SDK 扩展)workflow_as_tool/
:将整个工作流当作一个工具调用code_executor/
:安全沙箱执行代码(JS/Python/Jinja2)
✅ 实现了真正的 Function Calling / Tool Use 能力。
🔹 core/workflow/
—— 可视化工作流引擎
Dify 最强大的功能之一:图形化编排复杂逻辑。
nodes/
:各种节点类型实现llm
,tool
,if_else
,http_request
,code
,knowledge_retrieval
等
graph_engine/
:图执行引擎,处理节点依赖、条件跳转callbacks/
:执行过程中的事件回调utils/condition
:条件表达式解析
🎯 类似于低代码流程引擎,但专为 AI 场景优化。
🔹 core/prompt/
—— Prompt 工程核心
prompt_templates/
:预设 Prompt 模板库entities/
:Prompt 变量、上下文结构定义
6. api/models/
与 api/repositories/
models/
:数据库 ORM 模型(SQLAlchemy)repositories/
:数据访问层(DAO),封装 CRUD 操作
遵循经典分层架构:Controller → Service → Repository → Model
7. api/services/
—— 高层业务服务
封装跨领域的业务逻辑:
auth/
:认证服务(Firecrawl、Watercrawl 等第三方登录)plugin/
:插件管理系统workflow/
:工作流调度服务recommend_app/
:应用推荐系统(内置/数据库/远程)
8. api/tasks/
—— 异步任务(Celery Worker)
处理耗时操作:
annotation/
:标注任务异步处理
9. api/extensions/
—— 扩展机制
storage/clickzetta_volume/
:对接 ClickZetta 存储卷(企业级特性)
10. api/tests/
—— 测试套件
完整的单元测试与集成测试,保障代码质量。
二、web/
—— 前端应用(React + TypeScript)
技术栈:React App Router(Next.js 风格)、Tailwind CSS、Zustand、Monaco Editor
主要目录:
目录 | 作用 |
---|---|
app/ |
基于 App Router 的页面路由系统 |
service/ |
前端 API 服务封装(如知识库操作、应用调试) |
themes/ |
主题样式定制(支持暗黑模式) |
types/ |
TypeScript 类型定义 |
utils/ |
工具函数 |
__tests__/ |
前端测试 |
scripts/ |
构建脚本 |
特点:现代化前端架构,支持 SSR、静态生成、动态路由。
三、sdks/
—— 官方客户端 SDK
提供多种语言的 SDK,方便开发者集成 Dify 应用:
python-client/
:Python SDK(最常用)nodejs-client/
:Node.js SDKphp-client/
:PHP SDK
使用场景:在自有系统中调用 Dify 发布的 API。
四、docker/
与 images/
docker/
:Dockerfile 和构建脚本images/
:镜像构建资源(如 logo、启动页)
支持一键部署:docker-compose up
五、dev/pytest
—— 开发测试工具
集成 pytest 测试框架,用于本地开发调试。
🏁 总结:Dify 架构全景图
层级 | 模块 | 核心能力 |
---|---|---|
前端层 | web/ |
可视化编排界面、Prompt 编辑器、调试面板 |
API 层 | api/controllers/ |
RESTful 接口暴露 |
业务逻辑层 | api/core/ |
Agent、RAG、Workflow、Prompt 编译 |
模型抽象层 | model_runtime/ |
统一调用 OpenAI、国产模型、本地模型 |
数据层 | rag/datasource/ |
支持 20+ 向量数据库 |
扩展层 | sdks/ , plugin/ |
多语言支持、插件生态 |
运维层 | configs/ , observability/ |
配置管理、链路追踪、企业集成 |
✅ Dify 源码设计精髓
- 模块高度解耦:每个功能独立成包,便于维护和扩展。
- AI 原生优先:所有设计围绕 LLM 特性展开(上下文、流式、工具调用)。
- 企业级就绪:支持 Nacos/Apollo 配置中心、OTel 追踪、多租户。
- 可插拔架构:向量库、模型提供商、工具均可替换。
- 开发者友好:提供 SDK、清晰文档、测试完备。

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
所有评论(0)