目录
一、Dify介绍
官方地址:Dify.AI · The Innovation Engine for Generative AI Applications
官方中文地址: Dify.AI · 生成式 AI 应用创新引擎
官方文档地址:产品简介 - Dify Docs

开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。
比 LangChain 更易用。
Dify提供的有2个版本,分别是:
-
社区版
-
商业版

对于我们来说我们使用社区版本就可以了,因为我们最终还是需要把Dify部署到我们的本地来使用的。
二、Dify本地部署
我们使用Dify的很大原因就是相比于Coze来说我们可以把Dify部署到我们的本地,同时能够更加灵活的来选择大模型和相关的插件来满足我们的需求。所以我们先来看看如何实现Dify的本地部署操作,这里我们使用的是社区版本。
2.1 Dify源码下载

进入到github地址后我们可以选择1.1.3的版本源码来下载到本地。

下载后解压缩出来即可。
进入源码中我们可以看到有个docker目录,把 .env.example 修改为 .env

所以从这儿我们也可以看出要启动Dify的本地程序,我们只需要安装下Docker服务就可以了。
2.2 Docker Desktop 安装
下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker

具体的安装过程参考这个地址:最新!Windows上安装Docker Desktop教程,并解决WSL问题并汉化_windows安装docker desktop-CSDN博客
2.3 Dify的运行
我们进入到Dify源码的docker目录中,我们需要先把 .env.example 修改为 .env。
然后在目录地址中输入 cmd 然后在命令窗口中输入这个命令
docker-compose up -d
第一次执行的时候需要拉取相关的镜像地址,这块我们需要在docker desktop 中设置下代理地址:

等相关镜像拉取完成后Dify就能正常的启动成功了。

2.4 Dify的配置
启动成功后在地址栏中输入 http://localhost/install 就可以访问了

在这个界面设置自己的邮箱,用户名和密码,这块的信息需要自己记住哦,点击设置按钮后进入登录界面。
登录后,然后进入到Dify操作的主界面了。说明Dify已经安装成功并且可以使用了。

2.5 Ollama
我们已经把Dify在本地部署了。然后我们可以通过Ollama在本地部署对应的大模型,比如 deepseek-r1:1.5b 这种小模型
Ollama 是一个让你能在本地运行大语言模型的工具,为用户在本地环境使用和交互大语言模型提供了便利,具有以下特点:
1)多模型支持:Ollama 支持多种大语言模型,比如 Llama 2、Mistral 等。这意味着用户可以根据自己的需求和场景,选择不同的模型来完成各种任务,如文本生成、问答系统、对话交互等。
2)易于安装和使用:它的安装过程相对简单,在 macOS、Linux 和 Windows 等主流操作系统上都能方便地部署。用户安装完成后,通过简洁的命令行界面就能与模型进行交互,降低了使用大语言模型的技术门槛。
3)本地运行:Ollama 允许模型在本地设备上运行,无需依赖网络连接来访问云端服务。这不仅提高了数据的安全性和隐私性,还能减少因网络问题导致的延迟,实现更快速的响应。

具体安装教程参考我另一篇文章:【全网最全最详细】Ollama本地部署DeepSeek-R1_ollama部署本地deepseel-CSDN博客
2.6 Dify关联Ollama
Dify 是通过Docker部署的,而Ollama 是运行在本地电脑的,得让Dify能访问Ollama 的服务。
在Dify项目-docker-找到.env文件,在末尾加上下面的配置:
# 启用自定义模型
CUSTOM_MODEL_ENABLED=true
# 指定 Ollama 的 API地址(根据部署环境调整IP)
OLLAMA_API_BASE_URL=host.docker.internal:11434
然后在模型中配置
在Dify的主界面 http://localhost/apps ,点击右上角用户名下的【设置】



添加成功后的:

三、Dify核心功能
3.1 应用类型
在Dify中我们可以创建五种类型的应用。我们分别来介绍下。
聊天助手
基于 LLM 构建对话式交互的助手,这个非常简单,我们可以来创建一个简单的聊天助手应用来看看效果。


提示词
对于在中间的有一块 编排中,我们可以添加我们的 提示词,赋予 聊天助手 特定的功能。

变量
如果我们需要在这个基础上增加不同语言的翻译功能,这块我们可以添加对应的变量。来拓展这个功能。

添加了变量后我们还需要和上面的提示词关联起来。具体的效果为

知识库
我们新建一个应用来介绍下知识库的内容。

然后我们问一些比较新的问题,你会发下大模型要么回答不了。要么开始胡说八道了。

这时我们可以在知识库中导入相关的知识内容。








