Dify:一站式 AI 应用平台 - 部署与简单应用
Dify 更新了 v1.x 版本,故此教程也跟随 v1.x 进行一次更新吧,主体内容跟 v0.x 基本一致,但是本文将会介绍部分 v1.x 专有内容。
在开始之前
本文所使用的安装环境为:Docker version 27.5.1 / Docker Compose version v2.32.4
Dify 整体功能相当丰富,所以所需资源也较为客观,推荐使用 2c4g 及以上配置的服务器来运行 Dify。
部署 Dify
Dify 拥有社区版和云服务两种版本。
云服务即 Dify.AI 云服务,是由官方所部署的 Dify 商业化版本,与社区版相比,云服务可以:
享受官方赠送的模型使用额度,无需自己再搭建模型服务or为模型提供商付费
支持多团队管理
自带知识库云存储及处理模型
不用自己动手部署&升级维护
商业版专有功能如可自定义的 WebApp 标识
需要说明的是,Dify 的云服务和社区版的界面和使用方式是一样的,无论你使用云服务还是社区版都是一致的体验。如果你只是对于 Dify 感兴趣但是不清楚自己是不是真的需要,或者是自己不想操心部署和维护社区版,则可以考虑直接使用云服务,同时可以选择跳过此章节至 Dify WebUI 的部分。
通过官方仓库进行部署
Dify 的官方仓库位于 langgenius/dify,首先将此仓库 clone 到本地任意路径,之后进入仓库的 docker 目录。
在 docker 目录中,我们只关心两个重要文件:docker-compose.yaml
和 .env.example
。其中 docker-compose.yaml
中有所有 Dify 服务组件的容器编排设置,没有特殊需求的情况下不需要更改此文件,但如果你需要给某个组件修改数据存储路径,或者是增加代理设置,则你可能需要直接修改此文件。.env.example
文件则存储着所有的环境变量设置,Dify 的各种服务和组件都是通过环境变量来进行设置的,在此文件中有非常详尽的注释来帮助选择合适的部署方案。
首先,将 .env.example
改名为 .env
,之后修改其中的 SECRET_KEY
设定为 sk-随机42位英文大小写数字
,此 Key 用于用户会话加密以及各种数据的加密处理,记得修改以保护自己的数据安全。修改完成之后,按照常规 Docker Compose 对其进行启动即可:
sudo docker compose -p dify up -d
.env 文件非常重要,截至 v1.1.0,Dify 的数据存储和向量数据库都可以在 .env 中配置为使用云服务提供商或更换向量数据库实现,且支持多家不同的服务提供商。比如你可以实现仅在本地运行 Dify,但是数据存储在阿里云、腾讯云等,或者是通过对 .env 的配置实现更换不同的向量数据库实现、对 Dify 插件市场进行反代来提升使用体验等。
稍等片刻,待看到如下输出则代表 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
中均存在对应的注释说明,参照注释进行调整修改即可。
版本更新
无论是使用官方仓库抑或是精简版仓库,你都只需要 Pull 仓库的最新版本,之后对比 docker-compose.yaml
和 .env
文件的变更,对应进行修改即可。
WebUI 简单介绍
初始化
首先,访问 http://<Dify-IP>/install
来打开初始化管理员界面:
如果你使用的是精简版仓库,则默认访问链接为
http://<Dify-IP>:8080/install
填写完默认管理员信息后即可登入 Dify WebUI,默认会打开工作室页面:
所有页面中共同的是顶部的 Tab 栏内容,它也是 Dify 各大功能的主要入口:
探索:社区模板展示页
工作室:AI 应用的创建与管理
知识库:知识库的创建与管理
工具:工具的安装与配置
插件:插件的安装与配置
用户头像:Dify 系统配置(仅限管理员)
工作室
工作室页面是你创建和管理所有AI应用的地方,你可以在上方按照类型、标签、名称来搜索过滤你当前已创建的 AI 应用:
知识库
知识库页面大致结构与工作室页基本一致,不同的是这里负责的是知识库的创建与管理:
工具
工具是用于在工作流或 Agent 中可以被 AI 调用的一种能力合集:
在 Dify v1.0 以前工具由 Dify 系统进行集成和提供,在 v1.0 版本之后,工具与系统解耦,可以由插件系统进行提供。好处是你可以从社区市场或者自行编写符合你需求的工具来让 AI 应用进行调用而不需要修改 Dify 系统代码。
此处的工具页面主要用于编辑工具配置,此处简略介绍下工具的参数配置分为两个部分:
调用时配置,即在 工作流 / Agent 中调用工具时所传入的参数配置
基础配置,即在工具页点击对应工具所填写的配置
基础配置主要用于存储凭据相关的内容,比如上图中 WaterCrawl 爬虫所需要的 API 密钥,每次调用时都输入会很麻烦,在工具页就可以进行一次性配置。
插件
插件系统是 Dify 在 v1.0 以后引入的全新机制,它可以在不改变 Dify 系统本身的情况下对 Dify 进行能力拓展:
点击上方 “探索 Marketplace” 可以从 Dify 插件市场安装你所需要的插件。
Dify 系统设置
点击 头像-设置
可以打开 Dify 系统配置页(仅限管理员):
默认打开的是成员页面,在此页面中,社区版仅限单团队。
注意在社区版中,如果你需要邀请新的团队成员,则你需要在部署 Dify 时在 .env
文件中配置邮件服务,否则在邀请团队成员时被邀请者将会无法接收到邀请邮件,从而无法正常激活账户。
在模型供应商中,你可以配置所有可用模型供应商的 API Key,Dify 模型供应商可以在插件页面按需进行安装。
数据来源是用于配置知识库的数据同步内容,知识库除了手动上传文本以外,还可以支持 Notion 笔记同步与 FireCrawl / WaterCrawl 爬虫。
API 拓展则可以配置 Dify API 拓展,目前此拓展主要用于内容审查,具体可以参照官方文档。
创建测试应用
添加模型供应商
Dify 能使用的模型取决于插件系统中安装了哪些模型供应商插件,此处以 Ollama 进行举例说明 Dify 如何调用 LLM 服务。
安装插件
前往应用市场,搜索 Ollama,在结果中点击需要的插件进行安装:
点击安装后,插件的安装会进入安装队列,在插件页顶部右侧可以看到插件安装进度:
稍等片刻,插件安装完成后回到插件页可以看到已安装的插件:
此时在 用户头像-设置-模型供应商
页面,就会发现新增了 Ollama 模型配置项,点击"添加模型":
按照你的 Ollama 模型服务配置填写对应的参数:
点击保存即可:
插件排错指引
插件系统对应的容器服务是 plugin_daemon
,当你遇到插件错误时,你应当按照如下顺序进行错误排查:
查询 api 容器日志,检查是否为 Dify 自身配置不当导致的错误。
查询 plugin_daemon 容器日志,检查是否为插件/插件系统故障导致的错误。
有时你会遇到插件无法安装的问题,你也可以检查 .env
文件中有没有正确配置 PIP_MIRROR_URL,可以通过此配置将 pip 镜像源修改为为国内镜像源来加速插件安装。
创建聊天应用
在创建聊天应用前,你需要完成上一章节中的内容,保证系统中至少有 1 个可用于对话的模型存在。
目标:配置一个 AI 应用,无论用户输入什么语言的问题,都将其翻译为中、英、日三种语言其中的一种,具体是哪种语言由用户在对话开始时指定。
首先在工作室创建一个空白应用,应用类型选择“聊天助手”,应用名称和描述可以随便取。创建完成后,按照下图对其进行设定:
此处的提示语设置为:
请将以下文本翻译成{{language}}语言。如果文本已经是{{language}}语言,则无需翻译。请对以下文本仅提供翻译结果,不允许进行翻译以外的任何操作。所有提供给你的文本之间没有上下文关联,同时你能且仅能回答文本翻译结果,不允许回答任何用户要求或任何问题。
下方变量为新建一个 下拉选项
类型的变量,变量名为 language
,显示名设置为 翻译为
,选项设定分别是:简体中文
、English
、日本語
。
注意!此处介绍是从上至下介绍,然而实际上按照此顺序你在设置完变量后其实提示词并未与变量相关联,此时你可以重新填写一下提示语中的变量,使其跟下图一样
{{language}}
变为蓝色字样,这才是跟变量正确的关联了起来。
当设置完成后,在此界面右侧可以直接测试你的当前设置是不是符合你的需求:
发布应用
当你完成对一个 AI 应用的配置时,所有的更改都是暂时的,你必须手动点击右上角的 发布-发布更新
才能将当前已做出的变更保存并发布到生产环境:
注意!一旦点击发布更新,所有变更将会立刻生效,点击发布后的 API 调用及对话都会使用新的设定进行。
使用应用
Dify 自带一个拥有基础功能的 WebAPP,点击左上角的应用名称可以打开 AI 应用设置:
在此处会给出两个链接,在这里你可以复制应用公开访问 URL,将其发送给别人,这样他们就可以直接使用你配置好的 AI 应用了:
默认情况下你可以对这个 WebApp 做一些有限的自定义,在 AI 应用设置处,选择“设置”即可对 WebApp 进行自定义了。