Beispiel für Bewertungsmetriken: String-Ähnlichkeit

Fortgeschritten

Dies ist ein Engineering, AI-Bereich Automatisierungsworkflow mit 12 Nodes. Hauptsächlich werden Set, Code, Webhook, Evaluation, HttpRequest und andere Nodes verwendet, kombiniert mit KI-Technologie für intelligente Automatisierung. Beispiel für Bewertungsmetriken: Zeichenfolgenähnlichkeit

Voraussetzungen
  • HTTP Webhook-Endpunkt (wird von n8n automatisch generiert)
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
  • OpenAI API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "bf40384a063e00f3b983f4f9bada22b57a8231a04c0fb48d363e26d7b0f2b7e7",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "b2a1a367-119f-4e2d-a982-ff675debf658",
      "name": "Notizzettel1",
      "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": "Notizzettel3",
      "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": "Notizzettel4",
      "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": "Match webhook format",
      "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-Trigger",
      "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": "When fetching a dataset row",
      "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": "Respond to Webhook-Trigger",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        260,
        320
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "f1642aa1-94c5-4002-a7aa-533566dd20eb",
      "name": "Evaluating?",
      "type": "n8n-nodes-base.evaluation",
      "position": [
        -20,
        200
      ],
      "parameters": {
        "operation": "checkIfEvaluating"
      },
      "typeVersion": 4.6
    },
    {
      "id": "15115588-b9ca-4e24-b7d8-f0aa0974b5dd",
      "name": "Setzen metrics",
      "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": "Extract code from image",
      "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": "Calc string distance",
      "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": "Download image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -460,
        200
      ],
      "parameters": {
        "url": "={{ $json.query.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    }
  ],
  "pinData": {},
  "connections": {
    "Webhook": {
      "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": "Respond to Webhook",
            "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": "Set metrics",
            "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
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Engineering, Künstliche Intelligenz

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes12
Kategorie2
Node-Typen9
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34