1. 项目概述:当AI成为你的求职分身
最近在折腾一个挺有意思的开源项目,叫“AI工作猎手”。简单来说,它就是一个能帮你自动和Boss直聘上的HR聊天的工具。你可能会想,这不就是个自动回复机器人吗?没错,但它的核心远不止于此。它更像是一个深度理解你简历、能替你进行初步沟通、甚至帮你“挽留”拒绝你的HR的智能求职分身。
我自己作为技术人,也经历过海投简历、等待回复、反复沟通的漫长过程。很多时候,一个合适的职位可能因为回复不及时,或者沟通话术不够专业就错过了。这个项目的初衷,就是想把我们从这种重复、低效的沟通中解放出来,让AI去处理那些标准化的初次接触,而我们自己则可以专注于准备面试、提升技能等更有价值的事情。
这个项目特别适合两类朋友:一是正在积极求职,每天需要投递大量简历、与众多HR沟通的求职者;二是有一定技术基础,想自己部署一套自动化求职系统,甚至想基于此提供服务的独立开发者或小团队。它采用了前后端分离的架构,前端是一个油猴脚本,直接嵌入Boss直聘网页;后端则是一个Spring Boot应用,负责调用AI模型进行智能对话。这意味着你可以完全掌控自己的数据,也可以根据需求定制AI的行为。
2. 核心架构与设计思路拆解
2.1 为什么选择浏览器脚本+后端服务的模式?
这个架构选择是经过深思熟虑的。直接与Boss直聘这类大型平台交互,面临着复杂的反爬虫机制和频繁的界面更新。纯后端爬虫方案维护成本极高,一个页面结构的微小变动就可能导致整个流程瘫痪。
而采用油猴脚本(Tampermonkey/Greasemonkey)作为前端载体,有以下几个决定性优势:
- 运行在用户本地浏览器:脚本直接在Boss直聘的网页环境中执行,能天然地绕过大多数基于IP或请求特征的通用反爬措施。你的所有操作(点击、翻页、发消息)在服务器看来,都和一个真实用户毫无二致。
- 实时响应页面变化:脚本可以通过监听DOM变化或网络请求,实时捕获页面的动态内容。例如,当HR发来一条新消息时,脚本能立刻捕获到这条消息的DOM元素或对应的网络请求,并将其转发给后端处理。
- 无缝的用户体验:脚本可以在原网页上直接插入一个功能面板(就像项目截图里那样),所有操作都在你熟悉的Boss直聘界面内完成,无需在多个标签页或应用间切换,学习成本几乎为零。
后端采用Spring Boot,则是考虑到生态的成熟度和开发的便捷性。集成Spring AI框架可以方便地切换不同的AI模型提供商(如OpenAI的GPT、DeepSeek、Kimi等),而自研的WebSocket Hook用于解析Boss直聘的Protobuf通讯协议,这是实现自动收发消息的核心技术难点。
2.2 协议层:破解实时通讯的关键
Boss直聘的聊天功能大量使用了WebSocket和Protobuf协议,以实现消息的实时推送。Protobuf是一种高效的二进制序列化协议,比传统的JSON体积更小、解析更快,但同时也对逆向工程提出了挑战。
项目中的“自研WebSocket Hook”是这个环节的精华。它的工作原理大致如下:
- 拦截:油猴脚本通过重写浏览器的
WebSocket对象,在建立连接和收发消息的关键节点插入自己的处理逻辑。 - 解码:当捕获到来自Boss直聘服务器的二进制数据流时,脚本需要根据逆向分析得出的Protobuf消息结构定义(.proto文件),将其解码成可读的JavaScript对象。这个过程需要精确地知道每个字段的类型和顺序。
- 分析与转发:解码后,脚本就能判断这条消息是普通的文本、图片、简历交换请求,还是系统通知。然后,它将关键信息(如会话ID、发送者、消息内容)通过HTTPS请求发送到我们自己的后端服务器。
- 编码与发送:当后端AI生成回复后,脚本需要将回复内容按照Boss直聘要求的Protobuf格式重新编码成二进制流,并通过Hook过的
WebSocket.send()方法发送出去,模拟用户手动发送。
实操心得:逆向Protobuf协议是整个项目中最耗时、最需要耐心的部分。通常需要使用Chrome DevTools的Network面板,筛选WebSocket连接,然后对收发的二进制数据进行抓取和反复比对、测试。网上可能找到一些历史版本的消息结构,但平台更新后很可能失效,因此具备独立分析和更新协议的能力至关重要。
3. 环境部署与核心配置详解
3.1 后端服务部署指南
项目作者提供了详细的部署指南,这里我结合自己的踩坑经验,提炼几个关键点和注意事项。
基础环境准备:
- 服务器:一台拥有公网IP的云服务器(如阿里云、腾讯云ECS),建议配置1核2G以上。如果仅个人使用,也可以在本地电脑部署,但需要解决内网穿透问题,以便外网的油猴脚本能访问到你的后端API。
- 运行环境:安装JDK 17或以上版本、MySQL 5.7+/8.0、以及Nginx。Spring Boot 3对JDK版本有要求,务必确认。
- AI模型密钥:你需要准备至少一个AI模型的API Key。项目支持多模型池,推荐准备两个,例如一个DeepSeek和一个OpenAI的GPT,以备某个模型服务不稳定时自动切换。
数据库与配置文件: 部署的核心在于正确配置application.yml或application.properties文件。以下几个配置项需要你格外关注:
# 数据库配置 spring: datasource: url: jdbc:mysql://你的数据库IP:3306/ai_job?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: 你的数据库用户名 password: 你的数据库密码 # AI模型配置(以OpenAI和DeepSeek为例) spring: ai: openai: api-key: ${OPENAI_API_KEY:你的OpenAI密钥} # 建议使用环境变量,更安全 chat: options: model: gpt-4o-mini # 根据成本和性能选择模型 deepseek: api-key: ${DEEPSEEK_API_KEY:你的DeepSeek密钥} base-url: https://api.deepseek.com # DeepSeek的API地址 # 可以配置多个客户端,项目会实现一个简单的路由或降级逻辑重要提示:将API Key直接写在配置文件里提交到Git仓库是极其危险的行为!务必使用环境变量(如
${OPENAI_API_KEY})或在服务器上创建单独的配置文件,并确保该文件被.gitignore排除。
Nginx反向代理配置: 为了让油猴脚本能通过HTTPS安全地访问你的后端,并且统一端口,配置Nginx是标准做法。
server { listen 443 ssl; server_name your-domain.com; # 你的域名或服务器IP ssl_certificate /path/to/your/ssl.crt; ssl_certificate_key /path/to/your/ssl.key; location / { proxy_pass http://localhost:8080; # 转发到Spring Boot应用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 可能还需要配置WebSocket的升级头 location /ws-path { # 替换为项目中实际的WebSocket路径 proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }如果暂时没有域名和SSL证书,在测试阶段可以暂时使用HTTP,但油猴脚本在现代浏览器中向非HTTPS地址发送请求可能会被阻止(Mixed Content错误),这是需要注意的。
3.2 前端脚本安装与配置
后端服务启动并正常运行后(可以通过访问http://你的服务器IP:8080/health之类的端点检查),接下来就是配置前端。
- 安装油猴管理器:在Chrome、Edge等浏览器中安装Tampermonkey插件。
- 安装脚本:
- 方式一(推荐):在GreasyFork搜索“AI工作猎手”,找到脚本并安装。这是最安全便捷的方式,能自动获取更新。
- 方式二:从项目Gitee页面下载
ai-job-hunting.user.js文件,在Tampermonkey管理面板中点击“+”号,选择“从文件安装...”。
- 关键配置:安装后,访问Boss直聘的职位列表页(
https://www.zhipin.com/web/geek/job)。你应该能在页面左侧或右侧看到一个悬浮的功能面板。点击面板上的设置或“服务器配置”按钮。- API地址:这里填入你刚刚部署的后端服务的公网可访问地址,例如
https://your-domain.com或http://你的服务器IP:8080(如果没配HTTPS)。 - 测试连接:务必点击“测试连接”按钮,确保脚本能成功访问到你的后端。如果失败,请检查:
- 后端服务是否真的在运行(
ps -ef | grep java)。 - 服务器防火墙是否开放了8080端口(或你修改的端口)。
- Nginx配置是否正确,代理是否生效。
- 如果用了HTTPS,证书是否有效。
- 后端服务是否真的在运行(
- API地址:这里填入你刚刚部署的后端服务的公网可访问地址,例如
踩坑记录:很多朋友在配置完服务器后,在Boss直聘首页找不到功能面板,以为是脚本没生效。这是因为脚本默认只在职位列表页、聊天页等核心功能页面注入。请务必导航到
https://www.zhipin.com/web/geek/job这个地址,面板就会出现。
4. 核心功能深度使用与调优
4.1 AI坐席:让你的分身学会沟通
这是项目的灵魂功能。开启后,AI会接管与HR的初次对话。但“智能回复”不是简单的随机应答,其效果严重依赖于你的配置。
简历导入与知识库构建: AI之所以能“结合简历信息回复”,是因为它有一个上下文知识库。你需要将你在Boss直聘上的在线简历全文复制,粘贴到AI坐席的“简历信息”配置框中。更好的做法是,将简历保存为一份结构清晰的文本文件,包含:
- 个人信息(姓名、求职意向)
- 工作经历(公司、职位、时间、核心职责与成就,用STAR法则描述最佳)
- 项目经历(项目名称、你的角色、技术栈、解决的难点和量化成果)
- 技能清单
- 自我评价/优势总结
AI模型(如GPT)会根据当前对话的上下文,从这份简历文本中检索相关信息来组织语言。因此,简历描述得越具体、越有成果导向,AI生成的回复就越有说服力。
预设问题与场景化回复: “预设问题支持”功能非常实用。你可以预先设想HR可能会问的常见问题,并准备好高质量的回答。例如:
- 场景:询问离职原因
- 预设问题关键词:“离职原因”、“为什么看机会”、“离开上家”
- 预设回答模板:“我离开上一家公司主要是出于职业发展的考虑。在过去X年里,我在[原公司]负责[主要职责],取得了[量化成果]。现在我希望能在一个更[你期望的平台特点,如:技术驱动、业务规模更大]的平台,深入[你感兴趣的领域],创造更大的价值。看到贵司的[职位名称]岗位在[某个具体业务或技术点]上非常吸引我,相信我的[相关技能或经验]能很好地匹配。”
- 场景:询问期望薪资
- 预设问题关键词:“期望薪资”、“工资要求”
- 预设回答模板:“基于我目前的薪资水平(可写出现有薪资范围)、[X年]的[某领域]经验,以及对这个岗位职责的理解,我的期望薪资范围是[范围]元/月。当然,我也理解薪资是综合 package 的一部分,我非常看重贵司的发展平台和团队机会,相信我们能在面试沟通后达成一个双方都满意的数字。”
当HR消息中的关键词触发预设问题时,AI会优先使用你预设的回答,这保证了核心问题回复的精准性和一致性。
拒绝挽留策略配置: 这是一个体现“智能”的进阶功能。当HR发出诸如“不太合适”、“暂时不考虑”等拒绝信号时,AI可以自动触发挽留流程。
- 识别关键词:在设置中配置拒绝关键词,如“不合适”、“暂不匹配”、“抱歉”、“感谢关注”等。
- 执行动作:通常设置为“发送简历” + “发送挽留语”。
- 编写挽留语:挽留语不宜过长,态度要诚恳、积极。例如:“感谢您的反馈。完全理解您的考量。或许我的简历未能完全展现我与该岗位的匹配度,我对于[提及岗位要求的某个具体技能或业务]其实有[具体经验或成果],附件是我的详细简历,恳请您能再花一分钟审阅。无论结果如何,都非常感谢您的时间!”
4.2 投递工具:精准海投,而非盲目撒网
批量投递功能能极大提升效率,但绝不能无脑全选。结合“自定义筛选过滤”,才能实现精准投放。
筛选条件建议:
- 职位关键词:包含“Java”、“后端开发”;排除“实习”、“外包”。
- 薪资范围:设定你的最低可接受薪资。
- 公司规模:根据个人偏好选择,如“100-499人”、“500-999人”。
- 经验要求:选择“经验不限”或“1-3年”以扩大范围,但最终AI在沟通时会根据实际经验判断。
- 排除已沟通:勾选此选项,避免重复投递给已经联系过的公司。
招呼语定制: 不要使用系统默认招呼语。根据你的求职方向,准备3-5个不同侧重点的招呼语模板,让AI随机或按条件选择。
- 模板A(突出经验):“您好,我对贵司的[职位名称]很感兴趣。我有[X年][技术栈]开发经验,尤其在[某个细分领域,如高并发处理]有成功项目经验。附件是我的简历,期待您的回复!”
- 模板B(突出项目匹配):“看到贵司招聘[职位名称],我近期完成的[某个相关项目]与岗位描述中的[某个要求]非常契合。希望能有机会进一步沟通。”
- 模板C(突出软技能):“您好,我不仅具备[核心技术]能力,还拥有良好的团队协作和项目管理经验,曾主导[某个跨团队项目]。相信能为贵团队带来价值。”
4.3 通知系统:确保你不错过任何机会
邮件通知是防止你错过重要进展的安全网。建议务必开启。
配置要点:
- 发件邮箱:建议使用一个专门的、稳定的邮箱(如QQ邮箱、163邮箱),并开启SMTP服务,获取授权码。
- 收件邮箱:填写你常用的、会及时查看的邮箱。
- 高意向触发条件:
- 关键词触发:设置一些正向关键词,如“发个简历看看”、“方便电话沟通吗”、“什么时候有空面试”、“加个微信”。
- 对话轮数触发:例如,当AI与HR来回沟通超过5轮,通常意味着HR兴趣较高,此时触发邮件通知,提醒你及时介入进行更深度的沟通。
5. 常见问题排查与实战技巧
在实际部署和使用中,你肯定会遇到各种各样的问题。下面是我总结的一些典型场景和解决方法。
5.1 脚本不生效或面板不显示
这是最高频的问题,排查思路如下:
- 检查油猴插件是否启用:浏览器右上角点击Tampermonkey图标,确保脚本是“已启用”状态。
- 检查脚本是否运行在正确页面:脚本通常只会在特定的URL下注入。确保你访问的是Boss直聘的“职位列表页”(
/web/geek/job)或“聊天页”,而不是首页。 - 检查浏览器控制台:按F12打开开发者工具,切换到“Console”标签页。刷新页面,查看是否有红色的报错信息。常见的错误包括:
Mixed Content:你的后端是HTTP,但Boss直聘是HTTPS。解决方案是将后端配置为HTTPS,或尝试在油猴脚本的@connect指令中添加你的HTTP域名/IP。CORS error:跨域错误。这需要后端正确配置CORS头。检查你的Spring Boot应用是否允许来自Boss直聘域名的跨域请求。- 脚本语法错误:可能是脚本版本与你的浏览器不兼容。尝试更新Tampermonkey插件到最新版,或重新安装脚本。
- 暴力刷新:有时浏览器的缓存会导致脚本注入失败。尝试“Ctrl + F5”强制刷新页面。
5.2 AI回复内容不相关或质量差
如果AI的回复看起来像是胡言乱语,或者完全没结合你的简历,请按以下步骤检查:
- 确认简历信息已导入:检查AI坐席设置中的“简历信息”文本框,确保里面粘贴了你完整的、格式清晰的简历文本。如果为空,AI就是在“裸聊”。
- 检查AI模型和API Key:到后端服务器的日志中查看。Spring Boot应用启动后,访问
/actuator/health或查看日志文件,确认AI客户端(如OpenAI、DeepSeek)初始化是否成功,是否有鉴权失败的错误。可以尝试在后端调用一个简单的测试接口,看AI能否正常返回内容。 - 调整系统提示词:AI的行为由“系统提示词”引导。这个提示词通常在后端代码中配置,定义了AI的角色、任务和回复风格。如果开源版本允许配置,可以尝试微调它,例如强调“请严格基于用户的简历信息进行回复”、“回复要专业、简洁、积极”。
- 检查上下文长度:大型语言模型有上下文窗口限制。如果你的简历非常长,加上漫长的对话历史,可能会超出限制,导致模型“遗忘”了前面的内容。解决方案是在后端代码中实现一个“摘要”或“关键信息提取”机制,在对话轮数过多时,自动将长简历摘要成核心要点,再喂给AI。
5.3 消息发送失败或收发不同步
表现为AI看似回复了,但Boss直聘聊天窗口里没显示,或者HR的消息没被脚本捕获。
- 网络问题:检查浏览器控制台的“Network”面板,查看脚本向后端发送的请求是否成功(状态码200)。如果失败,检查后端服务是否宕机,或网络是否通畅。
- 协议解析失败:这是最复杂的情况。Boss直聘可能更新了其WebSocket消息的Protobuf结构。表现是脚本能抓到消息但后端解析出错,或者能生成回复但发送不出去。需要重新进行协议逆向工程。对于开源项目,关注作者的更新,看是否有新版本的脚本发布。
- 频率限制:过于频繁的自动消息发送可能触发Boss直聘的风控机制,导致账号功能被临时限制。务必在设置中调整“消息发送间隔”,模拟真人打字的节奏,比如每条消息间隔10-30秒。避免在短时间内进行海量投递或回复。
5.4 个人使用与商业运营的考量
项目作者提到了“个人自用”和“商业运营”两种模式。对于个人开发者,我强烈建议先从“个人自用”开始,理由如下:
- 成本可控:AI API的调用费用、服务器费用需要自己承担。如果流量不大,一个月几十到一百元人民币足以覆盖。作者也提到,公共服务器因成本问题会关停,这印证了自建服务的必要性。
- 数据隐私:所有简历信息、聊天记录都存储在你自己的服务器和数据库里,安全可控。
- 定制自由:你可以根据自己的求职策略,随意修改AI的回复策略、筛选条件、触发规则。
如果你技术能力强,且看到了市场需求,可以考虑“商业运营”。这时你需要重点解决:
- 多租户与隔离:修改后端,支持多个用户注册登录,确保他们的数据完全隔离。
- 计费与支付:集成支付宝/微信支付,实现套餐购买、自动续费等功能。项目内置了支付宝支付系统,这是一个很好的起点。
- 稳定性与运维:商业服务对可用性要求高,需要考虑负载均衡、数据库备份、监控告警等。
- 合规与风险:务必仔细阅读Boss直聘的用户协议,明确自动化工具的使用边界。提供商业服务时,应在用户协议中明确告知风险,避免法律纠纷。
最后,我想分享一个最重要的心得:AI是强大的辅助,但不能完全替代你。它的最佳定位是帮你完成初筛、破冰和日程安排等重复性工作。当沟通进入深水区,比如技术细节讨论、薪资谈判、团队文化了解时,一定要亲自接管。定期检查AI的聊天记录,评估其回复质量,并不断优化你的简历和预设话术。把这个工具当作一个不知疲倦的初级助手,而你自己,永远是那个把握最终方向的决策者。