AI Automated HR Workflow for CV Analysis and Candidate Evaluation


Nội dung File JSON

{
    "id": "t1P14FvfibKYCh3E",
    "meta": {
        "instanceId": "a4bfc93e975ca233ac45ed7c9227d84cf5a2329310525917adaf3312e10d5462",
        "templateCredsSetupCompleted": true
    },
    "name": "HR-focused automation pipeline with AI",
    "tags": [],
    "nodes": [
        {
            "id": "b1092f93-502c-4af0-962e-2b69311b92a3",
            "name": "On form submission",
            "type": "n8n-nodes-base.formTrigger",
            "position": [
                -520,
                -200
            ],
            "webhookId": "2a87705d-8ba1-41f1-80ef-85f364ce253e",
            "parameters": {
                "options": {},
                "formTitle": "Send CV",
                "formFields": {
                    "values": [
                        {
                            "fieldLabel": "Name",
                            "placeholder": "Name",
                            "requiredField": true
                        },
                        {
                            "fieldType": "email",
                            "fieldLabel": "Email",
                            "placeholder": "Email",
                            "requiredField": true
                        },
                        {
                            "fieldType": "file",
                            "fieldLabel": "CV",
                            "requiredField": true,
                            "acceptFileTypes": ".pdf"
                        }
                    ]
                }
            },
            "typeVersion": 2.2
        },
        {
            "id": "77edfe2a-4c6a-48c8-8dc9-b275491be090",
            "name": "Extract from File",
            "type": "n8n-nodes-base.extractFromFile",
            "position": [
                -160,
                -200
            ],
            "parameters": {
                "options": {},
                "operation": "pdf",
                "binaryPropertyName": "CV"
            },
            "typeVersion": 1
        },
        {
            "id": "ebf2e194-3515-4c0a-8745-790b63bf336f",
            "name": "Qualifications",
            "type": "@n8n/n8n-nodes-langchain.informationExtractor",
            "position": [
                160,
                -100
            ],
            "parameters": {
                "text": "={{ $json.text }}",
                "options": {
                    "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute''s value."
                },
                "attributes": {
                    "attributes": [
                        {
                            "name": "Educational qualification",
                            "required": true,
                            "description": "Summary of your academic career. Focus on your high school and university studies. Summarize in 100 words maximum and also include your grade if applicable."
                        },
                        {
                            "name": "Job History",
                            "required": true,
                            "description": "Work history summary. Focus on your most recent work experiences. Summarize in 100 words maximum"
                        },
                        {
                            "name": "Skills",
                            "required": true,
                            "description": "Extract the candidate’s technical skills. What software and frameworks they are proficient in. Make a bulleted list."
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "4f40404c-1d47-4bde-9b4b-16367cf11e4f",
            "name": "Summarization Chain",
            "type": "@n8n/n8n-nodes-langchain.chainSummarization",
            "position": [
                900,
                -220
            ],
            "parameters": {
                "options": {
                    "summarizationMethodAndPrompts": {
                        "values": {
                            "prompt": "=Write a concise summary of the following:\n\nCity: {{ $json.output.city }}\nBirthdate: {{ $json.output.birthdate }}\nEducational qualification: {{ $json.output[\"Educational qualification\"] }}\nJob History: {{ $json.output[\"Job History\"] }}\nSkills: {{ $json.output.Skills }}\n\nUse 100 words or less. Be concise and conversational.",
                            "combineMapPrompt": "=Write a concise summary of the following:\n\nCity: {{ $json.output.city }}\nBirthdate: {{ $json.output.birthdate }}\nEducational qualification: {{ $json.output[\"Educational qualification\"] }}\nJob History: {{ $json.output[\"Job History\"] }}\nSkills: {{ $json.output.Skills }}\n\nUse 100 words or less. Be concise and conversational."
                        }
                    }
                }
            },
            "typeVersion": 2
        },
        {
            "id": "9f9c5f16-1dc2-4928-aef8-284daeb6be51",
            "name": "Merge",
            "type": "n8n-nodes-base.merge",
            "position": [
                660,
                -220
            ],
            "parameters": {
                "mode": "combine",
                "options": {},
                "combineBy": "combineAll"
            },
            "typeVersion": 3
        },
        {
            "id": "51bd14cc-2c54-4f72-b162-255f7e277aff",
            "name": "Profile Wanted",
            "type": "n8n-nodes-base.set",
            "position": [
                1300,
                -220
            ],
            "parameters": {
                "options": {},
                "assignments": {
                    "assignments": [
                        {
                            "id": "a3d049b0-5a70-4e7b-a6f2-81447da5282a",
                            "name": "profile_wanted",
                            "type": "string",
                            "value": "We are a web agency and we are looking for a full-stack web developer who knows how to use PHP, Python and Javascript. He has experience in the sector and lives in Northern Italy."
                        }
                    ]
                }
            },
            "typeVersion": 3.4
        },
        {
            "id": "4a120e5d-b849-4a29-b7f3-12c653552367",
            "name": "Google Sheets",
            "type": "n8n-nodes-base.googleSheets",
            "position": [
                1960,
                -220
            ],
            "parameters": {
                "columns": {
                    "value": {
                        "CITY": "={{ $(''Merge'').item.json.output.city }}",
                        "DATA": "={{ $now.format(''dd/LL/yyyy'') }}",
                        "NAME": "={{ $(''On form submission'').item.json.Nome }}",
                        "VOTE": "={{ $json.output.vote }}",
                        "EMAIL": "={{ $(''On form submission'').item.json.Email }}",
                        "SKILLS": "={{ $(''Merge'').item.json.output.Skills }}",
                        "TELEFONO": "={{ $(''Merge'').item.json.output.telephone }}",
                        "SUMMARIZE": "={{ $(''Summarization Chain'').item.json.response.text }}",
                        "EDUCATIONAL": "={{ $(''Merge'').item.json.output[\"Educational qualification\"] }}",
                        "JOB HISTORY": "={{ $(''Merge'').item.json.output[\"Job History\"] }}",
                        "DATA NASCITA": "={{ $(''Merge'').item.json.output.birthdate }}",
                        "CONSIDERATION": "={{ $json.output.consideration }}"
                    },
                    "schema": [
                        {
                            "id": "DATA",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "DATA",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "NAME",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "NAME",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "PHONE",
                            "type": "string",
                            "display": true,
                            "removed": false,
                            "required": false,
                            "displayName": "PHONE",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "CITY",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "CITY",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "EMAIL",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "EMAIL",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "DATA NASCITA",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "DATA NASCITA",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "EDUCATIONAL",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "EDUCATIONAL",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "JOB HISTORY",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "JOB HISTORY",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "SKILLS",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "SKILLS",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "SUMMARIZE",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "SUMMARIZE",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "VOTE",
                            "type": "string",
                            "display": true,
                            "removed": false,
                            "required": false,
                            "displayName": "VOTE",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        },
                        {
                            "id": "CONSIDERATION",
                            "type": "string",
                            "display": true,
                            "required": false,
                            "displayName": "CONSIDERATION",
                            "defaultMatch": false,
                            "canBeUsedToMatch": true
                        }
                    ],
                    "mappingMode": "defineBelow",
                    "matchingColumns": [],
                    "attemptToConvertTypes": false,
                    "convertFieldsToString": false
                },
                "options": {},
                "operation": "append",
                "sheetName": {
                    "__rl": true,
                    "mode": "list",
                    "value": "gid=0",
                    "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE/edit#gid=0",
                    "cachedResultName": "Foglio1"
                },
                "documentId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE",
                    "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE/edit?usp=drivesdk",
                    "cachedResultName": "Ricerca WebDev"
                }
            },
            "credentials": {
                "googleSheetsOAuth2Api": {
                    "id": "JYR6a64Qecd6t8Hb",
                    "name": "Google Sheets account"
                }
            },
            "typeVersion": 4.5
        },
        {
            "id": "a154d8a5-9f85-45bb-b082-f702c13c3507",
            "name": "Structured Output Parser",
            "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
            "position": [
                1720,
                -20
            ],
            "parameters": {
                "schemaType": "manual",
                "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"vote\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"consideration\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
            },
            "typeVersion": 1.2
        },
        {
            "id": "037ac851-7885-4b78-ac75-dfa0ebb6003d",
            "name": "HR Expert",
            "type": "@n8n/n8n-nodes-langchain.chainLlm",
            "position": [
                1560,
                -220
            ],
            "parameters": {
                "text": "=Profilo ricercato:\n{{ $json.profile_wanted }}\n\nCandidato:\n{{ $(''Summarization Chain'').item.json.response.text }}",
                "messages": {
                    "messageValues": [
                        {
                            "message": "Sei un esperto HR e devi capire se il candidato è in linea con il profilo ricercato dall''azienda.\n\nDevi dare un voto da 1 a 10 dove 1 significa che il candidato non è in linea con quanto richiesto mentre 10 significa che è il candidato ideale perchè rispecchia in toto il profilo cercato.\n\nInoltre nel campo \"consideration\" motiva il perchè hai dato quel voto. "
                        }
                    ]
                },
                "promptType": "define",
                "hasOutputParser": true
            },
            "typeVersion": 1.5
        },
        {
            "id": "ed5744c4-df06-4a01-a103-af4dd470d482",
            "name": "Personal Data",
            "type": "@n8n/n8n-nodes-langchain.informationExtractor",
            "position": [
                160,
                -280
            ],
            "parameters": {
                "text": "={{ $json.text }}",
                "options": {
                    "systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute''s value."
                },
                "schemaType": "manual",
                "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"telephone\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n \"city\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n \"birthdate\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
            },
            "typeVersion": 1
        },
        {
            "id": "181c1249-b05c-4c35-8cac-5f9738cc1fe6",
            "name": "Upload CV",
            "type": "n8n-nodes-base.googleDrive",
            "position": [
                -160,
                -380
            ],
            "parameters": {
                "name": "=CV-{{ $now.format(''yyyyLLdd'') }}-{{ $json.CV[0].filename }}",
                "driveId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "My Drive"
                },
                "options": {},
                "folderId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1tzeSpx4D3EAGXa3Wg-gqGbdaUk6LIZTV",
                    "cachedResultUrl": "https://drive.google.com/drive/folders/1tzeSpx4D3EAGXa3Wg-gqGbdaUk6LIZTV",
                    "cachedResultName": "CV"
                },
                "inputDataFieldName": "CV"
            },
            "credentials": {
                "googleDriveOAuth2Api": {
                    "id": "HEy5EuZkgPZVEa9w",
                    "name": "Google Drive account"
                }
            },
            "typeVersion": 3
        },
        {
            "id": "d31ee1c4-e4be-41d9-8f36-e6fb797ced8e",
            "name": "OpenAI",
            "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
            "position": [
                920,
                240
            ],
            "parameters": {
                "model": {
                    "__rl": true,
                    "mode": "list",
                    "value": "gpt-4o-mini"
                },
                "options": {}
            },
            "credentials": {
                "openAiApi": {
                    "id": "CDX6QM4gLYanh0P4",
                    "name": "OpenAi account"
                }
            },
            "typeVersion": 1.2
        },
        {
            "id": "0290cb72-a581-4aff-8b5d-1aa63e0a630f",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                -560,
                -680
            ],
            "parameters": {
                "color": 3,
                "width": 540,
                "content": "## HR Expert \nThis workflow automates the process of handling job applications by extracting relevant information from submitted CVs, analyzing the candidate''s qualifications against a predefined profile, and storing the results in a Google Sheet"
            },
            "typeVersion": 1
        },
        {
            "id": "361084ff-9735-4a56-8988-be573391838b",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                -240,
                -460
            ],
            "parameters": {
                "width": 300,
                "height": 420,
                "content": "The CV is uploaded to Google Drive and converted so that it can be processed\n"
            },
            "typeVersion": 1
        },
        {
            "id": "4b6f004f-c77b-4522-99d4-737a68f6cfac",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                120,
                -380
            ],
            "parameters": {
                "width": 360,
                "height": 440,
                "content": "The essential information for evaluating the candidate is collected in two different chains"
            },
            "typeVersion": 1
        },
        {
            "id": "73e11af9-65e3-4fcd-bb99-8a3f212ce9fb",
            "name": "Sticky Note3",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                860,
                -300
            ],
            "parameters": {
                "width": 320,
                "height": 240,
                "content": "Summary of relevant information useful for classifying the candidate"
            },
            "typeVersion": 1
        },
        {
            "id": "606711d1-8e6d-44b3-91ac-c047d8a4054f",
            "name": "Sticky Note4",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1240,
                -300
            ],
            "parameters": {
                "width": 220,
                "height": 240,
                "content": "Characteristics of the profile sought by the company that intends to hire the candidate"
            },
            "typeVersion": 1
        },
        {
            "id": "89c3210c-c599-41dc-97a3-bf8df2beb751",
            "name": "Sticky Note5",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1500,
                -300
            ],
            "parameters": {
                "width": 360,
                "height": 240,
                "content": "Candidate evaluation with vote and considerations of the HR agent relating the profile sought with the candidate''s skills"
            },
            "typeVersion": 1
        }
    ],
    "active": false,
    "pinData": {},
    "settings": {
        "executionOrder": "v1"
    },
    "versionId": "594728c0-b842-404d-8810-c6f7f3f4631d",
    "connections": {
        "Merge": {
            "main": [
                [
                    {
                        "node": "Summarization Chain",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "OpenAI": {
            "ai_languageModel": [
                [
                    {
                        "node": "Qualifications",
                        "type": "ai_languageModel",
                        "index": 0
                    },
                    {
                        "node": "Summarization Chain",
                        "type": "ai_languageModel",
                        "index": 0
                    },
                    {
                        "node": "HR Expert",
                        "type": "ai_languageModel",
                        "index": 0
                    },
                    {
                        "node": "Personal Data",
                        "type": "ai_languageModel",
                        "index": 0
                    }
                ]
            ]
        },
        "HR Expert": {
            "main": [
                [
                    {
                        "node": "Google Sheets",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Upload CV": {
            "main": [
                []
            ]
        },
        "Personal Data": {
            "main": [
                [
                    {
                        "node": "Merge",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Profile Wanted": {
            "main": [
                [
                    {
                        "node": "HR Expert",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Qualifications": {
            "main": [
                [
                    {
                        "node": "Merge",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "Extract from File": {
            "main": [
                [
                    {
                        "node": "Qualifications",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Personal Data",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "On form submission": {
            "main": [
                [
                    {
                        "node": "Extract from File",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Upload CV",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Summarization Chain": {
            "main": [
                [
                    {
                        "node": "Profile Wanted",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Structured Output Parser": {
            "ai_outputParser": [
                [
                    {
                        "node": "HR Expert",
                        "type": "ai_outputParser",
                        "index": 0
                    }
                ]
            ]
        }
    }
}