n8n+GPT-4o一次解析多张图片

javascript 复制代码
{
  "name": "GPT-4o识图",
  "nodes": [
    {
      "parameters": {
        "options": {
          "allowFileUploads": true
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.4,
      "position": [
        16,
        -32
      ],
      "id": "96716511-0e3b-4b29-9154-8da836ec4907",
      "name": "When chat message received",
      "webhookId": "572da347-91ff-4fe5-8f83-add5f3f8c4ab",
      "alwaysOutputData": false,
      "executeOnce": false,
      "retryOnFail": false
    },
    {
      "parameters": {
        "resource": "image",
        "operation": "analyze",
        "modelId": {
          "__rl": true,
          "value": "gpt-4o-mini",
          "mode": "list",
          "cachedResultName": "GPT-4O-MINI"
        },
        "text": "={{ $json.chatInput }}",
        "inputType": "base64",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 2.1,
      "position": [
        464,
        -32
      ],
      "id": "f27c56da-4941-4ac6-9b07-8a06b62051c4",
      "name": "Analyze image",
      "credentials": {
        "openAiApi": {
          "id": "2NGP0rW0STRYkHov",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "let arr = []\n\nfor (const item of $input.all()) {\n  if (Array.isArray(item.json.files) && item.json.files.length > 0) {\n    for(let i = 0; i < item.json.files.length; i++) {\n      arr.push({\n        json: { ...item.json }, \n        binary:  { data: item.binary['data'+ i] } \n      })\n    }\n  }\n}\nreturn arr\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        -32
      ],
      "id": "bff438f2-9fc4-4798-bd66-d1e4ffe6a514",
      "name": "文件转换格式"
    },
    {
      "parameters": {
        "jsCode": "let arr = []\n\nfor (const item of $input.all()) {\n  item.json.myNewField = 1;\n  console.log('第二个', item)\n  arr.push({\n    text: item.json[0].content[0].text \n  })\n  \n}\nreturn [{\n  json: {\n    result: arr\n  }\n}]\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        656,
        -32
      ],
      "id": "a3940550-f170-44ef-a7c4-c3e41f0c1549",
      "name": "输出结果聚合"
    }
  ],
  "pinData": {},
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "文件转换格式",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze image": {
      "main": [
        [
          {
            "node": "输出结果聚合",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "文件转换格式": {
      "main": [
        [
          {
            "node": "Analyze image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "442998d4-038b-4f21-90f7-97c7754145d3",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "e6d562a11669b4d2f353eafef58b0a2d41d2839326a8b4201a24f4610bf43de1"
  },
  "id": "10ceEDPo4QyCYKcg",
  "tags": []
}

聊天窗口支持上传图片

文件转换格式节点

chat节点上传多个图片时,默认只有一个item,多张图片使用不同的key挂载到这个item上

使用这个节点,把一个item转换成多个item

多个图片解析生成多个结果

javascript 复制代码
let arr = []

for (const item of $input.all()) {
  if (Array.isArray(item.json.files) && item.json.files.length > 0) {
    for(let i = 0; i < item.json.files.length; i++) {
      arr.push({
        json: { ...item.json }, 
        binary:  { data: item.binary['data'+ i] } 
      })
    }
  }
}
return arr

Analyze image节点

输出结果聚合

把多个item合并到一个item,聊天窗口仅支持一个item

javascript 复制代码
let arr = []

for (const item of $input.all()) {
  item.json.myNewField = 1;
  console.log('第二个', item)
  arr.push({
    text: item.json[0].content[0].text 
  })
  
}
return [{
  json: {
    result: arr
  }
}]

参考链接

https://chat.xutongbao.top/n8n/

相关推荐
朦胧之几秒前
页面白屏卡住排查方法
前端·javascript
用户59360874140几秒前
Playwright 黑魔法:用 ClipboardEvent 绕过 React 富文本编辑器
前端
石山岭31 分钟前
自己动手写了一个 Android 虚拟定位 App:GPSSimulate 技术实
android·前端
犇驫聊AI1 小时前
Chrome DevTools MCP + Claude Code 自定义skills生成接口代码生成器
前端·javascript
kyriewen1 小时前
别再这样写 async/await 了:我在 Code Review 中见过最多的 8 个错误
前端·javascript·面试
hoLzwEge1 小时前
node-linker VS shamefully-hoist
前端·前端框架
袋鱼不重1 小时前
解决 Web 端图片预览与下载颜色不一致的一种工程方案
前端·后端
风止何安啊1 小时前
教你用 JS + AI 实现简单的爬虫,零门槛爬取网页信息
前端
cidy_981 小时前
codebase-memory-mcp 新手完全教程:让 AI 真正「理解」你的代码库
前端
牛奶2 小时前
HTTPS你不知道的事
前端·https·浏览器