Dify保姆级教程:部署、智能体、工作流到后端API

张开发
2026/4/13 11:18:47 15 分钟阅读

分享文章

Dify保姆级教程:部署、智能体、工作流到后端API
Dify是一个开源的大型语言模型LLM应用开发平台旨在简化AI应用的创建、部署和管理过程。它提供了一个直观的可视化界面让开发者甚至非技术人员都能快速构建基于大语言模型的应用。包括可视化工作流、多模型支持、RAG引擎、API快速集成、可观测性与运维、开源与自托管等。该篇博客从本地部署到Dify平台使用都有介绍并且通过MCP Agent连接MySQL实现基于数据库真实数据进行问答。一、相关部署1.1 前期准备Dify在github上给出了硬性要求需要满足条件任务管理器 》性能 》虚拟化开启控制面板 》程序 》启用或关闭程序勾选Virtual Machine PlatformWindows虚拟机监控程序平台适用于Linux 的 Windows子系统命令行安装wsl检查wsl版本wsl --status没有安装过会显示进行安装wsl.exe --install置默认版本为wsl2wsl --set-default-version 21.2 docker安装windows版点击进入官网Docker官网https://www.docker.com/选择AMD64进行下载而后直接双击安装包下载即可新版的docker无需勾选任何选项直接下载也无需下载Docker Compose测试docker安装最后运行出 Hello from Docker表示运行成功# docker版本 docker --version # docker compose版本 docker-compose --version # 测试运行 docker run hello-world安装好docker后需要进行登录qq邮箱也行然后进行一个配置点击右上角的设置按钮选择Docker Engine在其中配置Docker的镜像registry-mirrors: [ https://docker.m.daocloud.io, https://hub-mirror.c.163.com ]1.3 dify本地部署在github上下载dify的文件Dify Github源码https://github.com/langgenius/dify下载好后在docker-main 》 docker 路径下将.env.example的文件后缀名该文.env修改好后在该路径下进行下载安装docker-compose up -d配置好后在浏览器中输入以下网址即可进入本地部署的Dify端口默认80localhost:80/install随后进行一个用户配置即可注意在使用Dify前确保Docker是在运行的1.4 Ollama本地部署在Ollama官网下载windows版本下载好后直接install即可Ollama官网https://ollama.com/在安装包下载好后在导航栏输入即可进入若显示running则表示安装成功端口默认11434http://localhost:11434/现在开始在ollama中下载部署本地模型在ollama官网点击 Models进入模型搜索选择页面选择自己所需模型即可这里博主选择的是ChatGLM3-6B模型是 ChatGLM 系列最新一代的开源模型保留了前两代模型对话流畅、部署门槛低等众多优秀特性复制命令在命令行中回车下载即可最终效果为二、Dify使用2.1 智能体2.1.1 使用ollama本地部署模型首先在docker文件夹的.env文件中添加接受模型调用地址# 启用自定义模型 CUSTOM_MODEL_ENABLEDtrue # 指定 Ollama 的API地址 OLLAMA_API_BASE_URLhost.docker.internal:11434在点击右上角个人头像框 》设置 》模型供应商 》安装Ollama下载好ollama后选择 添加模型模型名称处要与ollama下载时的名称一致基础url即为Ollama指定的API地址http://host.docker.internal:11434配置成功2.1.2 调用API模型下载通义插件选择添加模型点击进入阿里云百炼选择密钥管理创建API Key并复制记得开启免费额度用完即停将复制好的API Key输入模型选择qwen-max自己选择即可对API 密钥进行授权配置重复操作即可2.1.3 Dify中创建agent将模型配置好后本地/API任选其一我们开始在Dify中创建Agent智能体应用回到Dify首页点击Agent如果直接在全部中创建不会显示agent和聊天助手选项点击创建空白应用这里我们选择Agent创建此时会自动匹配好调用模型可以供用户自主选择配置好之后就能使用了2.2 知识库返回首页选择知识库 》创建知识库选择导入已有文本选择文件然后点击下一步对文本进行分段与清洗选择自己所需参数其中Top K标识对在排名前x名的数据进行引用Score阈值则为当大于该阈值的才进入筛选进行排名引用保存并处理当状态显示为可以时即成功2.3 ChatFlow在实际使用中更多的是需要一些流程判断以及MCP插件来支持业务逻辑的实现所以选择直接通过ChatFlow工作流编排来实现业务效果此处博主将直接使用毕设案例进行操作直接进行创建ChatFlow工作流成功后如图而后直接删除LLM和直接问答自主根据需求编排现在博主要编排一个功能包括病虫害防治/生长预测和建议/用户问答功能的工作流实现在用户输入处编写一些变量name表示病虫害/作物名称type表示当前类型用于判断是防治还是生长相关参数如下变量参数设置好后开始编排逻辑选择逻辑条件分支通过type值来判断工作流走向何处此处我们设定当type是1时为病虫害防治type是2时为农作物生长预测与建议都不满足时进入用户问答2.3.1 智能问答由于是用户直接进行问答对话所以在后面直接添加LLM模型直接回复即可2.3.2 病虫害防治从这里开始我们需要用到MCP进行数据库内容的调用了点击右上角 插件 》探索Marketplace 》搜索sql 》安装数据库查询用于连接本地数据库对所属数据进行查询再下载一个Agent策略通过MCP对mysql进行调用全部安装好后回到ChatFlow工作流中在type是1的后面添加Agent在Agent中选择AGENT策略 》Agent 》FunctionCalling选择模型在工具列表点击号添加工具 》插件 》数据库查询 》SQL查询配置MySQL相关参数填写指令SQL查询时的指令和查询智能体的指令在Agent后添加 知识检索 节点添加所需要的引用知识库在 知识检索 后添加LLM在上下文处选择 知识检索的result在LLM处选择上下文后需要在SYSTEM中引用在其中编写提示词将Agent查询数据表的数据与Dify知识库的数据相结合最后添加直接输出在回复中点击 {x} 选择LLM2的text即可text为模型生成内容reasoning_content为模型推理内容usage为模型用量信息2.3.3 农作物生长在此部分重复上述操作即可取决于是否需要查询本地数据库表内内容以及引用Dify知识库最终得到注意在编排好后记得点击右上角发布发布更新ChatFlow会根据用户输入的参数进行对应路径的流转如图所示三、后端调用API3.1 智能体在智能体中选择右上角 发布选择 访问API在目录中选择 发送对话消息点击直接copy复制这里博主使用Apifox进行演示操作选择导入curl将复制内容填入导入后对相关参数进行修改在Body处将user改为用户名在Headers处将Authorization中{api_key}值替换为当前密钥点击右上角 API密钥 》创建密钥 》复制将相关参数修改后就能使用了query为用户提问效果如图3.2 ChatFlow同上点击右上角 》访问API 》选择 发送对话消息 》复制粘贴于Apifox中同样的修改相关参数即可3.3 知识库可以参考官网内容Dify数据库操作列表https://docs.dify.ai/api-reference/%E7%9F%A5%E8%AF%86%E5%BA%93/%E8%8E%B7%E5%8F%96%E7%9F%A5%E8%AF%86%E5%BA%93%E5%88%97%E8%A1%A8但是官网内容粘贴后无法直接使用缺少必要参数博主也是浏览了其他帖子才API请求成功现在给出完整参数。首先配置密钥知识库的密钥不在具体数据库内而在首页进行选择3.3.1 新增知识库修改网址、密钥、模型参数后即可使用curl --location --request POST http://xxx/v1/datasets \ --header Authorization: Bearer xxx \ --header Content-Type: application/json \ --data-raw { name: , description: , indexing_technique: high_quality, permission: all_team_members, provider: vendor, external_knowledge_api_id: , external_knowledge_id: , embedding_model: multimodal-embedding-v1, embedding_model_provider: tongyi, retrieval_model: { search_method: hybrid_search, reranking_enable: true, reranking_mode: reranking_model, reranking_model: { reranking_provider_name: tongyi, reranking_model_name: gte-rerank-v2 }, top_k: 3, score_threshold_enabled: true, score_threshold: 0.5, weights: {model_name: 0.5} } }注意在新增后记住新增知识库的id因为在Dify平台是看不见知识库id的。也可以选择使用 查询知识库列表 来查看每个知识库的详细信息其中就包含id3.3.2 删除知识库curl --location --request DELETE http://xxx/v1/datasets/知识库id \ --header Authorization: Bearer xxx3.3.3 更新知识库curl --location --request PATCH http://xxx/v1/datasets/知识库id \ --header Authorization: Bearer xxx \ --header Content-Type: application/json \ --data-raw { name: , description: , indexing_technique: high_quality, permission: all_team_members, embedding_model_provider: tongyi, embedding_model: multimodal-embedding-v1, retrieval_model: { search_method: hybrid_search, reranking_enable: true, reranking_mode: reranking_model, reranking_model: { reranking_provider_name: tongyi, reranking_model_name: gte-rerank-v2 }, top_k: 3, score_threshold_enabled: true, score_threshold: 0.5, weights: {model_name: 0.5} }, partial_member_list: [ { user_id: Dify } ] }3.3.4 查询知识库列表curl --location --request GET http://xxx/v1/datasets?page1limit20 \ --header Authorization: Bearer xxx3.3.5 新增文件在对应数据库下新增文件curl --location --request POST http://xxx/v1/datasets/知识库id/document/create-by-file \ --header Authorization: Bearer dataset-hzKxz6vnM21UqRQtL0FLppiu \ --form data{ \name\: \测试文档\, \indexing_technique\: \high_quality\, \doc_form\: \hierarchical_model\, \process_rule\: { \mode\: \hierarchical\, \rules\: { \pre_processing_rules\: [ { \id\: \remove_extra_spaces\, \enabled\: true } ], \segmentation\: { \separator\: \\\n\\n\, \max_tokens\: 2000 }, \parent_mode\: \paragraph\, \subchunk_segmentation\: { \separator\: \\\n\, \max_tokens\: 200 } } }, \retrieval_method\: { \search_method\: \hybrid_search\, \hybrid_search\: { \semantic_weight\: 0.7, \full_text_weight\: 0.3 }, \top_k\: 3 } } \ --form file注意将file的类型改为file3.3.6 修改文件curl --location --request POST https://xxx/v1/datasets/知识库id/documents/文件id/update-by-file \ --header Authorization: Bearer xxx \ --form data{ \doc_form\: \hierarchical_model\, \process_rule\: { \mode\: \hierarchical\, \rules\: { \pre_processing_rules\: [ { \id\: \remove_extra_spaces\, \enabled\: true } ], \segmentation\: { \separator\: \\\n\\n\, \max_tokens\: 2000 }, \parent_mode\: \paragraph\, \subchunk_segmentation\: { \separator\: \\\n\, \max_tokens\: 200 } } } } \ --form fileD:\\Desktop\\附件5安全责任书(1).docx3.3.7 删除文件同样需要知识库和文件的idcurl --location --request DELETE http://xxx/v1/datasets/知识库id/documents/文件id \ --header Authorization: Bearer xxx3.3.8 获取知识库的文档列表curl --location --request GET http://xxx/v1/datasets/知识库id/documents?page1limit20 \ --header Authorization: Bearer xxx自此Dify的本地部署、工作流编排和API基础使用就已经介绍完毕后续发现Dify的其余新用法后进行更新

更多文章