Dify 架构学习指南

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 本指南带你深入Dify架构,涵盖项目结构、技术栈与学习路径。通过四阶段法,从环境搭建到源码贡献,助你掌握LLM应用开发核心技能,成为开源参与者。

Dify 架构学习指南 🚀

欢迎来到 Dify 架构学习之旅!我是你的技术教练,将带你一步步深入了解这个强大的 LLM 应用开发平台。这份指南不仅仅是技术文档,更像是我和你面对面聊天,分享实用的经验和技巧。


📋 目录导航


第一部分:项目架构深度解析(像架构师一样俯瞰全景)🔍

开场白: 在深入代码细节之前,让我先带你站在一个更高的视角,像一位架构师一样审视整个 Dify 项目。这就像是在爬山前,我们先用无人机拍一张全景图,让你知道山的轮廓、主要的登山路径在哪里。

1. 项目架构概览

💡 用通俗的类比理解架构

想象 Dify 是一家高级餐厅🍽️:

  • 前厅(Web 前端) - 漂亮的用户界面,让客人(用户)轻松点餐
  • 后厨(API 后端) - 核心厨房团队,处理所有复杂的烹饪逻辑
  • 配菜间(Worker) - 专门处理耗时任务的异步团队
  • 食材仓库(数据库) - 存储所有必要的数据和配置
  • 调度员(Celery) - 协调各个部门的工作流程
  • 传菜员(Redis) - 快速传递消息和缓存热门数据

这种分工明确的架构,让整个系统既高效又易于维护。

🏗️ 核心设计特征

1. 前后端完全分离

  • 前端:纯粹的 React 应用,专注于用户体验
  • 后端:RESTful API 服务,提供强大的业务逻辑
  • 好处:前后端可以独立开发、测试、部署

2. 领域驱动设计(DDD)架构

api/
├── core/           # 核心业务逻辑(领域层)
│   ├── workflow/   # 工作流引擎
│   ├── rag/        # RAG 检索增强
│   ├── agent/      # Agent 智能代理
│   └── app/        # 应用核心
├── controllers/    # 接口控制层
├── models/         # 数据模型层
├── services/       # 应用服务层
└── extensions/     # 基础设施扩展

这种设计就像是建筑中的承重墙和装修分离:

  • core 是承重墙(核心业务逻辑)
  • controllers 是对外的门窗(API 接口)
  • services 是协调各个房间的管家
  • models 是房屋的结构图纸

3. 微服务架构风格

Dify 虽然不是完全的微服务,但采用了类似的设计理念:

graph TB
    Nginx[Nginx 反向代理] --> Web[Web 前端服务]
    Nginx --> API[API 服务]
    API --> Worker[Celery Worker]
    API --> DB[(PostgreSQL)]
    API --> Redis[(Redis)]
    API --> Vector[(向量数据库)]
    Worker --> DB
    Worker --> Redis

🆚 与其他 LLM 平台的差异

相比 LangChain、LlamaIndex 等框架,Dify 的独特优势:

开箱即用的完整产品 - 不只是代码库,而是完整的 SaaS 级应用
可视化工作流编辑器 - 拖拽式构建 AI 应用,降低开发门槛
企业级特性 - 多租户、权限管理、审计日志、数据隔离
丰富的集成能力 - 支持 50+ 内置工具,100+ 模型提供商
LLMOps 能力 - 提示词管理、日志追踪、性能监控

📦 技术栈分析

后端技术栈:

  • Flask 3.1.2 - 轻量级 Web 框架,灵活可扩展
  • Python 3.11-3.12 - 利用最新的性能优化和类型提示
  • SQLAlchemy 2.0.29 - 强大的 ORM,支持复杂查询
  • Celery 5.5.2 - 分布式任务队列,处理异步作业
  • Pydantic 2.11.4 - 数据验证和设置管理
  • PostgreSQL 15 - 主数据库,存储业务数据
  • Redis 6 - 缓存和消息队列
  • Weaviate/Qdrant/Milvus - 向量数据库,支持语义搜索

前端技术栈:

  • Next.js 15.5.4 - React 全栈框架,支持 SSR 和 SSG
  • React 19.1.1 - 最新的 React,带来更好的性能
  • TypeScript 5.8.3 - 类型安全,提升代码质量
  • TailwindCSS 3.4.14 - 实用优先的 CSS 框架
  • ReactFlow 11.11.3 - 构建工作流可视化编辑器
  • Zustand 4.5.2 - 轻量级状态管理
  • React Query 5.60.5 - 强大的数据获取和缓存

🔌 外部系统集成

Dify 集成了丰富的外部服务:

1. AI 模型提供商:

  • OpenAI, Anthropic, Google, Azure OpenAI
  • 国内厂商:通义千问、文心一言、智谱 AI、Minimax 等
  • 开源模型:Llama, Mistral, Qwen 等(通过 Ollama/LocalAI)

2. 向量数据库:

  • Weaviate, Qdrant, Milvus, Chroma, PGVector
  • Elasticsearch, OpenSearch, TiDB Vector 等

3. 存储服务:

  • 本地文件系统、S3、Azure Blob、阿里云 OSS、腾讯云 COS

4. 监控和追踪:

  • Langfuse, LangSmith, Sentry, OpenTelemetry

🔄 架构流程描述

让我带你追踪一次完整的用户请求:

场景:用户在聊天应用中发送一条消息

sequenceDiagram
    participant User as 👤 用户浏览器
    participant Nginx as 🚪 Nginx
    participant Web as 🎨 Next.js Web
    participant API as 🔧 Flask API
    participant Redis as 💾 Redis
    participant DB as 🗄️ PostgreSQL
    participant Vector as 🔍 向量数据库
    participant LLM as 🤖 LLM Provider
    participant Worker as ⚙️ Celery Worker

    User->>Nginx: HTTP 请求
    Nginx->>Web: 转发静态资源请求
    Web->>API: POST /api/chat-messages

    API->>DB: 查询应用配置
    DB-->>API: 返回配置数据

    API->>Redis: 检查缓存
    Redis-->>API: 返回缓存结果

    API->>Vector: 检索相关知识
    Vector-->>API: 返回相关文档

    API->>LLM: 发送提示词+上下文
    LLM-->>API: 流式返回生成内容

    API->>User: SSE 流式响应

    API->>Worker: 异步任务(日志、统计)
    Worker->>DB: 写入执行日志

流程解析:

1️⃣ 请求入口(Nginx): 统一的流量入口,负责路由分发和负载均衡
2️⃣ 控制层(Controllers): 接收请求、验证参数、权限检查
3️⃣ 服务层(Services): 编排业务逻辑、调用核心领域服务
4️⃣ 核心层(Core): 执行具体的 AI 逻辑(RAG检索、Agent推理、Workflow执行)
5️⃣ 持久化层(Models + DB): 数据存储和查询
6️⃣ 异步任务(Celery Worker): 处理耗时操作,不阻塞主请求


2. 目录结构与核心流程

📁 后端目录组织逻辑

