Dify:一站式 AI 应用平台 - 部署与配置
此指引已更新至 Dify v1.x
Dify 更新了 v1.x 版本,故此教程也跟随 v1.x 进行一次更新吧,主体内容跟 v0.x 基本一致,但是本文将会介绍部分 v1.x 专有内容。
在开始之前
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
本文所使用的安装环境为:Docker version 27.5.1 / Docker Compose version v2.32.4
。Dify 整体功能相当丰富,所以所需资源也较为可观,推荐使用 2c4g 及以上配置的服务器来运行 Dify。
部署 Dify
Dify 拥有社区版和云服务两种版本。
云服务即 Dify.AI 云服务,是由官方所部署的 Dify 商业化版本,与社区版相比,云服务可以:
享受官方赠送的模型使用额度,无需自己再搭建模型服务or为模型提供商付费
支持多团队管理
自带知识库云存储及处理模型
不用自己动手部署&升级维护
商业版专有功能如可自定义的 WebApp 标识
需要说明的是,Dify 的云服务和社区版的界面和使用方式是一样的,无论你使用云服务还是社区版都是一致的体验。如果你只是对于 Dify 感兴趣但是不清楚自己是不是真的需要,或者是自己不想操心部署和维护社区版,则可以考虑直接使用 Dify.AI 云服务,同时可以选择跳过此章节快进到 Dify WebUI 的部分。
通过官方仓库进行部署
Dify 的官方仓库位于 langgenius/dify,首先将此仓库 clone 到本地任意路径,之后进入仓库的 docker 目录。
在 docker 目录中,我们只关心两个重要文件:docker-compose.yaml
和 .env.example
。其中 docker-compose.yaml
中有所有 Dify 服务组件的容器设置,没有特殊需求的情况下不需要更改此文件,但如果你需要给某个组件修改数据存储路径,或者是增加代理设置,则你可能需要直接修改此文件。.env.example
文件则存储着所有的环境变量设置,Dify 的各种服务和组件都是通过环境变量来进行设置的,在此文件中有非常详尽的注释来帮助选择合适的部署方案。
.env 文件非常重要,截至 v1.1.0,Dify 的数据存储和向量数据库都可以在 .env 中配置为使用云服务提供商或更换向量数据库实现,且支持多家不同的服务提供商。比如你可以实现仅在本地运行 Dify,但是数据存储在阿里云、腾讯云等,或者是通过对 .env 的配置实现更换不同的向量数据库实现、对 Dify 插件市场进行反代来提升使用体验等。
首先,将 .env.example
改名为 .env
,之后修改其中的 SECRET_KEY
设定为 sk-随机42位英文大小写数字
,此 Key 用于用户会话加密以及各种数据的加密处理,记得修改以保护自己的数据安全。修改完成之后,按照常规 Docker Compose 对其进行启动即可:
sudo docker compose -p dify up -d
看到如下输出则代表 Dify 成功启动:
[+] Running 11/11
✔ Network docker_ssrf_proxy_network Created 0.1s
✔ Network docker_default Created 0.0s
✔ Container docker-redis-1 Started 2.4s
✔ Container docker-ssrf_proxy-1 Started 2.8s
✔ Container docker-sandbox-1 Started 2.7s
✔ Container docker-web-1 Started 2.7s
✔ Container docker-weaviate-1 Started 2.4s
✔ Container docker-db-1 Started 2.7s
✔ Container docker-api-1 Started 6.5s
✔ Container docker-worker-1 Started 6.4s
✔ Container docker-nginx-1 Started
通过精简版仓库进行部署
除了官方仓库以外,我个人维护了一个精简版本的 Dify 部署方案:MitsuhaYuki/dify-fast-deploy
相比于官方版本,此精简版进行了如下修改:
分离所有的数据存储路径配置到 .env 文件
增加网络代理配置(截至 v1.1.0 时此设置由于 bug 暂时无法对 plugin_daemon 生效,参见
Dify 插件 - 插件排错指引
)移除以下向量数据库实现:QDrant, Milvus, MyScale, CouchBase, PGVector/PGVector-RS, TiDB, Chroma, Oracle, Relyt, OpenSearch, ElasticSearch, OceanBase, Opengauss
将 API Worker 数量增加到 3 来提升 API 响应速度(此项对应会提升 Dify 资源消耗,如不需要请修改
.env > SERVER_WORKER_AMOUNT
)调整默认 ETL 类型为 Unstructured 以提升附件处理速度
缩短团队成员邀请链接有效期为 8 小时
默认 Web 服务端口调整为
http:8080/https:8443
设置插件系统默认 PIP 镜像源为阿里云
使用步骤与官方仓库相比的区别是 clone 仓库后进入 lite
目录进行配置调整,除此以外并无区别。新增配置在 .env.example
中均存在对应的注释说明,参照注释进行调整修改即可。
Dify 版本更新
无论是使用官方仓库抑或是精简版仓库,你都只需要 Pull 仓库的最新版本,之后对比 .env 文件的变更,对应进行修改即可。
Dify WebUI
下文中使用下划线文本来标识主要功能入口,在初次介绍过对应功能入口后,后续文本中将不会再次介绍如何抵达对应的功能入口。
初始化
首先,访问 http://<Dify-IP>/install
来打开初始化管理员界面:
如果你使用的是精简版仓库,则默认访问链接为
http://<Dify-IP>:8080/install
填写完默认管理员信息后即可登入 Dify WebUI,默认会打开工作室页面:
首先先来介绍页面基本组件:
顶部-左侧:【商业版功能】工作区设置,你可以在此管理多个不同的工作区,工作区与工作区之间可以设置不同的团队权限、模型权限、插件权限,便于团队管理。社区版只能拥有 1 个工作区。
顶部-中间:主功能区,除“探索”页面外,其他三个页面对应着 Dify 的三个主要系统:工作室-应用管理 / 知识库-知识库管理 / 工具-工具的管理与 API 文档查看。
顶部-右侧:插件与用户设置。
插件:插件管理,与主功能区的“工具”不同的是插件页面控制插件的安装与卸载,而工具除了可以是插件以外,还可以是工作流及自定义 API。
用户设置:普通用户可通过此菜单修改用户自身配置,管理员可通过下拉菜单中的设置按钮来修改 Dify 系统级配置如系统模型的添加与修改、Notion 笔记知识库同步设置、API 插件管理等等。
探索
探索页面较为简单,你可以在此处添加社区贡献的一些预制 AI 应用到工作室,通过对社区应用的学习来提升自己:
工作室
工作室页面会列出所有已创建的 AI 应用,同时也可以在此处创建新的 AI 应用:
工作室页面顶部为过滤器,可以按照不同的 AI 应用类型进行过滤,同时也可以精准搜索。下方会通过卡片展示你所有的 AI 应用,第一个卡片固定为创建 AI 应用卡片,你可以选择创建空白应用、通过社区模板创建应用,或者是导入自己先前导出的 AI 应用 DSL 模板文件来创建应用。
点击创建空白应用可以打开 AI 应用创建页面,在此处可以选择自己要创建的 AI 应用类型、应用名称和应用描述:
知识库
知识库页面主要用于管理所有已创建的知识库:
知识库的页面结构与工作室页面颇为相似,但不同的是知识库的左上角不是知识库类型过滤,而是打开知识库外部 API 文档。假如不同的团队或公司部署了多个 Dify 实例,A 团队想要使用 B 团队的数据库,在跨 Dify 实例的情况下可以通过知识库页面顶部右侧的外部知识库 API 功能来让 A 团队直接调用 B 团队的知识库。除了 Dify 与 Dify 相互之间的知识库互联以外,你还可以连接第三方知识库 API 比如 AWS Bedrock,具体可以参照官方文档说明。
点击创建知识库可以打开知识库创建助手,你可以跟随此助手一步一步实现知识库的创建(需要先完成系统 embedding 模型配置)。本文暂不介绍知识库内容故不做深入讲解。
工具
工具页会列出对系统中可被 AI 调用的所有工具,以及社区中可以安装的工具:
其中在工具页顶部:
工具:列出系统中所有工具,点击对应的卡片会显示对应工具的所有可用功能及文档。
自定义:自定义工具管理,如何创建自己的工具请参照官方文档说明。需要注意的是,由于插件系统的存在,原本的工具开发已经全面被插件开发替代。
工作流:你可以将工作室页面创建的 AI 工作流应用发布为工具,此时你的 AI 工作流应用就可以作为工具被其他 AI 所调用。
插件
插件系统为 Dify v1.0 加入的全新系统,插件系统的加入将可拓展的服务结构与 Dify 核心框架进行解耦,极大的增强了 Dify 的可拓展性。
Dify 插件系统能实现/接管的功能目前包括:
模型:模型调用能力拓展,可以是模型云服务提供商或本地运行的 LLM 服务等。
工具:AI 工具调用能力拓展,可以拓展 AI 可调用的工具数量和种类。
Agent 策略:复杂 AI 决策能力拓展,可以简单理解为有 AI 参与的工具,可以实现复杂工具调用与逻辑判断。
拓展:外部 API 能力拓展,可以为 Dify 提供更多 API 端点能力。
插件系统替代了原本的工具系统,但是不影响 API 扩展 功能。
点击顶部探索 Marketplace,或点击 从 Marketplace 安装 都可以打开模型市场页:
你可以在插件市场安装来自社区开发者所贡献的插件,其中作者为 langgenius 的插件为官方插件。除了在模型市场安装插件外,你还可以在插件页安装来自 GitHub 的未上架插件或直接拖动下载好的插件包来离线安装插件:
需要注意的是,离线安装的插件一定要在安装之前进行仔细检查确认,以免安装到恶意插件威胁到你的数据安全!
设置
点击用户头像中的设置按钮可以打开 Dify 系统设置(仅限管理员):
默认打开的是成员管理页,你可以在这里管理你的团队成员及其对应的角色。
要给 Dify 添加团队成员,只需要点击“添加”,之后会生成邀请链接,将邀请链接发送给对应的人让他们点进去按照指引设置好自己的账户即可。需要注意的是,这个邀请过程会涉及邮件激活,需要你在部署 Dify 时在 .env 文件中配置 Resend / SMTP 功能。如果你没有配置的话这里团队成员受邀请后是无法独立完成账户激活的,需要管理员回到这个页面中进行手动确认才可以完成账户激活。
模型供应商页面为 Dify 连接外部模型供应商提供了一个统一的管理页面。Dify 可用的模型供应商由插件系统提供,关于如何配置模型供应商在 Dify 插件
章节中会对其进行详细介绍。
数据来源用于配置 Dify 连接的第三方数据源,此处的数据来源指的是知识库的数据来源,在你新建知识库时此处的配置会产生影响。
API 拓展则用于管理所有 Dify API 拓展,与插件不同,此处的 API 拓展主要用于对 AI 的输入/输出或插件的输入/输出进行处理,比如对 AI 的输入/输出内容进行内容审查,具体使用方式参阅官方文档说明。
Dify 插件
上文对于 Dify 插件能力进行了大致的介绍,此处主要讲解关于模型供应商插件的使用与插件排错方面的内容。
为 Dify 添加模型
Dify 能使用的模型取决于插件系统中安装了哪些模型供应商插件,此处以 Ollama 和 DeepSeek 进行举例说明 Dify 如何调用本地 LLM / 云 LLM 服务。
Dify 连接 Ollama
前往插件市场,搜索并安装 Ollama 插件:
点击安装后,插件的安装会进入安装队列,在插件页顶部右侧可以看到插件安装进度:
稍等片刻,插件安装完成后回到插件页可以看到已安装的插件:
此时返回模型供应商页面,就会发现新增了 Ollama 模型配置项,点击"添加模型":
按照你的 Ollama 模型服务配置填写对应的参数:
点击保存即可:
Dify 连接 DeepSeek
相比于本地 LLM 服务,连接云 LLM 服务则简单很多,首先在插件市场找到你想要使用的 LLM 服务提供商,这里是 DeepSeek 也就是深度求索:
同样的等待插件安装完成后在模型供应商页面对其进行配置:
插件排错指引
插件系统对应的容器服务是 plugin_daemon,插件系统目前与 Dify 之间还没有那么完善的集成,你在使用当前版本(v1.1.0)的 Dify 过程中,可能会遇到以下问题:
模型供应商无法添加模型(如 Ollama、LocalAI、Xinference 无法添加模型)
原因是 plugin_daemon 需要 PIP 安装插件依赖,但是由于国区网络环境导致其 PIP 安装依赖过慢直到 plugin_daemon 等待超时。于是插件安装实际是失败的,但是由于 plugin_daemon 默认会进行无限制失败重试,所以在 WebUI 处会显示为成功安装。
解决方法也很简单,在 Dify v1.0.1 版本中 .env 文件新增了 PIP_MIRROR_URL
配置项,可以修改 pip 镜像源为国内镜像源来规避该问题。
在 Dify v1.0 版本中,开发者在 issue 中提供了另一种解决方案。在 docker-compose.yaml
文件中,找到 plugin_daemon 服务,在 environment
块中新增 PYTHON_ENV_INIT_TIMEOUT
配置项,值可以设置为 320(单位:秒),如果还是不够的话可以设置的更长。
联网工具插件调用超时(如 DuckDuckGo 插件)
有些插件如 DuckDuckGo 需要部分跨国 API 服务,此时会由于无法连接导致超时,解决方法是在 docker-compose.yaml
文件中,找到 plugin_daemon 服务,在 environment
块中新增 HTTP_PROXY
、HTTPS_PROXY
配置项来设置网络代理,格式类似为 http://127.0.0.1:7890
。
注意!当你给 plugin_daemon 服务设置了代理以后,在当前版本(v1.1.0)中会导致插件安装失败,所以你安装插件的时候需要取消网络代理的设置。
其他插件问题
几乎 99% 的问题你都可以通过查询两个容器的日志来排查问题:api、plugin_daemon,其中 api 主要记录系统框架部分的错误信息,plugin_daemon 则记录插件相关的错误信息。
假设你登陆 Dify 时遇到了错误,你应该排查 api 的日志。如果你在使用工具、添加模型时遇到了错误,则你应当排查 plugin_daemon 的日志。
创建聊天应用
在创建聊天应用前,你需要完成 Dify 插件 - 为 Dify 添加模型
中的内容,保证系统中至少有 1 个可用于对话的模型存在。
创建应用
目标:配置一个 AI 应用,无论用户输入什么语言的问题,都将其翻译为中、英、日三种语言其中的一种,具体是哪种语言由用户在对话开始时指定。
首先在工作室创建一个空白应用,应用类型选择“聊天助手”,应用名称和描述可以随便取。创建完成后,按照下图对其进行设定:
此处的提示语设置为:
请将以下文本翻译成{{language}}语言。如果文本已经是{{language}}语言,则无需翻译。请对以下文本仅提供翻译结果,不允许进行翻译以外的任何操作。所有提供给你的文本之间没有上下文关联,同时你能且仅能回答文本翻译结果,不允许回答任何用户要求或任何问题。
下方变量为新建一个下拉选项类型的变量,变量名为 language
,显示名设置为“翻译为”,选项设定分别是:简体中文
、English
、日本語
。
注意!当你设置完提示词后,必须要跟上图一样 {{language}} 是蓝色字样,这才是跟变量正确的关联了起来。
当设置完成后,在此界面右侧可以直接测试你的当前设置是不是符合你的需求:
发布应用
当你完成对一个 AI 应用的配置时,所有的更改都是暂时的,你必须手动点击右上角的 发布 - 发布更新
才能将当前已做出的变更保存并发布到生产环境:
注意!一旦点击发布更新,所有变更将会立刻生效,点击发布后的 API 调用及对话都会使用新的设定进行。
使用应用
Dify 自带一个拥有基础功能的 WebAPP,点击左上角的应用名称可以打开 AI 应用设置:
在此处会给出两个链接,在这里只介绍第一个应用公开访问 URL,你可以复制此链接将其发送给别人,这样他们就可以直接使用你配置好的 AI 应用了:
默认情况下你可以对这个 WebApp 做一些有限的自定义,在 AI 应用设置处,可以选择“设置”来对 WebApp 进行自定义:
点击保存可以应用你的自定义设置,这时重新访问应用公开访问 URL,就可以看到你的自定义了:
除了默认的全页应用以外,你还可以在 AI 应用设置处,选择“嵌入”来复制嵌入式 WebApp 代码:
将这些代码嵌入到你的网站中就可以实现无缝集成你的 AI 应用。