This workflow corresponds to n8n.io template #12827 — we link there as the canonical source.
This workflow follows the Airtable → Chainllm 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 →
{
"nodes": [
{
"id": "9ca3f3bd-7c5c-4d5f-9484-147e21f49ab9",
"name": "Download PDF",
"type": "n8n-nodes-base.googleDrive",
"position": [
1216,
608
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "7b9a905c-e9ce-4976-bae6-5e557689fa1d",
"name": "Extract PDF Text",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1440,
608
],
"parameters": {
"options": {
"keepSource": "binary"
},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "531bc118-781a-4ce8-9f28-59a1ebf02f56",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
4144,
640
],
"parameters": {
"options": {},
"jsonData": "={{ $('Cut of bibliography').item.json.info.Custom }}\n{{ $('Cut of bibliography').item.json.metadata }}\n{{ $('Cut of bibliography').item.json.text_cleaned }}",
"jsonMode": "expressionData"
},
"typeVersion": 1.1
},
{
"id": "3178736a-ef7c-433b-9b8f-1a242e0f6aa9",
"name": "Default Data Loader1",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
4096,
1040
],
"parameters": {
"options": {},
"jsonData": "={{ $('Cut of bibliography').item.json.info.Custom }}\n{{ $('Cut of bibliography').item.json.metadata }}\n{{ $('Cut of bibliography').item.json.text_cleaned }}",
"jsonMode": "expressionData"
},
"typeVersion": 1.1
},
{
"id": "c326a15f-b329-4be6-98f1-a296f6e91e2a",
"name": "Default Data Loader2",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
4080,
1456
],
"parameters": {
"options": {},
"jsonData": "={{ $('Cut of bibliography').item.json.info.Custom }}\n{{ $('Cut of bibliography').item.json.metadata }}\n{{ $('Cut of bibliography').item.json.text_cleaned }}",
"jsonMode": "expressionData"
},
"typeVersion": 1.1
},
{
"id": "299adc62-3a6d-4bd9-9711-5665197ee9b5",
"name": "Embeddings Google Gemini",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
3936,
1456
],
"parameters": {},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d47672ba-ef0e-4ed5-9a1b-350a104d598e",
"name": "Embeddings Google Gemini1",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
3952,
1040
],
"parameters": {},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "ace691a3-2216-42be-9959-fed7ab0e644d",
"name": "Embeddings Google Gemini2",
"type": "@n8n/n8n-nodes-langchain.embeddingsGoogleGemini",
"position": [
3968,
640
],
"parameters": {},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "099262de-5dd7-4720-b6d9-2df151e36e0a",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
944,
592
],
"parameters": {
"options": {
"reset": false
}
},
"typeVersion": 3
},
{
"id": "ac4f98af-6ef7-418c-aa87-e97ebd78cef3",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
384,
592
],
"parameters": {},
"typeVersion": 1
},
{
"id": "57fd7572-519d-466e-b331-55e8c3064a14",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2176,
768
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"DOI\": \"string\",\n \"Author\": \"string\",\n \"Titel\": \"string\",\n \"Abstract\": \"string\",\n \"Decision\": \"Included or excluded\",\n \"Decision Reasoning\": \"string\",\n \"Score\": \"number\",\n \"Additional notes\": \"string\"\n}"
},
"typeVersion": 1.3
},
{
"id": "080599d6-359a-48ae-a060-35450b6c7a4e",
"name": "Google Gemini Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2080,
880
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2f2c6118-0fb4-4442-865c-5c2ec07c853e",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
2512,
608
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0236dbb1-2ba5-46fc-aa3a-ff525084ed1e",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.Decision }}",
"rightValue": "Included"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "3b65637b-5cd0-439a-9eb3-69736e431ada",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2976,
576
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"DOI\": \"Extracted DOI string or 'Not Found'\",\n \"Author\": \"Extracted Authors\",\n \"Titel\": \"Extracted Title\",\n \"Mechanism\": \"Iterative Self-Correction / Debate Mechanismen\",\n \"Abstract\": \"Summary of content (max 3 sentences)\",\n \"Decision\": \"Included\",\n \"Decision Reasoning\": \"Detailed summary of strengths/weaknesses based on the checklist scores.\",\n \"Score\": 15,\n \"Additional notes\": \"Optional observations or empty string\"\n}"
},
"typeVersion": 1.3
},
{
"id": "b5f9c81d-a0df-4a9e-9c6f-a4ae03f2b4e5",
"name": "Google Gemini Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
3088,
720
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "27cecd6b-9eee-4c59-825a-f05e90de1c8d",
"name": "Search files and folders",
"type": "n8n-nodes-base.googleDrive",
"position": [
688,
592
],
"parameters": {
"filter": {
"driveId": {
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "167cyFTL95Xo0z5hWO250raqIvryIeHp8",
"cachedResultUrl": "https://drive.google.com/drive/folders/167cyFTL95Xo0z5hWO250raqIvryIeHp8",
"cachedResultName": "INBOX"
},
"whatToSearch": "files"
},
"options": {},
"resource": "fileFolder",
"returnAll": true,
"searchMethod": "query"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "ccbb01d2-23bc-4efc-a8d0-0eb1ff25210c",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1888,
768
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "=openai/gpt-oss-20b"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "d140f251-8959-4291-8e15-11d279e1317a",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2784,
592
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "=openai/gpt-oss-20b"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "1022012e-ed01-4283-9177-7c76e263c6a3",
"name": "\ud83d\udccb Overview: SLR Paper Review Agent",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
-368
],
"parameters": {
"color": "yellow",
"width": 544,
"height": 592,
"content": "## SLR Paper Review Agent\n\nThis workflow automates systematic literature review (SLR) for academic papers. It downloads papers from Google Drive, applies strict inclusion/exclusion criteria using LLM agents, logs decisions to Airtable, and stores included papers in Qdrant vector stores for semantic search.\n\n### How it works\n1. Searches and downloads papers from Google Drive\n2. Extracts text from PDF files\n3. Applies LLM-based review against 4 inclusion criteria (IC) and 4 exclusion criteria (EC)\n4. Routes papers based on review decision\n5. Logs all decisions to Airtable with reasoning\n6. Stores included papers in Qdrant with Gemini embeddings\n7. Organizes files into included/excluded folders\n\n### Setup steps\n1. Connect Google Drive credentials for paper access\n2. Configure Airtable base and table for decision logging\n3. Set up Qdrant instances for vector storage (up to 3 collections)\n4. Configure LLM credentials (OpenAI GPT-4, Google Gemini)\n5. Customize inclusion/exclusion criteria in the Basic LLM Chain node\n7. Customize scoring criteria in the second Basic LLM Chain node\n6. Adjust file organization folders as needed"
},
"typeVersion": 1
},
{
"id": "16251c5a-8106-401d-9f1e-0be3cf8a0493",
"name": "Stage 1: Paper Input & Extraction",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
272
],
"parameters": {
"color": 7,
"width": 1648,
"height": 720,
"content": "## Stage 1: Paper Input & Extraction\n\nSearches Google Drive for papers, downloads PDFs, and extracts text content for review."
},
"typeVersion": 1
},
{
"id": "33d738c7-31a3-4725-9391-047f43e92005",
"name": "Stage 2: LLM-Based SLR Review",
"type": "n8n-nodes-base.stickyNote",
"position": [
1808,
272
],
"parameters": {
"color": 7,
"width": 672,
"height": 736,
"content": "## Stage 2: LLM-Based SLR Review\n\nApplies strict inclusion/exclusion criteria using LLM agents. Evaluates papers against IC (4 criteria) and EC (4 criteria) with PRISMA documentation."
},
"typeVersion": 1
},
{
"id": "ce169d05-c0a9-4110-9bc6-738164a991ef",
"name": "Stage 3: Decision Routing & Logging",
"type": "n8n-nodes-base.stickyNote",
"position": [
2480,
272
],
"parameters": {
"color": 7,
"width": 1040,
"height": 736,
"content": "## Stage 3: Decision Routing & Logging\n\nRoutes papers based on review decision (Included/Excluded). Logs all decisions to Airtable with DOI, authors, title, reasoning, and score."
},
"typeVersion": 1
},
{
"id": "4774df2b-a20f-49f9-8617-3e0f673d9268",
"name": "Stage 4: Vector Store & File Organization",
"type": "n8n-nodes-base.stickyNote",
"position": [
3520,
272
],
"parameters": {
"color": 7,
"width": 1616,
"height": 1392,
"content": "## Stage 4: Vector Store & File Organization\n\nStores included papers in Qdrant collections with Gemini embeddings. Organizes all papers into included/excluded folders."
},
"typeVersion": 1
},
{
"id": "4dcc0f90-3688-483d-8a9a-5f71f4d0555e",
"name": "Log Excluded Paper",
"type": "n8n-nodes-base.airtable",
"position": [
2672,
848
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appMIPges4F2ST4Sm",
"cachedResultUrl": "https://airtable.com/appMIPges4F2ST4Sm",
"cachedResultName": "SLR"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbltF6eQKLmLth73e",
"cachedResultUrl": "https://airtable.com/appMIPges4F2ST4Sm/tbltF6eQKLmLth73e",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"DOI": "={{ $json.output.DOI }}",
"Score": 0,
"Titel": "={{ $json.output.Titel }}",
"Author": "={{ $json.output.Author }}",
"Abstract": "={{ $('SLR Agent').item.json.output.Abstract }}",
"Decision": "={{ $('SLR Agent').item.json.output.Decision }}",
"Additional notes": "={{ $('SLR Agent').item.json.output['Additional notes'] }}",
"Decision Reasoning": "={{ $('SLR Agent').item.json.output['Decision Reasoning'] }}"
},
"schema": [
{
"id": "DOI",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "DOI",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Author",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Author",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Titel",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Titel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Abstract",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Abstract",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Decision",
"type": "options",
"display": true,
"options": [
{
"name": "Excluded",
"value": "Excluded"
},
{
"name": "Included",
"value": "Included"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Decision",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Decision Reasoning",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Decision Reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Additional notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Additional notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "66099deb-0697-43de-852f-283450910c97",
"name": "Move file to Excluded Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
2896,
848
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Loop Over Items').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1PCQCVbps32P08Ojng944kqXmMDiGfU6e",
"cachedResultUrl": "https://drive.google.com/drive/folders/1PCQCVbps32P08Ojng944kqXmMDiGfU6e",
"cachedResultName": "Process Excluded"
},
"operation": "move"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "60ca27c8-2505-4c17-9033-519e0b705abe",
"name": "SLR Agent",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1984,
608
],
"parameters": {
"text": "=This is the paper: \n {{ $json.info.Author }}\n{{ $json.info.Creator }}\n{{ $json.info.Title }}\n{{ $json.metadata }}\n{{ $json.text_cleaned }}\n\n\n",
"batching": {},
"messages": {
"messageValues": [
{
"message": "### ROLE You are a strict academic reviewer conducting a Systematic Literature Review (SLR) on \"LLM Self-Improvement and Debate Mechanisms\". Your ONLY task is to strictly filter the provided paper based on the defined Inclusion Criteria (IC) and Exclusion Criteria (EC). \n\n### INCLUSION CRITERIA (IC) - Reject if ANY are missing or incomplete: - **IC 1: Technisches Protokoll & Transparenz:** Das Paper muss nicht nur das Base LLM nennen, sondern auch dessen spezifische Version (z. B. GPT-4-Turbo-1106-preview) sowie mindestens einen zentralen Hyperparameter wie die Temperatur angeben. Ohne diese Angaben ist die Validit\u00e4t f\u00fcr einen methodischen Vergleich nicht gegeben. - **IC 2: Spezifikation der Verbesserungsschleife (Intervention):** Die Studie muss die Architektur des Self-Improvement-Mechanismus (z. B. Feedback-Zyklus, Prompt-Chaining oder Multi-Agent-Interaktion) so detailliert beschreiben, dass der Prozess methodisch nachvollziehbar ist. - **IC 3: Komparative Evidenz gegen Baselines (Comparison):** Das Paper muss die Ergebnisse des Self-Improvement-Mechanismus explizit gegen eine definierte Baseline (z. B. Standard Zero-Shot oder Single-Agent Chain-of-Thought) vergleichen. Rein isolierte Leistungswerte ohne Vergleichsbasis reichen nicht aus. - **IC 4: Verwendung anerkannter Benchmarks (Outcomes):** Die Evaluation muss auf standardisierten Datens\u00e4tzen (z. B. GSM8K, MMLU, QuALITY) oder wissenschaftlich fundierten Metriken (z. B. Elo-Rating, Accuracy, Performance Gap Recovered) basieren. \n\n ### EXCLUSION CRITERIA (EC) - Reject if ANY are met: - **EC 1: Mangelnde Bias-Kontrolle:** Studien, die bekannte KI-Verzerrungen wie den Positional Bias (Antwortreihenfolge) oder Verbosity Bias (bevorzugt l\u00e4ngere Antworten) ignorieren oder keine Gegenma\u00dfnahmen (z. B. Swapping Answers, Word Limits) dokumentieren, werden aufgrund mangelnder Qualit\u00e4t ausgeschlossen. - **EC 2: Fehlender Fokus auf die interne Iteration:** Schlie\u00dfe Paper aus, die LLMs lediglich als statische Werkzeuge nutzen, ohne eine interne Feedback- oder Reflexionsschleife zu implementieren, in der das Modell seine eigene Ausgabe bewertet oder modifiziert. - **EC 3: Unzureichende Datenextraktion (Ambiguity):** Studien, deren Ergebnisse zu vage dargestellt sind oder bei denen die Datenextraktion zu zweideutig ist, um den tats\u00e4chlichen Effekt der Intervention zu bestimmen, m\u00fcssen ausgeschlossen werden. - **EC 4: Redundante Publikationen:** Sollten mehrere Versionen derselben Studie vorliegen, wird nur die vollst\u00e4ndigste Version (i. d. R. das Journal-Paper) eingeschlossen. ### TASK 1. Analyze the full paper text thoroughly. 2. Evaluate against every single IC and EC. 3. Check ICs: If ANY IC is not fully met -> EXCLUDE (State exactly which IC failed). 4. Check ECs: If ANY EC is met -> EXCLUDE (State exactly which EC was triggered). 5. Final Decision: Only if ALL ICs are met AND NO ECs are met -> INCLUDE. 6. PRISMA Documentation: For every excluded paper, provide a one-sentence justification based on the criteria (e.g., \"Excluded based on IC 4: No specific Base LLM mentioned\"). ### OUTPUT FORMAT Return ONLY a valid JSON object. { \"DOI\": \"Extracted DOI or 'Not Found'\", \"Author\": \"Extracted Authors\", \"Titel\": \"Extracted Title\", \"Decision\": \"Included\" OR \"Excluded\", \"Decision Reasoning\": \"Strict PRISMA justification. MUST start with the criteria ID if excluded (e.g., 'Excluded based on IC 1: ...' or 'Excluded based on EC 2: ...'). If Included, write 'Passed all criteria'.\" }"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "d4736b18-844a-4ed6-b018-fb4ef6b8ed86",
"name": "Scoring Agent",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2848,
384
],
"parameters": {
"text": "=This is the Paper: {{ $('Cut of bibliography').item.json.info.Custom }}\n{{ $('Cut of bibliography').item.json.metadata }}\n{{ $('Cut of bibliography').item.json.text_cleaned }}\n",
"batching": {},
"messages": {
"messageValues": [
{
"message": "### ROLE You are an expert academic reviewer. The provided paper has already passed the strict inclusion criteria. Your task is now to perform a \"Full Text Review\", classify the mechanism used, and calculate a quality score (0-20 points). ### MECHANISM CLASSIFICATION Analyze which of the following three categories best describes the core mechanism of the paper. Choose the ONE that fits best: 1. **Self-Referential Prompting** (Definition: Models autonomously generate new prompts or modify existing inputs based on their own outputs.) 2. **Reflective Evaluation** (Definition: Models evaluate and critique their own answers, typically through explicit \"Reflection Prompts\" or external feedback loops.) 3. **Iterative Self-Correction / Debate Mechanismen** (Definition: Models use dialogue-based structures, e.g., Multi-Agent Debates, to generate competing answers, compare them, and converge on a better result.) ### SCORING RULES Evaluate the paper against the 10 criteria below. Rate each criterion on a scale of **0 to 2**: - **2 Points:** Vollst\u00e4ndig erf\u00fcllt / klar dokumentiert. - **1 Point:** Teilweise erf\u00fcllt / unklar dargestellt. - **0 Points:** Nicht vorhanden / unzureichend. ### QUALITY CHECKLIST (Criteria) **Teil A: Methodische Validit\u00e4t (Grundlagen)** 1. **Klarheit des Mechanismus:** Beschreibt das Paper den Self-Improvement-Prozess (z. B. Feedback-Schleife, Rollen im Debate) so detailliert, dass er theoretisch replizierbar ist? 2. **Angemessenheit der Baseline:** Wird die Methode gegen anerkannte Baselines (z. B. Zero-shot, Standard CoT) verglichen, um den tats\u00e4chlichen Mehrwert zu belegen? 3. **G\u00fcte der Validierung:** Wurde die Methode an mehr als einem Datensatz oder mit verschiedenen Modell-Familien (z. B. GPT-4 und Llama) getestet? **Teil B: Technische Pr\u00e4zision (KI-Spezifika)** 4. **Modell-Transparenz (Kern-Parameter):** Wird nicht nur das Basis-Modell, sondern auch die spezifische Version (z. B. GPT-4-1106-preview) genannt? 5. **Hyperparameter-Dokumentation:** Werden sekund\u00e4re Parameter wie Temperatur, Top-P oder der Seed angegeben, um die Varianz der Ergebnisse einzuordnen? 6. **Iterations-Protokoll:** Wird die Anzahl der Verbesserungsschritte (N) oder das Abbruchkriterium der Schleife exakt definiert? **Teil C: Bias-Kontrolle & Ergebnisqualit\u00e4t** 7. **Minderung von Richter-Bias:** Wurden Ma\u00dfnahmen gegen Positional Bias (z. B. durch Swapping Answers) oder Verbosity Bias (z. B. durch strikte Wortlimits) ergriffen? 8. **Metrische Pr\u00e4zision:** Werden pr\u00e4zise und vergleichbare Metriken wie Accuracy, Performance Gap Recovered (PGR) oder Elo-Ratings verwendet? 9. **Statistische Belastbarkeit:** Gibt das Paper Konfidenzintervalle, Standardabweichungen oder Ergebnisse \u00fcber mehrere Testl\u00e4ufe an? 10. **Praktischer Mehrwert:** Bietet die Studie konkrete \u201eBest Practices\u201c oder Empfehlungen f\u00fcr die Entwicklung autonomer, agentischer Systeme? ### TASK 1. Analyze the full text deeply. 2. Extract the meta-data (DOI, Author, Title). 3. **Classify the paper** into exactly one of the 3 defined Mechanisms. 4. Generate a concise Abstract (max 3 sentences). 5. Score the paper on all 10 criteria (Sum = 0-20). 6. Formulate a \"Decision Reasoning\": Summarize strengths/weaknesses. ### OUTPUT FORMAT Return ONLY a valid JSON object matching this schema exactly: { \"DOI\": \"Extracted DOI string or 'Not Found'\", \"Author\": \"Extracted Authors\", \"Titel\": \"Extracted Title\", \"Mechanism\": \"Strictly one of: 'Self-Referential Prompting', 'Reflective Evaluation', or 'Iterative Self-Correction / Debate Mechanismen'\", \"Abstract\": \"Summary of content (max 3 sentences)\", \"Decision\": \"Included\", \"Decision Reasoning\": \"Detailed summary of strengths/weaknesses based on the checklist scores.\", \"Score\": Integer between 0 and 20, \"Additional notes\": \"Optional observations or empty string\" }"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "a72208aa-d604-4d35-b4ac-e261672a198c",
"name": "Log Included folder",
"type": "n8n-nodes-base.airtable",
"position": [
3328,
416
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appMIPges4F2ST4Sm",
"cachedResultUrl": "https://airtable.com/appMIPges4F2ST4Sm",
"cachedResultName": "SLR"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbltF6eQKLmLth73e",
"cachedResultUrl": "https://airtable.com/appMIPges4F2ST4Sm/tbltF6eQKLmLth73e",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"DOI": "={{ $json.output.DOI }}",
"Score": "={{ $json.output.Score }}",
"Titel": "={{ $json.output.Titel }}",
"Author": "={{ $json.output.Author }}",
"Abstract": "={{ $json.output.Abstract }}",
"Decision": "Included",
"Mechanism": "={{ $json.output.Mechanism }}",
"Score Reasoning": "={{ $json.output['Decision Reasoning'] }}",
"Additional notes": "={{ $('SLR Agent').item.json.output['Additional notes'] }}",
"Decision Reasoning": "={{ $('SLR Agent').item.json.output['Decision Reasoning'] }}"
},
"schema": [
{
"id": "DOI",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "DOI",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Author",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Author",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Titel",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Titel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Abstract",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Abstract",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Decision",
"type": "options",
"display": true,
"options": [
{
"name": "Excluded",
"value": "Excluded"
},
{
"name": "Included",
"value": "Included"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Decision",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Decision Reasoning",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Decision Reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Score Reasoning",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Score Reasoning",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Mechanism",
"type": "options",
"display": true,
"options": [
{
"name": "Self-Referential Prompting",
"value": "Self-Referential Prompting"
},
{
"name": "Reflective Evaluation",
"value": "Reflective Evaluation"
},
{
"name": "Iterative Self-Correction / Debate Mechanismen",
"value": "Iterative Self-Correction / Debate Mechanismen"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Mechanism",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Additional notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Additional notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cec16c84-ee57-40ed-ad24-5972607c8f98",
"name": "Move file to included folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
4480,
1472
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Loop Over Items').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultUrl": "https://drive.google.com/drive/folders/19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultName": "Processed Included"
},
"operation": "move"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "785afcc8-9ccf-4e7f-ad40-d01fff495718",
"name": "Move file to included folder1",
"type": "n8n-nodes-base.googleDrive",
"position": [
4720,
1472
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Loop Over Items').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultUrl": "https://drive.google.com/drive/folders/19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultName": "Processed Included"
},
"operation": "move"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "22a4af64-02f0-4884-b280-1355465247d3",
"name": "Move file to included folder2",
"type": "n8n-nodes-base.googleDrive",
"position": [
4960,
1472
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Loop Over Items').item.json.id }}"
},
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultUrl": "https://drive.google.com/drive/folders/19W3qW76F2gxlMPkZnKA64HYCA-Od2OcK",
"cachedResultName": "Processed Included"
},
"operation": "move"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8d2e0162-c05b-45ab-888e-894ed7f5cf4b",
"name": "Vector Store - collection 1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
4000,
416
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "Self-Referential Prompting - \u2013 Modelle generieren eigenst\u00e4ndig neue Prompts oder modifizieren bestehende Eingaben auf Basis eigener Ausgaben.",
"cachedResultName": "Self-Referential Prompting - \u2013 Modelle generieren eigenst\u00e4ndig neue Prompts oder modifizieren bestehende Eingaben auf Basis eigener Ausgaben."
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "a8563e2f-ec90-4ab8-aee7-85501d9a5c52",
"name": "Vector Store - collection 2",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
3968,
816
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "Reflective Evaluation \u2013 Modelle bewerten und hinterfragen ihre eigenen Antworten, typischerweise durch explizite \u201eReflection Prompts\u201c oder externe Feedback-Schleifen.",
"cachedResultName": "Reflective Evaluation \u2013 Modelle bewerten und hinterfragen ihre eigenen Antworten, typischerweise durch explizite \u201eReflection Prompts\u201c oder externe Feedback-Schleifen."
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "b249a9a8-661c-428f-be3b-d62a18dd04c9",
"name": "Vector Store - collection 3",
"type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
"position": [
3952,
1264
],
"parameters": {
"mode": "insert",
"options": {},
"qdrantCollection": {
"__rl": true,
"mode": "list",
"value": "Iterative Self-Correction Debate Mechanismen \u2013 Modelle nutzen dialogbasierte Strukturen (z. B. LLM Debates), um konkurrierende Antworten zu erzeugen, zu vergleichen und auf ein besseres Ergebnis zu konvergieren.",
"cachedResultName": "Iterative Self-Correction Debate Mechanismen \u2013 Modelle nutzen dialogbasierte Strukturen (z. B. LLM Debates), um konkurrierende Antworten zu erzeugen, zu vergleichen und auf ein besseres Ergebnis zu konvergieren."
}
},
"credentials": {
"qdrantApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "c0309ed1-659a-4339-afbe-be27836db008",
"name": "Cut of bibliography",
"type": "n8n-nodes-base.code",
"position": [
1648,
608
],
"parameters": {
"jsCode": "// Name des Feldes anpassen\nconst inputFieldName = 'text'; \n\nfor (const item of items) {\n \n // --- SICHERHEITS-CHECK START ---\n // Wir stellen sicher, dass die Struktur immer existiert, auch wenn sie leer ist.\n // So schlagen Referenzen wie item.json.info.Custom sp\u00e4ter nicht fehl.\n \n // 1. info.Custom initialisieren\n if (!item.json.info) item.json.info = {};\n if (!item.json.info.Custom) item.json.info.Custom = {}; // Leeres Objekt {} falls fehlend\n\n // 2. metadata initialisieren\n if (!item.json.metadata) item.json.metadata = {}; // Leeres Objekt {} falls fehlend\n\n // 3. Default f\u00fcr text_cleaned\n let content = '';\n // --- SICHERHEITS-CHECK ENDE ---\n\n\n // Pr\u00fcfen, ob wir \u00fcberhaupt Text zum Bearbeiten haben\n if (item.json[inputFieldName]) {\n content = item.json[inputFieldName];\n \n // 1. W\u00f6rter, bei denen wir abschneiden wollen (M\u00fcll)\n const cutOffWords = [\n 'References',\n 'Bibliography',\n 'Works Cited',\n 'LITERATURVERZEICHNIS' \n ];\n\n // 2. W\u00f6rter, die wir UNBEDINGT behalten wollen (Gold)\n const protectedWords = [\n 'Appendix',\n 'Appendices',\n 'Anhang'\n ];\n\n // Wir suchen das fr\u00fcheste Vorkommen eines Cut-Off Wortes\n let cutIndex = -1;\n let foundWord = '';\n\n for (const word of cutOffWords) {\n // Regex: Zeilenumbruch + optional Leerzeichen + Wort (Case Insensitive)\n const regex = new RegExp(`\\\\n\\\\s*${word}`, 'i');\n const match = content.match(regex);\n \n if (match) {\n // Wenn wir was finden, merken wir uns, wo es anf\u00e4ngt\n if (cutIndex === -1 || match.index < cutIndex) {\n cutIndex = match.index;\n foundWord = word;\n }\n }\n }\n\n // JETZT KOMMT DIE MAGIE: Der Sicherheits-Check \ud83d\udee1\ufe0f\n let isSafeToCut = true;\n\n if (cutIndex > -1) {\n // Wir pr\u00fcfen: Kommt NACH dem Cut-Index noch ein \"Protected Word\" (Appendix)?\n const textAfterCut = content.substring(cutIndex);\n \n for (const safeWord of protectedWords) {\n const safeRegex = new RegExp(`\\\\n\\\\s*${safeWord}`, 'i');\n if (textAfterCut.match(safeRegex)) {\n // ALARM! Ein Appendix kommt nach den References.\n isSafeToCut = false;\n break;\n }\n }\n\n // Nur schneiden, wenn es sicher ist (kein Appendix dahinter)\n if (isSafeToCut) {\n content = content.substring(0, cutIndex);\n }\n }\n \n // Status f\u00fcr Debugging setzen\n item.json.cleaning_status = cutIndex > -1 \n ? (isSafeToCut ? `Cut at ${foundWord}` : `Kept References because Appendix was found`) \n : 'Nothing to cut found';\n \n } else {\n item.json.cleaning_status = 'No text content available';\n }\n \n // Das Ergebnis IMMER speichern (auch wenn es leer ist)\n item.json.text_cleaned = content;\n}\n\nreturn items;"
},
"typeVersion": 2
},
{
"id": "293221e1-cec4-47f4-a31d-b3cde4905d50",
"name": "Route to sub topic",
"type": "n8n-nodes-base.switch",
"position": [
3568,
784
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Self-Referential Prompting",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "62525eb8-a00b-4203-9489-63ada8062b00",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.Mechanism }}",
"rightValue": "Self-Referential Prompting"
}
]
},
"renameOutput": true
},
{
"outputKey": "Reflective Evaluation",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "36552f69-04e2-4171-9805-90fe81b8ffa7",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.Mechanism }}",
"rightValue": "Reflective Evaluation"
}
]
},
"renameOutput": true
},
{
"outputKey": "Iterative Self-Correction / Debate Mechanismen",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1277918d-effe-4d01-abca-ad72d40f6a75",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.output.Mechanism }}",
"rightValue": "Iterative Self-Correction / Debate Mechanismen"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.4
}
],
"connections": {
"If": {
"main": [
[
{
"node": "Scoring Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Log Excluded Paper",
"type": "main",
"index": 0
}
]
]
},
"SLR Agent": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Download PDF": {
"main": [
[
{
"node": "Extract PDF Text",
"type": "main",
"index": 0
}
]
]
},
"Scoring Agent": {
"main": [
[
{
"node": "Route to sub topic",
"type": "main",
"index": 0
},
{
"node": "Log Included folder",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Download PDF",
"type": "main",
"index": 0
}
]
]
},
"Extract PDF Text": {
"main": [
[
{
"node": "Cut of bibliography",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "SLR Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Log Excluded Paper": {
"main": [
[
{
"node": "Move file to Excluded Folder",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Scoring Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Route to sub topic": {
"main": [
[
{
"node": "Vector Store - collection 1",
"type": "main",
"index": 0
}
],
[
{
"node": "Vector Store - collection 2",
"type": "main",
"index": 0
}
],
[
{
"node": "Vector Store - collection 3",
"type": "main",
"index": 0
}
]
]
},
"Cut of bibliography": {
"main": [
[
{
"node": "SLR Agent",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Vector Store - collection 1",
"type": "ai_document",
"index": 0
}
]
]
},
"Default Data Loader1": {
"ai_document": [
[
{
"node": "Vector Store - collection 2",
"type": "ai_document",
"index": 0
}
]
]
},
"Default Data Loader2": {
"ai_document": [
[
{
"node": "Vector Store - collection 3",
"type": "ai_document",
"index": 0
}
]
]
},
"Embeddings Google Gemini": {
"ai_embedding": [
[
{
"node": "Vector Store - collection 3",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Search files and folders": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "SLR Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Embeddings Google Gemini1": {
"ai_embedding": [
[
{
"node": "Vector Store - collection 2",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Embeddings Google Gemini2": {
"ai_embedding": [
[
{
"node": "Vector Store - collection 1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Google Gemini Chat Model1": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model3": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Scoring Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Vector Store - collection 1": {
"main": [
[
{
"node": "Move file to included folder2",
"type": "main",
"index": 0
}
]
]
},
"Vector Store - collection 2": {
"main": [
[
{
"node": "Move file to included folder1",
"type": "main",
"index": 0
}
]
]
},
"Vector Store - collection 3": {
"main": [
[
{
"node": "Move file to included folder",
"type": "main",
"index": 0
}
]
]
},
"Move file to Excluded Folder": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Move file to included folder": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Move file to included folder1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Move file to included folder2": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Search files and folders",
"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.
airtableTokenApigoogleDriveOAuth2ApigooglePalmApiopenAiApiqdrantApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
How it works Automates systematic literature review by downloading papers from Google Drive, extracting text, and evaluating them against strict inclusion/exclusion criteria using LLM agents Routes included papers to Qdrant vector stores with Gemini embeddings for semantic…
Source: https://n8n.io/workflows/12827/ — 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.
This workflow is perfect for: Businesses and teams who need an automated solution to organize, analyze, and retrieve insights from their internal documents. Researchers who want to quickly analyze and
Camila IA. Uses postgres, crypto, redis, agent. Webhook trigger; 92 nodes.
Api Schema Extractor. Uses manualTrigger, httpRequest, splitOut, textSplitterRecursiveCharacterTextSplitter. Event-driven trigger; 88 nodes.
Wait Splitout. Uses manualTrigger, httpRequest, splitOut, textSplitterRecursiveCharacterTextSplitter. Event-driven trigger; 88 nodes.
This workflow automates the process of discovering and extracting APIs from various services, followed by generating custom schemas. It works in three distinct stages: research, extraction, and schema