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/

相关推荐
RAY_01042 小时前
Python—数据可视化pyecharts
开发语言·python
春日见2 小时前
如何跑通,吃透一个开源项目?
linux·运维·开发语言·数码相机·matlab
DanyHope2 小时前
LeetCode 128. 最长连续序列:O (n) 时间的哈希集合 + 剪枝解法全解析
前端·leetcode·哈希算法·剪枝
技术净胜2 小时前
MATLAB数据清洗流程包含:缺失值处理/异常值检测/重复值删除
开发语言·matlab
SmoothSailingT2 小时前
C#——textBox控件(1)
开发语言·c#
GISer_Jing2 小时前
AI赋能前端:从核心概念到工程实践的全景学习指南
前端·javascript·aigc
|晴 天|2 小时前
前端事件循环:宏任务与微任务的深度解析
前端
不爱吃糖的程序媛2 小时前
Flutter-OH OAuth 鸿蒙平台适配详细技术文档
javascript·flutter·harmonyos
悦悦子a啊2 小时前
使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文
java·开发语言