Dify 介绍
Dify 简介
相关源文件
本章引用的主要源码文件:
README.mdapi/.env.exampleapi/Dockerfileapi/app.pyapi/app_factory.pyapi/configs/feature/__init__.pyapi/configs/middleware/__init__.pyapi/configs/observability/__init__.pyapi/configs/observability/otel/otel_config.pyapi/configs/packaging/__init__.pyapi/controllers/console/datasets/datasets.pyapi/core/rag/datasource/vdb/vector_factory.pyapi/core/rag/datasource/vdb/vector_type.pyapi/extensions/ext_compress.pyapi/extensions/ext_otel.pyapi/extensions/otel/instrumentation.pyapi/pyproject.tomlapi/tests/unit_tests/configs/test_dify_config.pyapi/tests/unit_tests/core/workflow/graph_engine/test_table_runner.pyapi/uv.lockdocker/.env.exampledocker/README.mddocker/docker-compose-template.yamldocker/docker-compose.middleware.yamldocker/docker-compose.yamldocker/envs/core-services/shared.env.exampledocker/envs/infrastructure/nginx.env.exampledocker/envs/security.env.exampledocker/nginx/conf.d/default.conf.templateweb/.env.exampleweb/Dockerfileweb/app/layout.tsxweb/config/index.tsweb/docker/entrypoint.shweb/package.jsonweb/types/feature.ts
目的与范围
本文档对 Dify 平台进行高层级介绍,涵盖其目的、架构、核心组件和部署选项。它是技术入门的入口,将高层级功能映射到底层代码库结构。有关详细的技术架构,请参阅系统架构总览。
来源: README.md:1-200, api/Dockerfile:1-123
什么是 Dify?
Dify 是一个用于开发大语言模型(LLM)应用的开源平台。它将 AI 智能体工作流、检索增强生成(RAG)管线、智能体能力、模型管理和可观测性功能整合到一个统一的开发环境中。该平台通过可视化界面和编程式 API 同时支持快速原型设计和生产部署。
主要特性:
- 多租户:基于工作空间的隔离,并支持基于角色的访问控制(RBAC)。
- 模型无关:通过统一接口支持来自数十家提供商的 100 多种大语言模型(LLM)
api/pyproject.toml:62-100。 - 可扩展:支持插件系统和自定义工具
docker/docker-compose-template.yaml:131-150。 - 生产就绪:内置可观测性(Opik、Langfuse、Arize Phoenix)和配额管理
api/pyproject.toml:93-100。
来源: README.md:63-114, api/pyproject.toml:1-10
版本类型
Dify 提供多种版本以满足不同的运维需求:
| 版本 | 描述 | 部署方式 |
|---|---|---|
| Dify Cloud | 托管式 SaaS 产品,基础设施由平台管理 | https://cloud.dify.ai |
| 自托管版(社区版) | 面向本地或私有云部署的开源版本 | Docker Compose、K8s |
| 企业版 | 包含单点登录(SSO)和自定义品牌等高级功能 | 自托管或托管 |
来源: README.md:4-8, api/Dockerfile:33-34
高层级服务架构
下图展示了服务拓扑结构,以及逻辑服务与代码实体/Docker 镜像之间的映射关系。
架构说明:
- 单一镜像,多种角色:
langgenius/dify-api镜像用于api、worker和worker_beat服务,通过MODE环境变量进行区分api/Dockerfile:1-123。 - 内部通信:API 服务通过内部 Docker 网络与
plugin_daemon通信,使用PLUGIN_DIFY_INNER_API_KEYdocker/docker-compose.middleware.yaml:150-150。 - 沙箱隔离:
sandbox服务执行代码,并通过ssrf_proxy实现受限的网络访问docker/docker-compose.middleware.yaml:118-119。
来源: docker/docker-compose.yaml:1-150, docker/docker-compose-template.yaml:1-150, docker/docker-compose.middleware.yaml:1-130
核心服务组件
API 服务(api)
基于 Flask 构建的主应用服务器,为管理控制台和终端用户应用提供 RESTful 端点。
- 入口点:在 Dockerfile 中通过
FLASK_APP=app.py定义api/Dockerfile:33-33。 - 配置:使用
BaseSettings实现模块化配置,包括安全和执行相关配置api/configs/feature/__init__.py:20-101。 - 进程管理器:默认使用 Gunicorn 配合
gevent工作进程docker/.env.example:55-56。
工作进程服务(worker)
一个 Celery 工作进程,用于处理来自 Redis 队列的异步任务。
- 任务类型:数据集索引、文档处理和工作流执行
docker/docker-compose-template.yaml:70-71。 - 扩缩容:通过
CELERY_WORKER_AMOUNT和CELERY_AUTO_SCALE控制docker/.env.example:63-64。
Web 服务(web)
一个 Next.js 前端应用,提供用于构建 AI 应用的可视化界面。
- 框架:Next.js 配合 React 支持
web/package.json:119-126。 - 状态管理:使用
zustand、jotai和@tanstack/react-queryweb/package.json:153-154,web/package.json:105-105,web/package.json:78-78。 - 构建系统:多阶段 Docker 构建
web/package.json:27-28。
沙箱服务(sandbox)
一个安全环境,用于在工作流中执行不受信任的代码(Python/Node.js)。
- 实现:基于 Go 的服务,使用
langgenius/dify-sandbox镜像docker/docker-compose.middleware.yaml:106-106。 - 安全性:通过
API_KEY和ENABLE_NETWORK开关进行控制docker/docker-compose.middleware.yaml:114-117。
来源: docker/docker-compose-template.yaml:23-160, web/package.json:1-160, api/configs/feature/__init__.py:103-192
数据层组件
主数据库
Dify 主要使用 PostgreSQL 15 存储结构化数据 docker/docker-compose.middleware.yaml:3-4。MySQL 8.0 作为备选方案也受支持 docker/docker-compose.middleware.yaml:43-44。
缓存和消息队列
Redis 6 作为 Celery 的中央消息代理和高性能缓存 docker/docker-compose.middleware.yaml:83-84。
向量数据库
Dify 通过工厂模式抽象向量存储,支持 23 种以上的实现 api/pyproject.toml:62-91。
- 关键类:
VectorFactoryapi/core/rag/datasource/vdb/vector_factory.py:12-12 - 默认值:Weaviate
api/.env.example:205-205。 - 支持的数据库:Milvus、Qdrant、PGVector、Chroma、Elasticsearch 等
api/pyproject.toml:62-91。
存储后端
文件(文档、图片、应用导出)通过 Apache OpenDAL 或原生云提供商处理。
- 默认值:使用
fs方案的opendalapi/.env.example:111-115。 - 选项:S3、Azure Blob、阿里云 OSS、Google Storage 等
api/.env.example:117-195。
来源: api/pyproject.toml:185-215, api/.env.example:87-215
配置系统
Dify 使用由环境变量和 Pydantic 模型驱动的分层配置系统。
| 配置类 | 职责 | 文件路径 |
|---|---|---|
SecurityConfig | 认证令牌、密钥、速率限制 | api/configs/feature/__init__.py:20-76 |
AppExecutionConfig | 执行超时、活跃请求数 | api/configs/feature/__init__.py:78-101 |
CodeExecutionSandboxConfig | 沙箱端点和限制 | api/configs/feature/__init__.py:103-192 |
HostedServiceConfig | 托管服务配置 | api/configs/feature/hosted_service.py:1-20 |
来源: api/configs/feature/__init__.py:1-250, docker/.env.example:1-200
部署选项
Docker Compose(推荐)
自托管的主要方式。
cd docker
cp .env.example .env
docker compose up -d
来源: README.md:74-81, docker/docker-compose.yaml:1-50
本地开发
- 后端:使用
uv管理 Python 依赖api/pyproject.toml:101-103。 - 前端:使用
pnpmweb/package.json:38-38。 - 包管理:通过
uv.lock和package.json管理api/uv.lock:1-50,web/package.json:1-10。
来源: api/pyproject.toml:1-175, web/package.json:1-55
系统要求
| 组件 | 最低规格 |
|---|---|
| CPU | >= 2 核 |
| 内存 | >= 4 GiB |
| 操作系统 | Linux / macOS / Windows(通过 Docker) |
| Python | 3.12 |
| Node.js | 22 |
来源: README.md:67-70, api/pyproject.toml:4, api/Dockerfile:55-56