8
n8n 中文网amn8n.com

求职助手 Agent

高级

这是一个Miscellaneous, Multimodal AI领域的自动化工作流,包含 16 个节点。主要使用 Set, Code, Gmail, FormTrigger, Agent 等节点。 通过 Gemini 和 Google Jobs 寻找理想工作并生成定制求职信

前置要求
  • Google 账号和 Gmail API 凭证
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "jDUtQ2fgs8EOqU95",
  "meta": {
    "instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
    "templateCredsSetupCompleted": true
  },
  "name": "求职助手 Agent",
  "tags": [],
  "nodes": [
    {
      "id": "c6d0bc1b-bd78-4eea-84ed-6bed5c999d45",
      "name": "便利贴 - 工作原理",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        -288
      ],
      "parameters": {
        "color": 5,
        "width": 500,
        "height": 864,
        "content": "## 🎯 智能求职助手 + 求职信生成器"
      },
      "typeVersion": 1
    },
    {
      "id": "ef02ff8f-9fa8-4f8a-a66f-d81003fe3915",
      "name": "便利贴 - 设置指南",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        48
      ],
      "parameters": {
        "color": 4,
        "width": 380,
        "height": 528,
        "content": "## ⚙️ 设置指南(已更新)"
      },
      "typeVersion": 1
    },
    {
      "id": "d776ebde-2cda-4b59-a0aa-a6ee0925d4f9",
      "name": "便利贴 - 专业提示",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        48
      ],
      "parameters": {
        "color": 3,
        "width": 360,
        "height": 528,
        "content": "## 🛠️ 自定义提示"
      },
      "typeVersion": 1
    },
    {
      "id": "027c527d-90c0-4aec-b3f5-7ca212c72b1d",
      "name": "表单提交时",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1200,
        -256
      ],
      "webhookId": "smart-job-hunter-v2",
      "parameters": {
        "options": {},
        "formTitle": "🎯 Smart Job Hunter + Cover Letter Generator",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "CV/Resume (PDF)",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            },
            {
              "fieldLabel": "Preferred Location",
              "placeholder": "e.g., Jakarta, Bandung, Remote, Anywhere",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Job Type",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Full Time"
                  },
                  {
                    "option": "Part Time"
                  },
                  {
                    "option": "Freelance"
                  },
                  {
                    "option": "Contract"
                  },
                  {
                    "option": "Internship"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Work Setting",
              "fieldOptions": {
                "values": [
                  {
                    "option": "On Site"
                  },
                  {
                    "option": "Remote"
                  },
                  {
                    "option": "Hybrid"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldLabel": "Minimum Salary Expectation (Optional)",
              "placeholder": "e.g., 10 juta, 15-20 juta, negotiable"
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Additional Preferences (Optional)",
              "placeholder": "e.g., startup culture, specific companies, must have BPJS"
            },
            {
              "fieldType": "email",
              "fieldLabel": "Email",
              "placeholder": "We will send the results to this email",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Upload your CV and let AI find perfect jobs with custom cover letters!"
      },
      "typeVersion": 2.3
    },
    {
      "id": "c84aae8d-0731-4158-ae47-74cbf7a3fb92",
      "name": "从 PDF 提取简历",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -976,
        -256
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "CV_Resume__PDF_"
      },
      "typeVersion": 1
    },
    {
      "id": "6fa762f1-f99a-4436-b975-7583e5456ddd",
      "name": "准备数据",
      "type": "n8n-nodes-base.set",
      "position": [
        -752,
        -256
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ce5f3a96-c63d-40fa-b02c-8d763bfa2ed1",
              "name": "cvData",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "51623c31-dacf-4828-b1ac-f03f67e00d54",
              "name": "location",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Preferred Location'] }}"
            },
            {
              "id": "068b13d5-6941-415d-935b-4936e42df913",
              "name": "workSetting",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Work Setting'] }}"
            },
            {
              "id": "e1636d57-472b-4886-b631-5deb45b103a3",
              "name": "jobType",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Job Type'] }}"
            },
            {
              "id": "salary-expectation",
              "name": "salaryExpectation",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Minimum Salary Expectation (Optional)'] || 'Not specified' }}"
            },
            {
              "id": "additional-prefs",
              "name": "additionalPreferences",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Additional Preferences (Optional)'] || 'None' }}"
            },
            {
              "id": "user-email",
              "name": "userEmail",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Email'] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
      "name": "求职助手 Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -528,
        -256
      ],
      "parameters": {
        "text": "={{ \n`ANALYZE CV AND FIND JOBS:\n\nCV Content:\n${$json.cvData}\n\nUser Preferences:\n- Location: ${$json.location}\n- Work Setting: ${$json.workSetting}\n- Job Type: ${$json.jobType}\n- Salary: ${$json.salaryExpectation}\n- Additional: ${$json.additionalPreferences}\n\nTASKS:\n1. Extract key info from CV (name, skills, experience, achievements)\n2. Search for 3 best matching jobs using tools\n3. Generate personalized cover letter for each job\n4. Format everything as structured JSON for email template`\n}}",
        "options": {
          "systemMessage": "=You are an expert Job Hunter specializing in the Indonesian job market.  \nUse Decodo Scrapper and SerpAPI to find a real job.  \n\n## YOUR MISSION:\n1. Analyze the CV to extract skills, experience, and achievements.  \n2. Search for exactly 1 best matching job using the tools.  \n   - Return the first high-quality match you find.  \n   - Do not attempt multiple searches or retries.  \n3. Generate one personalized cover letter for that job (250–350 words).  \n4. Output everything as structured JSON.\n\n## OUTPUT FORMAT:\nYou MUST output a valid JSON object with this exact structure:\n\n{\n  \"candidateName\": \"[Name from CV]\",\n  \"candidateExperience\": \"[X years in Y field]\",\n  \"candidateSkills\": \"[Top 3 skills]\",\n  \"candidateLevel\": \"[Junior/Mid/Senior]\",\n  \"candidateStrength\": \"[Key differentiator]\",\n  \"searchSummary\": \"[Platform searched and result]\",\n  \"job\": {\n    \"title\": \"[Job title]\",\n    \"company\": \"[Company name]\",\n    \"location\": \"[City/Remote]\",\n    \"salary\": \"[Range or estimate]\",\n    \"postedDate\": \"[X days ago]\",\n    \"applyUrl\": \"[URL]\",\n    \"whyMatch\": [\"Reason 1\",\"Reason 2\",\"Reason 3\"],\n    \"coverLetter\": \"Dear Hiring Manager at [Company],\\n\\n[250-350 word letter]\\n\\nBest regards,\\n[Name]\"\n  },\n  \"applicationTips\": {\n    \"bestTime\": \"Monday-Wednesday, 9-11 AM\",\n    \"keywords\": \"[List of keywords from the job]\",\n    \"followUp\": \"After 1 week\",\n    \"interviewPrep\": \"[Focus areas]\"\n  }\n}\n\n## IMPORTANT:\n- Use real job data from the tools (no imaginary jobs).  \n- Stop after finding **one** matching job.  \n- Output ONLY valid JSON, no extra text.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "da5ec126-74e9-4708-8ec6-bc0136cf6fa2",
      "name": "生成 HTML 邮件",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        -256
      ],
      "parameters": {
        "jsCode": "const jobData = $json;\nconst job = jobData.job || null;\n\n// Build HTML email\nconst htmlEmail = `\n<!DOCTYPE html>\n<html lang=\"id\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Your Job Match</title>\n</head>\n<body style=\"margin:0; padding:0; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color:#f4f7fa;\">\n  <table role=\"presentation\" width=\"100%\" style=\"background-color:#f4f7fa;\">\n    <tr>\n      <td align=\"center\" style=\"padding:40px 20px;\">\n        <table role=\"presentation\" width=\"600\" style=\"background:#fff; border-radius:10px; box-shadow:0 4px 6px rgba(0,0,0,0.1);\">\n\n          <!-- Header -->\n          <tr>\n            <td style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:40px; border-radius:10px 10px 0 0; text-align:center;\">\n              <h1 style=\"margin:0; color:#fff; font-size:28px;\">🎯 Your Job Match Is Ready!</h1>\n            </td>\n          </tr>\n\n          <!-- Profile Summary -->\n          <tr>\n            <td style=\"padding:30px;\">\n              <div style=\"background:#f8f9fa; border-radius:8px; padding:20px; margin-bottom:30px;\">\n                <h2 style=\"margin:0 0 15px 0;\">👤 Profile Summary</h2>\n                <p><strong>Name:</strong> ${jobData.candidateName || 'N/A'}</p>\n                <p><strong>Experience:</strong> ${jobData.candidateExperience || 'N/A'}</p>\n                <p><strong>Skills:</strong> ${(jobData.candidateSkills || []).join(', ')}</p>\n                <p><strong>Level:</strong> ${jobData.candidateLevel || 'N/A'}</p>\n              </div>\n\n              <!-- Job Match -->\n              ${job ? `\n              <div style=\"border:1px solid #e0e0e0; border-radius:8px; padding:20px; margin-bottom:25px;\">\n                <div style=\"background:linear-gradient(135deg,#f093fb 0%,#f5576c 100%); color:white; padding:8px 16px; border-radius:20px; font-weight:600; font-size:14px; display:inline-block; margin-bottom:15px;\">\n                  🥇 BEST MATCH\n                </div>\n\n                <h3>${job.title}</h3>\n                <p>🏢 ${job.company} | 📍 ${job.location}</p>\n                <p>💰 ${job.salary} | 📅 Posted ${job.postedDate}</p>\n\n                <div style=\"background:#f8f9fa; padding:12px; border-radius:6px; margin:15px 0;\">\n                  <p style=\"margin:0 0 8px 0; font-weight:600;\">Why this matches:</p>\n                  <ul>${(job.whyMatch || []).map(r => `<li>${r}</li>`).join('')}</ul>\n                </div>\n\n                <a href=\"${job.applyUrl}\" style=\"display:inline-block; background:#00a8e8; color:white; padding:10px 24px; text-decoration:none; border-radius:5px; font-weight:600;\">\n                  Apply Now →\n                </a>\n\n                <!-- Cover Letter -->\n                <div style=\"margin-top:20px; padding-top:20px; border-top:1px solid #e0e0e0;\">\n                  <h4>💌 Your Cover Letter</h4>\n                  <div style=\"background:#fff; border:1px solid #e0e0e0; padding:20px; border-radius:6px; white-space:pre-line; line-height:1.6;\">\n                    ${job.coverLetter}\n                  </div>\n                </div>\n              </div>\n              ` : '<p>No job found.</p>'}\n\n              <!-- Tips -->\n              ${jobData.applicationTips ? `\n              <div style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); color:white; border-radius:8px; padding:20px;\">\n                <h3 style=\"margin:0 0 15px 0;\">💡 Application Tips</h3>\n                <p>📅 Best Time: ${jobData.applicationTips.bestTime}</p>\n                <p>🎯 Keywords: ${(jobData.applicationTips.keywords || []).join(', ')}</p>\n                <p>📧 Follow-up: ${jobData.applicationTips.followUp}</p>\n              </div>\n              ` : ''}\n            </td>\n          </tr>\n\n          <!-- Footer -->\n          <tr>\n            <td style=\"background:#f8f9fa; padding:30px; text-align:center; border-radius:0 0 10px 10px;\">\n              <p style=\"margin:0; color:#999; font-size:12px;\">\n                Generated by khmuhtadin.com | ${new Date().toLocaleDateString()}\n              </p>\n            </td>\n          </tr>\n\n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n`;\n\n// Ambil email user dari workflow sebelumnya\nconst userEmail = $('Prepare Data').first().json.userEmail;\n\nreturn {\n  htmlEmail,\n  userEmail,\n  jobData\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "4496a0d1-5bc3-4155-9b7f-5760f997da15",
      "name": "发送消息",
      "type": "n8n-nodes-base.gmail",
      "position": [
        192,
        -256
      ],
      "webhookId": "f8fd58d8-4038-4e45-b7df-261ab2cfcddc",
      "parameters": {
        "sendTo": "={{ $('On form submission').item.json.Email }}",
        "message": "={{ $json.htmlEmail }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Your Job MATCH!"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "8p11S7abjY8KddB9",
          "name": "contactmuhtadin"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5",
      "name": "解析 Agent 输出",
      "type": "n8n-nodes-base.code",
      "position": [
        -208,
        -256
      ],
      "parameters": {
        "jsCode": "let raw = $json.output || \"\";\n\n// Clean markdown fences if they exist\nraw = raw.replace(/```json/g, '').replace(/```/g, '').trim();\n\nlet parsed;\ntry {\n  parsed = JSON.parse(raw);\n} catch (e) {\n  parsed = { error: \"Failed to parse JSON\", raw };\n}\n\nreturn parsed;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bb0c881a-0185-4de3-ba10-97d1e5e91f7b",
      "name": "SerpAPI",
      "type": "@n8n/n8n-nodes-langchain.toolSerpApi",
      "position": [
        -384,
        -96
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "serpApi": {
          "id": "RnX2LOB0xs45mOEw",
          "name": "Login w Github"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "08df6d1a-16fd-47aa-9c42-5a88e7184b59",
      "name": "便利贴 - 工作原理1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 528,
        "content": "## ⚠️ 已知限制"
      },
      "typeVersion": 1
    },
    {
      "id": "19c63f7b-d693-495d-94ec-5195c17df88a",
      "name": "Gemini 2.5 Pro",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -528,
        -96
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "KMIkjDkgwnQFlQ9j",
          "name": "dev.uratalier"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d3684fdb-1701-400b-b6fc-1bab7bc6f2e3",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2256,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![收件箱 1](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox1.PNG)"
      },
      "typeVersion": 1
    },
    {
      "id": "c9019277-17de-4099-a76f-a73742e42142",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1792,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![收件箱 2](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox%202.PNG)"
      },
      "typeVersion": 1
    },
    {
      "id": "5f1f23db-4681-4473-a0e6-1f142853e68f",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![收件箱 3](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox3.PNG)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "On form submission": [
      {
        "json": {
          "Email": "khmuhtadin@proton.me",
          "Job Type": "Freelance",
          "formMode": "test",
          "submittedAt": "2025-09-11T23:14:58.671+07:00",
          "Work Setting": "Remote",
          "CV/Resume (PDF)": {
            "size": 4430,
            "filename": "Dummy_ATS_Programmer_CV.pdf",
            "mimetype": "application/pdf"
          },
          "Preferred Location": "USA",
          "Additional Preferences (Optional)": "",
          "Minimum Salary Expectation (Optional)": ""
        },
        "binary": {
          "CV_Resume__PDF_": {
            "data": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgaHR0cDovL3d3dy5yZXBvcnRsYWIuY29tCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOSAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9Db250ZW50cyAxMCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgOCAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0F1dGhvciAoXChhbm9ueW1vdXNcKSkgL0NyZWF0aW9uRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9DcmVhdG9yIChcKHVuc3BlY2lmaWVkXCkpIC9LZXl3b3JkcyAoKSAvTW9kRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9Qcm9kdWNlciAoUmVwb3J0TGFiIFBERiBMaWJyYXJ5IC0gd3d3LnJlcG9ydGxhYi5jb20pIAogIC9TdWJqZWN0IChcKHVuc3BlY2lmaWVkXCkpIC9UaXRsZSAoXChhbm9ueW1vdXNcKSkgL1RyYXBwZWQgL0ZhbHNlCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9Db3VudCAyIC9LaWRzIFsgNCAwIFIgNSAwIFIgXSAvVHlwZSAvUGFnZXMKPj4KZW5kb2JqCjkgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggMTkwOQo+PgpzdHJlYW0KR2F0VXQ/JEchXiY7S1pGLyo6SGlUcG49RmFpQF4+cS5NXz8sVUowI2hXLi9ZX0dPZklYcz5CK0osUEM8VEcxVHFoOD1kR2EwcDRfUmVONTQ+XUIyb1JhM0FhXDx0LC5IUF1vdEFkYFIxPzMlO25cPVQ3PTRgT1BJJVljXCw4JW1sIzFyTGQyIV4+VV03V0lzTGJXTD8wIipyZmNINkM4QDZpcnEmO0AiJidCcGxmUDlHJVYtVCVBYXUxPFl0O1NrV1c7R1RvXEU7PVAtLj9SZFg+I2FrUi5oUGZOSj9UV1QzTkxucyFTbmpQVG04cy1MMUFdJU9MXm1bUzBuVXBzJ3BtXVxadGFWS1ghWWwqV1RjR2cvP09pIVVTc2NjNy9dXk00aFpZYUhmYW9qIi5RdCYwUGkxVm8kJF1bM0JRVlQwUWIiMissJ1VcP29XMyMuaVhHS2I1LWFWYjNqTEInXVhJRWdiIWRwNkJPKDZhXlw6Jyk7MjNybW9uNkY8YF44PWE3OiNiaF9fOSliblpRMW9mUW1fXFImdXE3LyQ5VVghQElZQ1wqIV9sRT41Nz0uKGM4PmdBPkstQG8zW1kkSWpQZiFZakciZEtfUFJcVlcrWHE3alM1WTcwMkUrSEBta1peMV4zbm84QVJcMio6VyZHbktjb2Jfc1Yjb0xtXGZhK2gscGJrWj9OQyUqOnItZmQ7LilDOGF1JktYN0E6VFNrcG9KUk9qUkcsQC9AYWdQZkVRY0gtJnQuTT9NZiJnXVdCRUZcI0IqWEBkTz9WOjppNUpaaV5jRiVdaV0xX1FsZEJDTl1IZ0E8KT9pIklDS3JbKW4hUEdMU1JuI2wrXlYtKjtRYEthS0NVbGk1TUlTOkhEJzFxOlRlNVBPWjNJU1AlSypka28mXykzQ2tCWHFKL3RVcWVyX2o/MTJjQztJclA6SSUuNlldX2IsaGM6byZmbEAkNDlnMVpqaTojODI6KmdgP0ZoYFVJZHAjLTFkQG0hTVY+TnB0ITI2Xj0+UFlUVlwncWhTQm05NFkqVSNbazRbRkY3SE9uJl1cTGVDRiluNUMua0V1bm04TV9wSUkkVGFEMSpNR2F1Mi06N0JEYk1CUWNeZkpiZz8tJ0gpM1dGOC1zZD0mc2tCNDJoaVhHLjheYTQ5Q2JiJDEkXWtCTUkrZmg7TzZraGM3bjY+Si5fSyZeVGM+dCxYNS5YMmRULjRSLmImSm9CaC00Q0xFRkgpKHBuK0NxWFYoIUQ8Tz9sI2MmVStWUUg+TVJmMmQ9IjElK2h0Ny1MZCZlOU4vR0MkY09tcCspOlk0KVlkS04nLVJcY05RWGw1XGVSRSlTQV1xUjs0JyJQUDdUXmdlYVRxMTAkZUUjaztXUSVgSD9hNTxzRTVPPiUqNiFAWGdjZjRLVjQ1TjIoLVk6WjcxJDAzJEdgJF01JDgoIWdoWiZYR2wuUWIocmw+IXA/cURndV86SidldHMsdTUsdEhuMlpJYS5PaiZacVFjIy5GbUVtaU5FQCFlWUgrLUFVYHEiaV0hcUZiNXJcNCliU0BAW2VnL1JOO14zUGFhNz1LVmwkdS1ySFRxbXJRbi5lNUEzXD9BRWpsUCpNUlhGP1pNYi9LWVxNOT1uMitjZSNwb1lAc1JBOjxmbSxgPkVJWyxXVEwxZGcqdEhAczc1bUxFMzRmYFNiQGA5U0BHJjhbIzk+Y21UNlo9Lm9OKVc+Z3VwaiRZQ0xFMmU+JChYUyJWR2MkKyRzPElhWF5xIWZAVElfOjRoa2VpXyFxJSE7WCEiKjE7IT08KFwsPjNscl00XEFdLGZgLnNBMnRmSSIpckA4KV8zaysuT1ttI0w8O01YQ3BDLUNbO2UjRTJFZmwvM2hMMChXVnIlQSVJQjhtW1YsNEk9c00udS5rU1N1Vi4sUj9SKW5HTi1SLSEwXzwhSyhjKSl0a2tAc1xRJiJHJCJXZkIkNUElRFFLMiI8bV9lTkU6OmFTZVtIPUlhcWZSOio5T1w1OUsxV2Q4KlVXYWJpSkdhVVpdS1dFPW1kTVthPWJbPV0lNikiJEgmW2lsQ21PUCZOOCRxQkxCK05GLU1zZj1UQjNhZGZUa1k7JT1MbWdaSVkkNydVSl1BW0UpMSEpb2ZuPUVtQ0hcTEJWaS4hQk1FP20iaFZbMGcsTzUwaVZSY2lYamhPM3A9KC1WUD5wKUgpPSkxLFJVK2xhQHBRSltdNlFJNUNQIkNUX2pwdGZmRG1ZRV1ac1RCWDtSSGlXPlpHXGA0c0lnNDQiRz0lIShfP1dzQFt0ZUVNS2w5I0ZeKUY/UTFfQiYjciVwYCk2PF0odC89biJxYWNsQVk9OkUjLChQTzQxIk4jRENpbT1rdDxgPWR0KiVnWTVuUUZvWGF1LmRTQEJEdTBJOEw+TitzVltALXNyIi1GZidBUTIlTHNMTlw0IzViKHFROCsoL0lUZmo8MSdyQGJqLzMiUFU3WVpyalgmZlJHYlNXMGMjb0VtTC42OWNzYyc6Vm1fbC9gdExILip0ZnBhLjB+PmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggNzM2Cj4+CnN0cmVhbQpHYXRuJDlsbyNCJjtLWk9NRVEqVEZURUEwNV07JUg4SHInal1ALi0oYD4xcVpRRGU+LXEiSidgUFxDNT8pLEVhWXAzUSlVNS1KJTY3QSxRa1BoLjtjKGtwPkkrW0JpTD0kVzphIjVzWmNASDBrMV1SSyw+XzA4Sl9oXU1KRiIoLEZDM1IqLyQ9ZF9GakgjK1ZaQFwuSHQ8ISg8WV1TZ0lLVi5gMGlJJnA6ciFURXBNYXMycV0ubG0kc2RiQGo6aEdrLUokdDtXIjIrc2JJXFVxKjFbXyYlWSNVN1BeYCpoOTInLl4lO1VsNy0oN0RdNDxNTWwjdS5bYzlsW1ZtR1kpRyxjYU5WWkI9NF1AZzQ8KCJfYjZEY05zRSRvKkRSLSMqS1tkQV8nLSt0TW5NVEEiWlJSayxDT2pyXi8yJmRMP0JKIkhzO1s+OUQ6JWFlTXAmJ0InYFVkbT1wRVI9T3MsR106LiUpS1BBXzlKPjszQzNZX1hzYGJOKHBnW0hRIzswRGZdLmZlJWtqYkNnIXUlakQtNDZJXzJnLEdhcWQ6IW1gKVw0ak4hI2wrJyk3bSYqZiUlSVlGKDE7K2dtLyMsc1pfI28mK2dXcGM/KTcpKWNeMitQNShzSnFRSF43XD9FZEMyQF4kQXFdKUY1JSpkak0uSzIuXzZQVDhwWm5sOSVxRk45PShhRVxhcHNBJ0InUV5NUGU9TzQ2JUskaUZpQEFRcSEkU0I+LGIvbi0kIiU5IiRpazUiRTQkJjI9OUpfNVM1cFY4aVBYQVonI1s/Umg2aG4mZD8lV2VkYWM+XlY/VjovXTdhIlpJJGxlalxTQUpUcl8kMWN0cmBma28rTnBFMilddDFYbmc8PFhwTlUlTV1gY15TRGMsbCdkZD8sTz9vW201aGRyZ1VFaVMqc3EhWTtBc2xoKGhsRC9ZK2kqTEBdQEVxLXJnNmdkYltCKWZGJVUlJk45Li06N34+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDczIDAwMDAwIG4gCjAwMDAwMDAxMTQgMDAwMDAgbiAKMDAwMDAwMDIyMSAwMDAwMCBuIAowMDAwMDAwMzMzIDAwMDAwIG4gCjAwMDAwMDA1MzYgMDAwMDAgbiAKMDAwMDAwMDc0MCAwMDAwMCBuIAowMDAwMDAwODA4IDAwMDAwIG4gCjAwMDAwMDEwOTEgMDAwMDAgbiAKMDAwMDAwMTE1NiAwMDAwMCBuIAowMDAwMDAzMTU2IDAwMDAwIG4gCnRyYWlsZXIKPDwKL0lEIApbPDg0OTg1YmZkMjE4MjNjZDU2OTYwODI5MmZhYzMwMmFhPjw4NDk4NWJmZDIxODIzY2Q1Njk2MDgyOTJmYWMzMDJhYT5dCiUgUmVwb3J0TGFiIGdlbmVyYXRlZCBQREYgZG9jdW1lbnQgLS0gZGlnZXN0IChodHRwOi8vd3d3LnJlcG9ydGxhYi5jb20pCgovSW5mbyA3IDAgUgovUm9vdCA2IDAgUgovU2l6ZSAxMQo+PgpzdGFydHhyZWYKMzk4MwolJUVPRgo=",
            "fileName": "Dummy_ATS_Programmer_CV.pdf",
            "fileSize": "4.43 kB",
            "fileType": "pdf",
            "mimeType": "application/pdf",
            "fileExtension": "pdf"
          }
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1ec8485f-2772-409f-bb99-f834cbb7c390",
  "connections": {
    "SerpAPI": {
      "ai_tool": [
        [
          {
            "node": "Job Hunter Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data": {
      "main": [
        [
          {
            "node": "Job Hunter Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini 2.5 Pro": {
      "ai_languageModel": [
        [
          {
            "node": "Job Hunter Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Job Hunter Agent": {
      "main": [
        [
          {
            "node": "Parse Agent Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract CV from PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Agent Output": {
      "main": [
        [
          {
            "node": "Generate HTML Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract CV from PDF": {
      "main": [
        [
          {
            "node": "Prepare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate HTML Email": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 杂项, 多模态 AI

需要付费吗?

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

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

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

外部链接
在 n8n.io 查看

分享此工作流