Dify基础学习
什么是Dify:简单来说就是一个开发平台,作用是可以不用一点点的自己写代码,快速搭建一个可以帮你干活的AI机器人,并且可以对外提供API,直接可以集成到业务系统
核心内置能力:
- RAG 知识库:上传 PDF/Word/TXT 文档,实现基于自有文档问答,降低大模型幻觉;
- 可视化工作流 Workflow:拖拽节点编排 AI 逻辑(分支判断、调用 HTTP 接口、代码执行、知识库检索);
- 提示词 Prompt 可视化管理;
- 支持对接几乎所有大模型:通义千问、DeepSeek、GPT、私有化本地大模型;
- 应用发布后提供 API 接口,前端 / 后端系统直接调用;
- 私有化部署
简介:
AI机器人也可以称之AI agent,agent翻译就是代理人,代理商,AI agent现在也叫智能体,区别于大模型单一的对话回答功能,agent自己有能实际动手干活的能力,可以帮你更专业更高效的解决实际的任务。可以写一个等式即:agent=大模型+工具
一,入门
入门Dify可以选择本地部署,参考网上的教程下载WSL2以及Docker,在拉取Github上的Dify源码,然后下载镜像运行就可以本地localhost登录了(由于我目前在实习,接入公司VPN对于配置环境有管控,直接使用 Dify 官方在线网页版 地址:https://dify.ai/,缺点就是存储空间有限、知识库容量受限,只适用于基础学习(最致命的是外网连接容易超时,科学上网即可)。以下操作仅基于网页版,如有不符只能请大家基于自己环境配置解决了。
登录页面后,需要先给Dify接入大模型,可以选择下载ollama(可以帮你本地管理运行大模型的工具),也可以直接云端大模型的调用API使用。
1.如果选择ollama,需要先去官网下载,然后根据自己电脑配置,选择一个适合的大模型下载到本地,在主页-集成-模型供应商找到ollama安装,在添加模型中通过对应的基础URL(http://localhost:11434或者http://localhost:11434Docker部署),然后就可以添加到ollama让他帮助你直接调用本地大模型进行交互。
2.如果选择通过API-key调用云端大模型,新手可以去阿里百炼平台注册,新用户有很多免费的token额度,我之前在DeepSeek里充了一部分额度,就以它为例,还是在模型供应商里,找到深度求索,直接配置API-key就可以使用
二,使用
提前提示一下,网页边Dify不会自动持久保存草稿,比如提示词和知识库的配置可能一刷新就没了,可以点击右上角发布,把所有配置保存到服务器。
*** 配置好大模型,在主页-工作室-创建中,有三个选项,1是创建空白应用(工作流和chatflow以及新手适用的聊天助手,agent,文本生成应用),2是从应用模版创建(不用自己造轮子,可以选择一些已经开发比较完善的框架),3是导入DSL文件(可以理解为把我自己做好的应用打包成一份yml/yaml文件,别人导入之后就可以直接一比一复刻一样的bot)
我已一个基础的聊天应用切入,在创建空白应用中选择新手适用中的聊天助手,之后在进入页面的左上角,可以选择对接的大模型,以及设置对应的一些参数。整个页面左右分快,右侧是调试与预览,可以在此进行对话调试,左侧是编排一系列参数,提示词,变量,知识库,元数据过滤,工具。先解释一下这几个名词,
1.提示词:写在这里的文字,会固定发给大模型,用来约束 AI 怎么回答,永久生效,每一轮对话都会带上这段指令,可以插入变量 {{input}}、知识库内容,控制语气、格式、角色、回答规则等。
2.变量:用来动态传入内容,实现灵活交互。比如请根据文档{{file_name}}回答用户问题:{{input}},可以理解为sql操作中的占位符,预留空位,运行时传入变量值。
3.知识库:上传 PDF、TXT、Markdown、文档资料等。 当用户提问时,Dify自动检索知识库中和问题相关片段,把片段一起发给大模型,让 AI基于你的资料回答,而不是单纯依靠模型自身知识。
4.元数据过滤:检索知识库时增加筛选条件,只查询满足标签条件的文档,过滤不需要的数据,避免检索无关资料。比如,知识库同时存放【订单模块文档】和【用户模块文档】 开启元数据过滤:当用户询问用户相关接口,只检索带标签的业务模块-》用户服务,过滤掉订单文档。
5.工具:通过接入工具,可以使大模型主动调用外部能力,接口,代码,不再只依靠自身数据和知识库回答。比如询问某地天气,大模型会先判断一下仅凭自身知识能否完成,不能就自动生成调用工具的参数,执行工具获得所需要的数据返回大模型
*** 下一步可以进行提示词的配置,建议把自己简单的想法喂给DeepSeek等其他的大模型,让AI生成一段提示词,我自己想做一个可以基于我自身情况来进行对未来职业规划以学习路线的聊天工具,AI生成的提示词有点长,这里我就不展示了,基于AI生成的可以自己再稍作修改,自己看起来比较合适就行。
配置变量这一步先行跳过,没想搞的太复杂,所以就不再添加。
*** 知识库的构建,说到知识库就不得不提到RAG(检索增强生成 Retrieval-Augmented Generation),这一部分大家应该都比较了解,简单概述一下就是先查资料,再交给 AI 回答,具体流程有:
1.文档上传->文本分割(分块Chunk)
2.向量还(Embedding)每一段文字转换成一串数字向量,语义相近的文本,向量距离更近
3.存入向量数据库
4.用户提问,问题向量化,去向量数据库检索(召回)相似度最高的文档片段(Retrieval)
5.把【用户问题 + 检索到的相关文档片段】一起打包发给大模型;AI 依据给到的资料回答,降低幻觉。
构建过程
先准备知识文档,一些外部的PDF,Word,TXT以及Excel,CSV,在主页面-知识库-创建,选择基础的创建实用性知识库,导入已有的文本就可以开始配置了,设置好分段标识符,最大长度,重叠长度(选择贴合自己文档的范围就行,可预览查看分段效果),选择向量模型和检索设置,就可以点击创建并命名,这样在知识库页面就可以看见已经创建好的知识库了。
这一步可以测试一下,在未连接外部知识库的情况下,问一下大模型比如前段时间最火的26年的世界杯冠军是谁,大模型果然在乱答,说目前是2026年卡塔尔世界杯,这就是明显的失误,外挂了我从网上下载的2026美加墨世界杯总览,再次询问就能准确回答了,但是是按照知识库回答,如果知识库有误相应的回答也是理论上错误的。
*** Function Calling的调用,这里一开始我是有点疑问的,就是大模型在自身知识不足以解决问题时,是先通过知识库进行检索相关问题,还是先直接调用工具来获取数据呢。这里我在反复询问AI后得到一个大致的答案,首先,这个优先级是可以设定的,行业的标准设计是先检索知识库,资料不足时才会触发function Call,而且主重要的一点,大模型在一开始回答问题时,不是先直接输出答案然后判断是否符合问题,因为它也不知道自己回答的对不对,正确的路径是先自己做思考判断,需要知识库的情况下做检索,一起交给大模型做第一轮判断,能回答了就返回,不能回答就调用工具,把知识库内容+工具返回数据全部交给模型,循环往复,直到用户提问的问题能完全回答,整合所有的信息生成最终答案,所以整个流程是不是判断对不对这种问题的,它只会判断用户需要的结果需要的数据我有没有,没有就找知识库找工具,有了我就组装返回。
正式的配置路线是在主页-集成-工具-工具插件,点开会发现已经有内置的部分工具,这里的工具就可以直接添加了(前提创建一个新的应用,不要选聊天助手,重新构建一个新的agent),最下方一栏的工具里可以直接添加已有的工具。但是官方网页提供的工具总是有限或者不合适的,如果我们有自己的一套工具,该如何接入Dify呢?
这里举一个最简单的例子来介绍如何将自己内部工具导入Dify,首先定义一个工具其实就是接口,接入Dify需要完整的地址,接口的请求方式一般都是POST,通信的格式统一为JSON,云端部署必须要做内网穿透,这里举一个简单的Python和Java代码解释。
因为我本人对SpringBoot项目比较熟悉,这里简单提一下具体怎么构建一个基础的工具,先进入自己的智能体,工具-添加,弹出来的页面里右上角有个加号,点击后就可进入创建自定义工具了,第一步先写Schema(接口参数规范约束),Dify依靠它来告知大模型,调用工具时入参出参的核心规则,这一部分可以结合需求让AI生成一个大致的规范,自行修改细枝。
这里尤其重要的参数是url,对于本地启动的http://localhost:8080项目,如果是本地部署通过ollama调用大模型,本地运行Dify的话,直接输入“http://localhost:8080/(你自己定义的POST接口比如/weather)”,如果是云端网页运行的Dify,本地运行的Springboot项目仅电脑自身可以访问,通过ngork或者其他工具做内网穿透,生成公网HTTPS地址,填入url。
下一步是进行测试,一般情况为了验证调用者有没有资格访问接口,需要做一层身份验证,请求发过来了做鉴权,代码逻辑简单写为:
String expectAuth = "Bearer " + VALID_TOKEN;
if (authHeader == null || !expectAuth.equals(authHeader)) {
return new WeatherResponse("认证失败,无效Token");
}
VILID_TOKEN可以设置为自己定义的值,请求头必须携带Authorization: Bearer 自己定义的VILID_TOKEN,和Content-Type:application/json,JSON 请求通用标准,@RequestBody 依赖它。
添加完成后可以在对话框里实际调用一下,能够显示已调用call the weather_post tool with location ""。就说明大模型没有在乱答,真正使用了工具。
***通过以上步骤,我们可以搭建一个基础的agent,包含背景信息的提示词,外挂相应的数据库,以及所需要调用的工具。
三,进阶
***基础的简单AI应用搭建已经完成,下面可以自行按照想法开始进阶工作了,在此之前还有一个知识点就是工作流。
所谓工作流,就是一种可视化的编排链路,设置工作流之后,可以不再单纯依靠大模型自由判断,人为定义好执行顺序。agent解决任务一般是通过ReAct模式,即思考->行动->观察->再思考->....... ,这种方式对于解决复杂问题时,大模型可以进行多轮思考,自我纠错,动态规划路径以及灵活调用工具,相应的缺点就是Token消耗和相应时间较高。简单概述一下就是,工作流是agent在特定场景下的一种确定的实现形式。
这里我再搭建一个简单的工作流,大佬们可以简单参考一下,就按照刚才的天气查询。先创建开始节点,接入用户的输入变量sys.query,再接LLM节点,提示词为从问题中提取城市名称,输出变量新建city,第三步接入工具节点,参数映射为location = city,工具内部也需要做鉴权,再次接入LLM2节点,接受weather_post的输出,提示词为输出相应固定的格式,输出最后创建结束节点,接收输出LLM2.text。

最终测试输入:今天济南天气怎么样?
输出:南京的天气如下:
天气状况:多云
当前温度:28℃
体感温度:30
风向:东南风
体感温度比实际温度略高,出门可能会觉得有些闷热,注意适当补水、做好防晒哦!
***发布与嵌入网站,自己做好的agent怎么想让别人使用呢?在开发应用是右上角基本都有会有个蓝色的按钮“发布”,这个其实不是真正的像发朋友圈一样让别人也能看到,它的作用只是对以及编辑的内容做保存,纯工作流只是后端执行的逻辑,运行可以进行验证是否符合预期,可以通过访问API,或者将其作为工具来对外调用。
之前的对话应用agent自带Web聊天的页面,发布按钮点开有一栏叫嵌入网站,点开可以看到三种嵌入网站的方式,第三者需要安装特定的浏览器,前两种可以复制相应的代码,打开一个简单的HTML网页,在<body></body>中加入复制的前端代码,进入HTML所在的文件夹输入python -m http.server 8000,Dify 嵌入聊天组件默认拦截file://本地访问,通过Python执行后浏览器输入http://127.0.0.1:8080/你的文件名.html 后即可访问并且右下角有个小机器人可点开对话。
第二种外接方式就是封装API接口,在发布的第四栏有一行访问API,在里面首先在右上角创建自己的API-key,

以我这个页面为例,下面就可以去Postman或者ApiFox发送请求验证是否可以通过API调用,首先请求的地址是POST后的
https://api.dify.ai/v1/chat-messages
然后在请求头里修改Authorization:Bearer 你的API-key,注意Bearer和API-key之间有空格,请求体Body中输入所必须的
{
"inputs": {},
"query": "你想提问的问题",
"response_mode": "streaming",
"user": "test001"
}
只要状态码是200就说明能够正常调用,具体情况下可能出现时间线内一直有输出,这是因为agent不支持blocking阻塞模式输出,stream流式输出时,前端SSE长连接会一边推理一边持续返回片段,在原本的网页端表现就是文字一个接一个的输出,后端请求时则每次都发送一个answer,内部就是模型回答的答案,一次可能仅含一两个字符或者换行符。
四,结语
至此,我作为一个小白的学习Dify的基础路线到此结束,多说一下我的背景,我也是计算机行业的小菜鸡,目前双非人工智能在读,开学大三,我从大一开始学c和c++,一直在刷一些算法题,到后来没啥重大进展也不太会解ACM里的题,大二上结束1的寒假开始转战Java,边学边做项目,从SE到Web,再到SpringCloud和SpringAI,全过一遍后通过vibe coding开始自己做项目,再到后来开始做简历找实习,本来准备六级和期末搬校区,等放假已经七月中旬了,这时候暑期实习真的太不好找,很多都是没回应,好在运气比较好遇到一家急招了,目前在这家应该算是小厂实习吧,感觉实习生的任务也不太多,第一天来先配置了环境拉取代码看了看,是基础的CRUD,基本都是对于数据库的增删改查,没活的时候就相当于带薪学习,这应该也算广义上的上班吧,很多想法跟以前确实不一样,之前刷视频看很多人逆袭大厂,也幻想自己能拿到大厂offer,直到自己找工作才发现就业形势以及很严峻了,真的连个实习都很难找到,可能也是我自己的问题,投简历可以去公司官网投,在boos和智联等招聘软件要多更新在线简历等等,由于我也是个小白,能提供的帮助也非常有限,作为我写的第一篇博客,整体耗时大概两天半,原本的目的就是记录一下自己的学习路线,并且以后遗忘可以有所回顾,有任何错误的地方欢迎指出,以及对于Java学习和实习面试等相关内容欢迎一起讨论。
更多推荐


所有评论(0)