Dify 入门介绍

1. Dify 是什么?

Dify 是一个 开源 LLM 应用开发平台(Low-code/No-code),目标是让开发者和团队更快地构建和运营基于大语言模型(LLM)的应用。
它的名字来自 “Do It For You”

特点:

  • 🛠️ 低代码/可视化:支持在 Web 界面拖拽配置工作流。

  • 🧩 即插即用:支持各种大模型(OpenAI、Claude、DeepSeek、Llama、Ollama 等)。

  • 🖥️ 开发者友好:支持 Python/JS SDK,API 接口调用。

  • 📊 监控 & 调优:提供日志、评测、向量库管理、数据观测等功能。


2. Dify 可以做什么?

  • AI 助手:客服机器人、个人助理。

  • 知识库问答:上传 PDF、文档,接入企业知识库。

  • 多模型编排:结合不同大模型完成复杂任务。

  • Agent 工作流:让 AI 具备工具调用、Web 搜索、数据库查询能力。

  • RAG 应用:Retrieval-Augmented Generation,结合向量库问答。


3. Dify 的核心功能

Dify 核心组件概览

Dify 的架构主要由 Web Frontend、API Backend、Worker 以及多个核心子系统构成,这些组件通过数据库、缓存和消息队列进行连接与协作。

image

 1. Web Frontend

  • 作用: 提供用户与 Dify 平台交互的图形化界面。开发者在这里创建、管理、调试和部署他们的 AI 应用(如聊天机器人、自动化工作流等)。所有操作,包括编排 Workflow、上传文件构建知识库、查看对话历史等,都通过它完成。

  • 技术: 通常基于现代框架如 Next.js 和 React 构建。

2. API Backend

  • 作用: 这是 Dify 的核心大脑和交通枢纽。它承担了以下关键职责:

    • 请求处理: 接收来自 Web Frontend 或第三方集成的所有 RESTful API 请求。

    • 业务逻辑: 执行应用程序的核心逻辑,例如管理对话、协调工作流执行、处理检索增强生成(RAG)请求等。

    • 系统协调: 它本身不处理所有任务,而是作为协调者,调用其他子系统(如 Model Provider System, RAG System)并与其他基础设施(数据库、缓存)交互来完成请求。

    • 身份验证与授权: 验证用户身份和权限。

  • 技术: 通常使用 Python 框架(如 Flask 或 Django)构建。

3. Celery Worker

  • 作用: 专门处理异步和耗时任务的后台进程。它的存在是为了避免长时间运行的任务阻塞 API Backend 的即时响应。

    • 典型任务: 为上传的文档构建索引。这个过程涉及读取文件、文本分块、生成向量嵌入(Embeddings)并写入向量数据库,非常消耗资源和时间,必须异步处理。

  • 关系: 通过消息队列(如 Redis)从 API Backend 接收任务。处理完成后,会更新数据库中的任务状态。

4. 核心子系统 (Core Subsystems)

这些子系统是 API Backend 内部的逻辑模块,是实现不同功能的核心。

  • Conversation System

    • 作用: 管理用户与 AI 应用之间的所有对话交互。负责创建对话会话(Session)、保存和检索对话历史消息、维护对话的上下文状态。这是实现连贯多轮对话的基础。

  • Workflow System

    • 作用: 提供一个可视化工具(基于 ReactFlow 等库),允许用户通过拖放节点(Node)的方式,编排复杂、多步骤的 AI 任务流水线。节点类型包括 LLM 调用、工具调用、条件判断、知识检索等。

    • 关系: 在执行时,它会调用 Model Provider System 来获取 LLM 响应,也可以调用 RAG Knowledge System 来检索信息,或执行代码、调用外部 API 工具。

  • RAG Knowledge System (或 Dataset System)

    • 作用: 实现检索增强生成(RAG)全流程的系统。

      • 处理知识库: 管理数据集的创建、文档上传、解析、分块。

      • 生成与存储索引: 协调文本的向量化过程,并将向量嵌入(Embeddings)存储到向量数据库(VectorDB)中。

      • 检索: 在查询时,根据用户问题从向量数据库中快速检索出最相关的文本片段,作为上下文提供给 LLM。

    • 关系: 严重依赖 VectorDB 和 Celery Worker(用于异步索引文档)。

  • Model Provider System

    • 作用: 作为 LLM 的抽象层和统一网关。它集成了众多模型提供商(如 OpenAI, Anthropic, Azure OpenAI, 本地部署模型等),并对上层应用提供一致的调用接口。开发者在这里配置和管理不同模型的 API 密钥和参数。

    • 关系: 被 API Backend(处理直接聊天请求时)和 Workflow System(执行 LLM 节点时)调用,是平台与外部 AI 模型连接的桥梁。