api/
├── 🚪 app.py                    # 应用入口
├── 🏗️ app_factory.py            # 应用工厂(创建 Flask app)
├── ⚙️ celery_entrypoint.py      # Celery worker 入口
│
├── 📋 configs/                  # 配置模块
│   ├── app_config.py           # 应用配置定义
│   └── middleware/             # 中间件配置(42个文件!)
│
├── 🎯 controllers/              # 接口控制器(按接口类型分组)
│   ├── console/                # 管理后台 API (92个文件)
│   ├── web/                    # 公开 Web API (17个文件)
│   ├── service_api/            # 服务 API (25个文件)
│   └── files/                  # 文件管理 API
│
├── 💎 core/                     # 核心业务逻辑(这是重点!)
│   ├── workflow/               # 工作流引擎 ⭐ (196个文件)
│   ├── rag/                    # RAG 检索增强 (151个文件)
│   ├── agent/                  # Agent 代理 (12个文件)
│   ├── app/                    # 应用核心 (100个文件)
│   ├── model_runtime/          # 模型运行时 (66个文件)
│   ├── tools/                  # 工具集成 (75个文件)
│   └── plugin/                 # 插件系统 (30个文件)
│
├── 🗄️ models/                   # 数据模型(ORM)
│   ├── account.py              # 用户账户模型
│   ├── app.py                  # 应用模型
│   ├── dataset.py              # 知识库模型
│   └── workflow.py             # 工作流模型
│
├── 🔧 services/                 # 应用服务层 (136个文件)
│   ├── app_service.py          # 应用服务
│   ├── dataset_service.py      # 数据集服务
│   └── workflow_service.py     # 工作流服务
│
├── 🔌 extensions/               # 扩展和初始化
│   ├── ext_database.py         # 数据库扩展
│   ├── ext_redis.py            # Redis 扩展
│   ├── ext_celery.py           # Celery 扩展
│   └── ext_storage.py          # 存储扩展
│
├── 📊 migrations/               # 数据库迁移脚本 (145个版本!)
├── 🧪 tests/                    # 测试代码 (424个文件)
└── 📚 templates/                # 邮件模板 (56个HTML)

设计哲学解读:

  • controllers 薄层设计:只做参数验证和响应格式化
  • services 协调层:编排多个 core 模块完成业务
  • core 纯业务逻辑:与框架无关,可独立测试
  • models 贫血模型:主要用于数据持久化,逻辑在 service/core

📁 前端目录组织逻辑

web/
├── 🎨 app/                      # Next.js App Router
│   ├── components/             # 组件库 ⭐ (3673个文件!)
│   │   ├── workflow/           # 工作流编辑器
│   │   ├── app/                # 应用配置组件
│   │   ├── datasets/           # 知识库管理
│   │   ├── base/               # 基础组件
│   │   └── tools/              # 工具集成UI
│   ├── (commonLayout)/         # 通用布局页面
│   ├── signin/                 # 登录页
│   └── page.tsx                # 首页
│
├── 🌐 i18n/                     # 国际化(21种语言!)
│   ├── en-US/                  # 英语
│   ├── zh-Hans/                # 简体中文
│   └── ...                     # 其他语言
│
├── 🎣 hooks/                    # 自定义 Hooks (19个)
├── 🔄 service/                  # API 服务层 (48个文件)
├── 📦 context/                  # React Context (17个)
├── 🎨 themes/                   # 主题配置
└── 🛠️ utils/                    # 工具函数 (27个)

前端架构亮点:

  • 组件数量惊人 - 3673个组件文件,体现了细粒度的组件化
  • 工作流编辑器 - 基于 ReactFlow 的可视化编辑器
  • 多语言支持 - 覆盖21种语言,国际化做得非常完善
  • Next.js 15 - 使用最新的 App Router 和 Server Components

🔑 关键文件定位

第一个应该阅读的文件:

  1. README.md - 项目概览和快速开始
  2. AGENTS.md - 项目约定和工作流规范 ⭐
  3. api/app_factory.py - 理解后端如何启动
  4. api/configs/app_config.py - 配置项说明
  5. web/app/components/workflow/index.tsx - 前端核心组件

核心业务逻辑所在:

后端:

  • api/core/workflow/graph_engine/graph_engine.py - 工作流引擎核心
  • api/core/rag/retrieval/retrieval.py - RAG 检索逻辑
  • api/core/agent/fc_agent_runner.py - Function Calling Agent
  • api/core/app/app_runner.py - 应用运行器

前端:

  • web/app/components/workflow/ - 工作流可视化编辑器
  • web/app/components/app/configuration/ - 应用配置界面
  • web/service/ - API 调用封装

🕸️ 模块依赖关系

后端依赖流:

Controllers (控制器)
    ↓ 调用
Services (服务层)
    ↓ 调用
Core (核心业务)
    ↓ 使用
Models (数据模型) + Extensions (基础设施)

特点:

  • 单向依赖 - 上层依赖下层,下层不知道上层
  • 清晰边界 - 每层职责明确
  • ⚠️ 注意 - 有些 services 会直接调用 models,跳过 core

前端依赖流:

Page (页面)
    ↓ 使用
Components (组件)
    ↓ 调用
Service (API服务)
    ↓ 使用
Context (全局状态) + Utils (工具函数)

3. 代码结构观察

🎨 代码组织模式

后端采用的设计模式:

  1. 工厂模式 - app_factory.py 创建应用实例

    def create_app() -> DifyApp:
     app = create_flask_app_with_configs()
     initialize_extensions(app)
     return app
    
  2. 策略模式 - Agent 的不同实现策略

    ├── fc_agent_runner.py          # Function Calling 策略
    ├── cot_agent_runner.py         # Chain of Thought 策略
    └── base_agent_runner.py        # 抽象基类
    
  3. 观察者模式 - 工作流事件系统

    # 工作流执行时触发各种事件
    GraphRunStartedEvent
    GraphNodeStartedEvent
    GraphNodeSucceededEvent
    GraphRunSucceededEvent
    
  4. 仓储模式 - 数据访问抽象

    ├── sqlalchemy_workflow_execution_repository.py
    └── celery_workflow_execution_repository.py
    
  5. 构建器模式 - 复杂对象的构建

    # 工作流构建
    graph = GraphBuilder()
     .add_node(start_node)
     .add_node(llm_node)
     .add_edge(start_node, llm_node)
     .build()
    

前端采用的设计模式:

  1. 组合模式 - 组件的嵌套组合
  2. 自定义 Hooks - 逻辑复用
  3. Context + Zustand - 状态管理
  4. Service 层 - API 调用封装

🏆 代码质量观察

优点 ✅:

  • 强类型约束 - Python 使用 Pydantic,TypeScript 严格模式
  • 📚 文档完善 - 关键模块有详细的 docstring
  • 🧪 测试覆盖 - 424个测试文件,涵盖核心逻辑
  • 🔧 工程化完善 - Lint、Format、Type-check 都有配置
  • 📦 模块化好 - 代码组织清晰,职责分明

可优化的地方 ⚠️:

  • 📏 部分函数较长 - 有些控制器方法超过100行
  • 🔄 依赖耦合 - services 和 core 之间有时边界模糊
  • 🌍 全局状态 - 部分代码使用了 Flask 的 current_app 全局变量
  • 📝 注释不统一 - 有些模块注释充分,有些较少

💡 改进方向提示(学习机会)

