赞
踩
Dify 是一个开源的大语言模型 (LLM) 应用开发平台。它结合了后端即服务 (Backend-as-a-Service) 和 LLMOps (LLMOps) 的概念,使开发人员能够快速构建生产级生成式 AI (Generative AI) 应用。即使是非技术人员也可以参与 AI 应用的定义和数据操作。
通过集成构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的提示词编排界面、高质量的检索增强生成 (RAG) 引擎以及灵活的 Agent (Agent) 框架,同时提供了一组易于使用的界面和 API,Dify 为开发人员节省了大量时间避免重复造轮子,让他们可以专注于创新和业务需求。
Dify 由 Define 和 Modify 两个词组合而成,寓意着用户可以定义并不断改进自己的 AI 应用。
你可以将 LangChain (LangChain) 之类的库想象成带有锤子、钉子等的工具库。相比之下,Dify 提供了一个更加接近生产环境、开箱即用的完整解决方案 —— 例如,可以将 Dify 想象成一个经过精心工程设计和软件测试的脚手架系统,可以帮助开发者快速搭建 AI 应用。
重要的是,Dify 是开源的,由专业的全职团队和社区共同创建。您可以基于任何模型自主部署类似于 Assistants API 和 GPT 的功能,通过灵活的安全措施保持对数据的完全控制,所有这些都在一个易于使用的界面上完成。
Dify 为每个人提供云服务,因此您无需自行部署即可使用 Dify 的全部功能。
从免费计划开始,其中包括 200 次 OpenAI 调用的免费试用。要使用云版本的免费计划,您需要一个 GitHub 或 Google 帐户和一个 OpenAI API 密钥。以下是开始使用的方法:
只有两种登录选项:GitHub 和 Google。您可以选择任意一种登录。
登录后,您将看到 Studio 界面。您可以跳过下一部分,直接进入“模型 (Models)” 章节。
如果想在本地运行 Dify,您可以选择部署 Dify 社区版本,它是开源版本。您可以通过 Docker Compose (Docker Compose) 或本地源代码进行部署。本文将演示使用 Docker Compose 在 Windows 上本地部署 Dify 的更便捷方法。
首先,安装并运行 Docker Desktop 并启用 WSL 2 (Windows Subsystem for Linux 2)。您可以从以下链接下载它;详细的安装过程不在本文中介绍:
https://www.docker.com/products/docker-desktop/
在要存储 Dify 的目录中打开命令提示符,然后输入:
git clone https://github.com/langgenius/dify.git
您将看到以下输出:
- D:\Workspace\Dify>git clone https://github.com/langgenius/dify.git
- Cloning into 'dify'...
- remote: Enumerating objects: 66122, done.
- remote: Counting objects: 100% (10553/10553), done.
- remote: Compressing objects: 100% (1540/1540), done.
- remote: Total 66122 (delta 9611), reused 9196 (delta 9008), pack-reused 55569
- Receiving objects: 100% (66122/66122), 38.65 MiB | 11.63 MiB/s, done.
- Resolving deltas: 100% (47189/47189), done.
- Updating files: 100% (5109/5109), done.
如果尚未安装 Git,则可以从 Dify 的 GitHub 仓库下载整个项目并将其解压缩,然后再继续执行以下步骤。但是,此方法对于以后的更新不太方便。
导航到 Dify 源代码的 docker 目录并执行一键启动的命令:
- # 导航到 docker 目录
- cd dify/docker
- # 复制并重命名配置文件
- cp .env.example .env
- # 如果您使用的是 Windows cmd,请使用 copy 命令而不是 cp
- copy .env.example .env
- # 启动 docker compose
- docker compose up -d
部署输出:
- D:\Workspace\Dify\dify\docker>docker compose up -d
- [+] Running 75/9
- ✔ weaviate Pulled 27.0s
- ✔ web Pulled 61.1s
- ✔ ssrf_proxy Pulled 26.9s
- ✔ api Pulled 51.3s
- ✔ redis Pulled 27.3s
- ✔ sandbox Pulled 40.4s
- ✔ db Pulled 30.1s
- ✔ nginx Pulled 27.1s
- ✔ worker Pulled 51.3s
- [+] Running 11/11
- ✔ Network docker_default Created 0.0s
- ✔ Network docker_ssrf_proxy_network Created 0.1s
- ✔ Container docker-sandbox-1 Started 2.1s
- ✔ Container docker-weaviate-1 Started 2.7s
- ✔ Container docker-db-1 Started 2.7s
- ✔ Container docker-ssrf_proxy-1 Started 2.7s
- ✔ Container docker-redis-1 Started 2.7s
- ✔ Container docker-web-1 Started 1.6s
- ✔ Container docker-api-1 Started 2.9s
- ✔ Container docker-worker-1 Started 2.9s
- ✔ Container docker-nginx-1 Started
最后,检查所有容器是否都正确运行:
docker compose ps
运行输出:
- D:\Workspace\Dify\dify\docker>docker compose ps
- NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
- docker-api-1 langgenius/dify-api:0.6.15 "/bin/bash /entrypoi…" api 3 minutes ago Up 3 minutes 5001/tcp
- docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 3 minutes ago Up 3 minutes (healthy) 5432/tcp
- docker-nginx-1 nginx:latest "sh -c 'cp /docker-e…" nginx 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
- docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 3 minutes ago Up 3 minutes (healthy) 6379/tcp
- docker-sandbox-1 langgenius/dify-sandbox:0.2.1 "/main" sandbox 3 minutes ago Up 3 minutes
- docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy 3 minutes ago Up 3 minutes 3128/tcp
- docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate 3 minutes ago Up 3 minutes
- docker-web-1 langgenius/dify-web:0.6.15 "/bin/sh ./entrypoin…" web 3 minutes ago Up 3 minutes 3000/tcp
- docker-worker-1 langgenius/dify-api:0.6.15 "/bin/bash /entrypoi…" worker 3 minutes ago Up 3 minutes 5001/tcp
输出应包括 3 个业务服务:api、worker 和 web,以及 6 个基础组件:weaviate、db、redis、nginx、ssrf_proxy 和 sandbox。
然后,打开浏览器并转到 http://localhost 以访问 Dify。输入必要的信息以完成用户注册。
填写完注册信息后,点击「设置」按钮,进入登录页面。输入已注册的账号信息并登录:
您已成功登录,Dify 本地部署准备就绪。
未来更新 Dify 本地版本时,请进入 Dify 源码的 docker 目录,依次执行以下命令:
- cd dify/docker
- docker compose down
- git pull origin main
- docker compose pull
- docker compose up -d
同时,请同步您的环境变量配置:
Dify 将模型分为 4 种类型,用于不同用途:
首次登录 Dify Studio 页面后,您需要在「设置」→ 「模型供应商」部分添加和配置所需的模型。点击右上角的头像按钮,选择「设置」:
1、点击左侧菜单的「模型供应商」,然后您将在右上角看到「系统模型设置」。
2、在「系统模型设置」中,您可以设置系统的默认模型。
Dify 支持 OpenAI 的 GPT 系列和 Anthropic 的 Claude 系列等主要模型提供商。每个模型的功能和参数各不相同,请选择适合您应用程序需求的模型提供商。您需要在使用模型提供商的 API 密钥之前,从模型提供商的官方网站获取。
以下以 OpenAI 的 API 密钥为例进行说明。
配置 OpenAI API 密钥:
API 密钥配置正确后,「设置」按钮上方的指示灯将变为绿色。点击 OpenAI 徽标下方的「27 个模型」按钮,所有可用的模型都将显示并可供访问。
您可以在“系统模型设置”中选择其他所需的模型,例如更强大的 gpt-4o-mini。
重排序模型为空且没有可选项的原因:
什么是重排序 (Rerank)?
混合检索可以结合不同检索技术的优势,以获得更好的召回率结果。不同检索模式下的查询结果在提供给大型模型之前,需要进行合并和归一化处理(将数据转换为统一的标准范围或分布,以便更好地进行比较、分析和处理)。
此时,我们需要引入一个评分系统:重排序模型 (Rerank Model)。
重排序模型计算候选文档列表与用户查询之间的语义匹配度,根据语义匹配度对结果进行重新排序,以提高语义排序结果。其原理是计算用户查询与每个给定候选文档的相关性得分,然后返回按相关性从高到低排序的文档列表。常见的重排序模型包括 Cohere rerank、bge-reranker 等。
重排序模型的优势:
提供了一种简单、低复杂度的方法来改进搜索结果。
使用户能够将语义相关性融入到现有的搜索系统中。
不需要对基础设施进行重大修改。
Dify 可以与本地模型或托管模型集成,例如 Ollama、LocalAI、Hugging Face、Replicate、Xinference 和 OpenLLM。
以下演示如何通过 Ollama 将本地部署的 Dify Docker 实例连接到本地运行的 Llama 3.1 实例,从而在 Dify 中使用开源本地模型。
注意事项:
步骤:
1、在 Ollama 和模型准备好后,退出 Ollama。
2、将 OLLAMA_HOST 环境变量添加到您的系统中,并将其值设置为 0.0.0.0。这是为了将 Ollama 的服务暴露给 Dify,以便后续调用。
3、运行一个 Llama 3.1 实例:
ollama run llama3.1
成功启动后,Ollama 会在本地端口 11434 上启动一个 API 服务,可以通过 http://localhost:11434 访问。
4、检查您机器的内部 IP 地址。打开命令提示符并输入 ipconfig,找到 IPv4 地址并复制它。
C:\Users\dream>ipconfig
- Windows IP ConfigurationEthernet adapter Ethernet 5: Connection-specific DNS Suffix . : uds.anu.edu.au
- Link-local IPv6 Address . . . . . : fe80::5b74:3153:67b9:412c%27
- IPv4 Address. . . . . . . . . . . : 122.36.220.100
- Subnet Mask . . . . . . . . . . . : 255.255.252.0
- Default Gateway . . . . . . . . . : 130.56.120.1Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : anu.edu.au
- Link-local IPv6 Address . . . . . : fe80::5bd:7139:58d7:69eb%15
- IPv4 Address. . . . . . . . . . . : 10.89.12.110
- Subnet Mask . . . . . . . . . . . : 255.255.224.0
- Default Gateway . . . . . . . . . : 10.89.12.1
5、运行本地部署的 Dify Docker。
6、登录 Dify 后,导航到「设置 > 模型供应商 > Ollama」,并输入以下参数:
图中所示参数的具体含义和填写方法如下:
7、点击「保存」以保存配置。
嵌入模型的集成方法与大型语言模型类似,只需将模型类型更改为“文本嵌入”即可。
保存配置后,您将能够看到添加的模型。
至此,Dify 已经准备好与 Ollama 协同工作了。您可以继续阅读 Dify 的实践部分,以验证本部分所做工作的有效性。此外,您还可以创建自己的 RAG(检索增强生成)知识库聊天机器人。
解决 Docker 部署 Dify 和 Ollama 时的错误:
如果您使用 Docker 部署 Dify 和 Ollama,您可能会遇到以下错误:
httpconnectionpool(host=127.0.0.1, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))
httpconnectionpool(host=localhost, port=11434): max retries exceeded with url:/cpi/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8562812c20>: fail to establish a new connection:[Errno 111] Connection refused'))
出现此错误的原因是从 Docker 容器无法访问 Ollama 服务。localhost 通常指的是容器本身,而不是主机或其他容器。要解决此问题,您需要将 Ollama 服务暴露给网络。
以下是如何在 macOS 和 Linux 上为 Ollama 设置环境变量:
如果 Ollama 作为 macOS 应用程序运行:
1、对于每个环境变量,调用 launchctl setenv。
launchctl setenv OLLAMA_HOST "0.0.0.0"
2、重新启动 Ollama 应用程序。
3、如果上述步骤无效,可以尝试以下方法:将服务中的 localhost 替换为 host.docker.internal。
http://host.docker.internal:11434
如果 Ollama 作为 systemd 服务运行:
1、通过调用 systemctl edit ollama.service 来编辑 systemd 服务。
2、对于每个环境变量,在 [Service] 部分下添加一行 Environment:
- [Service]
- Environment="OLLAMA_HOST=0.0.0.0"
3、保存并退出。
4、重新加载 systemd 并重新启动 Ollama:
- systemctl daemon-reload
- systemctl restart ollama
在 Dify 中,“应用”指的是基于大型语言模型 (LLM)(例如 GPT)构建的,可以解决实际问题的应用。通过创建应用,您可以将 AI 技术应用于满足特定需求。简而言之,Dify 应用提供以下功能:
您可以选择以上全部功能或其中一部分来支持 AI 应用开发。
您可以通过以下三种方式在 Dify 工作台中创建应用:
首次使用 Dify 时,您可能不熟悉如何创建应用。为了帮助新用户快速了解如何在 Dify 上构建应用,Dify 团队的提示工程师已经为多种场景创建了高质量的应用模板。
在导航菜单中选择“工作室”,然后在应用列表中选择「从应用模板创建」。
选择任意模板并将其添加到您的工作区。
以“三步翻译工作流”模板为例:
1、创建工作流后,您可以开始编辑。
2、从 LLM 2 的说明中可以看出,这是一个专业的中文翻译机器人。它通过检测专业术语、直译、审校和二次自由翻译等步骤来提高专业文章的翻译精度。
3、点击「发布」和「运行应用」,您可以测试将一篇包含许多技术术语的论文摘要作为翻译材料进行翻译。右侧窗口将显示工作流和翻译结果,效果非常好。
如果您需要在 Dify 上创建空白应用,请在导航菜单中选择「工作室」,然后在应用列表中选择「创建空白应用」。
首次创建应用时,您可能需要先了解 Dify 上四种不同类型应用的基本概念。
Dify 提供四种类型的应用:
创建应用时,您需要为其命名,选择合适的图标,并使用清晰简洁的文字描述该应用的用途,以便于后续团队内部使用。
对话应用使用一问一答的方式与用户进行持续的对话。
对话应用适用于客服、在线教育、医疗保健、金融服务等领域。这些应用可以帮助组织提高工作效率,降低人力成本,并提供更好的用户体验。
对话应用支持提示、变量、上下文、开场白和下一轮问题建议等功能。这里,我们以面试官应用为例,介绍一下组成会话应用的方式。
第 1 步:创建应用
第 2 步:编写应用
应用创建成功后,页面会自动跳转到应用总览页面。点击侧边菜单「编排」来编写应用。
2.1 填写提示
提示语用于引导 AI 提供专业的答复,使答复更加精准。您可以利用内置的提示生成器来编写合适的提示语。提示语支持插入表单变量,例如 {{input}}。提示变量中的值将被用户填写的实际值替换。
例如,输入面试场景指令,提示语将自动在右侧内容框中生成。您还可以在提示语中插入自定义变量,以根据特定需求或细节进行定制。
为了获得更好的体验,我们可以在对话开始时添加一段开场白,例如:“您好,{{name}}。我是您的面试官,Kevin。您准备好了吗?”
要添加开场白,请点击底部的「添加功能」按钮,并启用「对话开场白」功能。
编辑开场白时,您还可以添加几条引导性问题。
2.2 添加上下文
如果应用需要根据私有上下文对话生成内容,可以使用知识库功能。点击上下文中的「添加」按钮添加知识库。
2.3 调试
在右侧输入用户输入内容,并检查回复内容。
如果对结果不满意,可以调整提示语和模型参数。点击右上角的模型名称,可以设置模型的参数。
使用多个模型进行调试:
如果使用单个模型进行调试效率低下,可以使用「作为多个模型调试」功能批量测试模型的回复效果。最多支持同时添加 4 个 LLM。
2.4 发布应用
调试完应用后,点击右上角的「发布」按钮即可创建一个独立的 AI 应用。除了可以通过公共 URL 体验应用外,您还可以基于 API 进行二次开发,将其嵌入到网站等。
AI 智能体可以利用大型语言模型的推理能力,自主设定目标,简化复杂任务,操作工具并完善流程以完成任务。
为了方便用户快速学习和使用,Dify 在「探索」部分提供了 AI 智能体应用模板。您可以将这些模板集成到您的工作区中。您也可以使用 Dify 工作室创建自定义 AI 智能体,以满足个人需求。AI 智能体可以协助分析财务报告、撰写报告、设计徽标和安排旅行计划等。
如何使用 AI 智能体:
工具可以让 Dify 上的 AI 应用更加强大。AI 智能体可以通过推理、步骤分解和工具调用来执行复杂的任务。此外,工具还可以帮助应用与外部系统或服务集成,例如执行代码和访问独家信息源等。
在「工作室 — 应用编排」中,点击「添加功能」打开应用工具箱。
应用工具箱为 Dify 应用提供以下附加功能:
在 Dify 中,工作流通过将复杂的任务分解成更小的步骤(节点)来降低系统复杂性,并减少对提示工程和模型推理能力的依赖,从而增强 LLM 应用处理复杂任务的性能,并提高系统的可解释性、稳定性和容错能力。
Dify 提供两种类型的工作流:
为了解决自然语言输入中用户意图识别的复杂性,聊天流提供了问题理解节点。与普通的工作流相比,聊天流增加了对聊天机器人功能的支持,例如对话历史记录、带注释的回复和答案节点等。
为了处理自动化和批量处理场景中的复杂业务逻辑,工作流提供多种逻辑节点,例如代码节点、IF/ELSE 节点、模板转换、迭代节点等。此外,工作流还支持定时和事件触发操作,方便构建自动化流程。
节点是工作流的基本组成部分。通过将具有各种功能的节点连接起来,可以实现一系列操作。
核心节点:
大型语言模型的训练数据通常基于公开可用的数据,每次训练都需要大量的计算能力。这意味着,模型的知识通常不包括私有领域知识,并且公共知识领域也存在一定的延迟。为了解决这个问题,可以使用 RAG(检索增强生成)技术。RAG 技术使用用户的查询匹配最相关的外部数据,并在检索到相关内容后,将其重新组织并作为模型提示的上下文插入到回复中。
Dify 的知识库功能将 RAG 管道中的每个步骤可视化,并提供简单易用的用户界面,帮助用户管理个人或团队知识库,并快速将其集成到 AI 应用中。您只需要准备文本内容,例如:
在 Dify 中,「知识」是文档的集合。知识库可以作为检索上下文集成到应用中。文档可以由开发人员或运营团队成员上传,也可以从其他数据源同步(通常对应数据源中的一个单元文件)。
什么是 RAG?
RAG 架构以向量检索为核心,已成为一种主流技术框架,使大型语言模型能够访问最新的外部知识,同时解决生成内容中的“幻觉”问题。该技术已应用于各种场景。
开发人员可以使用 RAG 技术,以低成本构建 AI 驱动的客户服务、企业知识库、AI 搜索引擎等。通过使用自然语言输入与各种形式的知识组织进行交互,开发人员可以创建智能系统。
以一个典型的 RAG 应用为例:
当用户询问“谁是美国总统?”时,系统不会直接将问题传递给大型语言模型来回答,而是首先在知识库(例如维基百科)中执行向量搜索,通过语义相似性匹配找到相关内容(例如,“乔·拜登是美国第 46 任也是现任总统……”)。然后,系统将用户的查询以及检索到的相关知识提供给大型语言模型,使其获得足够的信息以可靠地回答问题。
为什么需要 RAG?
可以将大型语言模型想象成一个熟悉人类各个知识领域的超级专家,但它也有其局限性。例如,它不知道您的个人信息,因为这些信息是私有的,不会公开在互联网上,因此它没有机会学习。
如果您想聘请这位超级专家作为您的个人财务顾问,您需要在回答您的问题之前,让他们先查看您的投资记录、家庭支出和其他数据。这样一来,专家才能根据您的个人情况提供专业的建议。
这正是 RAG 系统的作用:帮助大型语言模型临时获取它不具备的外部知识,使其能够在回答问题之前找到答案。
因此,RAG 系统中最关键的部分是外部知识的检索。专家能否提供专业的财务建议,取决于他们能否准确找到必要的信息。如果他们找到的是您的减肥计划而不是您的投资记录,那么即使是最博学的专家也无能为力。
接下来,让我们创建一个简单的知识库聊天机器人。以下步骤基于之前对 Dify 和 Ollama 的本地部署和集成。
点击 「知识库 > 创建知识库」。
选择「导入已有文本」以上传文档。这里以 Nvidia 的最新论文「ChatQA 2:弥合长上下文和 RAG 功能中专有大语言模型的差距」为例。上传后,点击「下一步」。
点击 「保存并处理」 完成知识库的创建。
看到 「知识库已创建」 提示表示知识库创建完成。
进入 「工作室 > 创建空白应用」。
选择 「聊天助手」 类型进行测试,您可以随意命名。
点击「上下文」旁边的「添加」按钮,添加来自知识库的文件。您会在右上角看到一个本地 Ollama 模型正在运行,这表明 Dify 和 Ollama 已经成功集成。点击它可以选择其他模型或调整模型参数。
在左侧的「提示词」输入框中,您可以为聊天机器人编写提示。
设置好一切后,点击「发布」保存。
点击「发布」后,您可以直接点击「运行应用」来运行应用。
通过询问与论文中 ChatQA 2 相关的问题,我们可以看到机器人利用了知识库中的文档,并提供了准确的答案,证明了 RAG 的有效性。至此,一个简单的 RAG 聊天机器人就创建成功了。
本文全面介绍了 Dify,这是一个简化大型语言模型应用开发的开源平台。
Dify 的以下特性使其对开发人员和非技术用户都非常友好:
Dify 将后端即服务与 LLMOps 相结合,使用户能够快速创建和部署 AI 应用,而无需进行大量编码。
Dify 的开源性和社区驱动的开发方式提供了灵活性和持续改进的可能性,使其成为任何希望在 AI 领域进行创新的人的宝贵工具。本指南可以让您自信地开始或加强使用 Dify 进行 AI 开发的旅程。
参考资料
[1]. Dify Cloud: https://cloud.dify.ai/
[2]. 官方文档:https://docs.dify.ai/guides/model-configuration/customizable-model
[3]. ConnectionError: HTTPConnectionPool(Host="Localhost", Port=11434): Max Retries Exceeded with Url: /Api/Generate/ (Caused by NewConnectionError(': Failed to Establish a New Connection: [Errno 111] Connection Refused')) · Issue #3200 · Ollama/Ollama. GitHub, github.com/ollama/ollama/issues/3200
[4]. Docker Desktop Distro 安装在升级到 4.32.0 版本后失败. Docker 社区论坛:forums.docker.com/t/docker-desktop-distro-installation-failed-after-upgradation-to-4–32–0/142393.
[5]. Langgenius/Dify. GitHub:github.com/langgenius/dify.
[6]. 问题 · Ollama/Ollama. GitHub:github.com/ollama/ollama/issues/.
如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。