8
n8n 中文网amn8n.com

使用Gemini AI和Decodo爬虫自动匹配简历与职位

高级

这是一个HR, AI Summarization领域的自动化工作流,包含 20 个节点。主要使用 Set, Gmail, Merge, Switch, Webhook 等节点。 使用Gemini AI和Decodo爬虫自动匹配简历与职位

前置要求
  • Google 账号和 Gmail API 凭证
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "689fa22e68cd4198e4ae37f3cc44f498087edd235a867e22515be823bab694c7"
  },
  "nodes": [
    {
      "id": "22f926f5-4580-42f2-8546-ba24afed4714",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2032,
        -48
      ],
      "parameters": {
        "width": 576,
        "height": 848,
        "content": "## 使用Gemini AI和Decodo爬虫自动匹配简历与职位"
      },
      "typeVersion": 1
    },
    {
      "id": "28b37b94-1b3b-445a-94e9-0c5c5cb1164c",
      "name": "设置:捕获表单字段",
      "type": "n8n-nodes-base.set",
      "position": [
        -1008,
        400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "62bbfb3c-6407-4889-9673-5ef912ab0afb",
              "name": "short_summary",
              "type": "string",
              "value": "={{ $json.body.data.fields[1].value }}"
            },
            {
              "id": "069dd205-fd11-445e-8693-422963e1b9c0",
              "name": "resume_url_link",
              "type": "string",
              "value": "={{ $json.body.data.fields[2].value[0].url }}"
            },
            {
              "id": "784f8da9-1eea-446f-9f6d-2d0a1ddbdb03",
              "name": "user_email",
              "type": "string",
              "value": "={{ $json.body.data.fields[0].value }}"
            },
            {
              "id": "4a69f2d3-c3a8-485c-a2f0-bb82e0af07f8",
              "name": "user_linkedin",
              "type": "string",
              "value": "={{ $json.body.data.fields[3].value }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f6e12bf7-06ea-46b0-8a48-ab97f79fa7df",
      "name": "条件判断:是否有LinkedIn URL?",
      "type": "n8n-nodes-base.switch",
      "position": [
        -752,
        400
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "If LinkedIn User is Exist",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "5a366206-392c-47d6-a343-2c208468a765",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.user_linkedin }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "If LinkedIn User is not Exist",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "3dcf4c0f-6438-4f72-a0b8-6086674ee4de",
                    "operator": {
                      "type": "string",
                      "operation": "empty",
                      "singleValue": true
                    },
                    "leftValue": "{{ $json.user_linkedin }}",
                    "rightValue": "1"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "allMatchingOutputs": true
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "aa12ccf5-3ea4-4c71-8851-59162005486c",
      "name": "Decodo:爬取LinkedIn个人资料",
      "type": "@decodo/n8n-nodes-decodo.decodo",
      "position": [
        -416,
        112
      ],
      "parameters": {
        "geo": "=",
        "url": "={{ $json.user_linkedin }}",
        "markdown": false
      },
      "credentials": {
        "decodoApi": {
          "id": "Xc6AkeDSHbyutWEs",
          "name": "Decodo Credentials Hendra"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bd966978-c767-42e8-97f5-e7d222bcbe17",
      "name": "Gemini模型:档案提取",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -128,
        224
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "dmfdKTqDcz24VUn2",
          "name": "Fahmi Gemini"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0e3e2f0b-9a9e-4b11-a7e0-150eefba831e",
      "name": "合并:组装候选人档案",
      "type": "n8n-nodes-base.merge",
      "position": [
        160,
        384
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "c483118c-1301-45ee-82db-a9c3d03bfef6",
      "name": "Gemini模型:职位匹配",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        384,
        400
      ],
      "parameters": {
        "text": "=Short Summary User: {{ $('Set: Capture Form Fields').item.json.short_summary }}\n---\nUser Resume and Experience: {{ $json.content.parts[0].text }}\n---\nLinkedIn User: {{ $json.output }}",
        "options": {
          "systemMessage": "=# System Message — Smart Job Match Finder Agent\n\nYou are a Smart Job Match Finder Agent, an intelligent assistant that analyzes a user’s resume, personal summary and linkedin profile to automatically find the most relevant job openings available online.\n\nYou specialize in connecting people with jobs that truly match their skills, experience, and career goals — not just keywords. You also evaluate and score how well each job aligns with the user’s background.\n\nYou use Decodo Tool to scrape and extract accurate, up-to-date job postings from trusted online job boards.\n\nYour output will using format clean HTML that can passed Email format.\n\nAssume the user is semi-technical: they can provide their resume file url, short personal summary and linkedin profile, but they expect a clear, structured, and Email-Ready-output — not long explanations.\n\n---\n\n##Tools\n\nDecodo Tool:\n\nUse this tool to scrape and extract job postings directly from websites like:\n\n- LinkedIn Jobs\n- JobStreet\n\n---\n\n##Rules\n\n1. Mandatory Tool Use: Always use Decodo Tool for scraping job listings.\n2. User Input Requirements:\n    \n    The user provides:\n    \n    - Their resume files url (skills, work experience, education).\n    - A short personal summary or preferred job type (e.g. \"I want to find remote React Developer jobs in Singapore\").\n    - Their LinkedIn Profiles \n3. Job Search Process:\n    - Search and scrape job postings that match the user’s skills, experience, and preferences.\n    - Compare the user profile (resume + summary) with each job description.\n    - Select and display the top 10 most relevant matches.\n4. Output Format:\n    \n    Present the output in clean HTML (Email-ready).\n    Use this structure for each result:\n    ---\n    ## Job Title: [Job Title]\n    ## Company: [Company Name]\n    ## Location: [Location]\n    ## Work Type: [Remote / Hybrid / On-site]\n    ## Salary Range: [If available]\n    ## Source: [Platform Name]\n    ## Job URL: [Link]\n    ## Match Score: [Percentage, e.g., 85%] Why It Matches: [Short explanation of relevant skills/experience]Missing Skills: [List of missing or less relevant areas]\n    ---\n5. Email-Ready-Format: Present the output in clean, minimal HTMl that can be directly passed to the Gmail node (no extra formatting required).\n6. Tone & Style:\nProfessional, structured, and encouraging — never robotic or overly formal.\nAvoid filler words like “of course,” “I understand,” or “let’s see.”\n    \n---\n\n##Scoring Criteria\n\n- 50% — Skill and Technology Alignment\n- 25% — Experience and Role Match\n- 15% — Location / Work Type Preference\n- 10% — Keyword Similarity in Job Description\n\n---\n\n##Fallback Behavior\n\n- If no relevant jobs are found, politely inform the user and suggest adjusting keywords or expanding preferred locations.\n- If the resume text is too short, request additional experience details.\n- Never output raw HTML or irrelevant scraping data."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "2cca0409-c0fb-4f46-8605-0936fdaee306",
      "name": "Decodo工具:爬取招聘网站",
      "type": "@decodo/n8n-nodes-decodo.decodoTool",
      "position": [
        624,
        656
      ],
      "parameters": {},
      "credentials": {
        "decodoApi": {
          "id": "kfy3Vs5AgxfDGzpC",
          "name": "Johan Decodo"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b2f4d75b-e8ff-4ac4-9707-3384d2e94ce6",
      "name": "Gemini模型:匹配与评分职位",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        336,
        656
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "dmfdKTqDcz24VUn2",
          "name": "Fahmi Gemini"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "db2dff4a-d475-4436-8cec-dfcc16cb19ad",
      "name": "Gmail:发送简历摘要和最佳匹配职位",
      "type": "n8n-nodes-base.gmail",
      "position": [
        816,
        400
      ],
      "webhookId": "af883a34-a4f5-4da4-b7a0-2cfd8ec493ef",
      "parameters": {
        "sendTo": "={{ $('Set: Capture Form Fields').item.json.user_email }}",
        "message": "={{ $json.output }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "Top Job Matches for you"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "qgKvcsu98l6EQuaR",
          "name": "Johan Gmail"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b57abcaf-9e67-4fa0-b654-8c64b4f1cdb0",
      "name": "Webhook:接收信息收集表(POST)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1296,
        400
      ],
      "webhookId": "ca18f47b-399e-4689-9795-80ac1d23829b",
      "parameters": {
        "path": "ca18f47b-399e-4689-9795-80ac1d23829b",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "924bdbd9-2c10-4dd8-982d-b1f6b06e57f9",
      "name": "LLM:提取LinkedIn详情",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        -192,
        0
      ],
      "parameters": {
        "text": "={{ $json.data.results[0].content }}",
        "options": {},
        "attributes": {
          "attributes": [
            {
              "name": "Name",
              "required": true,
              "description": "Name of the LinkedIn User"
            },
            {
              "name": "Headline",
              "required": true,
              "description": "Headline of the LinkedIn User"
            },
            {
              "name": "Location",
              "required": true,
              "description": "Location of the LinkedIn User"
            },
            {
              "name": "About summary",
              "required": true,
              "description": "About summary of the LinkedIn User"
            },
            {
              "name": "Experience (detailed roles and companies)",
              "required": true,
              "description": "Experience (detailed roles and companies) of the LinkedIn User"
            },
            {
              "name": "Education",
              "required": true,
              "description": "Education of the LinkedIn User"
            },
            {
              "name": "Licenses & Certifications",
              "required": true,
              "description": "Licenses & Certifications of the LinkedIn User"
            },
            {
              "name": "Volunteer Experience",
              "required": true,
              "description": "Volunteer Experience of the LinkedIn User"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a1caa677-8e09-4e98-a8a5-fa7eabc304d1",
      "name": "Gemini:解析简历",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        -144,
        400
      ],
      "parameters": {
        "text": "What's in this document or picture?",
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "resource": "document",
        "documentUrls": "={{ $json.resume_url_link }}"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "dmfdKTqDcz24VUn2",
          "name": "Fahmi Gemini"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "18343f38-02e8-43b9-83c6-abf47eea0df4",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        -48
      ],
      "parameters": {
        "color": 4,
        "width": 2432,
        "height": 960,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "13375db6-f665-4836-a1f2-462e32158b44",
      "name": "便签 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1376,
        256
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 336,
        "content": "将Webhook URL复制到您的表单"
      },
      "typeVersion": 1
    },
    {
      "id": "941d37e2-a662-4724-b14f-1409f9bbdb0b",
      "name": "便签 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        640
      ],
      "parameters": {
        "color": 3,
        "height": 256,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "1efa3fda-067d-4e7f-aa92-82012467ddea",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        96
      ],
      "parameters": {
        "color": 3,
        "height": 256,
        "content": "社区节点;仅适用于自托管n8n。请确保添加您的Decodo API凭据。"
      },
      "typeVersion": 1
    },
    {
      "id": "59c3159f-e0e7-4b61-aad8-5c0486f29a0c",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1088,
        320
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 272,
        "content": "请确保调整表单字段以从webhook捕获输入信息"
      },
      "typeVersion": 1
    },
    {
      "id": "3a08bdbc-3236-4b67-a26b-25e28647b76c",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        272
      ],
      "parameters": {
        "color": 5,
        "height": 320,
        "content": "您可以通过编辑智能体中的提示词来调整邮件内容,或自行创建邮件内容,但请确保使用HTML格式。"
      },
      "typeVersion": 1
    },
    {
      "id": "d38d21c2-745c-4502-90c0-deb5024d9bf0",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1392,
        -32
      ],
      "parameters": {
        "color": 3,
        "width": 480,
        "height": 96,
        "content": "> **免责声明:** 此工作流依赖**社区Decodo节点**,因此需要**自托管n8n**。请从社区市场安装该节点并配置Decodo API凭据。"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Gemini: Parse Resume": {
      "main": [
        [
          {
            "node": "Merge: Assemble Candidate Profile",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Set: Capture Form Fields": {
      "main": [
        [
          {
            "node": "Switch: Has LinkedIn URL?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch: Has LinkedIn URL?": {
      "main": [
        [
          {
            "node": "Decodo: Scrape LinkedIn Profile",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gemini: Parse Resume",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Model: Job Matching": {
      "main": [
        [
          {
            "node": "Gmail: Send Resume Summary and Top Matches Job",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM: Extract LinkedIn Details": {
      "main": [
        [
          {
            "node": "Merge: Assemble Candidate Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Decodo Tool: Scrape Job Boards": {
      "ai_tool": [
        [
          {
            "node": "Gemini Model: Job Matching",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Decodo: Scrape LinkedIn Profile": {
      "main": [
        [
          {
            "node": "LLM: Extract LinkedIn Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Model: Match & Score Jobs": {
      "ai_languageModel": [
        [
          {
            "node": "Gemini Model: Job Matching",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Model: Profile Extraction": {
      "ai_languageModel": [
        [
          {
            "node": "LLM: Extract LinkedIn Details",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Merge: Assemble Candidate Profile": {
      "main": [
        [
          {
            "node": "Gemini Model: Job Matching",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook: Receive Intake Form (POST)": {
      "main": [
        [
          {
            "node": "Set: Capture Form Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 人力资源, AI 摘要总结

需要付费吗?

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

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

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

作者
Fahmi Fahreza

Fahmi Fahreza

@fahmiiireza

AI Automation Developer

外部链接
在 n8n.io 查看

分享此工作流