作为学习者,你可以关注以下几个重构方向:

  1. 提取长函数

    • 位置:api/controllers/console/app/app.py 中的 get() 方法
    • 机会:练习单一职责原则,提取子方法
  2. 依赖注入优化

    • 当前:很多类直接 import 依赖
    • 改进:通过构造函数注入,便于测试和替换
  3. 类型安全增强

    • 机会:为一些 Any 类型添加更精确的类型标注
    • 工具:使用 basedpyright 进行静态检查
  4. 性能优化点

    • N+1 查询问题:某些列表接口可能存在
    • 缓存策略:可以为热点数据添加缓存层
  5. 测试覆盖提升

    • 当前:主要是单元测试
    • 机会:添加更多的集成测试和 E2E 测试

第二部分:技能需求清单(你的学习弹药库)📚

学习心态: 不要被这份清单吓到!没有人需要精通所有技术才能开始学习 Dify。这份清单是帮你"知道有什么",而不是"必须会什么"。就像爬山,你不需要是登山运动员才能开始,但知道沿途有哪些风景会让旅程更有趣。

1. 基础技能要求

🐍 Python 技能 (后端核心)

必备技能:

  • ✅ Python 3.11+ 基础语法
  • ✅ 面向对象编程(类、继承、多态)
  • ✅ 异步编程基础(async/await)
  • ✅ 类型提示(Type Hints)
  • ✅ 装饰器的使用
  • ✅ 上下文管理器(with 语句)
  • ✅ 生成器和迭代器

推荐掌握:

  • 🎯 数据类(dataclass, Pydantic)
  • 🎯 枚举类型(Enum)
  • 🎯 抽象基类(ABC)
  • 🎯 协议(Protocol)和鸭子类型

版本要求:

requires-python = ">=3.11,<3.13"

为什么是 3.11+?

  • 更好的错误信息
  • 性能提升(比 3.10 快 10-60%)
  • 更好的类型系统
  • Exception Groups 支持

🌐 JavaScript/TypeScript 技能 (前端核心)

必备技能:

  • ✅ ES6+ 语法(箭头函数、解构、模板字符串)
  • ✅ TypeScript 基础类型系统
  • ✅ Promise 和 async/await
  • ✅ 模块化(import/export)
  • ✅ React 核心概念(组件、Props、State、生命周期)
  • ✅ React Hooks(useState, useEffect, useCallback, useMemo)

推荐掌握:

  • 🎯 TypeScript 高级类型(泛型、联合类型、交叉类型)
  • 🎯 React 19 新特性(Server Components、Actions)
  • 🎯 Next.js App Router
  • 🎯 状态管理(Zustand, React Query)

版本要求:

"engines": {
  "node": ">=v22.11.0"
}
"react": "19.1.1"
"next": "15.5.4"
"typescript": "^5.8.3"

🗄️ 数据库技能

PostgreSQL (主数据库):

  • ✅ SQL 基础(SELECT, JOIN, WHERE, GROUP BY)
  • ✅ 事务和并发控制
  • ✅ 索引优化
  • 🎯 JSON/JSONB 字段操作
  • 🎯 全文搜索(Full-Text Search)
  • 🎯 PGVector 扩展(向量存储)

SQLAlchemy (ORM):

  • ✅ 模型定义和关系映射
  • ✅ 查询构建
  • 🎯 Session 管理
  • 🎯 迁移脚本(Alembic)

Redis (缓存和消息队列):

  • ✅ 基础数据结构(String, Hash, List, Set)
  • ✅ 过期时间设置
  • 🎯 Pub/Sub 机制
  • 🎯 Redis 作为 Celery Broker

🚀 Web 框架技能

Flask (后端框架):

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/chat', methods=['POST'])
def chat():
    data = request.get_json()
    # 处理逻辑
    return jsonify({
   "result": "success"})

需要了解:

  • ✅ 路由和蓝图(Blueprint)
  • ✅ 请求和响应处理
  • ✅ 中间件和钩子
  • ✅ Flask-RESTx (API 文档生成)
  • 🎯 Flask-SQLAlchemy 集成
  • 🎯 Flask-Login (认证)

Next.js (前端框架):

// app/page.tsx
export default function Home() {
   
  return <div>Hello Dify</div>
}

需要了解:

  • ✅ App Router vs Pages Router
  • ✅ 服务端组件(Server Components)
  • ✅ 客户端组件(Client Components)
  • ✅ 路由系统
  • 🎯 数据获取策略
  • 🎯 API Routes

⚙️ 异步任务和消息队列

Celery:

from celery import Celery

celery = Celery('dify', broker='redis://localhost:6379/0')

@celery.task
def process_document(document_id):
    # 异步处理文档
    pass

需要了解:

  • ✅ 任务定义和调用
  • ✅ 任务路由和队列
  • 🎯 任务重试和错误处理
  • 🎯 定时任务(Celery Beat)
  • 🎯 任务监控

2. 进阶技能要求

🏗️ 架构和设计模式

领域驱动设计(DDD):

  • 🎯 实体(Entity)和值对象(Value Object)
  • 🎯 聚合根(Aggregate Root)
  • 🎯 领域服务(Domain Service)
  • 🎯 仓储模式(Repository Pattern)
  • 🎯 领域事件(Domain Events)

SOLID 原则:

  • S - 单一职责原则
  • O - 开闭原则
  • L - 里氏替换原则
  • I - 接口隔离原则
  • D - 依赖倒置原则

实际应用:

# GraphEngine 职责单一:只负责图的执行
# 具体的节点处理委托给 NodeExecutor
# 状态管理委托给 GraphStateManager
class GraphEngine:
    def __init__(self, graph, state_manager, executor):
        self._graph = graph
        self._state_manager = state_manager
        self._executor = executor

🤖 AI 和 LLM 相关知识

必备概念:

  • ✅ 大语言模型(LLM)基本原理
  • ✅ Prompt Engineering (提示工程)
  • ✅ RAG (检索增强生成)
  • ✅ Embedding 和向量搜索
  • ✅ Agent 和 Function Calling

推荐了解:

  • 🎯 不同模型的特点(GPT-4, Claude, Llama)
  • 🎯 Token 计算和成本优化
  • 🎯 流式响应(Server-Sent Events)
  • 🎯 温度、Top-P 等参数调优
  • 🎯 LangChain/LangGraph 框架思想

Dify 中的实践:

# RAG 流程
1. 用户提问
2. 将问题转换为 Embedding
3. 在向量数据库中检索相关文档
4. 将文档作为上下文+用户问题发送给 LLM
5. LLM 基于上下文生成答案

📊 数据处理和向量数据库

向量数据库选型:

  • Weaviate - 云原生,GraphQL API
  • Qdrant - Rust 编写,高性能
  • Milvus - 大规模向量搜索
  • Chroma - 轻量级,易于使用
  • PGVector - PostgreSQL 扩展,简单集成

需要了解的概念:

  • 向量维度(Embedding Dimensions)
  • 相似度计算(余弦、欧氏距离)
  • 索引类型(HNSW, IVF)
  • Hybrid Search (混合搜索)

🔧 DevOps 和部署

Docker:

services:
  api:
    image: langgenius/dify-api:1.9.1
    environment:
      - DB_HOST=db
      - REDIS_HOST=redis
  web:
    image: langgenius/dify-web:1.9.1
  db:
    image: postgres:15-alpine

需要了解:

  • ✅ Docker 基础(镜像、容器、网络、卷)
  • ✅ Docker Compose 编排
  • 🎯 多阶段构建
  • 🎯 健康检查(healthcheck)
  • 🎯 日志和监控

