下面是部分目录结构

./
├── 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 SDK
  • php-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 源码设计精髓

  1. 模块高度解耦:每个功能独立成包,便于维护和扩展。
  2. AI 原生优先:所有设计围绕 LLM 特性展开(上下文、流式、工具调用)。
  3. 企业级就绪:支持 Nacos/Apollo 配置中心、OTel 追踪、多租户。
  4. 可插拔架构:向量库、模型提供商、工具均可替换。
  5. 开发者友好:提供 SDK、清晰文档、测试完备。
Logo

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

更多推荐