AI驱动的GPT-4o-mini招聘流程:从简历筛选到面试安排

高级

这是一个HR、AI Summarization领域的自动化工作流,包含 21 个节点。主要使用 Slack、Filter、Webhook、Airtable、EmailSend 等节点。 使用GPT-4o-mini在Airtable中自动化招聘:从简历筛选到面试安排

前置要求
  • Slack Bot Token 或 Webhook URL
  • HTTP Webhook 端点(n8n 会自动生成)
  • Airtable API Key
  • 可能需要目标 API 的认证凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "i7hRouNsQLAJJg4F",
  "meta": {
    "instanceId": "b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502"
  },
  "name": "AI驱动的GPT-4o-mini招聘流程:从简历筛选到面试安排",
  "tags": [],
  "nodes": [
    {
      "id": "2a69b990-5536-4825-81e2-682ef75fe7a2",
      "name": "Webhook - 接收简历",
      "type": "n8n-nodes-base.webhook",
      "position": [
        112,
        352
      ],
      "webhookId": "21c60b52-4d15-48a2-9a70-d51be54905e1",
      "parameters": {
        "path": "candidate-cv",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "6e476a4e-e2bb-4298-9ddc-5829aeb8306f",
      "name": "Airtable - 存储候选人",
      "type": "n8n-nodes-base.airtable",
      "position": [
        304,
        208
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appXXXXXXXXXXXXXX",
          "cachedResultName": "Candidates"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCandidates",
          "cachedResultName": "Candidates"
        },
        "columns": {
          "value": {
            "Name": "={{ $json.body.name }}",
            "Email": "={{ $json.body.email }}",
            "Phone": "={{ $json.body.phone }}",
            "CV_URL": "={{ $json.body.cv_url }}",
            "Status": "New Application",
            "Application_Date": "={{ $now.toISO() }}",
            "Position_Applied": "={{ $json.body.position }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "create",
        "authentication": "oAuth2"
      },
      "typeVersion": 2
    },
    {
      "id": "56b8fd3c-8f51-44c5-a39c-80c002da4cc7",
      "name": "HTTP请求 - 下载简历",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        272,
        432
      ],
      "parameters": {
        "url": "={{ $('Webhook - Receive CV').item.json.body.cv_url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "477e1bb2-ddce-4655-b148-5eddff7a0672",
      "name": "AI - 提取简历数据",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        400,
        432
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "0fdb2b79-b63d-42be-9ddc-2cee4cf5a83c",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        400,
        592
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "ea434fe7-5922-4413-9d94-a1bb049a1a13",
      "name": "Airtable - 获取职位要求",
      "type": "n8n-nodes-base.airtable",
      "position": [
        464,
        224
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appXXXXXXXXXXXXXX",
          "cachedResultName": "Candidates"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblJobRequirements",
          "cachedResultName": "Job Requirements"
        },
        "options": {},
        "operation": "search",
        "authentication": "oAuth2",
        "filterByFormula": "=AND({Position}='{{ $('Webhook - Receive CV').item.json.body.position }}', {Active}=TRUE())"
      },
      "typeVersion": 2
    },
    {
      "id": "529064ba-9f1e-4a4c-aa5e-ccbae81f2e57",
      "name": "AI代理 - 资格评估",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        704,
        352
      ],
      "parameters": {
        "text": "=You are a recruitment AI assistant. Analyze if this candidate matches the job requirements.\n\nCandidate Profile:\n{{ $json.text }}\n\nJob Requirements:\n- Position: {{ $('Airtable - Get Job Requirements').item.json.Position }}\n- Required Experience: {{ $('Airtable - Get Job Requirements').item.json.Required_Experience }} years\n- Required Skills: {{ $('Airtable - Get Job Requirements').item.json.Required_Skills }}\n- Education Required: {{ $('Airtable - Get Job Requirements').item.json.Education_Required }}\n- Nice to Have: {{ $('Airtable - Get Job Requirements').item.json.Nice_To_Have }}\n\nProvide:\n1. Match Score (0-100)\n2. Qualification Status (Highly Qualified / Qualified / Potentially Qualified / Not Qualified)\n3. Strengths (3 key points)\n4. Gaps (areas where candidate doesn't meet requirements)\n5. Recommendation (Interview / Phone Screen / Reject)\n\nFormat as JSON: {\"match_score\": number, \"status\": string, \"strengths\": [string], \"gaps\": [string], \"recommendation\": string, \"reasoning\": string}",
        "options": {
          "systemMessage": "You are an expert recruitment AI that provides objective, fair candidate assessments based on qualifications and job requirements."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "2f34882a-fce9-4f89-9563-438f9aa82795",
      "name": "OpenAI聊天模型评估",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        704,
        576
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {
          "temperature": 0.3
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c68e5f48-5033-45f5-b7a7-75bfa8f472b6",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        864,
        576
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "259d8989-fd79-402d-8993-00eafc43e86c",
      "name": "Airtable - 更新评估结果",
      "type": "n8n-nodes-base.airtable",
      "position": [
        976,
        352
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appXXXXXXXXXXXXXX",
          "cachedResultName": "Candidates"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCandidates",
          "cachedResultName": "Candidates"
        },
        "columns": {
          "value": {
            "Skills": "={{ $('AI - Extract CV Data').item.json.skills.join(', ') }}",
            "Status": "={{ $json.recommendation === 'Reject' ? 'Rejected' : 'Qualified' }}",
            "AI_Gaps": "={{ $json.gaps.join(', ') }}",
            "Education": "={{ $('AI - Extract CV Data').item.json.education }}",
            "Match_Score": "={{ $json.match_score }}",
            "AI_Reasoning": "={{ $json.reasoning }}",
            "AI_Strengths": "={{ $json.strengths.join(', ') }}",
            "Years_Experience": "={{ $('AI - Extract CV Data').item.json.years_experience }}",
            "AI_Recommendation": "={{ $json.recommendation }}",
            "Qualification_Status": "={{ $json.status }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "update",
        "authentication": "oAuth2"
      },
      "typeVersion": 2
    },
    {
      "id": "dda61fa4-8d96-40d3-aa9f-2feac1b03fe9",
      "name": "过滤器 - 合格候选人",
      "type": "n8n-nodes-base.filter",
      "position": [
        1136,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f8db4e5d-3c5e-4e0a-a0a5-d4c8e2d0a3f1",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.recommendation }}",
              "rightValue": "Reject"
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "eb06c596-bfed-4bd2-8d5d-6eec33740b1b",
      "name": "AI代理 - 生成邮件",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1296,
        224
      ],
      "parameters": {
        "text": "=Generate a personalized recruitment email for this candidate.\n\nCandidate: {{ $('Airtable - Store Candidate').item.json.Name }}\nPosition: {{ $('Webhook - Receive CV').item.json.body.position }}\nMatch Score: {{ $json.match_score }}\nStatus: {{ $json.status }}\nRecommendation: {{ $json.recommendation }}\n\nKey Strengths:\n{{ $json.strengths.join('\\n') }}\n\nEmail should:\n- Be professional and warm\n- Congratulate them on their application\n- Mention 1-2 specific strengths that stood out\n- {{ $json.recommendation === 'Interview' ? 'Invite them for a formal interview' : 'Suggest a preliminary phone screening' }}\n- Include next steps\n- Be concise (150-200 words)\n\nProvide: {\"subject\": string, \"body\": string}",
        "options": {
          "systemMessage": "You are a professional recruitment communications specialist. Write engaging, personalized emails that make candidates feel valued."
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "558ed33e-f2e1-41a6-af31-699ba4324675",
      "name": "OpenAI聊天模型邮件",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1296,
        448
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "OGYj7DgYv5GFLFZk",
          "name": "OpenAi account 2"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "12222fa6-a277-4af1-8cbb-7b27c67ea2d0",
      "name": "发送邮件 - 候选人联系",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1584,
        224
      ],
      "webhookId": "88019c7f-4d4b-4fda-af01-f3021ccb399c",
      "parameters": {
        "options": {},
        "subject": "={{ $json.subject }}",
        "toEmail": "={{ $('Airtable - Store Candidate').item.json.Email }}",
        "fromEmail": "recruitment@company.com"
      },
      "typeVersion": 2.1
    },
    {
      "id": "72a2753a-535f-4e77-9901-a4007124c76a",
      "name": "过滤器 - 面试候选人",
      "type": "n8n-nodes-base.filter",
      "position": [
        1760,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a2c4f6e8-1b3d-4a7c-9e5f-0d8b2c4a6e1f",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('AI Agent - Qualification Assessment').item.json.recommendation }}",
              "rightValue": "Interview"
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0a7e25e8-767a-4e1f-ae2e-c398efabca7c",
      "name": "Google日历 - 安排面试",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1984,
        224
      ],
      "parameters": {
        "end": "={{ $now.plus({ days: 3, hours: 1 }).toISO() }}",
        "start": "={{ $now.plus({ days: 3 }).toISO() }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "primary",
          "cachedResultName": "Primary"
        },
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "7d6c9426-4719-4516-b8f5-dcd5e86170f3",
      "name": "Airtable - 更新面试详情",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2208,
        224
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appXXXXXXXXXXXXXX",
          "cachedResultName": "Candidates"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCandidates",
          "cachedResultName": "Candidates"
        },
        "columns": {
          "value": {
            "Status": "Interview Scheduled",
            "Interview_Link": "={{ $json.hangoutLink }}",
            "Calendar_Event_ID": "={{ $json.id }}",
            "Interview_Scheduled": "={{ $json.start.dateTime }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "update",
        "authentication": "oAuth2"
      },
      "typeVersion": 2
    },
    {
      "id": "993a2d90-9ec0-4ba5-9c3f-0704704dd8ae",
      "name": "Slack - 发送通知",
      "type": "n8n-nodes-base.slack",
      "position": [
        1664,
        432
      ],
      "webhookId": "e7445fd1-5292-4e82-923a-e979940ba3b3",
      "parameters": {
        "text": "=🎯 *New Candidate Processed*\n\n*Candidate:* {{ $('Airtable - Store Candidate').item.json.Name }}\n*Position:* {{ $('Webhook - Receive CV').item.json.body.position }}\n*Match Score:* {{ $('AI Agent - Qualification Assessment').item.json.match_score }}%\n*Status:* {{ $('AI Agent - Qualification Assessment').item.json.status }}\n*Recommendation:* {{ $('AI Agent - Qualification Assessment').item.json.recommendation }}\n\n*Key Strengths:*\n{{ $('AI Agent - Qualification Assessment').item.json.strengths.map((s, i) => `${i+1}. ${s}`).join('\\n') }}\n\n{{ $('AI Agent - Qualification Assessment').item.json.recommendation === 'Interview' ? '📅 *Interview Scheduled:* ' + $now.plus({ days: 3 }).toFormat('MMM dd, yyyy HH:mm') : '📞 *Next Step:* Phone screening' }}\n\n<https://airtable.com/appXXXXXXXXXXXXXX/tblCandidates/{{ $('Airtable - Store Candidate').item.json.id }}|View in Airtable>",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0123456789",
          "cachedResultName": "#recruitment"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.2
    },
    {
      "id": "9d640257-d798-4d6a-97ad-0e1344c459b9",
      "name": "响应 Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2384,
        352
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={{ {\n  \"success\": true,\n  \"candidate_id\": $('Airtable - Store Candidate').item.json.id,\n  \"name\": $('Airtable - Store Candidate').item.json.Name,\n  \"match_score\": $('AI Agent - Qualification Assessment').item.json.match_score,\n  \"status\": $('AI Agent - Qualification Assessment').item.json.status,\n  \"recommendation\": $('AI Agent - Qualification Assessment').item.json.recommendation,\n  \"message\": \"Application processed successfully\"\n} }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "1ca1599c-5e50-4231-b384-73e58678fce9",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        -80
      ],
      "parameters": {
        "width": 480,
        "height": 640,
        "content": "## 简介"
      },
      "typeVersion": 1
    },
    {
      "id": "7c2b3a99-8480-4344-a98f-7a223ad253ef",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        -80
      ],
      "parameters": {
        "color": 6,
        "width": 448,
        "height": 384,
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "32b604ba-da3d-49a1-89dc-7e8a37f787b7",
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI - Extract CV Data",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI - Extract CV Data": {
      "main": [
        [
          {
            "node": "AI Agent - Qualification Assessment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Receive CV": {
      "main": [
        [
          {
            "node": "Airtable - Store Candidate",
            "type": "main",
            "index": 0
          },
          {
            "node": "HTTP Request - Download CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model Email": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent - Generate Email",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent - Qualification Assessment",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent - Generate Email": {
      "main": [
        [
          {
            "node": "Send Email - Candidate Outreach",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack - Send Notification": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Store Candidate": {
      "main": [
        [
          {
            "node": "Airtable - Get Job Requirements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request - Download CV": {
      "main": [
        [
          {
            "node": "AI - Extract CV Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Update Assessment": {
      "main": [
        [
          {
            "node": "Filter - Qualified Candidates",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack - Send Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model Assessment": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent - Qualification Assessment",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Filter - Interview Candidates": {
      "main": [
        [
          {
            "node": "Google Calendar - Schedule Interview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter - Qualified Candidates": {
      "main": [
        [
          {
            "node": "AI Agent - Generate Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Get Job Requirements": {
      "main": [
        [
          {
            "node": "AI Agent - Qualification Assessment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email - Candidate Outreach": {
      "main": [
        [
          {
            "node": "Filter - Interview Candidates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent - Qualification Assessment": {
      "main": [
        [
          {
            "node": "Airtable - Update Assessment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Update Interview Details": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Calendar - Schedule Interview": {
      "main": [
        [
          {
            "node": "Airtable - Update Interview Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

这是一个高级难度的工作流,适用于HR、AI Summarization等场景。适合高级用户,包含 16+ 个节点的复杂工作流

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量21
分类2
节点类型13
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Cheng Siong Chin

Cheng Siong Chin

@cschin

Prof. Cheng Siong CHIN serves as Chair Professor in Intelligent Systems Modelling and Simulation in Newcastle University, Singapore. His academic credentials include an M.Sc. in Advanced Control and Systems Engineering from The University of Manchester and a Ph.D. in Robotics from Nanyang Technological University.

外部链接
在 n8n.io 上查看 →

分享此工作流