其他工具:

  • 🎯 Nginx - 反向代理和负载均衡
  • 🎯 Kubernetes - 生产环境编排
  • 🎯 Terraform - 基础设施即代码

3. 技能掌握程度建议

👶 初学者路径 (0-3个月)

目标:能够运行项目并理解基本流程

优先掌握:

  1. ⭐⭐⭐ Python/JavaScript 基础语法
  2. ⭐⭐⭐ Flask 和 React 基础
  3. ⭐⭐ Docker 基本使用
  4. ⭐ SQL 基础查询

学习建议:

  • 先把项目跑起来(使用 Docker Compose)
  • 阅读 README 和 AGENTS.md
  • 尝试修改简单的配置和文案
  • 追踪一个简单的 API 请求流程

实践任务:
✅ 成功运行 Dify
✅ 创建一个简单的聊天应用
✅ 修改系统提示词
✅ 添加一个自定义变量

🧑‍💻 有经验的开发者路径 (3-6个月)

目标:能够开发新功能和修复 Bug

重点提升:

  1. ⭐⭐⭐ TypeScript 高级特性
  2. ⭐⭐⭐ SQLAlchemy ORM
  3. ⭐⭐⭐ Celery 异步任务
  4. ⭐⭐ 向量数据库基础
  5. ⭐⭐ RAG 和 LLM 基础

学习建议:

  • 阅读核心模块源码(core/workflow, core/rag)
  • 理解 DDD 架构设计
  • 学习如何写测试
  • 尝试添加一个简单的工具集成

实践任务:
✅ 为应用添加一个新的配置项
✅ 集成一个新的 LLM 提供商
✅ 优化一个慢查询
✅ 编写单元测试

🚀 意欲贡献代码的进阶者路径 (6个月+)

目标:能够独立开发复杂功能并贡献社区

全面掌握:

  1. ⭐⭐⭐ DDD 和设计模式
  2. ⭐⭐⭐ 工作流引擎原理
  3. ⭐⭐⭐ AI Agent 设计
  4. ⭐⭐ 性能优化和监控
  5. ⭐⭐ 分布式系统设计

学习建议:

  • 深入研究工作流引擎实现
  • 理解 Agent 的不同策略
  • 学习如何做性能分析
  • 参与社区讨论和 Issue

实践任务:
✅ 开发一个新的工作流节点类型
✅ 优化 RAG 检索算法
✅ 实现一个新的 Agent 策略
✅ 贡献一个 PR 到主仓库


第三部分:学习路径规划(你的专属教练计划)🎯

引导语: 好了,理论知识铺垫够了,现在让我们撸起袖子开始实战!这个学习路径是我精心设计的"四阶段进阶法",每个阶段都有清晰的目标和可执行的步骤。记住,动手比看懂更重要!

1. 项目运行入口定位(快速上手)⚡

🚀 一键启动指南(Docker 方式)

预计时间:20-30分钟

步骤1:环境准备 (5分钟)

确保你的机器满足以下要求:

  • ✅ CPU >= 2 Core
  • ✅ RAM >= 4 GB
  • ✅ 安装 Docker Desktop (或 Docker Engine + Docker Compose)
  • ✅ 磁盘空间 >= 10 GB

检查 Docker 是否正常:

# 检查 Docker 版本
docker --version
# 输出: Docker version 24.0.0 或更高

# 检查 Docker Compose 版本  
docker compose version
# 输出: Docker Compose version v2.20.0 或更高

步骤2:克隆项目 (2分钟)

# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify

# 查看当前版本
git describe --tags
# 输出: v1.9.1 (或更新版本)

步骤3:配置环境变量 (3分钟)

cd docker

# 复制环境变量模板
cp .env.example .env

# 【重要】修改关键配置
# 使用你喜欢的编辑器打开 .env
nano .env  # 或 vim .env 或 code .env

必须修改的配置项:

# 修改为强密码(生产环境必须!)
SECRET_KEY=<生成一个随机字符串>

# 可选:如果有 OpenAI API Key
OPENAI_API_KEY=sk-xxx...

生成强密码的方法:

# Linux/Mac
openssl rand -base64 42

# Windows (PowerShell)
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Max 256 }))

步骤4:启动服务 (10分钟,首次下载镜像)

# 启动所有服务
docker compose up -d

# 【首次启动会下载镜像,需要等待10-15分钟】
# 下载完成后,查看服务状态
docker compose ps

期望输出:

NAME                  STATUS              PORTS
dify-api              running (healthy)   5001/tcp
dify-web              running             3000/tcp
dify-worker           running
dify-db               running (healthy)   5432/tcp
dify-redis            running             6379/tcp
dify-nginx            running             0.0.0.0:80->80/tcp

步骤5:访问应用 (3分钟)

  1. 打开浏览器访问: http://localhost/install
  2. 设置管理员账号和密码
  3. 完成初始化向导
  4. 🎉 开始使用 Dify!

⚠️ 常见配置陷阱及解决方案

问题1:端口被占用

Error: bind: address already in use 0.0.0.0:80

解决:

# 修改 .env 文件中的端口
EXPOSE_NGINX_PORT=8080

# 重启服务
docker compose down
docker compose up -d

# 现在访问 http://localhost:8080

问题2:数据库连接失败

sqlalchemy.exc.OperationalError: could not connect to server

解决:

# 检查数据库容器状态
docker compose logs db

# 如果看到"database system is ready to accept connections"
# 说明数据库已就绪,稍等片刻后重启 API
docker compose restart api

问题3:内存不足

Docker容器频繁重启或 OOM killed

解决:

# 增加 Docker 内存限制(Docker Desktop -> Settings -> Resources)
# 推荐至少分配 6GB 内存

# 或临时降低服务数量(仅开发环境)
docker compose up -d api web db redis  # 不启动向量数据库

问题4:网络问题导致镜像拉取失败
解决:

# 使用国内镜像源(修改 Docker daemon.json)
# Linux: /etc/docker/daemon.json
# Mac: Docker Desktop -> Settings -> Docker Engine

