TalentFlow AI - 批量简历筛选与职位描述匹配
高级
这是一个HR, AI Summarization领域的自动化工作流,包含 30 个节点。主要使用 If, Code, Merge, Slack, Filter 等节点。 使用GPT-4为HR团队进行批量简历筛选与职位描述匹配
前置要求
- •Slack Bot Token 或 Webhook URL
- •Google Drive API 凭证
- •Google Sheets API 凭证
- •OpenAI API Key
使用的节点 (30)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "Q2sJeZnm8cbDfiEP",
"meta": {
"instanceId": "4a2e6764ba7a6bc9890d9225f4b21d570ce88fc9bd57549c89057fcee58fed0f",
"templateId": "5453",
"templateCredsSetupCompleted": true
},
"name": "TalentFlow AI – 批量简历筛选与职位描述匹配",
"tags": [
{
"id": "OcQfoQT2ejtrpKfF",
"name": "HR Workflow",
"createdAt": "2025-07-30T05:57:04.113Z",
"updatedAt": "2025-07-30T05:57:04.113Z"
}
],
"nodes": [
{
"id": "f007fbd5-f154-4497-ad34-6f90c3e78631",
"name": "便签 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
1936
],
"parameters": {
"width": 748,
"height": 80,
"content": "## 1. HR/TA 上传多份简历并选择职位(工作角色)"
},
"typeVersion": 1
},
{
"id": "23581b43-6d12-4868-818c-f267ae9535c1",
"name": "便签 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
1920
],
"parameters": {
"width": 632,
"height": 768,
"content": "## 3. HR AI Agent 基于个人资料和职位描述评估候选人匹配度"
},
"typeVersion": 1
},
{
"id": "31815a99-970e-45dd-9eac-19b04fe6afbe",
"name": "申请表",
"type": "n8n-nodes-base.formTrigger",
"position": [
-528,
2176
],
"webhookId": "c0275bde-d427-49f0-b497-a648da2788e7",
"parameters": {
"options": {
"customCss": ":root {\n\t--font-family: 'Open Sans', sans-serif;\n\t--font-weight-normal: 400;\n\t--font-weight-bold: 600;\n\t--font-size-body: 12px;\n\t--font-size-label: 14px;\n\t--font-size-test-notice: 12px;\n\t--font-size-input: 14px;\n\t--font-size-header: 20px;\n\t--font-size-paragraph: 14px;\n\t--font-size-link: 12px;\n\t--font-size-error: 12px;\n\t--font-size-html-h1: 28px;\n\t--font-size-html-h2: 20px;\n\t--font-size-html-h3: 16px;\n\t--font-size-html-h4: 14px;\n\t--font-size-html-h5: 12px;\n\t--font-size-html-h6: 10px;\n\t--font-size-subheader: 14px;\n\n\t/* Colors */\n\t--color-background: #fbfcfe;\n\t--color-test-notice-text: #e6a23d;\n\t--color-test-notice-bg: #fefaf6;\n\t--color-test-notice-border: #f6dcb7;\n\t--color-card-bg: #ffffff;\n\t--color-card-border: #dbdfe7;\n\t--color-card-shadow: rgba(99, 77, 255, 0.06);\n\t--color-link: #7e8186;\n\t--color-header: #525356;\n\t--color-label: #555555;\n\t--color-input-border: #dbdfe7;\n\t--color-input-text: #71747A;\n\t--color-focus-border: rgb(90, 76, 194);\n\t--color-submit-btn-bg: #0000FF; /* Changed to blue */\n\t--color-submit-btn-text: #ffffff;\n\t--color-error: #ea1f30;\n\t--color-required: #ff6d5a;\n\t--color-clear-button-bg: #7e8186;\n\t--color-html-text: #555;\n\t--color-html-link: #ff6d5a;\n\t--color-header-subtext: #7e8186;\n\n\t/* Border Radii */\n\t--border-radius-card: 8px;\n\t--border-radius-input: 6px;\n\t--border-radius-clear-btn: 50%;\n\t--card-border-radius: 8px;\n\n\t/* Spacing */\n\t--padding-container-top: 24px;\n\t--padding-card: 24px;\n\t--padding-test-notice-vertical: 12px;\n\t--padding-test-notice-horizontal: 24px;\n\t--margin-bottom-card: 16px;\n\t--padding-form-input: 12px;\n\t--card-padding: 24px;\n\t--card-margin-bottom: 16px;\n\n\t/* Dimensions */\n\t--container-width: 448px;\n\t--submit-btn-height: 48px;\n\t--checkbox-size: 18px;\n\n\t/* Others */\n\t--box-shadow-card: 0px 4px 16px 0px var(--color-card-shadow);\n\t--opacity-placeholder: 0.5;\n}\n",
"appendAttribution": false
},
"formTitle": "Resume Review Form",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "CV",
"requiredField": true,
"acceptFileTypes": ".pdf"
},
{
"fieldType": "dropdown",
"fieldLabel": "Job Role",
"fieldOptions": {
"values": [
{
"option": "Talent acquisition Specialist (Intermediate)"
},
{
"option": "Senior Tester/QC (Web Apps, Mobile, API, Database)"
},
{
"option": "Lead Full-stack Developer (.NET, Angular/React.js)"
},
{
"option": "Manual Tester/QC (Senior level)"
}
]
},
"requiredField": true
}
]
},
"formDescription": "Upload all applicant resumes below and select the corresponding job positions. Our SmartHR Agent will review each submission and provide a detailed evaluation for your consideration."
},
"typeVersion": 2.2
},
{
"id": "ff46db6c-5f77-4c45-b0a2-d8997760f363",
"name": "提取个人资料",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-192,
2064
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "4e80f14b-b866-4966-ad8b-b92276dfc676",
"name": "json 解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
80,
2208
],
"parameters": {
"jsonSchemaExample": "{\n \"full_name\": \"\",\n \"job_title\": \"\",\n \"summary\": \"\",\n \"contact\": {\n \"email\": \"\",\n \"phone\": \"\",\n \"address\": \"\",\n \"linkedin\": \"\",\n \"website\": \"\"\n },\n \"education\": [\n {\n \"degree\": \"\",\n \"field_of_study\": \"\",\n \"institution\": \"\",\n \"location\": \"\",\n \"start_year\": \"\",\n \"end_year\": \"\"\n }\n ],\n \"certifications\": [\n {\n \"name\": \"\",\n \"issuer\": \"\",\n \"date_obtained\": \"\",\n \"expiration_date\": \"\"\n }\n ],\n \"work_experience\": [\n {\n \"company\": \"\",\n \"position\": \"\",\n \"location\": \"\",\n \"start_date\": \"\",\n \"end_date\": \"\",\n \"responsibilities\": [\n \"\"\n ],\n \"achievements\": [\n \"\"\n ]\n }\n ],\n \"skills\": {\n \"technical_skills\": [\n \"\"\n ],\n \"soft_skills\": [\n \"\"\n ],\n \"languages\": [\n {\n \"language\": \"\",\n \"proficiency\": \"\"\n }\n ],\n \"tools_and_technologies\": [\n \"\"\n ]\n },\n \"projects\": [\n {\n \"name\": \"\",\n \"description\": \"\",\n \"technologies_used\": [\n \"\"\n ],\n \"role\": \"\",\n \"duration\": \"\"\n }\n ],\n \"awards\": [\n {\n \"title\": \"\",\n \"issuer\": \"\",\n \"date\": \"\",\n \"description\": \"\"\n }\n ],\n \"volunteer_experience\": [\n {\n \"organization\": \"\",\n \"role\": \"\",\n \"description\": \"\",\n \"start_date\": \"\",\n \"end_date\": \"\"\n }\n ],\n \"additional_information\": {\n \"availability\": \"\",\n \"preferred_location\": \"\",\n \"salary_expectation\": \"\",\n \"work_authorization\": \"\",\n \"other_notes\": \"\"\n }\n}"
},
"typeVersion": 1.3
},
{
"id": "8a0d545c-b28d-4a0b-ba77-d3533597d155",
"name": "gpt4-1 模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-48,
2208
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "291e6b3e-0a21-459c-9340-291effc1d941",
"name": "获取职位 JD",
"type": "n8n-nodes-base.googleSheets",
"position": [
-304,
2592
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $('Application form').item.json['Job Role'] }}",
"lookupColumn": "Job Role"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15CZPMbxmz-RVYji1fev_6vYeEwpPa3MjewGEPf6aSoA/edit?usp=drivesdk",
"cachedResultName": "Positions"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "L670Nly6gZGo71br",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6,
"alwaysOutputData": true
},
{
"id": "02ccf47d-e039-477c-9028-7ccf08f7b58f",
"name": "下载文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
-112,
2592
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json['Job Description'] }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "bffa78db-6f40-488f-a4ef-fce685acc8cc",
"name": "提取职位描述",
"type": "n8n-nodes-base.extractFromFile",
"position": [
112,
2592
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "ec4ff009-360f-4ff6-943b-3cf87a6b87e5",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
1648
],
"parameters": {
"width": 588,
"height": 676,
"content": "## 2.1. 候选人个人资料分析器"
},
"typeVersion": 1
},
{
"id": "8aac80ce-2afd-4b28-a5c1-67319dc7c3b8",
"name": "便签 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
2400
],
"parameters": {
"width": 636,
"height": 372,
"content": "## 2.2. 下载选定的职位描述"
},
"typeVersion": 1
},
{
"id": "15ce288c-a8e6-4016-a26c-059de23ba6d6",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
1920
],
"parameters": {
"width": 1032,
"height": 768,
"content": "## 4. 将评估结果更新到目标平台"
},
"typeVersion": 1
},
{
"id": "1e3e7898-f264-4446-b2a0-c0d6445a6637",
"name": "HR 专家 Agent",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1264,
2272
],
"parameters": {
"text": "=Evaluate the candidate for the following position ({{ $json.position }}) with job description: {{ $json.job_description }}\n------------------------\nBelow is the extracted candidate profile:\n{{ $json.candidate_profile.toJsonString() }}",
"messages": {
"messageValues": [
{
"message": "You are a professional AI hiring assistant tasked with evaluating job candidates based on their structured resume data and a provided job description. Your goal is to assess the candidate’s suitability for the role, identifying key matches and gaps in skills, experience, and qualifications. You will receive: - `candidate_profile`: a JSON object containing extracted information from the candidate's resume. - `job_description`: a plain text description of the role. Your job is to: 1. Parse and understand the key job requirements (e.g., required skills, years of experience, qualifications). 2. Match the candidate's profile to the job requirements. 3. Provide a structured evaluation with ratings and reasoning. Always be objective, use professional language, and format your output clearly using markdown."
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.5
},
{
"id": "8e4f9f63-86ac-43f3-a535-4c49b4ea3863",
"name": "个人资料分析器 Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-48,
2064
],
"parameters": {
"text": "=Please extract all relevant information from this candiadte:\nCV Content:\n===\n{{ $json[\"text\"] }}\n===",
"options": {
"systemMessage": ""
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "e637352c-bc2c-4c50-a217-f7072c4515a6",
"name": "更新评估表",
"type": "n8n-nodes-base.googleSheets",
"position": [
2224,
2528
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "overall_fit_score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "overall_fit_score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "recommendation",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "recommendation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "required_experience",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "required_experience",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "skill_match",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "skill_match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "education_certifications",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "education_certifications",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "soft_skills_traits",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "soft_skills_traits",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "strengths",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "strengths",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "concerns_or_gaps",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "concerns_or_gaps",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "final_notes",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "final_notes",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"output"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1gpuTL7iK2LoDJAdHE-LBFiBEU6hLqSTxWjThMJyi7SY/edit?usp=drive_link"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "L670Nly6gZGo71br",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.6
},
{
"id": "1cfcfbec-2206-4d24-985c-5a7307f045a8",
"name": "映射列",
"type": "n8n-nodes-base.code",
"position": [
1808,
2272
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const evaluationResult = item.json.output;\n\nreturn {\n json: {\n full_name: evaluationResult.full_name || '',\n email: evaluationResult.email || '',\n phone: evaluationResult.phone || '',\n position: evaluationResult.applied_position,\n overall_fit_score: evaluationResult.overall_fit_score,\n recommendation: evaluationResult.recommendation,\n strengths: Array.isArray(evaluationResult.strengths) ? evaluationResult.strengths.join(', ') : '',\n concerns_or_gaps: Array.isArray(evaluationResult.concerns_or_gaps) ? evaluationResult.concerns_or_gaps.join(', ') : '',\n final_notes: evaluationResult.final_notes || '',\n submitted_date: $now.toFormat(\"yyyyLLdd-HHmmss\")\n }\n };"
},
"typeVersion": 2
},
{
"id": "8b7ae83f-27ac-4ecc-8180-fd46ce375cc2",
"name": "上传到 Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
-80,
1808
],
"parameters": {
"name": "=cv-{{ $now.toFormat(\"yyyyLLdd-HHmmss\") }}-{{$binary.data.fileName}}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive",
"cachedResultUrl": "https://drive.google.com/drive/my-drive",
"cachedResultName": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "url",
"value": "https://drive.google.com/drive/u/0/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7"
}
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "fC471es5gk5Mm900",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "bc0cc422-0789-466f-a485-9615bea31687",
"name": "gpt-4-1 模型 2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1248,
2496
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "PPSwAKeLQYgAPobT",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "a9f1c1b2-b75b-49c8-84e2-e3b328824c1a",
"name": "json 解析器 2",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1456,
2496
],
"parameters": {
"jsonSchemaExample": "{\n \"full_name\":\"\",\n \"phone\":\"\",\n \"address\":\"\",\n \"email\":\"\",\n \"applied_position\":\"\",\n \"overall_fit_score\": 0,\n \"recommendation\": \"\", \n \"job_match_summary\": {\n \"required_experience\": \"\",\n \"skill_match\": \"\",\n \"education_certifications\": \"\",\n \"soft_skills_traits\": \"\"\n },\n \"strengths\": [\n \"\"\n ],\n \"concerns_or_gaps\": [\n \"\"\n ],\n \"final_notes\": \"\"\n}"
},
"typeVersion": 1.3
},
{
"id": "9f431dbc-4b1a-45cc-b8f8-d68d7ad74536",
"name": "便签7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2096,
1856
],
"parameters": {
"width": 912,
"height": 1760,
"content": "## TalentFlow AI – 批量简历筛选与职位描述匹配"
},
"typeVersion": 1
},
{
"id": "6bd0f5cc-8830-49a6-9003-4e74c84a56b2",
"name": "便签 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
2800
],
"parameters": {
"width": 640,
"height": 128,
"content": ""
},
"typeVersion": 1
},
{
"id": "ea2175ea-cc01-48d7-8e2f-604ec2673e94",
"name": "便签8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1792,
2736
],
"parameters": {
"width": 960,
"height": 512,
"content": ""
},
"typeVersion": 1
},
{
"id": "cd0c42ec-c281-4132-a6c0-009cd92f7779",
"name": "向候选人发送结果邮件",
"type": "n8n-nodes-base.sendGrid",
"disabled": true,
"position": [
2560,
2320
],
"parameters": {
"subject": "=Update on Your Application for {{ $json.position }}",
"toEmail": "={{ $json.email }}",
"fromName": "Hiring Team",
"resource": "mail",
"fromEmail": "sender@example.com",
"contentType": "text/html",
"contentValue": "=<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <title>Application Update</title>\n <style>\n body {\n font-family: Arial, sans-serif;\n background-color: #f4f6f9;\n color: #333;\n padding: 20px;\n }\n .container {\n max-width: 600px;\n background-color: #ffffff;\n margin: auto;\n padding: 30px;\n border-radius: 8px;\n box-shadow: 0 0 10px rgba(0,0,0,0.05);\n }\n .header {\n font-size: 20px;\n font-weight: bold;\n color: #2b5cb8;\n margin-bottom: 20px;\n }\n .footer {\n font-size: 12px;\n color: #999;\n text-align: center;\n margin-top: 40px;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">Application Update</div>\n\n <p>Hi {{ $json.full_name }},</p>\n\n <p>Thank you for applying for the <strong>{{ $json.position }}</strong> position.</p>\n\n <p>We appreciate your interest and the time you took to apply. After careful review, we’ve decided not to move forward with your application at this time.</p>\n\n <p>We wish you the best in your job search and future opportunities.</p>\n\n <p>Kind regards,<br>\n Recruitment Team</p>\n\n <div class=\"footer\">\n This is an automated message. Please do not reply.\n </div>\n </div>\n</body>\n</html>",
"additionalFields": {}
},
"credentials": {
"sendGridApi": {
"id": "O1IzegT4JdKjrzrj",
"name": "SendGrid account"
}
},
"typeVersion": 1
},
{
"id": "46086f32-5a6c-4f3e-9539-34ac476283b7",
"name": "通过 Slack 向招聘团队发送消息",
"type": "n8n-nodes-base.slack",
"position": [
2560,
2080
],
"webhookId": "09bb1ad8-915e-4bd1-b7aa-e8f796381745",
"parameters": {
"text": "=🎯 *Candidate Evaluation Update*\n\nHi team, \nWe've completed the initial screening and have a qualified candidate for the *{{ $json.position }}* position:\n\n👤 *Candidate:* **{{ $json.full_name }}** \n📝 *Summary:* \n• *Fit Score:* {{ $json.overall_fit_score }}/10 \n• *Recommendation:* {{ $json.recommendation }} \n• *Key Strengths:* \n {{ $json.strengths }}\n\n📎 *Full evaluation is available in the tracking sheet.*\n\n👉 Please advise on next steps (e.g., schedule technical interview, team round, etc.).",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C098LDNAG1E",
"cachedResultName": "hiring-channel"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "fDHHxMgQm69z0h5T",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "df5ab265-1b74-4f89-9d01-db9b4d5e26f2",
"name": "候选人合格?",
"type": "n8n-nodes-base.if",
"position": [
2224,
2192
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a69c879b-ebf6-4237-b19a-4bb1e4686746",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $('HR Expert Agent').item.json.output.overall_fit_score }}",
"rightValue": 8
}
]
}
},
"typeVersion": 2.2
},
{
"id": "99d34017-e9b7-4802-8f69-9b77a90ec9f2",
"name": "代码",
"type": "n8n-nodes-base.code",
"position": [
-336,
1936
],
"parameters": {
"jsCode": "const data = $input.item.json;\nconst binaryData = $input.item.binary;\n\nlet output = [];\n\nObject.keys(binaryData)\n .filter(label => label.startsWith(\"CV_\"))\n .forEach(label => {\n output.push({\n json: data,\n binary: { data: binaryData[label] }\n });\n });\n\nreturn output;"
},
"typeVersion": 2
},
{
"id": "9067e3d6-34a4-4c04-a785-a929aa32b912",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
768,
2272
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "787c7622-3f48-4b73-83c1-5eee7f8c3c4a",
"name": "便签 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
2048
],
"parameters": {
"width": 556,
"height": 580,
"content": ""
},
"typeVersion": 1
},
{
"id": "3b30fd6b-489a-4050-8ff0-74d3e257b477",
"name": "代码1",
"type": "n8n-nodes-base.code",
"position": [
1008,
2272
],
"parameters": {
"jsCode": "// Raw merged input (first N items are candidate profiles, last item is JD)\nconst items = $input.all();\n\n// Extract job description (assuming it's the last element)\nconst jdItem = items[items.length - 1];\nconst job_description = jdItem.json.text;\n\n// Prepare output array\nconst results = [];\n\n// Loop through all items except the last one (JD)\nfor (let i = 0; i < items.length - 1; i++) {\n const candidate = items[i].json.output;\n results.push({\n json: {\n candidate_profile: candidate,\n job_description: job_description,\n applied_position: $('Application form').first().json['Job Role']\n }\n });\n}\n\nreturn results;"
},
"typeVersion": 2
},
{
"id": "e6ce2613-5dbc-4005-a939-982af7e75d3f",
"name": "移除不良数据简历",
"type": "n8n-nodes-base.filter",
"position": [
416,
2128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "82f62f61-ceaa-4ff2-8493-da82d0165729",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.output.full_name }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a24dd36a-0a96-4e1c-8af9-ac84f8811a77",
"connections": {
"Code": {
"main": [
[
{
"node": "Upload to Google Drive",
"type": "main",
"index": 0
},
{
"node": "Extract profile",
"type": "main",
"index": 0
}
]
]
},
"Code1": {
"main": [
[
{
"node": "HR Expert Agent",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"Map Columns": {
"main": [
[
{
"node": "Update evaluation sheet",
"type": "main",
"index": 0
},
{
"node": "Candidate qualified?",
"type": "main",
"index": 0
}
]
]
},
"json parser": {
"ai_outputParser": [
[
{
"node": "Profile Analyzer Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"gpt4-1 model": {
"ai_languageModel": [
[
{
"node": "Profile Analyzer Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "Extract Job Description",
"type": "main",
"index": 0
}
]
]
},
"json parser 2": {
"ai_outputParser": [
[
{
"node": "HR Expert Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Extract profile": {
"main": [
[
{
"node": "Profile Analyzer Agent",
"type": "main",
"index": 0
}
]
]
},
"Get position JD": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"HR Expert Agent": {
"main": [
[
{
"node": "Map Columns",
"type": "main",
"index": 0
}
]
]
},
"gpt-4-1 model 2": {
"ai_languageModel": [
[
{
"node": "HR Expert Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Application form": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
},
{
"node": "Get position JD",
"type": "main",
"index": 0
}
]
]
},
"Remove bad data CV": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Candidate qualified?": {
"main": [
[
{
"node": "Send message via Slack to the hiring team",
"type": "main",
"index": 0
}
],
[
{
"node": "Send email to candidate about the result",
"type": "main",
"index": 0
}
]
]
},
"Profile Analyzer Agent": {
"main": [
[
{
"node": "Remove bad data CV",
"type": "main",
"index": 0
}
]
]
},
"Upload to Google Drive": {
"main": [
[]
]
},
"Extract Job Description": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Update evaluation sheet": {
"main": [
[]
]
},
"Send email to candidate about the result": {
"main": [
[]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 人力资源, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
HireMind – AI驱动的简历智能处理流程
HR AI简历筛选与评估:GPT-4和Google Workspace
If
Code
Slack
+10
26 节点Trung Tran
人力资源
智能简历提取器:Google Drive到Sheet + 招聘人员Slack更新
AI驱动简历提取器:GPT-4处理Google Drive到Sheet,Slack通知招聘人员
Code
Slack
Filter
+8
19 节点Trung Tran
人力资源
智能面试助手:基于简历、职位描述和轮次的定制问题
基于简历、职位描述和轮次使用GPT-4生成定制面试问题
Set
Code
Merge
+10
26 节点Trung Tran
人力资源
构建用于Slack候选人评估的AI驱动聊天机器人
AI简历分析与候选人评估:Slack和Google表格集成
If
Code
Slack
+12
29 节点Trung Tran
AI 聊天机器人
用于更智能BRD(业务需求文档)编写的多Agent RAG系统
使用多Agent GPT和Google Workspace生成业务需求文档
Set
Code
Merge
+14
37 节点Trung Tran
AI RAG 检索增强
🎧 IT语音支持自动化机器人 – Telegram语音消息转JIRA工单(使用OpenAI Whisper)
通过Whisper和GPT-4.1 Mini将Telegram语音消息自动转换为JIRA工单
If
Set
Code
+11
25 节点Trung Tran
工单管理
工作流信息
难度等级
高级
节点数量30
分类2
节点类型15
作者
Trung Tran
@trungtranHelps small and medium businesses grow with intelligent automation and practical AI tools, no heavy tech team needed.
外部链接
在 n8n.io 查看 →
分享此工作流