Dify 第1课:定位、架构与本地部署


1. Dify 是什么

一句话:Dify 是一个开源的 LLM 应用开发平台,让你用可视化方式编排 AI 工作流、搭建 RAG 知识库、管理 Agent。

它在整个 LLM 应用生态中的位置:

复制代码
底层模型层(OpenAI / Claude / 本地模型)
        ↑
    Dify 平台层(工作流 / RAG / Agent / Prompt 管理 / 模型网关)
        ↑
    应用层(ChatBot / 知识库问答 / 自动化 / API 接口)

面试考点 ------ 选型对比:

维度 Dify LangChain Coze FastGPT
开源 ✅ 开源可私有部署 ✅ 开源框架 ❌ 商业平台 ✅ 开源
可视化工作流 ✅ 拖拽式 ❌ 代码编排 ✅ 简易版
上手门槛 (可视化) (需代码)
自定义深度
企业级部署 ✅ Docker/K8s 需自建 不可 需自建
面试加分点 架构理解+实战 代码能力强 成品快 中文优化好

面试话术:

"Dify 和 LangChain 不冲突。LangChain 是开发框架,适合需要细粒度控制的高级场景;Dify 是应用平台,定位是让产品和运营团队也能参与 LLM 应用搭建,适合快速验证和交付的场景。实际工作中我倾向于结合使用------Dify 管流程和发布,LangChain 管复杂逻辑的定制。"


2. Dify 整体架构

复制代码
┌─────────────────────────────────────────┐
│           用户层 (Web / API)              │
├─────────────────────────────────────────┤
│  应用层:对话应用 / 文本生成 / 工作流       │
├──────────┬──────────────┬───────────────┤
│ 工作流引擎│  RAG Pipeline │   Agent 引擎  │
│ (DAG节点) │ (知识库+检索)  │ (工具+推理)   │
├──────────┴──────────────┴───────────────┤
│         模型网关 (多模型路由/降级)         │
├─────────────────────────────────────────┤
│       数据层 (PostgreSQL + Redis + 向量库) │
└─────────────────────────────────────────┘

核心模块:

  • 工作流引擎:DAG 式执行,节点间变量传递
  • RAG Pipeline:文档加载 → 分段 → Embedding → 检索 → 重排序
  • Agent 引擎:ReAct / Function Calling 两种模式
  • 模型网关:统一接口接入多模型,支持 failover 降级
  • API 层:应用发布为 RESTful API,供外部调用

3. 动手:本地部署 Dify

这一部分边走边做。

环境要求:

  • Docker & Docker Compose(需先装)
  • 最低 2C4G 的机器
  • 可选:Ollama 本地模型、或配置云 API Key

部署方式(二选一):

方式一:Docker Compose(推荐)

bash 复制代码
# 拉取官方仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 复制环境配置
cp .env.example .env

# 启动全部服务
docker compose up -d

访问 http://localhost:3000,注册管理员账号即可。

方式二:源代码部署(用于面试源码分析)

bash 复制代码
# API 后端
cd api
pip install -r requirements.txt
flask run

# Web 前端
cd web
npm install
npm run dev

4. 部署架构解读(面试重点)

Dify 的 Docker Compose 包含这些服务:

服务 用途 面试价值
api Flask 后端 API 服务,处理请求入口 架构入口
worker Celery 工作进程,执行异步工作流任务 任务调度
web Next.js 前端 用户交互
db PostgreSQL,存应用/知识库/用户数据 持久化
redis 消息队列 + 缓存,Worker 任务分发 异步队列
向量数据库 Weaviate/Qdrant,存 Embedding 向量 检索基础
nginx 反向代理 网关层

面试考点: 哪些组件可以水平扩展?

Worker 和 API 可以水平扩展。Worker 通过 Redis 队列消费任务,加机器即可提升吞吐量。但 PostgreSQL 和向量数据库会成为瓶颈,需要进一步做读写分离和分片。


5. 课后任务

  1. 装 Docker(如果还没装的话)
  2. 用 Docker Compose 跑起 Dify 本地实例
  3. 注册进去,把界面每个菜单点一遍,感受功能布局
  4. 思考:Dify 为什么要用 Celery Worker 做异步任务,而不是直接在 API 进程里处理?

下节课预告:第2课:工作流编排实战 --- 手搓 3 个真实场景工作流,面试时拿来当项目讲。