{
   
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

# 重启 Docker 服务
sudo systemctl restart docker  # Linux
# Mac: 重启 Docker Desktop

✅ 验证成功标志

1. 服务健康检查

# 所有服务应该显示 (healthy) 或 running
docker compose ps

# 查看 API 日志,应该看到:
docker compose logs api | tail -20
# 输出应包含: "Loaded ext_blueprints" 等初始化信息

2. API 接口测试

# 测试健康检查接口
curl http://localhost/api/health

# 期望输出:
{
   "status": "healthy"}

3. Web 界面加载

  • 打开 http://localhost
  • 应该能看到 Dify 的登录/注册界面
  • 样式正常,没有 404 错误

4. 数据库连接

# 进入 API 容器
docker compose exec api bash

# 测试数据库连接
flask shell

>>> from extensions.ext_database import db
>>> db.session.execute('SELECT 1').scalar()
1

2. 循序渐进学习计划(四阶段法)

📅 阶段一:环境搭建和项目启动 (1-2天)

核心目标:✨ 成功运行项目并能打个断点

Day 1 上午:Docker 方式启动

# 1. 按照上面的"一键启动指南"完成部署
docker compose up -d

# 2. 探索容器内部
docker compose exec api bash
ls -la  # 查看目录结构
cd /app/api
cat app.py  # 看看入口文件

Day 1 下午:本地开发环境(可选,推荐)

这样你可以直接修改代码并即时看到效果:

# 1. 启动中间件(数据库、Redis等)
cd docker
docker compose -f docker-compose.middleware.yaml --env-file middleware.env up -d

# 2. 准备后端环境
cd ../api
cp .env.example .env

# 安装 uv (Python 包管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 安装依赖
uv sync --dev

# 数据库迁移
uv run flask db upgrade

# 启动 API
uv run flask run --host 0.0.0.0 --port 5001 --debug

Day 2 上午:前端本地运行

cd web
cp .env.example .env

# 安装 pnpm (如果没有)
npm install -g pnpm

# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

# 访问 http://localhost:3000

Day 2 下午:调试环境配置

VSCode 配置(后端):

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Flask",
      "type": "debugpy",
      "request": "launch",
      "module": "flask",
      "env": {
        "FLASK_APP": "app.py",
        "FLASK_DEBUG": "1"
      },
      "args": [
        "run",
        "--no-debugger",
        "--no-reload",
        "--host", "0.0.0.0",
        "--port", "5001"
      ],
      "jinja": true,
      "cwd": "${workspaceFolder}/api"
    }
  ]
}

VSCode 配置(前端):

{
  "name": "Next.js: debug",
  "type": "node-terminal",
  "request": "launch",
  "command": "pnpm dev",
  "cwd": "${workspaceFolder}/web"
}

验证调试:

  1. api/app.py 第40行打断点
  2. 按 F5 启动调试
  3. 访问 http://localhost:5001/api/health
  4. 断点应该会命中! 🎉

📅 阶段二:核心流程理解 (3-5天)

核心目标:✨ 追踪一个完整业务流程,画出自己的流程图

Day 3:理解应用启动流程

任务1:追踪 Flask 应用如何启动

# 1. 从这里开始
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5001)

追踪路径:

api/app.py (入口)
    ↓
api/app_factory.py::create_app()
    ↓
api/app_factory.py::initialize_extensions()
    ↓
加载各种扩展(数据库、Redis、Celery等)
    ↓
api/extensions/ext_blueprints.py
    ↓
注册所有路由

实践:在每个关键文件打断点,重启应用,观察执行顺序

任务2:理解路由注册机制

from controllers.console import bp as console_bp
from controllers.web import bp as web_bp

def init_app(app):
    app.register_blueprint(console_bp, url_prefix='/console/api')
    app.register_blueprint(web_bp, url_prefix='/api')

练习:

  1. 找到所有的 Blueprint 定义
  2. 列出 /console/api/api 下有哪些路由
  3. 选择一个感兴趣的API,看看它的实现

Day 4-5:追踪聊天消息流程

场景:用户发送一条聊天消息

起点:

POST /api/chat-messages
Content-Type: application/json

{
  "inputs": {},
  "query": "What is Dify?",
  "response_mode": "streaming",
  "conversation_id": null,
  "user": "abc-123"
}

追踪清单:

步骤1:找到路由处理器

@bp.route('/chat-messages', methods=['POST'])
def chat():
    # 在这里打断点
    pass

步骤2:参数验证和解析

  • 查看如何验证 JSON 参数
  • 如何获取当前用户身份
  • 如何检查应用权限

步骤3:服务层调用

# 通常会调用 CompletionService
from services.completion_service import CompletionService

result = CompletionService.completion(
    app_model=app,
    user=end_user,
    args=request.json
)

步骤4:核心业务逻辑

# 这里是真正的AI逻辑
1. 加载应用配置
2. 如果启用了知识库,进行 RAG 检索
3. 构建 Prompt
4. 调用 LLM
5. 流式返回结果

步骤5:数据持久化

  • 保存对话记录到数据库
  • 记录 Token 使用量
  • 触发异步任务(如日志、统计)

Day 6:绘制流程图

使用你喜欢的工具(draw.io, Excalidraw, Mermaid)绘制流程图:

graph TD
    A[用户发送消息] --> B[路由处理 /api/chat-messages]
    B --> C{权限检查}
    C -->|通过| D[CompletionService]
    C -->|失败| E[返回401]
    D --> F[加载应用配置]
    F --> G{是否启用RAG?}
    G -->|是| H[向量检索]
    G -->|否| I[直接构建Prompt]
    H --> I
    I --> J[调用LLM API]
    J --> K[流式返回]
    K --> L[保存对话记录]
    L --> M[触发异步任务]

验证学习效果:

  • [ ] 能够不看代码,口头描述完整流程
  • [ ] 能够指出每个步骤对应的源文件路径
  • [ ] 能够解释为什么要这样设计

📅 阶段三:模块深入和定制开发 (1-2周)

核心目标:✨ 能修改或扩展一个现有功能

Week 1:深入工作流模块

任务1:理解工作流引擎 (2-3天)

工作流是 Dify 最核心的功能之一,值得深入学习:

class GraphEngine:
    """
    Queue-based graph execution engine.
    队列驱动的图执行引擎
    """

    def run(self) -> Generator[GraphEngineEvent]:
        # 核心执行逻辑
        while not self._should_stop():
            node = self._get_next_node()
            result = self._execute_node(node)
            yield result

学习重点:

  1. 图的数据结构 (Graph, Node, Edge)
  2. 节点的执行策略 (串行、并行、条件分支)
  3. 状态管理 (GraphRuntimeState)
  4. 事件系统 (GraphEngineEvent)

实践:

# 1. 运行一个简单的工作流
# 2. 在 graph_engine.py 的 run() 方法打断点
# 3. 单步调试,观察:
#    - 节点如何被调度
#    - 状态如何更新
#    - 事件如何触发

任务2:开发一个自定义工作流节点 (3-4天)

目标:创建一个"天气查询"节点

步骤1:定义节点类型

from core.workflow.entities.node import NodeType
from core.workflow.nodes.base_node import BaseNode

class WeatherNode(BaseNode):
    _node_type = NodeType.WEATHER

    def run(self, inputs: dict) -> dict:
        city = inputs.get('city')
        # 调用天气API
        weather_data = self._fetch_weather(city)
        return {
            'weather': weather_data,
            'temperature': weather_data['temp']
        }

    def _fetch_weather(self, city: str) -> dict:
        # 实现天气查询逻辑
        import requests
        # API_KEY = ...
        # response = requests.get(f'https://api.weather.com...')
        return {'temp': 25, 'condition': 'Sunny'}

步骤2:注册节点类型

from .weather.weather_node import WeatherNode

NODE_TYPE_CLASSES_MAPPING = {
    NodeType.WEATHER: WeatherNode,
    # ... 其他节点类型
}

步骤3:添加前端组件

const WeatherNode: FC<NodeProps> = ({ data }) => {
  return (
    <div className="weather-node">
      <input 
        placeholder="Enter city name"
        value={data.city}
        onChange={(e) => updateNodeData({ city: e.target.value })}
      />
    </div>
  )
}

步骤4:测试

  1. 在工作流编辑器中拖入你的节点
  2. 配置城市名称
  3. 运行工作流
  4. 查看输出结果

Week 2:深入 RAG 模块

任务3:理解检索流程 (2-3天)

