Cv Resume - Automated Screening , Sorting , Rating and Tracker System

工作流概述

这是一个包含20个节点的复杂工作流,主要用于自动化处理各种任务。

工作流源代码

下载
{
  "id": "2ddwHvuidKc6lZia",
  "meta": {
    "instanceId": "5b12f258e7b8845a7e4d948aaf2096c942ee796fa3f6edf443a06fe951a6e6e2",
    "templateCredsSetupCompleted": true
  },
  "name": "AI Agent - Cv Resume - Automated Screening , Sorting , Rating and Tracker System",
  "tags": [],
  "nodes": [
    {
      "id": "92b75a8f-da03-4545-91ef-da29b88f1cef",
      "name": "GDocs - Get Job Desc",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        220,
        120
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "https://docs.google.com/document/d/12dv1AXaotpJ3ST1nUI-QgCoi5SJjM52zeHmjhwZUtvs/edit?usp=sharing"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "k7j5KUAvAzARmxTu",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "213712d5-f7ef-4c49-bfa6-da02be76a213",
      "name": "Google Drive - Resume CV File Created",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -540,
        120
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "17g2HGxLieONy6EWfsPADvA9IXDp5nJ8p",
          "cachedResultUrl": "https://drive.google.com/drive/folders/17g2HGxLieONy6EWfsPADvA9IXDp5nJ8p",
          "cachedResultName": "Unfiltered"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "i0k4QgJ8YgVPNgF7",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "31075389-e8c5-431a-b5e1-807422dbcd5f",
      "name": "Download Resume File From Gdrive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -220,
        120
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "fileName": "={{ $json.name }}"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "i0k4QgJ8YgVPNgF7",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "367d4e61-a73c-4e47-bd73-690b2a63e0ae",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        720,
        -400
      ],
      "parameters": {
        "text": "=You are expert backend principal engineer specialize in python. You will compare job description and candidate profile.

Then you will response with decision [REJECTED/KIV/SHORTLISTED].
, provide a reason and give a score rating
{ decision, reason , score}

After you identify a decision, used the tool in sequence.
1. Use the relevant tool to move the candidate resume file accordingly to the right folder GoogleDrive:MoveFileToReject or GoogleDrive:MoveFileToShortlisted or GoogleDrive:MoveFileToKIV
2. Use the Gsheet:UpdateTracker tool to update the tracker status.
3. Use the Gmail:NotificationTool to infor the candidate name, role, decision and reason

==[JOB-DESC]===
{{ $json.content }}
==[/JOB-DESC]===

==[CANDIDATE-DESC]===
{{ $('Extract from File').item.json.text }}
 
==[/CANDIDATE-DESC]===

",
        "options": {
          "systemMessage": "You are expert backend principal engineer specialize in python. You will compare job description and candidate profile.

Then you will response with decision [REJECTED/KIV/SHORTLISTED].
and provide a reason.
{ decision, reason}

After you identify a decision, used the tool 
1. Use the relevant tool to move the candidate resume file accordingly to the right folder GoogleDrive:MoveFileToReject or GoogleDrive:MoveFileToShortlisted or GoogleDrive:MoveFileToKIV
2. Use the Gsheet-UpdateTracker tool to update the tracker status.
"
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "f2a16cf3-0404-4791-b7d4-64f1909e02c2",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -40,
        120
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "98af749e-d4ee-4f9b-bacc-f78a47525077",
      "name": "Gmail:Notification",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        1760,
        120
      ],
      "webhookId": "ed0f09b9-4b16-4bf1-af47-208f1e8e3761",
      "parameters": {
        "sendTo": "aiix.space.noreply@gmail.com",
        "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
        "options": {},
        "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}",
        "descriptionType": "manual",
        "toolDescription": "Gmail:NotificationTool - This tool will notify the candidate name, job role, and status of [shortlisted/kiv/rejected]"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "1cn2wligOf77izLL",
          "name": "Gmail account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "343f7f0f-d505-448f-a95d-0fc7d3c14730",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        -60
      ],
      "parameters": {
        "color": 4,
        "width": 660,
        "height": 400,
        "content": "## 1. Move candidate cv to folder
 "
      },
      "typeVersion": 1
    },
    {
      "id": "9941231e-7cfb-442e-9593-aed21fe86cf8",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1220,
        -60
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 400,
        "content": "## 2. Update tracker
 "
      },
      "typeVersion": 1
    },
    {
      "id": "bfd181ec-cf79-4320-9acd-f3e35fb499c5",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1640,
        -60
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 400,
        "content": "## 3. Send email notification
 "
      },
      "typeVersion": 1
    },
    {
      "id": "60fd65e7-6e8a-4092-9fce-2dd97e35b236",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -280,
        -60
      ],
      "parameters": {
        "color": 2,
        "width": 380,
        "height": 400,
        "content": "## Download and read candidate CV Resume
 "
      },
      "typeVersion": 1
    },
    {
      "id": "d5d3cf16-d84d-4e7d-af75-f5341af20f59",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        -60
      ],
      "parameters": {
        "color": 2,
        "width": 380,
        "height": 400,
        "content": "## Read Job Description
 "
      },
      "typeVersion": 1
    },
    {
      "id": "0ee07985-b24b-492b-a394-2f7097254911",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2040,
        -80
      ],
      "parameters": {
        "color": 6,
        "width": 620,
        "height": 1040,
        "content": "# AI-Agent : Automated CV Resume Screening Evaluate Rating System

## What is this for?
### Let AI agent intelligently analyze and rate your Candidate's cv resumes based on your job description. This will help ensure a fast and accurate screening process.

### The Screening AI automatically organizes resumes into appropriate folders, updates statuses and scores in your tracking system, and sends timely notifications—saving you valuable time and effort. 


### Let AI Agent and automation handle the heavy lifting while you focus on making the best hiring decisions!


```
```

## Prerequisite

### Please follow official n8n integration document on how setup your gdrive,gmail,gdoc,gsheet credentials. 

 
```
```

## How it works?

### Each time you place a new pdf resume in the 'Unfiltered' folder , you will automatically get screening results in the tracker for the candidate. 

The AI agent will help notify email and do CV sorting into appropriate folder.

 "
      },
      "typeVersion": 1
    },
    {
      "id": "aa43af12-fae1-4a98-9cad-7859051baf48",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -620,
        -60
      ],
      "parameters": {
        "color": 2,
        "width": 260,
        "height": 400,
        "content": "## Add candidate CV Resume into folder
 "
      },
      "typeVersion": 1
    },
    {
      "id": "7ad2b8a9-3720-4713-a8dd-af8f6745f95d",
      "name": "Gdrive:Move-To-Reject-Folder",
      "type": "n8n-nodes-base.googleDriveTool",
      "position": [
        580,
        120
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive - Resume CV File Created').item.json.id }}"
        },
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "16BR7dhzd4-6i_kHYRStJd5UdqNWhpXKA",
          "cachedResultUrl": "https://drive.google.com/drive/folders/16BR7dhzd4-6i_kHYRStJd5UdqNWhpXKA",
          "cachedResultName": "REJECTED"
        },
        "operation": "move",
        "descriptionType": "manual",
        "toolDescription": "GoogleDrive:MoveFileToReject