到这儿 聊天助手 相关的内容就介绍完了。
文本生成应用
面向文本生成类任务的助手,例如撰写故事、文本分类、翻译等


比如翻译工具。我们在这个基础上快速的实现:


Agent
智能助手(Agent Assistant),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。能够分解任务、推理思考、调用工具的对话式智能助手,是一个更加强大的功能应用了。

进入主界面后我们可以看到相比前面的聊天助手来说多了一个工具的功能。

然后我们点击添加 后弹出对话框,我们可以在这里选择对应的工具。

默认的就这么几个。简单测试下。比如添加时间插件。然后问大模型今天的日期。他就会调用这个工具来回复我们了。

也就是在Agent中。大模型可以根据我们的需求自主编排的选择我们提供的工具来完成我们的需求。
Chatflow
面向对话类情景,包括客户服务、语义搜索、以及其他需要在构建响应时进行多步逻辑的对话式应用程序。

然后就可以来设计下这个工作流的各个节点了:
开始节点

大模型节点

对应的提示词
请根据 {{#sys.query#}}} 和今天的天气情况 {{#1744875520682.weather#}}}
写几句有诗意的散文诗,并且生成一段话描述这个场景的画面感。
1. 诗词或者散文请富有文学系和哲理,诗句示例:
万千生命如画卷徐徐展开,恍若荷叶晨露,转瞬即逝。
2. 诗词请保持输出两句话,不一定需要城市名称,但要突出城市或者当天的天气
请严格按照以下格式输出
{
"poetry":<输出散文诗>
"img_des":<输出描述诗词画面感的语句>
"date":<今天的日期,格式示例: 11月28日周四>
}
直接回复节点,回复的就是大模型的输出内容了

测试效果

工作流
面向自动化和批处理情景,适合高质量翻译、数据分析、内容生成、电子邮件自动化等应用程序。

创建后的效果,有一个开始节点,然后我们可以选择其他不同类型的节点来处理

这里我们同样选择一个LLM节点

在LLM节点后我们再添加一个结束节点。

在开始节点我们设置两个输入 城市和天气


在大模型中设置和前面相同的提示词

在结束的位置输出大模型的输出信息

然后测试即可

3.2 工具篇
系统工具
我们可以在头部的 工具 标签进入

然后再dify市场中选择我们需要的工具,比如 硅基流动 的工具

选中后点击安装

等待下载安装即可:

安装成功就可以在插件或者工具中看到了

然后回到之前的Agent 案例中。我们可以加入这个工具


第一次使用提示你需要授权:

进入对应的官网。注册登录后获取API key

可以选择适合自己的方式
然后我们尝试来使用,发现这个工具好像并不好用。

在这种情况下我们可以结合工具官方的API来实现自定义工具的使用。
自定义工具
官方提供的工具在某些场景下并不能满足我们的需求。这时我们可以创建我们自己的工具来解决这个问题。我们创建一个通过 硅基流动 工具来帮我们生成图片的工具。

设置的工作流

相关节点介绍

添加一个http请求节点来发起请求: 官方的地址: 创建图片生成请求 - SiliconFlow

通过然后模型来提取信息

然后是代码执行的逻辑。处理多个图片信息
from typing import Any, Union
def main(data: Any) -> str:
"""
从复杂数据结构中安全提取第一个URL(优化版)
:param data: 支持 dict/list/str 的任意嵌套数据结构
:return: 总是返回字符串类型,找不到时返回空字符串
"""
def extract_url(value: Union[dict, list, str]) -> str:
""" 递归提取的核心逻辑 """
if isinstance(value, str):
return value if value.startswith(('http://', 'https://', 'data:image')) else ''
if isinstance(value, dict):
# 优先检查单数形式字段
for field in ['url', 'image', 'link', 'src']:
if field in value:
found = extract_url(value[field])
if found: return found
# 检查复数形式字段
for list_field in ['urls', 'images', 'links', 'sources']:
if isinstance(value.get(list_field), list):
found = extract_url(value[list_field])
if found: return found
# 深度搜索字典值
for v in value.values():
found = extract_url(v)
if found: return found
if isinstance(value, list):
for item in value:
found = extract_url(item)
if found: return found
return ''
return {"result":extract_url(data)}
在结束节点返回图片地址

测试效果

生成的图片效果

然后可以把这个发布为工具


然后我们就可以来测试下工具的使用了。还是上面的案例

查看具体的图片

导出DSL
如何分享我们的Dify案例给别人呢?在官方提供了导出DSL的功能,也就是我们只需要选择对应的案例,然后导出对应的DSL文件即可。

我们获取到这个dsl文件后。我们就可以把这个案例导入到我们自己的Dify工作空间了。



1074

被折叠的 条评论
为什么被折叠?