def retrieve(query: str, top_k: int = 5):
    # 1. 生成查询 Embedding
    query_embedding = embedding_model.embed(query)

    # 2. 向量检索
    results = vector_db.search(
        embedding=query_embedding,
        top_k=top_k
    )

    # 3. 重排序(可选)
    if rerank_model:
        results = rerank_model.rerank(query, results)

    # 4. 返回文档
    return results

学习重点:

  • Embedding 模型的选择和调用
  • 向量数据库的操作
  • 重排序算法(Rerank)
  • 混合检索(Hybrid Search)

任务4:优化检索效果 (2-3天)

实验:

  1. 准备测试数据集(20-30个问答对)
  2. 测试不同的检索参数:
    • top_k: 3, 5, 10
    • score_threshold: 0.5, 0.7, 0.9
    • 是否启用 Rerank
  3. 记录召回率和准确率
  4. 调整参数找到最佳配置

代码示例:

# 评估脚本
test_queries = [
    {
   "query": "What is Dify?", "expected_doc_id": "doc_001"},
    {
   "query": "How to deploy?", "expected_doc_id": "doc_042"},
    # ... 更多测试用例
]

for test in test_queries:
    results = retrieve(test['query'], top_k=5)
    # 检查 expected_doc_id 是否在前5个结果中
    is_correct = test['expected_doc_id'] in [r.id for r in results]
    print(f"Query: {test['query']} - {'✓' if is_correct else '✗'}")

📅 阶段四:架构理解和贡献指南 (2周+)

核心目标:✨ 理解技术选型原因,尝试修复一个简单 issue

Week 3:架构深度剖析

任务1:理解 DDD 架构设计 (3天)

阅读清单:

  1. Eric Evans 的《领域驱动设计》第1-3章
  2. Dify 的 api/core/ 目录结构
  3. 任选一个聚合根(如 App, Dataset)深入分析

实践:画出 App 聚合根的领域模型:

App (聚合根)
├── AppModelConfig (值对象)
├── AppDatasetJoin (实体)
├── Site (实体)
└── Tag (值对象)

思考题:

  • Q1: 为什么 AppDataset 不直接关联,而是通过 AppDatasetJoin?
  • Q2: AppModelConfig 为什么设计成 JSON 存储而不是单独的表?
  • Q3: 聚合根的边界如何划分?

任务2:分析技术选型理由 (2天)

为什么选择 Flask 而不是 FastAPI?

  • ✅ Flask 生态成熟,扩展丰富
  • ✅ 同步代码更易调试
  • ✅ 团队经验积累
  • ⚠️ 性能略逊于 FastAPI (但对于 AI 应用,瓶颈在 LLM 调用,不在框架)

为什么选择 PostgreSQL 而不是 MySQL?

  • ✅ JSON/JSONB 字段支持更好
  • ✅ PGVector 扩展(向量存储)
  • ✅ 全文搜索功能强大
  • ✅ 事务隔离级别更严格

为什么选择 Celery 而不是 RQ?

  • ✅ 支持定时任务(Beat)
  • ✅ 支持任务路由和优先级
  • ✅ 监控工具成熟(Flower)

任务3:性能分析和优化 (2天)

工具准备:

# 安装性能分析工具
pip install py-spy
pip install memory_profiler

# 生成火焰图
py-spy record -o profile.svg -- python app.py

分析点:

  1. 找出最耗时的API接口
  2. 分析数据库查询(使用 SQLAlchemy 的 echo=True)
  3. 检查是否有 N+1 查询问题
  4. 评估缓存策略

优化案例:

# 优化前: N+1 查询
apps = App.query.all()
for app in apps:
    print(app.created_by)  # 每次都查询数据库!

# 优化后: 使用 joinedload
from sqlalchemy.orm import joinedload
apps = App.query.options(joinedload(App.created_by_account)).all()
for app in apps:
    print(app.created_by)  # 已经加载好了

Week 4:参与开源贡献

任务4:从 Issue 开始 (7天)

Step 1:寻找合适的 Issue

Step 2:本地复现问题

# 1. 拉取最新代码
git pull origin main

# 2. 根据 Issue 描述复现问题
# 3. 写一个最小化的复现步骤

Step 3:定位问题根因

  • 使用调试器单步跟踪
  • 添加日志输出
  • 查看相关的测试用例

Step 4:修复并测试

# 1. 创建新分支
git checkout -b fix/issue-12345

# 2. 修改代码
# 3. 运行测试
cd api
uv run pytest tests/unit_tests/core/test_xxx.py

# 4. 运行 lint
make lint
make type-check

# 5. 提交代码
git add .
git commit -m "fix: resolve issue #12345 - description"

Step 5:提交 PR

git push origin fix/issue-12345

然后在 GitHub 上创建 Pull Request,描述:

  • 问题是什么
  • 你是如何修复的
  • 测试结果

PR 模板:

## Description
Fixes #12345

## Changes
- 修改了 `api/core/xxx.py` 中的 `xxx()` 方法
- 添加了边界条件检查

## Testing
- [ ] 单元测试通过
- [ ] 手动测试通过
- [ ] Lint 检查通过

## Screenshots (if applicable)
...

任务5:代码审查学习 (持续)

即使 PR 没被合并,也能从审查意见中学到很多:

  • 代码风格规范
  • 最佳实践
  • 边界情况处理
  • 性能考虑

第四部分:实践建议和进阶指导(从会用到精通)💡

实战心法: 纸上得来终觉浅,绝知此事要躬行。这部分我会分享一些实战中的技巧、常见的坑以及如何避免它们。这些都是我和社区开发者踩过的坑,希望你能少走弯路!

1. 调试技巧和常见陷阱

🐛 后端调试技巧

技巧1:使用 Flask Shell 快速测试

cd api
uv run flask shell

>>> from models import App
>>> from extensions.ext_database import db
>>> apps = App.query.limit(5).all()
>>> print(apps[0].name)

技巧2:开启 SQLAlchemy 查询日志

SQLALCHEMY_ECHO=true

这会在控制台打印所有 SQL 语句,方便定位慢查询和 N+1 问题。

技巧3:使用 pdb 断点调试

# 在任何地方插入断点
import pdb; pdb.set_trace()

# 或使用 breakpoint() (Python 3.7+)
breakpoint()

技巧4:查看 Celery 任务状态

# 启动 Flower (Celery 监控工具)
celery -A app.celery flower

# 访问 http://localhost:5555

🌐 前端调试技巧

技巧1:使用 React DevTools

  • 安装 React DevTools 浏览器扩展
  • 查看组件树和 Props
  • 分析渲染性能

技巧2:网络请求调试

// 在 service 层添加日志
fetch('/api/chat-messages', {
   
  method: 'POST',
  body: JSON.stringify(data)
})
.then(res => {
   
  console.log('Response:', res)
  return res.json()
})

技巧3:Zustand DevTools

// 启用 Redux DevTools 支持
import {
    devtools } from 'zustand/middleware'

export const useStore = create(
  devtools((set) => ({
   
    // ... state
  }))
)

⚠️ 常见陷阱汇总

陷阱1:忘记激活虚拟环境

# 症状: 找不到模块或版本不对
# 解决: 确保使用 uv run
cd api
uv run python app.py  # ✅ 正确
python app.py  # ❌ 可能用错 Python

陷阱2:数据库迁移问题

