目录

一、本地化安装部署Dify

1、安装Docker Desktop

2、在Docker安装Dify

二、Dify基础

1、登录Dify

2、基础设置

3、功能介绍

三、应用实践

1、创建聊天应用

2、创建知识库应用

3、创建智能体应用

4、创建工作流应用



Dify是一个开源的大型语言模型(LLM)应用开发平台,提供了直观的界面,可帮助开发者快速构建AI聊天助手、工作流、RAG、Agent等生产级的生成式AI应用。

一、本地化安装部署Dify

1、安装Docker Desktop

下载并安装Windows | Docker Docs

安装好和启动Docker Desktop。

2、在Docker安装Dify

(1)下载Dify代码。可以直接访问Dify官网直接选择进入Github页面下载代码,也可以在cmd窗口运行以下代码克隆代码(事先为Dify克隆文件创建一个文件夹,如my_dify):

cd my_dify
git clone https://github.com/langgenius/dify.git

下载好后文件夹如下图:

进入docker文件夹,打开docker-compose.yaml,里面是docker的配置文件,因为项目涉及都多个组件nginx,redis,postgre等,所以如有端口冲突可以在此修改。因为我之前在Docker部署了WebUI占用了80端口,因此在这里吧nginx端口改为了8081。

(2)查询Docker Compose 版本

docker compose version

Docker Compose是为了简化用户操作用来批量安装所需组件的,可处理容器之间的复杂关系和内部连接,开发者只需使用 YAML 文件来编排和定义这些容器,最终将它们组合成一个整体。

(3)在Docker中安装组件

  • 如Docker Compose版本是 V2,使用以下命令:docker compose up -d启动容器
  • 如Docker Compose版本是 V1,使用以下命令:docker-compose up -d启动容器
cd docker
docker compose up -d

运行命令后,开始开始拉取数据,这里需要耐心等待一段时间,因为共有 9 个容器需要下载。完成之后可以用以下命令或启动Docker Desktop查看运行的服务:

docker compose ps

打开浏览器,输入IP加端口号即可进入Dify登录页面首次登录需要进行用户注册。

二、Dify基础

1、登录Dify

输入注册好的用户名、密码即可进入Dify页面。

2、基础设置

点击页面右上角的用户名,选择“设置”可进行基础设置,这里首先需要设置模型供应商。

Dify支持目前主流的大模型供应商,我这里以通义千问为例介绍如何添加大模型。

将鼠标移至通义千问图标,选择“添加模型”。

分别设置“模型类型”、“模型名称”、“API Key”等,API Key需提前申请获取,设置完成保存即可。

选择显示模型可查看该模型商支持的所有模型列表。

我们也可以设置本地大模型,这里我通过Ollama就本地部署了qwen2:7b和llama3.1。

Ollama安装和本地模型部署可参考:大模型之LLM+RAG构建本地化知识库应用(Ollama+RAGFlow)_ragflow ollama-CSDN博客

在Dify添加Ollama模型可参考(包括可能出现的问题处理):

https://zhuanlan.zhihu.com/p/715099487

3、功能介绍

完成设置后回到主页面,可以看到顶部的4个页面。

“探索”页面提供了模板应用程序,用户可参考模板定制自己的应用程序。

“工作室”页面用户可创建自己的应用,包括聊天助手、智能体、工作流。

“知识库”页面用户可以通过上传自己的文本数据创建知识库增强 LLM 的上下文。

“工具”页面是Dify本身集成第三方工具,用户也可自定义工具。

三、应用实践

1、创建聊天应用

在“工作室”页面选择“创建空白应用”,选择“聊天助手”并给他命名。

进入编排页面后首先要选择设置大模型。“提示词”可以对AI做出的回答进行限定和约束,它不会被用户看到。提示词可以通过生成器自动生成(这里不用,后续介绍)。

“变量”是配合提示词用的,在对话前填写将自动替换提示词里的内容。

“上下文”放到知识库部分介绍。

2、创建知识库应用

为方便测试,先在本地创建一个“半期考试成绩”的EXCEL文件,内容如下:

在知识库页面选择创建知识库。将需要导入的数据文件拖动到指定区域,执行“下一步”。

分别对“分段设置”、“索引方式”、“Embedding 模型”、“检索设置”等进行设置,这里我把Top K设置为8,如果是问答模式数据,还需打开“采用Q&A分段模式”,然后选择“保存并处理”即可完成知识库创建。

完成知识库创建后,创建一个聊天应用,并在“上下文”里添加该知识库,然后就可以在聊天应用中调用知识库了。

