简历工具
中级
这是一个HR, AI Summarization领域的自动化工作流,包含 15 个节点。主要使用 Code, Merge, Webhook, Aggregate, GoogleDrive 等节点。 基于Llama3.1大语言模型的AI简历筛选,集成Google云端硬盘和表格
前置要求
- •HTTP Webhook 端点(n8n 会自动生成)
- •Google Drive API 凭证
- •Google Sheets API 凭证
使用的节点 (15)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "7wkmOQEEUAJIwFEP",
"meta": {
"instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a",
"templateCredsSetupCompleted": true
},
"name": "cv-tool",
"tags": [],
"nodes": [
{
"id": "0cae9383-b4da-43ec-9962-afc97d56ddad",
"name": "遍历项目",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-280,
160
],
"parameters": {
"options": {}
},
"executeOnce": false,
"typeVersion": 3
},
{
"id": "c027ca47-5415-4f7a-9028-a0637acc195f",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
380,
360
],
"parameters": {
"mode": "chooseBranch"
},
"typeVersion": 3
},
{
"id": "2bd255ee-e3d8-46a6-9112-14b348852eae",
"name": "聚合",
"type": "n8n-nodes-base.aggregate",
"position": [
600,
360
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "ae51c305-87e4-4404-816e-4f2b30b80c6d",
"name": "Ollama 模型",
"type": "@n8n/n8n-nodes-langchain.lmOllama",
"position": [
920,
840
],
"parameters": {
"model": "llama3.1:latest",
"options": {
"temperature": 0.1
}
},
"credentials": {
"ollamaApi": {
"id": "7CIt42W14b1MCgxQ",
"name": "Ollama account"
}
},
"typeVersion": 1
},
{
"id": "42fd32cf-1787-45c5-a2df-08955534ae64",
"name": "自动修复输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
1020,
660
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "097e8558-2a30-4c1e-a7bd-4620bc9d22a6",
"name": "结构化输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1060,
1100
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Evaluation Form\",\n \"type\": \"object\",\n \"properties\": {\n \"candidate_file_name\": {\"$ref\": \"#/definitions/candidateFileName\"},\n \"candidate_name\": {\"$ref\": \"#/definitions/candidateName\"},\n \"questions\": {\"$ref\": \"#/definitions/questions\"},\n \"overall_points\": {\"$ref\": \"#/definitions/overallPoints\"}\n },\n \"required\": [\"candidate_file_name\", \"candidate_name\", \"questions\", \"overall_points\"],\n \"definitions\": {\n \"candidateFileName\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Candidate File Name\",\n \"type\": \"string\"\n },\n \"candidateName\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Candidate Name\",\n \"type\": \"string\"\n },\n \"questions\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Questions\",\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/question\"\n }\n },\n \"question\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Question\",\n \"type\": \"object\",\n \"properties\": {\n \"question\": {\"$ref\": \"#/definitions/questionText\"},\n \"answer\": {\"$ref\": \"#/definitions/candidateAnswer\"}\n },\n \"required\": [\"question\", \"answer\"]\n },\n \"questionText\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Question Text\",\n \"type\": \"string\"\n },\n \"candidateAnswer\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Candidate Answer\",\n \"type\": \"string\"\n },\n \"overallPoints\": {\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"Overall Points\",\n \"type\": \"string\"\n }\n }\n}"
},
"typeVersion": 1.2
},
{
"id": "79957386-3e4b-4650-9490-8a29f948d5f0",
"name": "代码",
"type": "n8n-nodes-base.code",
"position": [
1260,
360
],
"parameters": {
"jsCode": "// Extract input data\nconst items = $input.all();\nlet results = [];\nlet allQuestions = new Set();\n\n// Collect all possible question fields dynamically\nitems.forEach(item => {\n let output = item.json.output;\n let questions = output.questions;\n \n Object.keys(questions).forEach(q => allQuestions.add(q));\n});\n\n// Convert to array format\nitems.forEach(item => {\n let output = item.json.output;\n let row = {\n \"Candidate File Name\": output.candidate_file_name,\n \"Candidate Name\": output.candidate_name\n };\n\n // Add all dynamically available question scores\n allQuestions.forEach(question => {\n row[question] = output.questions[question] || \"\";\n });\n\n // Add overall points\n row[\"Overall Points\"] = output.overall_points;\n results.push(row);\n});\n\nreturn results.map(row => ({ json: row }));"
},
"executeOnce": false,
"typeVersion": 2
},
{
"id": "b0c56e05-f929-496d-9482-ff2f61a6e544",
"name": "下载文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
-100,
380
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "application/pdf",
"slidesToFormat": "application/pdf",
"drawingsToFormat": "application/pdf"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "5dc07e0a-900f-407e-be7e-da4db4168e30",
"name": "输入条件",
"type": "n8n-nodes-base.googleSheets",
"position": [
20,
180
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 714429904,
"cachedResultUrl": "",
"cachedResultName": "Search_Criteria_t2"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1VoJbCMXbgQm8lO37h1kAp-wFo_7rC_xthL7H4PXCNxg",
"cachedResultUrl": "",
"cachedResultName": "Criteria-sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "e917b4e5-ca96-4d08-b43c-bf832710b1f4",
"name": "从 PDF 提取内容",
"type": "n8n-nodes-base.extractFromFile",
"position": [
140,
380
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "fbee4bec-65af-4017-98b7-9074c4fd5770",
"name": "输出表格",
"type": "n8n-nodes-base.googleSheets",
"position": [
1500,
360
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "Candidate File Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Candidate File Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Candidate Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Candidate Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business Analysis",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Business Analysis",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Project Management (PMO)",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Project Management (PMO)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Banking",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Banking",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Communication Skills",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Communication Skills",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Overall Points",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Overall Points",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": []
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1534129230,
"cachedResultUrl": "",
"cachedResultName": "Sheet2"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1TvYZwuCeTVImsXdd3cNh6zYf7neJbHvCkqLjNzsCk5w",
"cachedResultUrl": "",
"cachedResultName": "Output-sheet"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "1d77e98d-20fa-4301-93ea-175881cac1dc",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-880,
160
],
"webhookId": "6751c9a2-4bf9-416e-8e98-905498867431",
"parameters": {
"path": "6751c9a2-4bf9-416e-8e98-905498867431",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "d7644e7c-2abb-4bb2-ac81-7595cc918a9b",
"name": "响应 Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
20,
-60
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"Status\": \"Workflow Completed!\"\n}"
},
"typeVersion": 1.1,
"alwaysOutputData": false
},
{
"id": "14869643-9588-42de-a238-195f47875d78",
"name": "文件夹搜索",
"type": "n8n-nodes-base.googleDrive",
"position": [
-580,
160
],
"parameters": {
"filter": {
"folderId": {
"__rl": true,
"mode": "list",
"value": "1z0DTQL4nfB7lQFETQw8-fnxg1YaOpgoL",
"cachedResultUrl": "",
"cachedResultName": "test"
}
},
"options": {},
"resource": "fileFolder"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "8f920f78-86d3-45ed-b59c-4a74e6fb108b",
"name": "基础 LLM 链",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
860,
360
],
"parameters": {
"text": "=%Candidate_Profile%: \n{{ $('Extract from PDF').first().json.text}}\n\nAnalyze the %Candidate_Profile% against the %Questions%:{{ $json.data.map(item => item.Matching_Criteria + \" - Output Type:\" + item.Output_Type) + \"\\n\" }}. \n\nUse this question format as input to the AI-Model : How do you rate your experiance in {{ $json.data.map(item => item.Matching_Criteria + \"Output Type:\" + item.Output_Type) + \"\\n\" }}\n\nTake candidate_file_name as {{ $('Download-file').first().json.name }} and fetch the candidate_name from the %Candidate_Profile%\n\nFor each question output format should be : {{ $json.data[0].Output_Type}}\n\nAt the end please calculate overall point(Total Point = sum({{ $json.data[0].Output_Type}} for each criteria)).\n\n\nIf he or she didn't have any experiance under specific area please mark rating as 0.\n",
"messages": {
"messageValues": [
{
"message": "Output should be a one specific format for all outputs"
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.5
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "3a4961eb-24af-44a3-b727-9e11b39ee823",
"connections": {
"Code": {
"main": [
[
{
"node": "Output-sheet",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Folder-search",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Ollama Model": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Output-sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Download-file": {
"main": [
[
{
"node": "Extract from PDF",
"type": "main",
"index": 0
}
]
]
},
"Folder-search": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Input-criteria": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Basic LLM Chain": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
],
[
{
"node": "Download-file",
"type": "main",
"index": 0
},
{
"node": "Input-criteria",
"type": "main",
"index": 0
}
]
]
},
"Extract from PDF": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "Basic LLM Chain",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - 人力资源, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
每日 WhatsApp 群组智能分析:GPT-4.1 分析与语音消息转录
If
Set
Code
+20
52 节点Daniel Lianes
杂项
自动化视频生成器
使用 DeepSeek、TTS 和 Together.ai 从脚本生成 AI 视频
Set
Code
Wait
+15
81 节点Lakindu Siriwardana
内容创作
第一轮 Telegram 和 LinkedIn 快速通道 AI 招聘助手
AI候选人筛选流程:LinkedIn到Telegram,集成Gemini与Apify
If
Set
Code
+15
55 节点Dean Pike
人力资源
TalentFlow AI - 批量简历筛选与职位描述匹配
使用GPT-4为HR团队进行批量简历筛选与职位描述匹配
If
Code
Merge
+12
30 节点Trung Tran
人力资源
宠物店 4
🐶 宠物店预约 AI 代理
If
Set
Code
+41
187 节点Bruno Dias
人工智能