# 症状: sqlalchemy.exc.ProgrammingError: relation "xxx" does not exist
# 解决: 运行迁移
cd api
uv run flask db upgrade

陷阱3:Redis 连接失败

# 症状: redis.exceptions.ConnectionError
# 解决: 检查 Redis 是否运行
docker compose ps redis
docker compose logs redis

陷阱4:前端 CORS 错误

Access to XMLHttpRequest has been blocked by CORS policy

解决: 检查 api/.env 中的 CORS 配置:

WEB_API_CORS_ALLOW_ORIGINS=*
CONSOLE_CORS_ALLOW_ORIGINS=*

陷阱5:环境变量未生效

# 症状: 修改了 .env 但没有效果
# 原因: Docker 容器需要重启
docker compose down
docker compose up -d

2. 扩展练习建议

🎯 初级练习(1-2周)

练习1:修改应用默认配置

  • 目标: 将默认的模型温度从 0.7 改为 0.5
  • 涉及文件: api/configs/app_config.py
  • 步骤:
    1. 找到默认配置定义
    2. 修改默认值
    3. 重启应用测试
    4. 观察生成结果的变化

练习2:添加自定义系统变量

  • 目标: 为应用添加一个 { {current_date}} 变量
  • 涉及文件: api/core/variables/ 目录
  • 步骤:
    1. 创建新的变量类型
    2. 实现变量值的计算逻辑
    3. 在提示词中使用该变量
    4. 测试是否正确替换

练习3:美化前端界面

  • 目标: 修改聊天界面的主题色
  • 涉及文件: web/tailwind.config.js, web/themes/
  • 步骤:
    1. 修改 Tailwind 配置中的颜色
    2. 更新主题变量
    3. 重启前端服务
    4. 查看效果

🎯 中级练习(2-4周)

练习4:集成新的 LLM 提供商

  • 目标: 添加一个自定义的 LLM API
  • 涉及文件: api/core/model_runtime/model_providers/
  • 步骤:
    1. 研究现有提供商的实现(如 OpenAI)
    2. 创建新的提供商目录和配置文件
    3. 实现 invoke() 方法
    4. 在界面中配置和测试

练习5:开发自定义工具

  • 目标: 创建一个"翻译"工具
  • 涉及文件: api/core/tools/provider/builtin/
  • 步骤:
    1. 创建工具目录结构
    2. 编写工具的 YAML 定义
    3. 实现工具的 Python 逻辑
    4. 在 Agent 中集成使用

练习6:优化数据库查询

  • 目标: 解决应用列表接口的 N+1 问题
  • 涉及文件: api/services/app_service.py
  • 步骤:
    1. 开启 SQL 日志,识别 N+1
    2. 使用 joinedload 优化
    3. 对比优化前后的性能
    4. 编写单元测试验证

🎯 高级练习(4周+)

练习7:实现新的工作流节点

  • 目标: 创建一个"数据库查询"节点
  • 涉及: 后端 Python + 前端 TypeScript
  • 挑战:
    • 设计节点的输入输出接口
    • 处理数据库连接池
    • 实现前端的配置表单
    • 编写完整的测试用例

练习8:优化 RAG 检索算法

  • 目标: 实现混合检索(向量+全文)
  • 涉及文件: api/core/rag/retrieval/
  • 挑战:
    • 理解向量检索和全文检索的差异
    • 设计结果的融合算法
    • 调优权重参数
    • 进行 A/B 测试验证效果

练习9:开发自定义 Agent 策略

  • 目标: 实现 ReAct Agent
  • 涉及文件: api/core/agent/
  • 挑战:
    • 理解 ReAct 原理
    • 设计思考-行动-观察循环
    • 处理工具调用的异常
    • 优化推理效率

3. 参与贡献的途径

📝 找到合适的 Issue

GitHub Issue 筛选:

  1. 访问: https://github.com/langgenius/dify/issues
  2. 使用标签筛选:
    • good first issue - 新手友好
    • help wanted - 需要帮助
    • bug - Bug 修复
    • enhancement - 功能增强
    • documentation - 文档改进

选择标准:

  • ✅ 有清晰的问题描述
  • ✅ 有复现步骤
  • ✅ 在你的能力范围内
  • ✅ 近期有人讨论(说明重要)

💬 参与社区讨论

官方渠道:

贡献方式:

  • 📚 改进文档(修正错别字、补充说明)
  • 🐛 报告 Bug(详细复现步骤)
  • 💡 提出功能建议(描述使用场景)
  • 🌍 贡献翻译(21种语言总有你擅长的)
  • 🧪 编写测试(提高代码覆盖率)
  • 📝 分享案例(你的应用实践)

🔧 代码规范要求

后端代码规范:

# 代码格式化
make format

# 代码检查
make lint

# 类型检查
make type-check

# 运行测试
cd api
uv run pytest tests/unit_tests/

前端代码规范:

cd web

# 代码检查
pnpm lint

# 自动修复
pnpm lint:fix

# 运行测试
pnpm test

Commit Message 规范:

<type>(<scope>): <subject>

<body>

<footer>

类型(type):

  • feat: 新功能
  • fix: Bug 修复
  • docs: 文档更新
  • style: 代码格式(不影响功能)
  • refactor: 重构
  • perf: 性能优化
  • test: 测试相关
  • chore: 构建/工具相关

示例:

git commit -m "feat(workflow): add weather query node

- Add WeatherNode class
- Implement API integration
- Add frontend component

Closes #12345"

📤 提交 PR 的最佳实践

PR 准备清单:

  • [ ] 代码已通过 lint 和 type-check
  • [ ] 添加了必要的测试
  • [ ] 更新了相关文档
  • [ ] 测试了多种场景
  • [ ] Commit message 符合规范
  • [ ] PR 描述清晰完整

PR 描述模板:

## 🎯 What & Why
简要说明改动内容和原因

## 📝 Changes
- 具体的改动点1
- 具体的改动点2

## 🧪 Testing
- [ ] Unit tests pass
- [ ] Integration tests pass
- [ ] Manual testing completed

## 📸 Screenshots (if UI changes)
[before/after 截图]

## 🔗 Related Issues
Closes #XXX

第五部分:技术栈学习指引(你的知识地图)🌐

学习策略: 不要试图一次性学完所有技术!根据你的学习阶段,有针对性地深入某几项技术。记住,深度 > 广度。

1. 官方文档定位(学习的基石)

📚 核心技术栈文档

Python 生态:

JavaScript 生态:

数据库和缓存:

向量数据库:

📖 Dify 自身文档

必读章节(优先级排序):

  1. ⭐⭐⭐ 快速开始 - https://docs.dify.ai/getting-started/install-self-hosted
  2. ⭐⭐⭐ AGENTS.md - 项目约定(在仓库根目录)
  3. ⭐⭐ API 参考 - https://docs.dify.ai/guides/application-publishing/developing-with-apis
  4. ⭐⭐ 工作流文档 - https://docs.dify.ai/guides/workflow
  5. 知识库配置 - https://docs.dify.ai/guides/knowledge-base
  6. 模型配置 - https://docs.dify.ai/guides/model-configuration

社区资源:

📘 权威技术书籍

