免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


我要投稿

Aiops探索:在n8n工作流里调用Dify应用API

发布日期:2025-12-18 21:12:05 浏览次数: 1524
作者:阿铭linux

微信搜一搜,关注“阿铭linux”

推荐语

探索如何巧妙结合n8n工作流与Dify API,实现更高效的AIOps自动化流程。

核心内容:
1. Dify Agent在MCP工具调用上的优势解析
2. n8n工作流中集成Dify API的详细步骤
3. 流式数据处理的JavaScript代码实现方案

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家
↑ 点击关注,分享IT技术|职场晋升技巧|AI工具

研究Aiops有一段时间了,目前手里有不少可落地的方案了,接下来会把这些方案全部整理到我的大模型课程里。同时,欢迎大家把你遇到的场景在评论区留言。我会在能力范围内给你提供思路和建议。

昨天这篇文章dify" data-itemshowtype="0" linktype="text" data-linktype="2">Aiops探索:这个场景我决定放弃n8n而是选择Dify如果你看过,那你也就理解我为什么要在n8n里调用Dify了。

原因只有一个,Dify的Agent里调用MCP工具效果非常好,而n8n无法实现这样的效果。我既想用n8n的工作流但同时还想用Dify Agent的效果。所以就有了今天这篇文章。

首先,要了解如何访问Dify的API,点击左侧的访问API

就能看到Dify官方提供的API示例

点击右上角的“API 密钥”,先创建一个API key。然后通过这个curl命令来测一下API的连通性

说明:其中api_key就是你刚刚创建的密钥,query就是我们要发给这个agent的问题,files可以不带。

curl -X POST 'http://192.168.186.138/v1/chat-messages' \ --header 'AuthorizationBearer app-xxx' \ --header 'Content-Type: application/json' \ --data-raw '{  "inputs": {},  "query""查看ansible版本",  "response_mode""streaming",  "conversation_id""",  "user""n8n-user"}'

它返回的结果是一大堆数据块,这是因为我们用的是流式输出("response_mode""streaming")。

而Dify的Agent又不支持阻塞模式("response_mode""blocking"

也正是因为这个问题,我们必须要在n8n里增加一个code节点来拼凑这些数据块。下面来看看如何在n8n里调用Dify的API。

节点1:Chat Trigger

用来发送我们的指令,比如:“给主机aming01安装nginx”、“查看aming02机器的磁盘使用情况”、“检查aming03机器上是否运行mysql服务”等等

节点2:HTTP Request

这个节点用来请求Dify的API,具体的设置,请看以下截图

这些完全是根据前面那个curl命令来的。

节点3:code(JavaScript)

这个节点的作用就是将流式输出的数据块合成为一个文本,代码内容是这样的:

// 获取 HTTP Request 节点返回的原始字符串// 请确保前一个节点返回的字段名是 'data' (n8n HTTP Request 默认非 JSON 响应通常存在这)const rawData = items[0].json.data;
let fullAnswer = "";
if (rawData) {  // 1. 按行分割数据 (处理 SSE 流)  const lines = rawData.split('\n');
  // 2. 遍历解析  for (const line of lines) {    // 只处理以 "data: " 开头的有效行    if (line.startsWith('data: ')) {      // 去掉前缀,提取 JSON 字符串      const jsonStr = line.substring(6).trim(); 
      // 遇到 [DONE] 则结束      if (jsonStr === '[DONE]'break;
      try {        const json = JSON.parse(jsonStr);
        // 🎯 核心过滤逻辑:        // 只拼接 'agent_message' (Agent模式) 或 'message' (Chat模式)        // 自动过滤掉 'agent_thought' (思考过程) 和 'ping' 等无关信息        if (['agent_message''message'].includes(json.event)) {          fullAnswer += json.answer;        }
      } catch (e) {        // 忽略解析失败的行(防止因个别坏数据导致流程崩溃)      }    }  }}
// 3. 返回干净的结果// 大多数 n8n Chat Trigger 默认寻找 'text' 或 'output' 字段return [  {    json: {      text: fullAnswer  // 这里只包含最终拼接好的、易读的 Markdown 文本    }  }];

来看一下最终的效果


最后介绍下我的大模型课:我的运维大模型课上线了,目前还在预售期,有很大优惠。AI越来越成熟了,大模型技术需求量也越来越多了,至少我觉得这个方向要比传统的后端开发、前端开发、测试、运维等方向的机会更大,而且一点都不卷!

扫码咨询优惠(粉丝折扣大)

··············  END  ··············
哈喽,我是阿铭,《跟阿铭学Linux》作者,曾就职于腾讯,有着18年的IT从业经验,现全职做IT类职业培训:运维、k8s、大模型。日常分享运维、AI、大模型相关技术以及职场相关,欢迎围观。
         

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询