Use this tool to move rejected candidate profile to reject folder
 "
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "i0k4QgJ8YgVPNgF7",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "921a0561-9733-47fe-a6ee-191abf30ac37",
      "name": "Gdrive:Move-To-KIV-Folder",
      "type": "n8n-nodes-base.googleDriveTool",
      "position": [
        800,
        120
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive - Resume CV File Created').item.json.id }}"
        },
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1KLfykacUhwtO0-wgYs6WsrcxbCHHKJ7o",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1KLfykacUhwtO0-wgYs6WsrcxbCHHKJ7o",
          "cachedResultName": "KIV"
        },
        "operation": "move",
        "descriptionType": "manual",
        "toolDescription": "GoogleDrive:MoveFileToKIV
Use this tool to move KIV candidate profile to KIV folder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "i0k4QgJ8YgVPNgF7",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "0b32131c-3811-406f-a50d-875750781906",
      "name": "Gdrive:Move-To-Shortlisted-Folder",
      "type": "n8n-nodes-base.googleDriveTool",
      "position": [
        1000,
        120
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive - Resume CV File Created').item.json.id }}"
        },
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1m8vrejmyPWpGsjJc6amnWfSXBRESlpfO",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1m8vrejmyPWpGsjJc6amnWfSXBRESlpfO",
          "cachedResultName": "SHORTLISTED"
        },
        "operation": "move",
        "descriptionType": "manual",
        "toolDescription": "GoogleDrive:MoveFileToShortlisted
Use this tool to move  Shortlisted candidate profile to Shortlisted folder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "i0k4QgJ8YgVPNgF7",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "98a656c7-bb17-4808-abf8-ef4e23716b60",
      "name": "Gsheet: Update Candidate Tracker",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        1340,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "AI Score": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('AI_Score', ``, 'string') }}",
            "AI Reason": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('AI_Reason', ``, 'string') }}",
            "AI Verdict": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('AI_Verdict', ``, 'string') }}",
            "Candidate Name": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Candidate_Name__using_to_match_', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "Candidate Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Candidate Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Current Role",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Current Role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Role Scope",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Role Scope",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI Score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "AI Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI Verdict",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "AI Verdict",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "AI Reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "AI Reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Referral",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Referral",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Due date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Due date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Human verdict",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Human verdict",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Candidate Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 843593464,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SwnbH_dnqPMho7SqX1LKAjFMc0YvLBGok4I1AdgrJjE/edit#gid=843593464",
          "cachedResultName": "main"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1SwnbH_dnqPMho7SqX1LKAjFMc0YvLBGok4I1AdgrJjE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1SwnbH_dnqPMho7SqX1LKAjFMc0YvLBGok4I1AdgrJjE/edit?usp=drivesdk",
          "cachedResultName": "ResumeScreening- Candidate Tracker"
        },
        "descriptionType": "manual",
        "toolDescription": "Gsheet:UpdateTracker