后端架构:

  1. 《领域驱动设计》 - Eric Evans

    • 适用阶段: 中级+
    • 重点: 第1-3章(DDD 基础),第4-6章(设计实践)
  2. 《架构整洁之道》 - Robert C. Martin

    • 适用阶段: 中级
    • 重点: SOLID 原则,组件设计
  3. 《Python 工匠》 - Piglei

    • 适用阶段: 初级-中级
    • 重点: 编码技巧,最佳实践

AI 和 LLM:

  1. 《动手学深度学习》 - 李沐

  2. 《大语言模型:原理与实践》

    • 适用阶段: 中级
    • 重点: Transformer, Prompt Engineering, RAG
  3. LangChain 官方文档


2. 学习路径建议(社区智慧)

🎓 技能学习顺序

第一阶段(1个月) - 基础打底:

Python 基础 → Flask 框架 → SQLAlchemy ORM → Docker 基础
             ↓
JavaScript/TypeScript → React 基础 → Next.js 入门

第二阶段(2-3个月) - 核心技能:

DDD 设计模式 → Celery 异步任务 → Redis 应用
                ↓
React 高级特性 → 状态管理 → ReactFlow
                ↓
向量数据库基础 → RAG 原理 → LLM API 使用

第三阶段(3-6个月) - 深度进阶:

工作流引擎设计 → Agent 架构 → 性能优化
                ↓
系统架构设计 → 微服务实践 → 可观测性

💡 核心概念优先级

必须掌握(⭐⭐⭐):

  • Python 类型提示和 Pydantic
  • Flask Blueprint 和中间件
  • SQLAlchemy Session 管理
  • React Hooks 和组件生命周期
  • TypeScript 类型系统
  • Docker 和 Docker Compose

推荐掌握(⭐⭐):

  • 领域驱动设计(DDD)
  • 设计模式(工厂、策略、观察者)
  • Celery 任务队列
  • PostgreSQL 索引优化
  • Next.js App Router
  • 向量搜索原理

了解即可(⭐):

  • Kubernetes 部署
  • 分布式追踪
  • 性能监控工具
  • CI/CD 流程

🎯 实践项目推荐

模仿学习(Copycat Projects):

  1. 简化版 Dify Chat

    • 目标: 实现基本的聊天功能
    • 技术: Flask + React + OpenAI API
    • 时间: 1-2周
  2. 个人知识库助手

    • 目标: 上传文档,RAG 问答
    • 技术: 向量数据库 + Embedding
    • 时间: 2-3周
  3. 可视化工作流编辑器

    • 目标: 拖拽构建简单流程
    • 技术: ReactFlow + 后端执行引擎
    • 时间: 3-4周

参考开源项目:


3. 工具与环境配置指南

🛠️ 开发环境推荐

IDE 选择:

  • VSCode (推荐) - 轻量且强大
    • 安装扩展: Python, Pylance, ESLint, Prettier, Docker
  • PyCharm - Python 专业 IDE
    • 社区版免费,专业版功能更强
  • Cursor - AI 辅助编程
    • 集成 GPT,智能代码补全

VSCode 配置推荐:

{
  "python.defaultInterpreterPath": "${workspaceFolder}/api/.venv/bin/python",
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.formatting.provider": "black",
  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "[python]": {
    "editor.defaultFormatter": "ms-python.black-formatter"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

📦 包管理器

Python:

# 使用 uv (推荐,Dify 官方使用)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 常用命令
uv sync                    # 安装依赖
uv run python app.py       # 运行脚本
uv add requests            # 添加包
uv remove requests         # 移除包

Node.js:

# 使用 pnpm (Dify 前端使用)
npm install -g pnpm

# 常用命令
pnpm install               # 安装依赖
pnpm add react             # 添加包
pnpm remove react          # 移除包
pnpm dev                   # 开发模式

🔧 常用工具

API 测试:

  • Postman - GUI 工具,功能强大
  • Insomnia - 简洁美观
  • HTTPie - 命令行工具,简单易用
    http POST http://localhost/api/chat-messages \
      query="Hello" \
      response_mode="blocking"
    

数据库管理:

  • DBeaver - 多数据库支持,免费开源
  • pgAdmin - PostgreSQL 官方工具
  • DataGrip - JetBrains 出品,强大但付费

Redis 管理:

  • RedisInsight - 官方 GUI 工具
  • redis-cli - 命令行工具

Git 客户端:

  • GitKraken - 可视化 Git 工具
  • GitHub Desktop - 简单易用
  • 命令行 - 最灵活(推荐)

4. 进阶拓展方向

🎓 技术博客推荐

官方和维护者:

AI 和 LLM 领域:

Python 和架构:

前端技术:

🎤 相关技术大会

AI 领域:

  • NeurIPS - 机器学习顶会
  • ICLR - 深度学习国际会议
  • ACL - 自然语言处理顶会
  • AI DevWorld - AI 开发者大会

技术通用:

  • PyCon - Python 开发者大会
  • React Conf - React 官方会议
  • DockerCon - Docker 技术大会
  • KubeCon - Kubernetes 大会

国内会议:

  • DIVE 全球基础软件创新大会
  • ArchSummit 全球架构师峰会
  • QCon 全球软件开发大会

💬 社区与论坛

Dify 相关:

通用技术社区:

AI 专项:


🎓 结语:持续学习的旅程

教练寄语: 🎉 恭喜你读到这里!如果你已经完成了前面的学习路径,相信你对 Dify 已经有了相当深入的理解。但记住,学习永无止境,技术日新月异。

💪 最后的建议

1. 保持好奇心

  • 每天花30分钟阅读源码
  • 订阅 Dify 的 GitHub Releases
  • 关注 AI 领域的最新动态

2. 多写多练

  • 每周至少写一次代码
  • 尝试解决一个 GitHub Issue
  • 分享你的学习笔记

3. 参与社区

  • 在 Discord 回答新手问题
  • 贡献你的代码或文档
  • 分享你的应用案例

4. 构建作品集

  • 基于 Dify 开发自己的应用
  • 开源你的扩展和工具
  • 写技术博客分享经验

📚 推荐的学习节奏

日常(每天 1-2 小时):

  • 阅读 30 分钟源码或文档
  • 编码实践 30-60 分钟
  • 思考和总结 15 分钟

周末(每周 4-8 小时):

  • 完成一个小项目或练习
  • 深入研究一个模块
  • 参与社区讨论

长期(每月):

  • 贡献 1-2 个 PR
  • 写一篇技术总结
  • 分享给同行交流

🚀 下一步行动

立即开始:

  1. [ ] ⭐ Star Dify 项目: https://github.com/langgenius/dify
  2. [ ] 🔨 按照"阶段一"跑起来项目
  3. [ ] 📖 加入 Discord 社区
  4. [ ] 💡 选择一个练习开始实践

记住:

  • ✨ 最好的学习方式是动手实践
  • 🐛 不要害怕犯错,错误是最好的老师
  • 🤝 遇到问题主动求助社区
  • 📈 持续小步迭代,不要贪多求快

📞 联系与反馈

如果这份指南对你有帮助,欢迎:

  • ⭐ 给 Dify 项目点个 Star
  • 💬 在 Discord 分享你的学习进度
  • 📝 提出改进建议

祝你学习愉快,早日成为 Dify 贡献者! 🎉

目录
相关文章
|
11天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
347 130
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
436 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
201 138
|
10天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
390 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
202 136
|
22天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1361 8
|
8天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。