​ 之前有写过小智ai的介绍,它提供了流畅且丰富的用户语音交互能力。n8n提供了灵活且稳定的后台工作流的能力,如果这两个工具进行组合,可以打造一个好玩又好用的智能ai应用。

​ 我这里使用了官方提供的mcp服务来联动这两个工具,主要是借用小智ai与n8n的开源优越性。
在这里插入图片描述

1 小智ai的版本

​ 我之前有写过介绍了的(虾哥小智AI助手python电脑端初体验_虾哥 小智-CSDN博客 ),我目前使用的是黄俊森之前的一版,目前作者已经在github版本更新了,把之前外挂mcp服务的形式,改为新版本集成了。不过我这里还是使用的老版本,我使用的版本地址,提取码: phil。

2 n8n的配置

在这里插入图片描述

​ 这里使用的是Webhook节点、Respond to Webhook节点,分别作为post、response的对象。其中,Webhook节点的节点配置如下:

  • HTTP Method: POST
  • Authentication: Header Auth 这里在header中加入了自己定义的api_key,这一步也可以不添加。
  • Respond: Using ‘Respond to Webhook’ Node 这里需要选择使用Respond to Webhook节点响应。
  • Options: data 这里接收小智ai客户端post来的参数信息。

在这里插入图片描述
在这里插入图片描述

​ Respond to Webhook节点这里,我配置的信息有:

Respond With: JSON

Response Body :

{
“task_id”: “{{ $(‘Webhook’).item.json.body.task_id }}”,
“workflow_id”: "{{ KaTeX parse error: Expected 'EOF', got '}' at position 15: workflow.name }̲}", "status":…json.output.toJsonString()}}
}

Options: Response Code 200

Response Headers: 自定义配置吧,也可以不配置

在这里插入图片描述

在这里插入图片描述

​ AI Agent这里的System Message,需要好好打磨和调试,因为它是工具调用的灵魂,我这里提供一个demo

你是一位用户需求智能响应管家,你必须使用中文回复,你必须根据用户的需求信息进行分析,然后进行反馈。

这里是用户的输入信息:{{ $(‘Webhook’).item.json.body.user_input}}

你的任务1:
如果用户的输入信息中含有"百度热点"关键词,你必须运行获取百度热点工具,并把该工具的输出信息反馈给用户,按照这里的格式输出:获取了6条信息:1.热点信息1、2.热点信息2、

你的任务2:
如果用户的输入信息中明确提到不知道你的能力,可以把你的工具介绍给用户,只介绍工具名称。

在这里插入图片描述
在这里插入图片描述

​ n8n除了可以添加tool工具外,还支持工作流调用子工作流,需要准确的System Message进行调度识别。

3 mcp的demo

​ 这里是一个requests的demo,添加在mcp的server服务中即可。

@mcp.tool()
def start_n8n_workflow(user_input: str) -> dict:
    """Open n8n workflow with the given user_input.then return the result of the workflow."""
    import requests
    import json
    import time

    # 从配置文件读取n8n相关配置
    BASE_WEBHOOK_URL = "你的n8n中的webhook地址"
    X_N8N_API_KEY = "你自定义的api_key"
    # 请求头设置
    headers = {
        "Content-Type": "application/json",
        "X-N8N-API-KEY": X_N8N_API_KEY
    }
    # 生成时间戳作为task_id
    task_id = str(int(time.time()))

    # 请求数据
    data = {
        "user_input": user_input,
        "task_id": task_id
    }
    try:
        # 发送POST请求
        response = requests.post(
            BASE_WEBHOOK_URL + WEBHOOK_ID,
            headers=headers,
            data=json.dumps(data)
        )
        # 处理响应
        # 检查请求是否成功
        if response.status_code == 200:
            logger.info(f"n8n workflow 请求成功,状态码: 200 ok ")
            
            data = response.json()
            result = data.get('result')
        else:
            logger.info(f"n8n workflow 请求失败,状态码: {response.status_code}")
            result = f"n8n workflow 请求失败,状态码: {response.status_code}"

        return {"success": True, "result": result}
    except Exception as e:
        logger.info(f"发送请求时发生错误: {str(e)}")
        return {"success": False, "result": str(e)}

4 工作流json

​ 保存下面的文本为json文件,在n8n工作流编辑器页面点击从文件导入即可。
在这里插入图片描述

{
  "name": "xz_n8n_assistant",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "6eb7f60e-23e3-4074-963a-6f42dee63e69",
        "authentication": "headerAuth",
        "responseMode": "responseNode",
        "options": {
          "binaryPropertyName": "data"
        }
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -896,
        -384
      ],
      "id": "d4752292-416d-4bef-8de2-60be70d66cdb",
      "name": "Webhook",
      "webhookId": "6eb7f60e-23e3-4074-963a-6f42dee63e69",
      "credentials": {
        "httpHeaderAuth": {
          "id": "9FNAq5gcbSRzHtBQ",
          "name": "Header Auth account 2"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "根据用户输入的需求信息,调用工具,最后用中文输出",
        "options": {
          "systemMessage": "=你是一位用户需求智能响应管家,你必须使用中文回复,你必须根据用户的需求信息进行分析,然后进行反馈。\n\n这里是用户的输入信息:{{ $('Webhook').item.json.body.user_input}}\n\n你的任务1:\n如果用户的输入信息中含有\"百度热点\"关键词,你必须运行获取百度热点工具,并把该工具的输出信息反馈给用户,按照这里的格式输出:获取了6条信息:1.热点信息1、2.热点信息2、\n\n你的任务2:\n如果用户的输入信息中明确提到不知道你的能力,可以把你的工具介绍给用户,只介绍工具名称。\n\n\n\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.1,
      "position": [
        -704,
        -384
      ],
      "id": "d34bbdfd-e881-41b6-a184-513987862e7c",
      "name": "AI Agent",
      "retryOnFail": false,
      "maxTries": 2,
      "executeOnce": true,
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "=openai/gpt-oss-120b",
          "mode": "id"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -704,
        -176
      ],
      "id": "ba7a8eb0-0d48-4872-92f0-75c9863ed48e",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "Hm8gyQkgPUkOVBi6",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"task_id\": \"{{ $('Webhook').item.json.body.task_id }}\",\n  \"workflow_id\": \"{{ $workflow.name }}\",\n  \"status\": \"success\",\n  \"result\": {{$json.output.toJsonString()}}\n}",
        "options": {
          "responseCode": 200,
          "responseHeaders": {
            "entries": [
              {
                "name": "X-N8N-API-KEY",
                "value": "n8n_12345"
              },
              {
                "name": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ]
          }
        }
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.4,
      "position": [
        -304,
        -384
      ],
      "id": "ab850bdd-6ef4-46b8-be98-818a6683bdb4",
      "name": "Respond to Webhook"
    },
    {
      "parameters": {
        "toolDescription": "一个获取百度热点的工具",
        "url": "https://api.1314.cool/getbaiduhot/",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        -512,
        -160
      ],
      "id": "5ca81a09-cd74-45c2-97d7-ce656fd01d76",
      "name": "HTTP-百度热点",
      "alwaysOutputData": false
    }
  ],
  "pinData": {},
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "HTTP-百度热点": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b5a76a30-1562-4353-b29f-4d7da92a2b86",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "1f16bc26aa41d68046a6cd33330705e84dc6e662ed18adf783908c69e188965b"
  },
  "id": "F17dzJC0t32JuQX3",
  "tags": []
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