5. 数据存储与基础设施 (Data Storage & Infrastructure)

  • PostgreSQL:

    • 作用: 主数据库。存储所有结构化数据,包括但不限于:

      • 用户账户和权限设置

      • AI 应用的配置信息

      • 对话记录(Conversation history)

      • Workflow 的编排定义

      • 数据集(Dataset)元数据信息

  • VectorDB (e.g., Qdrant, Weaviate, Milvus):

    • 作用: 向量数据库。专门用于存储和高效查询由文本生成的向量嵌入(Embeddings)。是 RAG 知识系统的核心存储,通过相似性搜索实现语义检索。

  • Redis:

    • 作用: 多功能用途。

      • 缓存(Cache): 缓存频繁访问的数据(如会话状态、应用配置),减轻数据库压力,提升响应速度。

      • 消息代理(Message Broker): 作为 Celery 的任务队列,在 API Backend 和 Worker 之间传递异步任务消息。

  • File Storage (e.g., S3, MinIO, Local Storage):

    • 作用: 存储用户上传的原始文件(如 PDF、Word 文档、图片等)。

组件间如何协作

Dify 的各个组件并非孤立工作,而是紧密协作的:

  1. 用户通过 Web 前端 发起请求,例如创建一个新的聊天应用或启动一个工作流

  2. 请求到达 API 后端 (Flask),后端根据请求类型协调相应的核心子系统

  3. 子系统处理:

    • 如果是聊天请求,会话系统 会管理对话状态,并可能调用 模型供应系统 来获取LLM的响应,必要时通过 RAG 知识系统 从知识库检索信息增强上下文

    • 如果是工作流执行,工作流系统 会解析流程定义,按顺序执行各个节点。节点可能调用 模型供应系统 中的LLM、通过 工具集成 访问外部服务,或使用 RAG 知识系统 进行检索

  4. 数据存储与访问:在整个过程中,PostgreSQL 用于存储结构化数据(如用户信息、应用配置),向量数据库 为 RAG 提供支撑,Redis 用于缓存和任务队列,文件存储 系统保存用户上传的文档

  5. 异步任务处理:对于耗时操作(如文档索引),API 后端会将任务发送到 消息队列 (Redis),由 Celery 工作节点 在后台异步处理

  6. 最终响应 通过 API 后端返回给 Web 前端,呈现给用户。

 


4. 快速上手(本地部署)

最简单的方式是 Docker 一键部署

 
git clone https://github.com/langgenius/dify.git
cd dify/docker docker compose up -d

执行如下:

duanxz@xzdeMacBook-Pro dify % cd docker/
duanxz@xzdeMacBook-Pro docker % ls
certbot				docker-compose.middleware.yaml	elasticsearch			nginx				ssrf_proxy			volumes
couchbase-server		docker-compose.png		generate_docker_compose		pgvector			startupscripts
docker-compose-template.yaml	docker-compose.yaml		middleware.env.example		README.md			tidb
duanxz@xzdeMacBook-Pro docker % docker-compose up -d
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string. 
WARN[0000] The "CERTBOT_EMAIL" variable is not set. Defaulting to a blank string. 
WARN[0000] The "CERTBOT_DOMAIN" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string. 
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string. 
[+] Running 21/37
 ⠙ nginx [⣿⣄⣿⣀⣿⣿⣿] 25.17MB / 68.85MB Pulling                                                                                                                                                                        69.1s 
   ✔ 8f42b11f40a7 Download complete                                                                                                                                                                                  1.4s 
   ⠋ 0878ecc8b0af Downloading     [========================>                          ]  13.63MB/28.1MB                                                                                                             56.0s 
   ✔ 605513a168b0 Download complete                                                                                                                                                                                  3.1s 
   ⠋ d482c1064d09 Downloading     [==============>                                    ]  11.53MB/40.74MB                                                                                                            56.0s 
   ✔ fdf316665463 Download complete                                                                                                                                                                                  3.6s 
   ✔ 75e874aacbee Download complete                                                                                                                                                                                  4.9s 
   ✔ 68e4d7b9f947 Download complete                                                                                                                                                                                  4.9s 
 ⠙ redis [⣿⣿⣿⣿⣀⣿⣿⣿] 7.193MB / 12.75MB Pulling                                                                                                                                                                       69.1s 
   ✔ d06c6b665c9b Pull complete                                                                                                                                                                                     46.6s 
   ✔ 5c916e6d1d54 Download complete                                                                                                                                                                                  3.1s 
   ✔ 92b33cc1d06d Pull complete                                                                                                                                                                                     25.7s 
   ✔ 1f864ff0defe Pull complete                                                                                                                                                                                      5.2s 
   ⠋ d7f63d175808 Downloading     [=============>                                     ]  2.097MB/7.657MB                                                                                                            56.0s 
   ✔ c843e90a254e Pull complete                                                                                                                                                                                      5.5s 
   ✔ 6a678acbd673 Download complete                                                                                                                                                                                  3.6s 
   ✔ 4f4fb700ef54 Download complete                                                                                                                                                                                  3.6s 
 ⠙ worker Pulling                                                                                                                                                                                                   69.1s 
 ⠙ ssrf_proxy Pulling                                                                                                                                                                                               69.1s 
 ⠙ db [⣿⣿⠀⠀⣿⣿⣿⣿⣿⣿⣿] Pulling                                                                                                                                                                                         69.1s 
   ✔ 68f7812c4728 Download complete                                                                                                                                                                                  1.5s 
   ✔ 1fac8997d1df Download complete                                                                                                                                                                                  3.1s 
   ⠋ 0af53d363b67 Downloading     [===>                                               ]  6.291MB/99.59MB                                                                                                            56.0s 
   ⠋ 6e174226ea69 Pulling fs layer                                                                                                                                                                                  56.0s 
   ✔ 690be4e8a005 Download complete                                                                                                                                                                                  5.6s 
   ✔ 3a5c482840cf Download complete                                                                                                                                                                                  3.2s 
   ✔ 6bb18cae851f Download complete                                                                                                                                                                                  3.2s 
   ✔ 2e157a09d862 Download complete                                                                                                                                                                                 15.1s 
   ✔ 43106089ad38 Download complete                                                                                                                                                                                  2.9s 
   ✔ beeac069caed Download complete                                                                                                                                                                                  3.7s 
   ✔ 2afe90f8c9c6 Download complete                                                                                                                                                                                  3.2s 
 ⠙ weaviate Pulling                                                                                                                                                                                                 69.1s 
 ⠙ api Pulling                                                                                                                                                                                                      69.1s 
 ⠙ sandbox Pulling                                                                                                                                                                                                  69.1s 
 ⠙ worker_beat Pulling                                                                                                                                                                                              69.1s 
 ⠙ plugin_daemon Pulling                                                                                                                                                                                            69.1s 
 ⠙ web Pulling                                                                                                                                                                                                      69.1s 
failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/e8/e83565ade6adc210419a61894b68a5e25c61d50cf905494cbc94ed6414dcc168/data?expires=1757384638&signature=oWTi%2F4rqmqHhP9bKLMh3S4JOhWM%3D&version=2": context deadline exceeded
duanxz@xzdeMacBook-Pro docker % 

  上述的错误原因是:通常是由于 Docker 拉取镜像时网络连接超时或不稳定导致的,这里报错是因为 Docker 拉取镜像时用了 docker.mirrors.ustc.edu.cn 的镜像加速器,但是这个镜像站点已经停用了,域名解析不到了,所以会报 no such host

配置 Docker 镜像加速器

如果访问 Docker Hub 速度较慢,可以配置国内镜像加速器:
    • 打开 Docker Desktop
    • 进入 Preferences(偏好设置)> Docker Engine
    • 在配置中添加镜像源:
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ]

  发现还是不行,尝试换一个镜像源:

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com",
    "https://docker.m.daocloud.io"
  ]
}

 再执行docker compose up -d,如下:

[+] Running 13/13
 ✔ Network docker_default             Created                                                                                                                                                                        0.1s 
 ✔ Network docker_ssrf_proxy_network  Created                                                                                                                                                                        0.0s 
 ✔ Container docker-redis-1           Started                                                                                                                                                                        1.6s 
 ✔ Container docker-weaviate-1        Started                                                                                                                                                                        1.6s 
 ✔ Container docker-sandbox-1         Started                                                                                                                                                                        1.6s 
 ✔ Container docker-web-1             Started                                                                                                                                                                        1.6s 
 ✔ Container docker-ssrf_proxy-1      Started                                                                                                                                                                        1.6s 
 ✔ Container docker-db-1              Healthy                                                                                                                                                                        6.1s 
 ✔ Container docker-worker_beat-1     Started                                                                                                                                                                        6.1s 
 ✔ Container docker-api-1             Started                                                                                                                                                                        6.1s 
 ✔ Container docker-worker-1          Started                                                                                                                                                                        6.2s 
 ✔ Container docker-plugin_daemon-1   Started                                                                                                                                                                        5.8s 
 ✔ Container docker-nginx-1           Started                                                                                                                                                                        6.2s 