This tool help update relevant candidate status"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "fqYZ5O9pQ89v3SAp",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "c9eb92a0-f3bc-4226-835e-602a2f808e4c",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1340,
        -80
      ],
      "parameters": {
        "color": 6,
        "width": 600,
        "height": 1300,
        "content": "
## Folder & File Setup
### 1. Create a google-drive folder like this
 
[View directory example](https://drive.google.com/drive/folders/1Uh7VdJORE03YBJkCmvr1TXg_esbiNnTV?dmr=1&ec=wgc-drive-hero-goto)

![Directory EXAMPLE](https://github.com/dragonjump/n8n-ai-agent-screening/blob/main/screenshot1.png?raw=true)

### 2. Create a job description like this
 
[View file example](https://docs.google.com/document/d/12dv1AXaotpJ3ST1nUI-QgCoi5SJjM52zeHmjhwZUtvs/edit?usp=drive_link)

![Directory EXAMPLE](https://github.com/dragonjump/n8n-ai-agent-screening/blob/main/screenshot2.png?raw=true)


### 3. Configure a tracker like this
 
[View file example](https://docs.google.com/spreadsheets/d/1SwnbH_dnqPMho7SqX1LKAjFMc0YvLBGok4I1AdgrJjE/edit?gid=843593464#gid=843593464)

![Directory EXAMPLE](https://github.com/dragonjump/n8n-ai-agent-screening/blob/main/screenshot3.png?raw=true)"
      },
      "typeVersion": 1
    },
    {
      "id": "e0d419d7-dcc1-40c5-afb1-5bda110e681c",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        20
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "height": 80,
        "content": "UNFILTERED FOLDER"
      },
      "typeVersion": 1
    },
    {
      "id": "d9034b09-41f9-4f27-8d9d-e40f8603e1ea",
      "name": "Groq - llama 4 AI MODEL",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        680,
        -200
      ],
      "parameters": {
        "model": "meta-llama/llama-4-maverick-17b-128e-instruct",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "id": "RBCtAUywXbI6hFmr",
          "name": "Groq account -bbflight"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "adba9994-2c2e-40f2-9a73-8a57b48b3bc4",
  "connections": {
    "AI Agent": {
      "main": [
        []
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "GDocs - Get Job Desc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail:Notification": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "GDocs - Get Job Desc": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Groq - llama 4 AI MODEL": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Gdrive:Move-To-KIV-Folder": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Gdrive:Move-To-Reject-Folder": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Download Resume File From Gdrive": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gsheet: Update Candidate Tracker": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Gdrive:Move-To-Shortlisted-Folder": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive - Resume CV File Created": {
      "main": [
        [
          {
            "node": "Download Resume File From Gdrive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

功能特点

  • 自动检测新邮件
  • AI智能内容分析
  • 自定义分类规则
  • 批量处理能力
  • 详细的处理日志

技术分析

节点类型及作用

  • Googledocs
  • Googledrivetrigger
  • Googledrive
  • @N8N/N8N Nodes Langchain.Agent
  • Extractfromfile

复杂度评估

配置难度:
★★★★☆
维护难度:
★★☆☆☆
扩展性:
★★★★☆

实施指南

前置条件

  • 有效的Gmail账户
  • n8n平台访问权限
  • Google API凭证
  • AI分类服务订阅

配置步骤

  1. 在n8n中导入工作流JSON文件
  2. 配置Gmail节点的认证信息
  3. 设置AI分类器的API密钥
  4. 自定义分类规则和标签映射
  5. 测试工作流执行
  6. 配置定时触发器(可选)

关键参数

参数名称 默认值 说明
maxEmails 50 单次处理的最大邮件数量
confidenceThreshold 0.8 分类置信度阈值
autoLabel true 是否自动添加标签

最佳实践

优化建议

  • 定期更新AI分类模型以提高准确性
  • 根据邮件量调整处理批次大小
  • 设置合理的分类置信度阈值
  • 定期清理过期的分类规则

安全注意事项

  • 妥善保管API密钥和认证信息
  • 限制工作流的访问权限
  • 定期审查处理日志
  • 启用双因素认证保护Gmail账户

性能优化

  • 使用增量处理减少重复工作
  • 缓存频繁访问的数据
  • 并行处理多个邮件分类任务
  • 监控系统资源使用情况

故障排除

常见问题

邮件未被正确分类

检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。

Gmail认证失败

确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。

调试技巧

  • 启用详细日志记录查看每个步骤的执行情况
  • 使用测试邮件验证分类逻辑
  • 检查网络连接和API服务状态
  • 逐步执行工作流定位问题节点

错误处理

工作流包含以下错误处理机制:

  • 网络超时自动重试(最多3次)
  • API错误记录和告警
  • 处理失败邮件的隔离机制
  • 异常情况下的回滚操作