将鼠标移至聊天助手的回答处,可以选择查看“Prompt日志”

当然如果需要,也可以引用多个知识库。

3、创建智能体应用

在聊天应用基础上增加工具调用就可以构建智能体应用了,在这里我们构建一个名为“每日要闻”的新闻搜索应用。

首先设置提示词“你是一个新闻工作者,善于从新闻中提取关键信息”。

然后添加“工具”,这里添加一个“必应网页搜索”和“获取当前时间”的工具,并根据需求对工具进行配置,注意部分工具需要先获得授权才能应用。

  

然后就可以使用了。

下面介绍一下提示词生成器的应用方法:

点击提示词“生成”,可以直接调用已有的提示词模板,也可以自己输入一段提示词,然后选择“生成”,生成器会根据你的提示词自动生成变量,点击“应用”自动替换原来的提示词。

这里也可以更改提示词内容,比如我这里删除了变量,并把输出格式进行了调整。

这里使用了网络爬虫工具。

4、创建工作流应用

工作流应用创建稍微复杂一些,它以工作流形式定义编排生成应用,可生成较复杂的自定义应用,这里我们以系统在“探索”页面的提供的模板为例。

选择“Web Content Search and Summarization Workflow”并添加到工作区,从新命名为“内容搜索与摘要”,即可进入编排页面,注意这里需要根据实际设置LLM节点的大模型。

工作流从“START”开始,“END”结束,所有节点通过线条首位相连(左输入,右输出)。编排页面的左下角有操作设置。

点击节点,会弹出对应的设置界面,以“START”为例,会出现以下设置界面,“(x)Question”为输入参数,参数支持文本、段落、下拉选项、数字、文件、文件列表等,用户可以自己定义多个输入参数。sys.****为系统变量,可以被应用内的其它节点全局读取,这里无需修改。“下一步”可设置下一个节点,也可以通过编排页面添加线条连接完成设置,节点间通过变量和参数传递信息。

本模版除了“START”、“END”节点外还有以下几类节点:

LLM节点:用于调用大语言模型,是工作流的核心节点,选择不同模型可支持意图识别、文本生成、内容分类、文本转换、代码生成、RAG、图片理解等功能。这里的LLM2是LLM节点。

代码节点:可运行 Python / NodeJS 代码以在工作流程中执行数据转换。这里的“CODE”、“Split URL and Text Summary”都是代码节点。

模版节点:借助 Jinja2 的 Python 模板语言进行数据转换、文本处理。这里的“Combine URL and Summary”、“Result in Table”都是模版节点。

工具节点:通过第三方工具为工作流提供不同的能力支持。这里的“TavilySearch”、“JinaReader”就是工具节点。

迭代节点:迭代节点将依次处理迭代开始节点数组变量内的所有元素,每个元素遵循相同的处理步骤,每轮处理被称为一个迭代,最终输出处理结果。这里的“Iteration”是迭代节点,它由“JinaReader”、“LLM 2”、“Combine URL and Summary”节点组成。

具体详见:https://docs.dify.ai/zh-hans/guides/workflow/node

下面介绍本工作流的工作过程:

工作流从“START”开始运行,输入要搜索的问题如“请列举人工智能在医疗健康领域的应用”,该变量被传入到“TavilySearch”节点(TavilySearch是专为AI代理设计的搜索引擎,能够快速、准确返回标题、URL、内容等信息),“TavilySearch”节点完成检索后输出检索结果text变量到"CODE"节点,"CODE"节点通过代码获取text文本中所有的url,并放入变量arg1。

流程进入“Iteration”迭代节点,“Iteration”依次从arg1中取出url进行相同的“JinaReader”->“LLM 2”->“Combine URL and Summary”流程处理,直到arg1中的所有url处理完毕。url传入“JinaReader”节点(Jina Reader可将任何网页URL转换成大型语言模型(LLM)友好的Markdown 格式,以提高大语言模型处理和理解网络内容的效率),返回网页内容的Markdown 格式,然后输入到“LLM 2”节点进行摘要化的处理,“LLM 2”输出的摘要信息传入“Combine URL and Summary”节点,“Combine URL and Summary”节点将url添加到摘要信息前进行输出,并完成一次迭代。

所有迭代完成后进入“Split URL and Text Summary”节点,通过代码去除分行符等多于字符,并拆分URL和文本摘要。然后通过“Result in Table”节点将URL和文本摘要信息转换为表格形式,通过“END”节点输出。

结束。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