前言
用过直聘找工作的都知道,不是简历发上去,每天就会自动有人来找你的。你还得去平台互动,比如打招呼,和boss聊几句之类的,这个过程也花费不少时间,关键是遇到满意的工作你还得及时回复,否则前面都白忙活了。所以我想做的就是把这个过程自动化,借助现在火爆的deepseek(关键是便宜啊),至少有以下几个步骤是可以用ai协助的:
1、筛选合适的职位。
AI:可以让ai根据简历分析职位的匹配度。
2、选择合适招呼语先简单自我介绍一番,因为千篇一律的招呼语,基本HR不会看,我自己也招过人,简历实在太多,根本看不过来。
AI:可以让ai根据职位要求和你的简历生成一段突出优势的自我介绍。
3、可能还会问你一些问题,比如boss的“开场提问”卡片,你总的动点脑子回答下,不回答肯定机会都没有。
AI:可以让ai根据简历自动回答,绝对比你自己回答的专业。
3、交换简历,需要手动同意,这里有个小技巧,直聘上可以传3个附件简历,一般人都会用足,比如我就放了“前端开发”/“后端开发”/“架构师”三份简历,除了基本信息以外,其它内容都做了响应的优化,这样根据不同职位投不同的简历。
AI:如果你有多份简历,可以让ai选择最匹配的简历。
4、交换联系方式,你得手动点同意
到这一步,大部分人都会点同意。
技术准备
BOSS的消息类型有一大堆,在我的另一篇文章中有详细说明,我第一次研究boss时,它的前端还有很多jquery的代码,甚至能看到开发者写的注释,现在是用vue实现,不过接口没有大的调整,但是也在不断变化,好在我一直保持跟踪。
接下来要做的其实就是接管这些消息,将文本消息交给deepseek处理,其它请求类信息自动化处理,下面是AI接管文本消息部分的代码,可以看到回复消息需要参考用户的简历、职位的介绍、双方的历史聊天记录,这样才能给出比较合理的回复。
// 获取职位详情
const jobDetail = await bossApiService.getJobDetail(bossData.data.securityId);
// 获取简历
const resume = await bossApiService.getResumeByJob(bossData.data.encryptJobId, bossData.job.jobName);
// 回复消息
aiReplay = await aiHelper.reply({
msg,
type: 'job',
historyMsg: historyText,
jobDesc: jobDetail.jobInfo.postDescription,
});
向量存储
这里我还尝试过使用向量数据库来存储职位/消息/简历,但是存在两个问题:
1、数据时效性,比如职位信息,当你换一个职位沟通时,存储的职位信息其实就无效了,还有聊天记录,这些都是跟某一个职位的boss沟通产生的私域数据,而这个沟通的过程一般都很短,很多打了招呼就没下文了,持久化存储的价值不大。
2、分片的问题,附件简历结构式比较松散的,比如实习生的简历可能500字就没了,一个工作十几年的简历可能会有几千字,年龄/性别这些存储在非常小的文本块中,而工作经历又会很长,这时很难做到合适的文本分片,结果就导致向量查询时信息不完整,阿里/豆包/智普的文本向量模型我都试过,效果都不太好,这块你如果有好的方案,欢迎交流。
提示词
简历匹配分析
请分析用户简历与职位描述的匹配程度,并给出评分,评分范围为1-10,请只输出评分!
**用户简历**
{resume}
**职位描述**
{jobDesc}
问题意图分析
请结合用户简历、职位描述、聊天记录按如下逻辑分析用户问题的意图:
1、如果是想获取简历,输出resume
2、如果是想获取联系方式,输出contact
3、如果是其它问题,输出other
**用户简历**
{resume}
**职位描述**
{jobDesc}
**聊天记录**
{historyMsg}
问题回答
请你扮演一位求职者,结合简历、职位描述、聊天记录回答招聘者提出的问题,字数不能超过300,只输出回答!
**用户简历**
{resume}
**职位描述**
{jobDesc}
**聊天记录**
{historyMsg}
这里使用不同的模型得到结果会有天壤之别,我几乎试遍了国内一线大模型和gpt\gemini\cluade,提示词这块也调整了很多次,总之这块花费的时间不亚于第一次研究直聘的接口鉴权,目前效果还算不错。 下面是手机上的录屏
自动投简历