Ejemplo de métrica de evaluación: Similitud de cadenas

Intermedio

Este es unEngineering, AIflujo de automatización del dominio deautomatización que contiene 12 nodos.Utiliza principalmente nodos como Set, Code, Webhook, Evaluation, HttpRequest, combinando tecnología de inteligencia artificial para lograr automatización inteligente. Ejemplo de métrica de evaluación: Similitud de cadenas de texto

Requisitos previos
  • Punto final de HTTP Webhook (n8n generará automáticamente)
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Clave de API de OpenAI
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "bf40384a063e00f3b983f4f9bada22b57a8231a04c0fb48d363e26d7b0f2b7e7",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "b2a1a367-119f-4e2d-a982-ff675debf658",
      "name": "Nota adhesiva 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        -40
      ],
      "parameters": {
        "color": 7,
        "width": 180,
        "height": 260,
        "content": "Check how far apart the actual code is from the expected code (a score of 1 is a perfect match)"
      },
      "typeVersion": 1
    },
    {
      "id": "f5413855-20de-4b77-ba90-18610a9d9b4d",
      "name": "Nota adhesiva 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1300,
        40
      ],
      "parameters": {
        "width": 300,
        "height": 500,
        "content": "## How it works\nThis template shows how to calculate a workflow evaluation metric: **text similarity, measured character-by-character**.\n\nThe workflow takes images of hand-written codes, extracts the code and compares it with the expected answer from the dataset.\n\nThe images look like this:\n![image](https://storage.googleapis.com/n8n_template_data/handwriting_scans/doc20250302_08223946_001.jpg)\n\nYou can find more information on workflow evaluation [here](https://docs.n8n.io/advanced-ai/evaluations/overview), and other metric examples [here](https://docs.n8n.io/advanced-ai/evaluations/metric-based-evaluations/#2-calculate-metrics)."
      },
      "typeVersion": 1
    },
    {
      "id": "8921a4c4-cee1-44e7-8dce-55219db519d7",
      "name": "Nota adhesiva 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -960,
        280
      ],
      "parameters": {
        "color": 7,
        "width": 220,
        "height": 220,
        "content": "Read in [this test dataset](https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=1786963566#gid=1786963566) of images"
      },
      "typeVersion": 1
    },
    {
      "id": "fbf8337b-eb46-443a-8507-58a14b817be0",
      "name": "Verificar formato webhook",
      "type": "n8n-nodes-base.set",
      "position": [
        -680,
        340
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "=  {\n    \"headers\": {\n    },\n    \"params\": {},\n    \"query\": {\n      \"url\": {{ $json.file_url.toJsonString() }}\n    },\n    \"body\": {},\n    \"executionMode\": \"test\"\n  }"
      },
      "typeVersion": 3.4
    },
    {
      "id": "a03c9b79-d45d-4842-9325-df1af37697eb",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -900,
        40
      ],
      "webhookId": "7ceb775c-b961-44f0-acfe-682a67612332",
      "parameters": {
        "path": "7ceb775c-b961-44f0-acfe-682a67612332",
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "85bd63e2-3039-4f0e-8721-bc2b843461c9",
      "name": "Al obtener una fila del conjunto de datos",
      "type": "n8n-nodes-base.evaluationTrigger",
      "position": [
        -900,
        340
      ],
      "parameters": {
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=1786963566#gid=1786963566"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=1786963566#gid=1786963566"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "bpr2LoSELMlxpwnN",
          "name": "Google Sheets account David"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "4ed0b460-70af-4f1d-a7f3-97293f9b4ce0",
      "name": "Responder a Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        260,
        320
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "f1642aa1-94c5-4002-a7aa-533566dd20eb",
      "name": "¿Evaluando?",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        -20,
        200
      ],
      "parameters": {
        "operation": "checkIfEvaluating"
      },
      "typeVersion": 4.6
    },
    {
      "id": "15115588-b9ca-4e24-b7d8-f0aa0974b5dd",
      "name": "Establecer métricas",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        480,
        80
      ],
      "parameters": {
        "metrics": {
          "assignments": [
            {
              "id": "0e507b06-e6d5-4ace-aa22-f06c6db5b883",
              "name": "score",
              "type": "number",
              "value": "={{ $json.score }}"
            }
          ]
        },
        "operation": "setMetrics"
      },
      "typeVersion": 4.6
    },
    {
      "id": "af028132-c866-487d-be85-e3af049bc793",
      "name": "Extraer código de imagen",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -240,
        200
      ],
      "parameters": {
        "text": "=Extract ONLY the handwritten code in the top-right corner of this image.\n\nThe code MUST follow this EXACT format:\nBT/ED/[1-3 capital letters]/[1-3 capital letters]/[1-3 capital letters]/[1-3 capital letters or empty]/[single letter + number (2-4 chars total)]\n\nExamples of correct format:\nBT/ED/ABC/DE/F/G/H1\nBT/ED/A/BC/DEF/GH/I23\nBT/ED/AB/CD/EF/GH/I234\n\nDO NOT include any explanations, notes, or other text.\nDO NOT return anything if the code doesn't match the required format.\nVERIFY the extracted code matches the format before returning it.\nReturn ONLY the extracted code - nothing else.",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "resource": "image",
        "inputType": "base64",
        "operation": "analyze"
      },
      "credentials": {
        "openAiApi": {
          "id": "Ag9qPAsY7lpIGkvC",
          "name": "JPs n8n openAI key"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "50a26635-078f-40a7-8944-2e43ed8cd482",
      "name": "Calcular distancia de cadenas",
      "type": "n8n-nodes-base.code",
      "position": [
        260,
        80
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const expected_code = $('When fetching a dataset row').item.json.expected_output\nconst actual_code = $json.content\n\nfunction levenshteinDistance(str1, str2) {\n  const m = str1.length;\n  const n = str2.length;\n  const dp = Array(m + 1).fill().map(() => Array(n + 1).fill(0));\n\n  for (let i = 0; i <= m; i++) {\n    dp[i][0] = i;\n  }\n  \n  for (let j = 0; j <= n; j++) {\n    dp[0][j] = j;\n  }\n\n  for (let i = 1; i <= m; i++) {\n    for (let j = 1; j <= n; j++) {\n      if (str1[i - 1] === str2[j - 1]) {\n        dp[i][j] = dp[i - 1][j - 1];\n      } else {\n        dp[i][j] = 1 + Math.min(\n          dp[i - 1][j],     // deletion\n          dp[i][j - 1],     // insertion\n          dp[i - 1][j - 1]  // substitution\n        );\n      }\n    }\n  }\n\n  return dp[m][n];\n}\n\nconst dist = levenshteinDistance(\n  expected_code, \n  actual_code\n)\n\nconst max_dist = Math.max(\n  expected_code.length,\n  actual_code.length\n)\n\nconsole.log('truth', expected_code)\nconsole.log('effort', actual_code)\nconsole.log('dist', dist)\nconsole.log('max_dist', max_dist)\n\n$input.item.json.score = 1 - (dist / max_dist)\n\nreturn $input.item;"
      },
      "typeVersion": 2
    },
    {
      "id": "383db4b0-9665-4608-bbf9-3dca88508bff",
      "name": "Descargar imagen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -460,
        200
      ],
      "parameters": {
        "url": "={{ $json.query.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    }
  ],
  "pinData": {},
  "connections": {
    "a03c9b79-d45d-4842-9325-df1af37697eb": {
      "main": [
        [
          {
            "node": "383db4b0-9665-4608-bbf9-3dca88508bff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f1642aa1-94c5-4002-a7aa-533566dd20eb": {
      "main": [
        [
          {
            "node": "50a26635-078f-40a7-8944-2e43ed8cd482",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "4ed0b460-70af-4f1d-a7f3-97293f9b4ce0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "383db4b0-9665-4608-bbf9-3dca88508bff": {
      "main": [
        [
          {
            "node": "af028132-c866-487d-be85-e3af049bc793",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "50a26635-078f-40a7-8944-2e43ed8cd482": {
      "main": [
        [
          {
            "node": "15115588-b9ca-4e24-b7d8-f0aa0974b5dd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fbf8337b-eb46-443a-8507-58a14b817be0": {
      "main": [
        [
          {
            "node": "383db4b0-9665-4608-bbf9-3dca88508bff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "af028132-c866-487d-be85-e3af049bc793": {
      "main": [
        [
          {
            "node": "f1642aa1-94c5-4002-a7aa-533566dd20eb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "85bd63e2-3039-4f0e-8721-bc2b843461c9": {
      "main": [
        [
          {
            "node": "fbf8337b-eb46-443a-8507-58a14b817be0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Intermedio - Ingeniería, Inteligencia Artificial

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos12
Categoría2
Tipos de nodos9
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34