This workflow corresponds to n8n.io template #16570 — we link there as the canonical source.
This workflow follows the Agent → Form Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "nU5cHDTOVwh6jiEI",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Prompt Evaluation Pipeline",
"tags": [],
"nodes": [
{
"id": "460b4c4d-481b-48a6-86d0-5ad86b61d552",
"name": "Dataset Generator",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
320,
-112
],
"parameters": {
"text": "=Generate an evaluation dataset for the following AI prompt.\n\n<Prompt>\n{{ $('When Form Submitted').first().json.prompt }}\n</Prompt>\n\nGenerate exactly {{ $('When Form Submitted').first().json.dataset_size }} evaluation cases.\n\nEach evaluation case must contain:\n\n- category\n- difficulty\n- question\n\nDistribute the questions across these categories whenever applicable:\n\n- Core Knowledge\n- Reasoning\n- Instructions Following\n- Edge Cases\n- Ambiguous Requests\n- Safety\n- Out of Scope\n\nUse this difficulty distribution:\n\n- 30% Easy\n- 50% Medium\n- 20% Hard\n\nReturn this JSON schema:\n\n[\n {\n \"id\": 1,\n \"category\": \"Core Knowledge\",\n \"difficulty\": \"Easy\",\n \"question\": \"...\" (2000 character max),\n }\n]\n",
"options": {
"systemMessage": "You are an expert AI Evaluation Engineer specializing in prompt benchmarking and LLM evaluation.\n\nYour task is to generate high-quality evaluation datasets for AI systems.\n\nGiven a prompt describing an AI assistant, create a representative evaluation dataset that thoroughly tests the assistant's capabilities, limitations, and expected behavior.\n\nThe dataset must:\n\n- Cover the assistant's primary use cases.\n\n- Include a balanced mix of Easy, Medium, and Hard questions.\n\n- Include edge cases.\n\n- Include ambiguous requests.\n\n- Include out-of-scope questions.\n\n- Include safety and jailbreak attempts when relevant.\n\n- Avoid duplicate or overly similar questions.\n\n- Ensure every expected answer represents the ideal assistant response.\n\nThe expected answers should be concise but complete enough to serve as a reliable reference during automated grading.\n\nReturn ONLY valid JSON.\n\nDo not include explanations, Markdown, comments, or additional text."
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "d1f73ec3-9684-40f2-bfee-23426ce0ffe7",
"name": "Answer Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1504,
64
],
"parameters": {
"text": "={{$json.question}}",
"options": {
"systemMessage": "={{ $('When Form Submitted').item.json.prompt }}"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "8a8662f7-fb02-4cdc-ae1b-7ff5aaae0fe4",
"name": "Grader Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2016,
176
],
"parameters": {
"text": "=Original prompt:\n<evaluation_question>\n{{$('Prepare Evaluation Item').item.json.question}}\n</evaluation_question>\n\nResponse to evaluate:\n<response>\n{{$json.output}}\n</response>",
"options": {
"systemMessage": "You are an expert prompt evaluator. You task is to evaluate the AI-generated response.\n\nOutput Format\nProvide your evaluation as a structured JSON object with the following fields, in this specific order:\n- \"strengths\": An array of 1-3 key strengths\n- \"weaknesses\": An array of 1-3 key areas for improvement\n- \"reasoning\": A concise explanation of your overall assessment\n- \"score\": A number between 1-10\n\nRespond with JSON. Keep your response concise and direct.\nExample response shape:\n{\n\"strengths\": string[],\n\"weaknesses\": string[],\n\"reasoning\": string,\n\"score\":0-10,\n}"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "3a4bfed4-b2a0-4313-ad04-839d8c3d8a5c",
"name": "Synthesis Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1744,
-256
],
"parameters": {
"text": "=Here is the complete graded dataset for this evaluation run.\n\nPrompt under evaluation:\n<prompt>\n{{ $('When Form Submitted').item.json.prompt }}\n</prompt>\n\nDomain: {{ $('When Form Submitted').item.json.domain }}\nModel evaluated: {{ $('When Form Submitted').item.json.model }}\nTotal items graded: {{ $json.total_items }}\n\nGraded results:\n<results>\n{{ $json.results_json }}\n</results>\n\n---\n\nProduce the evaluation report using exactly this structure:\n\n## Overall score\nAverage score (x.x / 10) + one-sentence verdict.\n\n## Score breakdown\nPer category: name | count | avg score | one-line note.\nPer difficulty: Easy / Medium / Hard avg scores.\n\n## Top 3 strengths\nOne line each. Include one example quote (max 15 words).\n\n## Top 3 weaknesses\nOne line each. Name the category and difficulty where it appears most.\n\n## Failure patterns\n2-3 lines max. Name categories and difficulty tiers only.\n\n## Recommendations\n3 numbered items. Format: Problem \u2192 Change \u2192 Expected impact. One line each.\n\n## Verdict\n2 sentences max. Production-ready? Single most important fix.",
"options": {
"systemMessage": "You are an expert AI Evaluation Analyst. Your role is to produce a concise, actionable evaluation report from a completed prompt benchmarking run.\n\nYou will receive a JSON array of graded evaluation items. Each item contains:\n- category: the test category (Core Knowledge, Reasoning, Edge Cases, etc.)\n- difficulty: Easy / Medium / Hard\n- question: the test input\n- response: the AI-generated answer\n- strengths: array of strengths identified by the grader\n- weaknesses: array of weaknesses identified by the grader\n- reasoning: grader's overall assessment\n- score: numeric score from 1 to 10\n\nYour report must be structured, honest, and directly useful for prompt iteration.\nNever hallucinate metrics \u2014 compute everything strictly from the provided data.\n\nYour entire report must fit in 200 characters maximum. Format: score | top strength | top weakness | #1 fix. No filler.\nReturn only this single line, no preamble, no Markdown.\n\nReturn only the report text, no preamble, no Markdown code fences."
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "9a9f2d74-cbfe-4e7b-b3cc-dd967f35e935",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-448
],
"parameters": {
"width": 640,
"height": 896,
"content": "## \ud83e\uddea AI Prompt Evaluation Pipeline\n\nTest and score any AI prompt automatically \u2014 from dataset generation to final report.\n\nSubmit a prompt, choose a model and a number of test cases, and this workflow handles \nthe rest: it generates a tailored evaluation dataset, runs every test case through your \nprompt, grades each response with an LLM-as-Judge, and saves a full report to Notion \n\u2014 all without manual intervention.\n\n## Who it's for\n\nPrompt engineers, AI developers, and PMs who want to validate an assistant's quality \nbefore shipping to production \u2014 or track prompt performance across iterations.\n\n## What it does\n\n1. Generates a representative test dataset from your prompt (configurable number of cases)\n2. Runs each test case through the prompt under evaluation\n3. Grades every response with an LLM-as-Judge (score 1\u201310, strengths, weaknesses, reasoning)\n4. Saves individual results to a Notion database\n5. Produces a synthesis report (score breakdown, failure patterns, recommendations) in Notion\n\n## How to set up\n\n1. Create a free [OpenRouter](https://openrouter.ai) account and generate an API key\n2. Add your OpenRouter credential in n8n (used by all 4 LLM nodes)\n3. Add your Notion credential in n8n (used by the 2 Notion nodes)\n4. Create the Notion database using the schema in the **\ud83d\udcbe Save Item to Notion** sticky note\n5. Copy your Notion database ID and parent page ID into the **\u2699\ufe0f Config** node\n6. Open the evaluation form and submit your first prompt\n\n## Requirements\n\n- OpenRouter account + API key\n- Notion account + integration configured in n8n\n- Notion database matching the expected schema (see sticky note)\n\n## How to customize\n\n- **Number of test cases**: set in the form (default: 50)\n- **Model**: select from the dropdown in the form, or edit the LLM nodes directly\n- **Grader model**: hardcoded to `openai/gpt-oss-120b:free` \u2014 change in the \u2696\ufe0f Grader Agent LLM node\n- **Synthesis format**: edit the system prompt in \ud83d\udcdd Synthesis Agent to adjust report structure"
},
"typeVersion": 1
},
{
"id": "f43b1b8e-e808-4dde-a855-588632d7a06b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
-416
],
"parameters": {
"color": 7,
"width": 336,
"height": 272,
"content": "## \u2699\ufe0f Configuration\n\nEdit the **Config** node to set your Notion IDs:\n\n- `NOTION_DATABASE_ID` \u2192 ID of the database where individual results are saved\n- `NOTION_PARENT_PAGE_ID` \u2192 ID of the page where the synthesis report is created\n\nTo find a Notion ID: open the page/database in browser \u2192 copy the 32-char string from the URL."
},
"typeVersion": 1
},
{
"id": "40a31cbe-d290-42a4-b0e7-3d9ac3332bdd",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1328,
-976
],
"parameters": {
"color": 7,
"width": 464,
"height": 272,
"content": "## \ud83d\udcbe Notion Database Schema\n\nCreate a Notion database with these exact property names and types:\n\n| Property | Type |\n|---|---|\n| Category | Title |\n| Difficulty | Select (Easy / Medium / Hard) |\n| Question | Rich Text |\n| Response | Rich Text |\n| Strengths | Rich Text |\n| Weaknesses | Rich Text |\n| Reasoning | Rich Text |\n| Score | Number |"
},
"typeVersion": 1
},
{
"id": "131c0331-9d45-4ef3-a5d0-d10d55292b7f",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
-432
],
"parameters": {
"color": 7,
"width": 352,
"height": 256,
"content": "## \ud83d\udd01 Evaluation Loop\n\nFor each test case:\n- **Answer Agent** runs the prompt under evaluation\n- **Grader Agent** scores the response (JSON: strengths, weaknesses, reasoning, score)\n- Result is saved to Notion + fed into the final aggregation"
},
"typeVersion": 1
},
{
"id": "ea94ddfd-04e2-4b92-be5a-a5ea918896a7",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
-496
],
"parameters": {
"color": 7,
"width": 512,
"height": 208,
"content": "## \ud83d\udcdd Synthesis Report\n\nAfter all items are graded:\n- **Aggregate Results** collects all scored items into a single JSON\n- **Synthesis Agent** produces a structured report (overall score, breakdown by category/difficulty, top strengths, critical weaknesses, recommendations)\n- Report is saved as a Notion page under the configured parent page"
},
"typeVersion": 1
},
{
"id": "3f8569df-aeae-4a3c-93b2-37e95f418872",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
112
],
"parameters": {
"color": 7,
"width": 400,
"height": 256,
"content": "## \ud83e\uddea Dataset Generator\n\nGenerates a representative evaluation dataset from your prompt.\n\nEach test case includes:\n- **Category**: Core Knowledge / Reasoning / Instructions Following / Edge Cases / Ambiguous Requests / Safety / Out of Scope\n- **Difficulty**: 30% Easy \u2014 50% Medium \u2014 20% Hard\n\nDefault: 50 test cases. Adjust in the form before running."
},
"typeVersion": 1
},
{
"id": "cc0cccbc-ba6b-4706-9429-ba982f402687",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1408,
416
],
"parameters": {
"color": 7,
"width": 384,
"height": 240,
"content": "## \ud83e\udd16 Answer Agent\n\nRuns the prompt under evaluation against each test case.\n\n- System prompt = the prompt submitted in the form\n- User message = the test question\n- Model = selected in the form (configurable)\n\nTo test a different prompt, simply submit the form again."
},
"typeVersion": 1
},
{
"id": "75b8b520-1f39-4122-a48d-d21f9d4e6f58",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1936,
480
],
"parameters": {
"color": 7,
"width": 432,
"height": 272,
"content": "## \u2696\ufe0f Grader Agent\n\nScores each response using LLM-as-Judge.\n\nReturns a JSON object with:\n- `strengths`: 1\u20133 key strengths\n- `weaknesses`: 1\u20133 areas for improvement\n- `reasoning`: overall assessment\n- `score`: 1\u201310\n\nModel is hardcoded to `openai/gpt-oss-120b:free`. Change in the LLM node if needed."
},
"typeVersion": 1
},
{
"id": "d3b90a61-cc48-47f8-a15e-05d2acd199a5",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
-304
],
"parameters": {
"color": 7,
"width": 320,
"height": 192,
"content": "## \ud83d\udcc4 Save Report to Notion\n\nCreates a Notion page under the configured parent page with:\n- The prompt that was evaluated\n- The full synthesis report (score breakdown, strengths, weaknesses, recommendations)\n"
},
"typeVersion": 1
},
{
"id": "2c89d36a-9b64-4fef-93c9-87e64bf8b86f",
"name": "When Form Submitted",
"type": "n8n-nodes-base.formTrigger",
"position": [
-224,
-112
],
"parameters": {
"options": {},
"formTitle": "Evaluate AI prompt quality with LLM-as-Judge and save results to Notion",
"formFields": {
"values": [
{
"fieldName": "prompt",
"fieldType": "textarea",
"fieldLabel": "Prompt",
"requiredField": true
},
{
"fieldName": "dataset_size",
"fieldType": "number",
"fieldLabel": "Dataset size",
"defaultValue": "50"
},
{
"fieldName": "model",
"fieldType": "dropdown",
"fieldLabel": "Model",
"defaultValue": "openai/gpt-oss-120b:free",
"fieldOptions": {
"values": [
{
"option": "openai/gpt-oss-120b:free"
},
{
"option": "openai/gpt-oss-20b:free"
},
{
"option": "openrouter/free"
}
]
}
}
]
},
"formDescription": "Test any AI prompt automatically \u2014 from dataset generation to final report.\n\nEnter your prompt, pick a model, and the workflow generates a tailored evaluation dataset, runs every test case, grades each response with an LLM-as-Judge, and saves a full synthesis report to Notion."
},
"typeVersion": 2.5
},
{
"id": "4e4dc780-1f76-47dc-993b-43d027b0a7c5",
"name": "Set Notion IDs",
"type": "n8n-nodes-base.set",
"position": [
16,
-112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "6bf61ae5-229b-4df2-b075-e75a59f28392",
"name": "NOTION_PARENT_PAGE_ID",
"type": "string",
"value": "Your notion parent page ID"
},
{
"id": "ae0933b6-e7a9-41f0-b4c3-7bddac240463",
"name": "NOTION_DATABASE_ID",
"type": "string",
"value": "Your notion database ID"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6d0d918a-7457-46ef-87b1-905331f4a70a",
"name": "OpenAI Dataset Generator",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
192,
96
],
"parameters": {
"model": "openai/gpt-oss-120b:free",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "639434d7-0fa0-43c7-9e9a-1675e5108c0e",
"name": "OpenAI Answer Agent",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1440,
272
],
"parameters": {
"model": "={{ $('When Form Submitted').item.json.model }}",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "ea37d64b-ce63-4029-a903-8128ab6baefb",
"name": "OpenAI Grader Agent",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1920,
352
],
"parameters": {
"model": "openai/gpt-oss-120b:free",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "66c932ab-0f91-475b-9c30-0484a44afa6d",
"name": "OpenAI Synthesis Agent",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1696,
-80
],
"parameters": {
"model": "openai/gpt-oss-120b:free",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "fbc53c65-6e9a-4d03-a351-bfab4497be78",
"name": "Prepare Evaluation Item",
"type": "n8n-nodes-base.code",
"position": [
1328,
64
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "\nreturn $json;"
},
"typeVersion": 2
},
{
"id": "e65cf5da-97f1-416f-ac1c-ecbfae23435c",
"name": "Extract Grader Results",
"type": "n8n-nodes-base.code",
"position": [
2544,
608
],
"parameters": {
"jsCode": "const item = $(\"Prepare Evaluation Item\").first().json;\n\nconst grader_response = $input.first().json.output ?? $input.first().json.text ?? \"\";\n\nconst cleaned = grader_response\n .replace(/^```json\\s*/i, \"\")\n .replace(/^```\\s*/i, \"\")\n .replace(/\\s*```$/i, \"\")\n .trim();\n\nlet formatted_response;\n\ntry {\n formatted_response = JSON.parse(cleaned);\n} catch (error) {\n return [{\n json: {\n ...item,\n response: $('Answer Agent').first().json.output,\n strengths: [],\n weaknesses: [],\n reasoning: 'Grader returned invalid JSON \u2014 skipped.',\n score: null,\n error: true\n }\n }];\n}\n\nreturn [\n {\n json: {\n ...item,\n response : $('Answer Agent').first().json.output,\n ...formatted_response\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "0280faf7-0128-48aa-8bab-d0358e338b5a",
"name": "Collate Evaluation Results",
"type": "n8n-nodes-base.code",
"position": [
1504,
-256
],
"parameters": {
"jsCode": "const items = $input.all().map(item => ({\n category: item.json.category,\n difficulty: item.json.difficulty,\n question: item.json.question,\n response: item.json.response,\n strengths: item.json.strengths,\n weaknesses: item.json.weaknesses,\n reasoning: item.json.reasoning,\n score: item.json.score\n}));\n\nreturn [{\n json: {\n total_items: items.length,\n results_json: JSON.stringify(items, null, 2)\n }\n}];"
},
"typeVersion": 2
},
{
"id": "96a0db2f-fd06-4d4a-aae9-49fe641d9169",
"name": "Upload Report to Notion",
"type": "n8n-nodes-base.notion",
"position": [
2096,
-256
],
"parameters": {
"title": "Synthesis",
"pageId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Notion IDs').first().json.NOTION_PARENT_PAGE_ID }}"
},
"blockUi": {
"blockValues": [
{
"type": "heading_1",
"textContent": "Prompt"
},
{
"textContent": "={{$('When Form Submitted').first().json.prompt}}"
},
{
"type": "heading_1",
"textContent": "Evaluation"
},
{
"textContent": "={{ $json.output }}"
}
]
},
"options": {}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "23e1e2dc-0e63-4bbc-bd12-ebd3fae07ceb",
"name": "Upload Item to Notion",
"type": "n8n-nodes-base.notion",
"position": [
1488,
-672
],
"parameters": {
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Set Notion IDs').first().json.NOTION_DATABASE_ID }}"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Category|title",
"title": "={{ $json.category }}"
},
{
"key": "Difficulty|select",
"selectValue": "={{ $json.difficulty }}"
},
{
"key": "Question|rich_text",
"textContent": "={{ $json.question }}"
},
{
"key": "Response|rich_text",
"textContent": "={{ $json.response.slice(0,2000) }}"
},
{
"key": "Strengths|rich_text",
"textContent": "={{ $json.strengths.join(' | ') }}"
},
{
"key": "Weaknesses|rich_text",
"textContent": "={{ $json.weaknesses.join(' | ') }}"
},
{
"key": "Reasonning|rich_text",
"textContent": "={{ $json.reasoning }}"
},
{
"key": "Score|number",
"numberValue": "={{ $json.score }}"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "7c4bbb3c-e495-49f8-a873-eb88bf179306",
"name": "Batch Process Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1056,
-112
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "55094cc9-d6d5-47ed-bb54-9c8b4023600f",
"name": "Flatten Dataset Code",
"type": "n8n-nodes-base.code",
"position": [
768,
-112
],
"parameters": {
"jsCode": "const response = $input.first().json.output ?? $input.first().json.text ?? \"\";\n\nconst cleaned = response\n .replace(/^```json\\s*/i, \"\")\n .replace(/^```\\s*/i, \"\")\n .replace(/\\s*```$/i, \"\")\n .trim();\n\nlet dataset;\n\ntry {\n dataset = JSON.parse(cleaned);\n} catch (error) {\n throw new Error(`Invalid JSON returned by Dataset Generator.\\n${error.message}`);\n}\n\nreturn dataset;"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "70744fdd-3be0-4404-802b-e96dccc3f4fc",
"connections": {
"Answer Agent": {
"main": [
[
{
"node": "Grader Agent",
"type": "main",
"index": 0
}
]
]
},
"Grader Agent": {
"main": [
[
{
"node": "Extract Grader Results",
"type": "main",
"index": 0
}
]
]
},
"Set Notion IDs": {
"main": [
[
{
"node": "Dataset Generator",
"type": "main",
"index": 0
}
]
]
},
"Synthesis Agent": {
"main": [
[
{
"node": "Upload Report to Notion",
"type": "main",
"index": 0
}
]
]
},
"Dataset Generator": {
"main": [
[
{
"node": "Flatten Dataset Code",
"type": "main",
"index": 0
}
]
]
},
"Batch Process Items": {
"main": [
[
{
"node": "Collate Evaluation Results",
"type": "main",
"index": 0
},
{
"node": "Upload Item to Notion",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Evaluation Item",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Answer Agent": {
"ai_languageModel": [
[
{
"node": "Answer Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Grader Agent": {
"ai_languageModel": [
[
{
"node": "Grader Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"When Form Submitted": {
"main": [
[
{
"node": "Set Notion IDs",
"type": "main",
"index": 0
}
]
]
},
"Flatten Dataset Code": {
"main": [
[
{
"node": "Batch Process Items",
"type": "main",
"index": 0
}
]
]
},
"Extract Grader Results": {
"main": [
[
{
"node": "Batch Process Items",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Synthesis Agent": {
"ai_languageModel": [
[
{
"node": "Synthesis Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Prepare Evaluation Item": {
"main": [
[
{
"node": "Answer Agent",
"type": "main",
"index": 0
}
]
]
},
"Upload Report to Notion": {
"main": [
[]
]
},
"OpenAI Dataset Generator": {
"ai_languageModel": [
[
{
"node": "Dataset Generator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Collate Evaluation Results": {
"main": [
[
{
"node": "Synthesis Agent",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
notionApiopenRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow collects a prompt and model choice via an n8n Form, uses OpenRouter LLMs to generate an evaluation dataset, run the prompt against each test case, and grade the responses, then saves per-item results and a synthesized one-line report to Notion. Receives prompt,…
Source: https://n8n.io/workflows/16570/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Deep Research new (fr). Uses outputParserStructured, formTrigger, chainLlm, form. Event-driven trigger; 82 nodes.
Book Summary. Uses formTrigger, executeWorkflowTrigger, form, notion. Event-driven trigger; 39 nodes.
The AI-Powered Shopify SEO Content Automation is an enterprise-grade workflow that transforms product content creation for e-commerce stores. This sophisticated multi-agent system integrates GPT-4o, C
Who is this for? Agencies, consultants, and service providers who conduct discovery calls and need to quickly turn conversations into professional proposals.
🧠 Automate end-to-end SEO blog creation and WordPress publishing using a GPT-5 multi-agent workflow with real-time research, metadata generation, and optional featured images.