部署完成后,访问:http://localhost/

默认会进入 Dify 的 Web 管理界面。

image

例如我输入的:

  • 邮箱:admin@dify.ai
  • 帐号:admin
  • 密码:admin123

设置完成后,进入管理控制台

image

 安装免费大模型:

免费可用的 LLM 方案

1. Ollama(推荐,Mac 上特别方便)

官网: https://ollama.ai

安装(Homebrew 安装(Mac 命令行方式)

如果你习惯用 brew

brew install --cask ollama

安装好之后可以验证:

ollama --version

常见模型(免费):

llama3(Meta 出品,性能不错)

mistral(速度快,轻量)

 gemma(Google 出品的小模型)

安装完成后,可以直接在 Mac 终端运行一个模型,例如:

ollama run llama3

它会自动下载 llama3 模型(几百 MB 到几 GB 不等,看具体模型)。

  • llama3 -> 4.7G
  • 最小最快tinyllama(0.5G)

  • 兼顾效果gemma:2bphi3:mini(1–2G 左右)

  • 效果更好mistral(4G+,比 llama3 小一些)

在 Dify 里可以配置 Ollama 作为 LLM 提供者,这样就能直接跑免费模型。

2. OpenAI 的免费额度

注册 OpenAI 新账号有时会送少量免费额度(但需要支持的地区手机号),不稳定。

3. 其他可用的免费开源模型

Hugging Face Inference API:部分小模型可以免费调用(有速率限制)。

LM Studio:桌面应用,可以下载并本地运行开源模型,类似 Ollama。

Google Colab / Kaggle Notebook:可以临时跑一些大模型,但需要挂在线 GPU。

 

dify配置本地大模型

image

在为Ollama添加本地tinyllama模型之前,先在命令行窗口启动tinyllama模型:

image

然后在回到dify的配置: 

image

 

image

 

image

 通过ip远程配置ollama

我的测试是讲ollama安装在台式机window10上,其下载的模型是gpt-oss:20b,在ollama的Settings中设置可以暴露在网络上。

在mac电脑访问ip:11434/api/tags后,返回如下:

8d2b70f3c77b97fd3e5fdeef182aa5f7

在dify中集成,配置如下:

d44f0e4513c97c84edba1ed44e25578c

 配置成功后,如下:

b368d2e6ee4610dfe7bdf9f89cb4b738

  


5. 典型使用流程

  1. 创建应用

    • 在 Web 界面点“新建应用” → 选择模板(如知识库助手)。

  2. 配置模型

    • 绑定 OpenAI Key、Claude、DeepSeek 等模型。

  3. 上传数据

    • 上传文档作为知识库,选择切分和存储方式。

  4. 测试调试

    • 在 Dify 内置 Playground 里直接对话测试。

  5. 对外发布

    • 生成 API Key,应用就可以被你的 Web/APP/机器人调用。


6. 进阶玩法

Dify 平台设有四种不同层级的 AI 应用搭建模式,能够满足从入门到高阶的开发需求:

  • 对话助手(Chatbot) 作为入门级解决方案,能帮助开发者快速搭建智能对话系统。借助可视化界面来配置对话逻辑和知识库,无需编写代码就能创建出具备基础问答能力的 AI 助手,是探索大语言模型应用的绝佳起点。
  • 智能代理(Agent) 属于进阶型应用框架,它能赋予 AI 自主决策与执行的能力。系统可以根据用户的意图进行动态推理,并智能调用 API 工具链来完成复杂操作,例如实时数据查询、事务处理等,从而实现从“回答问题”到“解决问题”的转变。
  • 对话流程(Chatflow) 是支持上下文记忆的多轮交互系统。它通过状态机机制对对话进程进行管理,能够处理包含分支逻辑的深度会话场景,适用于客户服务、教育辅导等需要持续跟踪对话上下文的专业场景。
  • 自动化工作流(Workflow) 是面向单次任务的高效处理引擎。它采用节点式编排设计,支持将大语言模型能力与传统系统服务无缝结合,可快速搭建数据提取、内容生成等批处理任务,有效提升业务自动化水平。

7. 学习资料


⚡总结一句话:
Dify = 一站式 AI 应用开发平台,既能让小白通过拖拽快速做应用,也能让开发者通过 API 深度集成到业务系统里。

 

posted on 2025-08-29 15:54  duanxz  阅读(299)  评论(1)    收藏  举报