Dify(AI应用)

开源协议

Apache 2.0

附加条件:不运行多租户、不能修改前端交互、logo版权信息不能修改;

使用建议:仅使用后端 SDK 或 API ,不建议使用系统太复杂了不适合集成或二开

架构分析

Dify 采用前后端分离,后端基于 Flask + Celery,前端基于 Next.js + React,支持多模型、RAG、工作流和插件扩展,适合构建 LLM 应用平台。架构设计遵循 DDD 和清洁架构原则,代码组织清晰,便于维护和扩展。

后端:

  • Web 框架:Flask 3.1.2
  • ORM:SQLAlchemy 2.0.29 + Flask-SQLAlchemy
  • 数据库迁移:Flask-Migrate
  • 异步任务:Celery 5.5.2 + Redis
  • WSGI 服务器:Gunicorn + Gevent
  • 依赖管理:UV(Python 包管理器)
  • Python 版本:3.11-3.12

api/
├── core/                    # 核心业务逻辑层
│   ├── agent/              # Agent 运行器(CoT、Function Calling)
│   ├── app/                # 应用管理(配置、任务管道)
│   ├── rag/                # RAG 管道
│   ├── workflow/           # 工作流引擎
│   ├── model_runtime/      # 模型运行时(支持多提供商)
│   ├── plugin/             # 插件系统
│   ├── tools/              # 工具管理(50+内置工具)
│   ├── datasource/         # 数据源管理
│   ├── moderation/         # 内容审核
│   ├── mcp/                # Model Context Protocol
│   └── ops/                # 可观测性(Langfuse、LangSmith等)
├── controllers/            # 控制器层(API 路由)
│   ├── console/           # 控制台 API
│   ├── service_api/       # 服务 API
│   ├── web/               # Web API
│   └── inner_api/         # 内部 API
├── services/               # 服务层(业务逻辑)
│   ├── app_service.py
│   ├── workflow_service.py
│   ├── dataset_service.py
│   └── ...
├── models/                 # 数据模型
├── repositories/           # 数据访问层
├── extensions/             # Flask 扩展初始化
└── configs/                # 配置管理

前端:

  • 框架:Next.js 15.5.6(App Router)
  • React:19.1.1
  • TypeScript:5.9.3(严格模式)
  • 状态管理:
  • Zustand 4.5.7
  • React Query (@tanstack/react-query) 5.90.5
  • SWR 2.3.6
  • UI 库:
  • Tailwind CSS 3.4.18
  • Headless UI 2.2.1
  • Heroicons
  • 富文本编辑器:Lexical 0.36.2
  • 工作流可视化:ReactFlow 11.11.4
  • 代码编辑器:Monaco Editor
  • 图表:ECharts 5.6.0
  • 国际化:i18next + react-i18next

web/
├── app/                    # Next.js App Router 页面
│   ├── (commonLayout)/    # 通用布局路由组
│   │   ├── apps/         # 应用管理
│   │   ├── datasets/     # 数据集管理
│   │   └── workflow/     # 工作流
│   └── (shareLayout)/    # 分享布局路由组
├── components/            # React 组件
│   ├── workflow/         # 工作流组件(813个文件)
│   ├── app/              # 应用相关组件
│   ├── datasets/         # 数据集组件
│   └── plugins/          # 插件组件
├── service/              # API 服务层
├── hooks/               # 自定义 Hooks
├── context/             # React Context
├── utils/               # 工具函数
├── i18n/                # 国际化资源(612个文件)
└── types/               # TypeScript 类型定义

运行


    uv sync
    uv run flask db upgrade
    uv run flask run --host 0.0.0.0 --port=5001 --debug
    uv run python -m celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace,app_deletion
    pnpm run dev
    dify-plugin-daemon 服务运行
      docker run -d
      --restart always
      -e DB_HOST="host.docker.internal"
      -e DB_PORT="5432"
      -e DB_USERNAME="postgres"
      -e DB_PASSWORD="tangzhangss"
      -e DB_DATABASE="dify_plugin"
      -e REDIS_HOST="host.docker.internal"
      -e REDIS_PORT="16379"
      -e REDIS_PASSWORD="tangzhangss"
      -e SERVER_PORT="5002"
      -e SERVER_KEY="lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi"
      -e MAX_PLUGIN_PACKAGE_SIZE="52428800"
      -e PPROF_ENABLED="false"
      -e DIFY_INNER_API_URL="http://host.docker.internal:5001"
      -e DIFY_INNER_API_KEY="QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1"
      -e PLUGIN_REMOTE_INSTALLING_HOST="0.0.0.0"
      -e PLUGIN_REMOTE_INSTALLING_PORT="5003"
      -e PLUGIN_WORKING_PATH="/app/storage/cwd"
      -e FORCE_VERIFYING_SIGNATURE="true"
      -e PYTHON_ENV_INIT_TIMEOUT="120"
      -e PLUGIN_MAX_EXECUTION_TIMEOUT="600"
      -e PIP_MIRROR_URL=""
      -p "5002:5002"
      -p "5003:5003"
      -v "H:/opensource/dify/volumes/plugin_daemon:/app/storage"
      langgenius/dify-plugin-daemon:0.4.0-local

1.环境报错
    \\vc++xxx,
        安装生成工具不要安装到中文目录下,最好安装在C盘;
    \\xxxcfloat(10):
      fatal error C1083:
        生成工具修改windows sdk版本 找最新
    \\500 Internal Server Error: module 'jieba.analyse' has no attribute 'default_tfidf'
        将jieba文件夹和jieba-0.42.1.dist-info文件夹 放在 api目录下
2.迁移数据库 需要先创建数据库,不然会报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 i
3.前端包管理工具是pnpm不是npm..用npm install 用错会拉取依赖失败。

4.登录it_tangzhang@163.com/tangzhangss@123