基于AI Agent与CLI的智能求职自动化工具设计与实践

发布时间:2026/8/8 3:08:08
基于AI Agent与CLI的智能求职自动化工具设计与实践
1. 从手动刷新到智能推送为什么我们需要一个求职 CLI Agent又到了金三银四的求职季或者是你想看看外面的机会。打开 BOSS 直聘熟练地输入几个关键词点击搜索然后呢你大概率会陷入一个循环每隔半小时、一小时就忍不住去刷新一下页面看看有没有新的、匹配度高的职位冒出来。手动筛选、重复刷新、等待回复这个过程不仅枯燥效率也低得可怜。更头疼的是当你同时在看多个平台、关注多个岗位方向时这种信息过载和重复劳动会把人搞得筋疲力尽。这就是我最初遇到的问题。作为一个技术从业者我本能地想到能不能让机器帮我做这些重复性的工作能不能在我喝咖啡、写代码的时候让一个“智能助手”帮我盯着招聘市场一旦有合适的职位出现就立刻通知我甚至帮我完成初步的沟通这个想法催生了对AI Agent和命令行工具CLI的结合探索。最近我在 GitHub 上发现了一个非常对味口的开源项目boss-agent-cli。它不是一个简单的爬虫脚本而是一个真正意义上的、面向 BOSS 直聘工作流的AI Agent 命令行工具。简单来说它把你的求职需求比如职位关键词、薪资范围、工作地点写成一份“任务说明书”配置文件然后这个 Agent 就会像一个不知疲倦的猎头7x24小时在后台运行自动搜索、过滤、分析职位并通过 Telegram 或邮件把最新、最相关的机会推送到你手边。这不仅仅是“自动化”而是“智能化”。传统的爬虫或定时脚本只能做到“抓取”而 boss-agent-cli 借助大语言模型LLM的能力可以理解职位描述JD判断其与你的匹配度甚至能生成初步的打招呼语。它把我们从“信息检索员”的角色中解放出来让我们能更专注于准备面试和提升技能本身。接下来我就结合这个项目深入聊聊如何给你的 AI Agent 赋予“求职”这项技能并打造一个属于你自己的、高效的求职工作流。2. boss-agent-cli 项目核心架构与工作原理拆解在开始动手配置之前我们必须先理解 boss-agent-cli 这个工具到底是怎么工作的。知其然更要知其所以然这能帮助我们在后续使用和可能的问题排查中做到心中有数。它的架构可以清晰地分为三层数据采集层、智能处理层和通知执行层。2.1 数据采集层模拟浏览器与反爬策略的平衡这是所有类似工具的基石。boss-agent-cli 需要从 BOSS 直聘网站获取实时的职位数据。它没有使用简单的requests库直接抓取 HTML因为现代网站尤其是像 BOSS 直聘这样拥有复杂前端交互和反爬机制的站点直接抓取静态页面几乎不可能成功。注意任何涉及网站数据获取的工具都必须严格遵守网站的robots.txt协议和使用条款。boss-agent-cli 的设计初衷是辅助个人求职者提升效率严禁用于大规模、商业化的数据爬取或任何干扰网站正常服务的行为。开发者需要时刻保持对数据来源的尊重和法律边界的敬畏。该项目采用了Puppeteer或Playwright这类无头浏览器自动化工具。我查看其代码依赖和实现更倾向于它使用了 Playwright因为 Playwright 对现代 Web 技术的支持更好且能更稳定地处理单页应用SPA。它的工作流程是这样的启动一个无头浏览器实例在后台默默打开一个“看不见”的 Chrome 或 Firefox。模拟真人登录与导航工具会加载配置文件中的 Cookie或引导用户手动登录一次后获取然后跳转到 BOSS 直聘的搜索页面。这一步模拟了人类用户打开网站、登录、点击搜索的行为轨迹极大地降低了被识别为机器人的风险。执行搜索与滚动加载根据配置的关键词、城市、薪资等参数在搜索框输入并触发搜索。随后工具会模拟鼠标滚动触发页面的懒加载Lazy Load逐步获取完整的职位列表。这个过程会等待足够的网络空闲时间和 DOM 稳定时间以模仿真人浏览的节奏。提取结构化数据当页面加载出职位卡片后工具会使用 CSS 选择器或 XPath 精准地定位并提取每个职位的关键信息如公司名称、职位名称、薪资范围、经验要求、学历要求、职位描述、HR 活跃状态等并将其整理成结构化的 JSON 或 Python 字典。这一层的技术选型非常关键。之所以不用简单的 HTTP 请求是因为 BOSS 直聘的页面数据大量通过 JavaScript 动态渲染且接口有复杂的加密和鉴权逻辑。无头浏览器虽然资源开销稍大但能最完整地模拟真人环境是成功率最高的方案。2.2 智能处理层LLM 如何理解职位与你的匹配度如果只是把数据抓下来那和普通的爬虫没区别。boss-agent-cli 的核心价值在于第二层——利用大语言模型LLM对抓取到的职位信息进行智能处理。这是“Agent”智能的体现。项目通常通过配置支持 OpenAI 的 GPT 系列、 Anthropic 的 Claude 或开源的本地模型通过 Ollama、LM Studio 等。其处理流程如下信息浓缩与格式化将从网页抓取的、可能有些杂乱的职位信息重新组织成一段清晰、结构化的文本提示Prompt。匹配度分析工具会将你的“求职画像”在配置文件中定义例如“寻找后端开发岗位精通 Go 和 Python有分布式系统经验期望薪资 30K 以上偏好互联网大厂”和职位描述一起发送给 LLM。它会向 LLM 提出类似这样的问题“基于候选人的技能和期望请分析该职位匹配度并给出一个 0-10 的分数同时简要说明理由。”打招呼语生成对于高匹配度的职位Agent 可以进一步请求 LLM“请为这个职位生成一段个性化的、得体的打招呼语突出我候选人在 XX 技能上与职位要求的契合点。” 这能帮你迈出沟通的第一步而且话术往往比千篇一律的“你好我对这个职位感兴趣”要有效得多。过滤与排序根据 LLM 返回的匹配度分数工具可以对抓取到的所有职位进行过滤例如只保留 7 分以上的职位和排序按匹配度从高到低确保推送给你的都是高质量机会。这里的精妙之处在于匹配规则不再是简单的关键词匹配比如“Go”和“Golang”可能匹配不上而是语义层面的理解。LLM 能理解“负责系统架构设计”和“有高并发系统经验”之间的关联从而做出更接近人类HR或资深工程师的判断。2.3 通知执行层无缝融入你的日常工作流处理好的信息需要高效地送达。boss-agent-cli 支持多种通知渠道确保你能及时收到提醒。Telegram Bot这是最推荐的方式之一。你需要创建一个 Telegram Bot通过 BotFather获取它的 API Token。将 Token 和你的 Chat ID 配置到工具中。当 Agent 发现高匹配度职位时会通过这个 Bot 向你发送一条格式优美的消息通常包含职位名称、公司、薪资、匹配度分数、匹配理由摘要甚至生成的打招呼语。你可以直接在 Telegram 上点击链接跳转到 BOSS 直聘页面实现无缝衔接。电子邮件SMTP对于习惯邮件的用户可以配置 SMTP 服务器如 Gmail、QQ 邮箱、公司邮箱等。工具会将职位信息整理成 HTML 或纯文本邮件发送到你的指定邮箱。控制台输出在调试或直接运行时会直接打印在终端里。Webhook高级用户可以通过配置 Webhook将数据推送到自己的服务器进而触发更复杂的流程比如自动记录到 Notion 数据库、发送到 Slack 频道等。这三层架构共同构成了一个完整的、自治的 AI Agent。它感知环境BOSS直聘网站、处理信息LLM分析、做出决策过滤排序并执行动作发送通知完美诠释了一个简单而实用的 Agent 工作循环。3. 从零开始部署与配置你的求职 Agent理解了原理我们就可以动手搭建了。整个过程可以分为环境准备、项目获取、配置编写和首次运行四个主要步骤。我会以在 Linux/macOS 系统上部署为例Windows 用户使用 WSL 或 Git Bash 也能获得类似体验。3.1 基础环境准备Node.js 与 Python 的协同boss-agent-cli 是一个 Node.js 项目但其智能核心依赖 Python 运行的 LLM 服务如果你使用本地模型。因此我们需要准备两个环境。首先确保你的系统已安装Node.js (版本 16 或以上)和npm。可以通过以下命令检查node --version npm --version如果没有安装建议通过 nvm Node Version Manager来安装和管理 Node.js 版本这样可以避免权限问题并方便切换版本。其次安装Python (版本 3.8 或以上)。同样检查版本python3 --version pip3 --version接下来我们需要一个 LLM 服务。有两种主流选择方案A使用云端 API推荐初学者如 OpenAI GPT-3.5/4 Anthropic Claude。你只需要一个有效的 API Key。这种方式省心性能稳定但会产生费用。方案B部署本地模型追求隐私与控制使用 Ollama 或 LM Studio 。例如用 Ollama 拉取一个轻量级模型如llama3:8b或qwen2:7b。这需要你的电脑有足够的 RAM通常 8GB 以上和一定的 GPU 资源会更佳。# 使用 Ollama 的示例 ollama pull llama3:8b ollama run llama3:8b # 这会启动一个本地 API 服务默认在 11434 端口3.2 获取项目与安装依赖打开终端克隆 boss-agent-cli 的仓库请替换为实际的 GitHub 仓库地址这里假设为https://github.com/xxx/boss-agent-cli.gitgit clone https://github.com/xxx/boss-agent-cli.git cd boss-agent-cli安装项目的 Node.js 依赖npm install根据项目的具体说明可能还需要安装 Playwright 的浏览器内核npx playwright install chromium如果项目有 Python 后端用于调用 LLM你还需要创建一个 Python 虚拟环境并安装依赖python3 -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows pip install -r requirements.txt # 如果项目提供了此文件3.3 核心配置文件详解定义你的“求职画像”配置是 Agent 的灵魂。项目根目录下通常会有一个示例配置文件如config.example.yaml或config.example.json。复制一份并重命名为config.yaml。让我们逐部分解析一个典型的 YAML 配置# boss-agent-cli 配置文件 boss: cookie: 你的BOSS直聘登录Cookie # 关键如何获取见下文 keywords: [Golang后端开发, Python数据分析, 云原生工程师] city: 北京 salary: [25, 50] # 期望薪资范围单位K experience: [1-3年, 3-5年] # 经验要求 llm: provider: openai # 可选openai, claude, ollama api_key: sk-... # 如果使用 OpenAI 或 Claude base_url: http://localhost:11434/v1 # 如果使用本地 Ollama model: gpt-3.5-turbo # 或 claude-3-haiku或 llama3:8b # 匹配度分析的提示词模板通常无需修改除非你想定制LLM的“判断标准” match_prompt: | 你是一个资深的职业顾问。请根据以下候选人的求职意向和职位描述评估匹配度0-10分。 候选人意向{candidate_profile} 职位信息{job_description} 请仅返回一个JSON{score: 分数, reason: 简要理由} notification: telegram: enabled: true bot_token: 你的Telegram Bot Token chat_id: 你的Telegram Chat ID email: enabled: false smtp_host: smtp.gmail.com smtp_port: 587 username: your-emailgmail.com password: 你的应用专用密码 to: 接收邮箱gmail.com schedule: */30 * * * * # Cron 表达式每30分钟运行一次关键配置项解读与实操要点boss.cookie最关键的步骤这是工具能模拟你登录状态的凭证。绝对不能直接从浏览器控制台复制document.cookie那样可能包含敏感信息且格式不全。正确获取方法使用浏览器插件如 EditThisCookie for Chrome导出 BOSS 直聘 (www.zhipin.com) 域名下的 Cookie并保存为Netscape 格式的.txt文件。然后使用 Python 或 Node.js 脚本将这个文件内容解析成工具所需的 Cookie 字符串格式。项目 README 中通常会提供一个小脚本。核心是获取__zp_stoken__等关键字段。安全警告这个 Cookie 等同于你的登录凭证请像保护密码一样保护它。不要上传到公开的 Git 仓库。将config.yaml添加到.gitignore文件中。llm配置provider与base_url如果使用本地 Ollamaprovider可设为openai因为 Ollama 兼容 OpenAI API 格式并将base_url指向http://localhost:11434/v1。match_prompt这是控制 Agent “判断力”的核心。你可以微调这个提示词让 LLM 更关注你重视的方面比如“特别关注团队技术栈是否包含 Docker 和 K8s”。notification.telegrambot_token通过 Telegram 搜索BotFather发送/newbot指令按提示创建机器人后获得。chat_id给你刚创建的 Bot 发送一条消息如/start然后访问https://api.telegram.org/botYourBOTToken/getUpdates将YourBOTToken替换为你的真实 Token在返回的 JSON 中找到message.chat.id字段的值。schedule使用 Cron 表达式定义运行频率。*/30 * * * *表示每30分钟运行一次。频率不宜过高以免对目标网站造成不必要的压力建议不低于30分钟。3.4 首次运行与验证配置完成后我们可以先进行一次手动运行测试整个流程是否通畅node index.js --config ./config.yaml --once或者根据项目的具体入口文件npm start -- --once观察终端输出是否成功启动浏览器是否成功登录通过 Cookie并跳转到搜索页是否抓取到了职位列表是否调用了 LLM 进行分析是否成功发送了通知到 Telegram 或控制台如果一切顺利你应该能在 Telegram 或终端里看到第一批匹配的职位推荐。恭喜你的个人求职 AI Agent 已经正式上岗了4. 高级技巧与个性化定制让你的 Agent 更聪明基础功能跑通后我们可以让这个 Agent 更好地为我们服务。以下是一些提升效率和匹配精度的进阶思路。4.1 优化 LLM 提示词精准控制匹配逻辑默认的match_prompt可能不够贴合你的具体需求。你可以把它设计得更精细。例如如果你非常看重技术栈匹配和团队背景llm: match_prompt: | 你是一个资深技术面试官。请严格评估以下职位与候选人的匹配度。 【候选人档案】 核心技能Golang, PostgreSQL, Redis, Kubernetes, AWS 附加技能Python, Docker, 消息队列 期望技术氛围好有清晰成长路径避免996 薪资底线30K/月 【职位信息】 {job_description} 【评估任务】 1. 技术栈匹配度0-5分主要看Golang、数据库、云服务。 2. 团队与公司加分0-3分是否知名、技术博客、开源项目。 3. 硬伤扣分0- -2分明确要求996/大小周或薪资低于底线。 最终得分 技术栈分 团队加分 硬伤分总分0-10。 请返回JSON{score: 最终分, tech_match: 技术栈分, team_bonus: 团队加分, red_flag: 硬伤分, reason: 综合说明}通过设计结构化的评分规则你可以引导 LLM 进行更可控、更符合你价值观的判断而不仅仅是笼统的“感觉”。4.2 实现多城市、多关键词组合搜索与去重配置文件中的keywords和city可能是数组但工具可能默认只进行简单的组合。你可以通过修改任务生成逻辑或使用外部脚本实现更复杂的搜索策略。例如你可以创建一个jobs_search_config.json[ {city: 北京, keywords: [Golang, 后端开发], salary: [30, 50]}, {city: 上海, keywords: [Python 机器学习, 算法工程师], salary: [35, 60]}, {city: 深圳, keywords: [Java, 大数据开发], salary: [28, 45]} ]然后写一个简单的包装脚本循环读取这个配置为每个组合启动一次搜索任务注意控制频率和间隔。同时在结果汇总阶段根据“公司名职位名”进行去重避免因不同搜索条件重叠而收到重复推荐。4.3 与个人知识管理系统PKM集成仅仅收到通知还不够我们需要管理这些求职信息。可以通过配置Webhook或直接修改项目的通知模块将匹配的职位信息自动同步到你的个人知识管理系统比如Notion利用 Notion 的 API创建一个“求职机会”数据库每条记录包含公司、职位、薪资、匹配度、职位链接、分析理由等字段。Agent 每推荐一个职位就自动在 Notion 中创建一条记录。Obsidian或Logseq可以生成 Markdown 文件保存到指定的笔记目录方便你后续统一回顾和做面试准备。Airtable或Google Sheets对于喜欢表格视图的用户这也是很好的选择。这种集成将 Agent 从一个“信息推送器”升级为“信息管理流程的自动触发器”让你的求职过程更加体系化。4.4 设置智能休眠与流量控制为了避免对 BOSS 直聘服务器造成不必要的压力也为了保护自己的账号实现“友好型”自动化至关重要。随机延迟在每次页面操作如点击、滚动之间不要使用固定的等待时间而是添加一个随机延迟例如 2-5 秒让行为模式更接近真人。遵循robots.txt定期检查 BOSS 直聘的robots.txt文件尊重其关于爬虫访问频率和路径的限制。智能休眠在招聘低峰期如深夜 23:00 到次日早晨 7:00停止运行 Agent。这可以通过在 Cron 任务中设置更复杂的时间段或者在 Agent 代码开始时判断当前时间来实现。错误处理与熔断代码中必须包含完善的错误处理。如果连续多次请求失败如遇到验证码、IP被封Agent 应能自动停止运行并通过紧急通知渠道如 Telegram向你报警而不是无限重试。5. 常见问题排查与安全伦理考量在实际运行中你可能会遇到一些问题。这里列举一些典型场景及其排查思路。5.1 Cookie 失效与登录态维护问题运行一段时间后Agent 报错无法获取数据提示“未登录”或“会话过期”。原因与解决BOSS 直聘的登录 Cookie 有有效期。解决方案不是频繁重新获取而是实现一个“Cookie 刷新机制”。可以编写一个辅助脚本定期如每周在受控环境下可能是你本机的图形界面半自动地登录一次并更新 Cookie 文件。绝对不要尝试全自动破解登录这违反服务条款且技术风险极高。更稳妥的做法是将 Agent 的运行频率降低如每天只运行2-3次减少因高频访问导致会话被踢的风险。5.2 反爬虫检测与行为识别问题访问被限制出现验证码或返回的数据为空。排查与应对检查请求频率立即停止当前任务检查你的schedule是否过于频繁。将间隔从30分钟延长到1小时或更久。模拟行为多样化检查你的无头浏览器脚本是否行为过于“机械”。确保每次启动的浏览器 User-Agent 是常见的。鼠标移动轨迹和滚动速度加入了随机性。在关键的页面跳转间有足够的、随机的等待时间。使用住宅IP代理高级/谨慎如果你在云服务器上运行固定的数据中心 IP 容易被识别。可以考虑使用高质量的住宅代理 IP 池但这会引入复杂性和成本且必须确保代理服务合法合规。接受人工干预这是最根本的认知。这类工具应定位为“辅助”而非“全自动”。当出现验证码时设计一个流程让工具通知你由你手动完成验证。这既是技术上的妥协也是法律和伦理上的必要边界。5.3 LLM 分析结果不稳定或偏差大问题匹配度分数波动大或者明显不合理的职位被推荐。优化方向优化 Prompt如 4.1 节所述将你的要求描述得更具体、更结构化。给 LLM 明确的评分维度和权重。调整温度参数在调用 LLM API 时尝试降低temperature参数如设为 0.1 或 0.2让它的输出更确定、更少“创造性”。引入少样本示例在 Prompt 中提供几个正例和反例。例如“以下是一个匹配度高的例子职位要求 Go 和微服务候选人也精通... 打9分。以下是一个匹配度低的例子职位要求 Java候选人只会 Python... 打2分。”后处理过滤即使 LLM 给了分数也可以在代码里加一层基于明确规则的硬性过滤。比如无论分数多高只要职位描述里出现“必须 996”就直接过滤掉。5.4 安全与伦理的再强调在使用此类工具时我们必须时刻绷紧两根弦安全与伦理。数据安全你的 BOSS 直聘 Cookie、LLM API Key、Telegram Bot Token 都是敏感信息。务必使用环境变量或加密的配置文件来管理永远不要提交到公开代码仓库。账户安全过度自动化行为可能导致你的 BOSS 直聘账号被限制功能。务必以低调、低频、模拟真人的方式使用。法律与平台条款仔细阅读 BOSS 直聘的用户协议。自动化工具可能违反其“禁止使用任何自动化手段访问”的条款。你需要自行评估风险并明确工具仅用于个人、非商业、低频率的求职辅助。公平性考量你的工具让你获得了信息获取的效率优势但这本质上和设置一个“新职位提醒”没有区别只是更智能。但切记不要用它进行恶意刷屏、轰炸 HR 等干扰平台正常秩序的行为。技术应该用于提升效率、创造价值而非破坏规则。运行 boss-agent-cli 这类项目更像是在技术和规则的边界上进行一次谨慎的探索。它极大地提升了求职的被动信息获取效率把我们从重复的刷新和筛选中解放出来。然而它无法替代求职中最核心的部分简历打磨、技术准备、面试沟通和最终的职业选择。它只是一个强大的“信息过滤器”和“提醒器”真正的价值创造依然在于你自身的硬实力和软技能。把这个工具用好让它成为你职业发展道路上的一个高效副驾而不是试图让它完全接管方向盘。