微信扫码
添加专属顾问
我要投稿
本文约3500字,阅读时间7分钟
2天,一个没有什么代码经验的产品经理,借助GPT4,写出了一个简单版的有RAG(检索增强)功能的简历库人岗匹配功能。大概效果如下:
(看不清图片的可以看下文)
用户问: 我想找有海外留学经验,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA。
系统回复:
找到了符合条件的人选,他叫XXX,是一位31岁的男性,拥有人力资源管理硕士学位,毕业于普渡大学。XXX曾在知乎担任HRIS相关职务,具体工作包括SAP SuccessFactors的实施,主要负责员工中心、入职和绩效模块的上线。
在以往,做出一个人岗匹配功能,可能需要大量的人力物力及时间。以下为GPT4的总结:
我用2天做出的简陋版AI人岗匹配功能,有以下特点:
1.关键词不匹配,也搜索得到。比如“在美国上过学”,简历原文里没有“美国”两个字,但是通过“普渡大学”,系统也可以判断为在美国上过大学的候选人。
2.提问-只要说人话,系统就秒懂。无需拘泥于提问的格式,如:请给我找个XX样的候选人/帮我淘个库,要XX样的/来个XX样的人选,系统都能理解。
3.回答-系统的回答,可以自由定义回答语气、形式等,提升用户体验。大家用过的聊天机器人,是不是感觉说话特别客气、官方?我只需要给系统一点提示,马上变身为淘宝客服,霸道总裁或二次元萌妹。形式上,系统找到人选后,可以让他总结一下,以人物简介+亮点+风险介绍(如工作经历断档)等方式。
那我具体是怎么搞的呢?复盘一下过程。
LLM全称Large Language Module,即大语言模型,具备(偷了个懒,让GPT4帮写):
高级的语言理解和上下文分析能力:LLM能理解和处理复杂的语言模式,不仅限于关键词。
广泛的知识库和学习能力:LLM接受了大量和多样化的文本数据的训练,包括不同领域的专业知识。这使得它们能够理解各种专业领域的术语,如“机器学习”、“深度学习”、“神经网络”等,
综合信息处理:LLM能够基于简历的整体内容来评估候选人的适合度,而不是单一或孤立的关键词。
动态更新和适应新知识:LLM的设计允许对新知识和概念进行快速适应和理解,减少了人力资源专业人员在特定领域知识不足的问题。
基于上述能力,LLM能准确理解用人需求和简历内容,但是拿着用人需求在简历库里找人,还需要实现【到简历库】+【找人】2个费劲的动作。即【建数据库】和【检索】2个重要的技术。
这个配套技术叫做RAG技术,即Retrieval-Augmented Generation,检索增强技术。
RAG基本原理
基本原理就是把简历转化为向量(1份简历1个向量),全部放到数据库里,然后把我的用人需求也转化为1个向量,到数据库里找最相近的向量。
比如:
我的用人需求转化为向量,用数值表示是0.001。
数据库里A简历用向量数值表示为0.002,B简历用向量数值表示为0.005。
那肯定是A简历更接近0.001,所以最相似,人就这样被找出来了。
为啥要把简历转化为一串向量呀?
因为向量可以用非常多的维度去表达一个意思,比较全面,能减少歧义。
二是因为向量是数字,计算机处理起数字比处理文字快。(多维向量处理GPU比CPU快,这就是英伟达为什么也火了)
LLM可以处理通识类问题,加上RAG可以增强处理垂直领域问题的能力。
你可以理解LLM就是你请到家里做家务的保姆,家务公司早就训练好保姆中文沟通能力和基本的家务能力。但是她来你家,不清楚你家房间情况、家具的摆放位置、你的清洁要求。而RAG就相当于你往家具上贴了一个个标签,这个抽屉放碗,那个抽屉放书,书要竖着立起来放,等等,增强了她的整理能力。【贴标签】的过程就是向量化。
有了这样的组合,你可以把公司的规章制度,人力资源政策要求结合到大语言模型里,成为一个懂你们公司情况的小助手。
把简历转化为文本
把pdf简历转化为简历,我用的是python的pdfminer包。
但是具体代码怎么写的呢?我是产品经理我不会!问GPT!
试了一下,真的可以耶!GPT太厉害了。
(后面还做了些数据清洗的操作)
把文本转化为向量
把文本转化为向量,目前效果最好就是OpenAI的,所以直接用。
把向量灌进数据库里
这里的数据库用的是开源的Chromadb。代码不会写?还是请GPT帮我写。
首先要搞一个空的数据库,然后往数据里导入我刚才的简历数据(text)
当然,中间还有些细节,比如需要定义往数据库写入简历的名字是什么。
很简单,比如:
user_query = ("我想找个美国上过学,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA")
在向量数据库里搜人
找到了人选:([' XXX, 男,年龄:31岁,18122749291…担任产品兼项⽬经理'])
把匹配结果和用户问题组合成Prompt模板
这个没啥技术含量,就是把用户问题和找出的人选简历,拼起来,问GPT。
比如:
prompt_template =
"""
角色和任务:你是一个高级招聘专员,主要是根据用户问题,在人才库里找相关信息。注意:如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。
已知信息:([' XXX, 男,年龄:31岁,18122749291…担任产品兼项⽬经理'])
用户问: 我想找个美国上过学,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA
请用中文回答用户问题。回答内容请根据用户要求一一对应讲解匹配点。
"""
调用LLM解析Promp, 得到最终回复
——————以下为系统回复——————
找到了符合条件的人选,他叫XXX,是一位31岁的男性,拥有人力资源管理硕士学位,毕业于普渡大学。XXX曾在知乎担任HRIS相关职务,具体工作包括SAP SuccessFactors的实施,主要负责员工中心、入职和绩效模块的上线…
我问了个简单的问题:请告诉我XXX的电话是多少。
系统回答:13760687362。
我一看,明显是错的。因为18122749291才是我电话,13760687362@163.com是我邮箱前缀。都是数字,长度也一样,GPT分不出来。
咋整?
所以我让GPT帮我改代码去掉乱码,变成这样:
[' XXX, 男,年龄:31岁,18122749291,13760687362@163.com…担任产品兼项⽬经理']
这个问题就不再出现了。
刚才成功把一个简历放进向量数据库了,如何放第二个,至第100个人进去呢?
我也不会写for循环啊!还是请GPT帮我写代码!
没调试几次就完美运行了。GPT,永远的神!
最终回答:我无法回答您的问题。
为啥??ChatGPT就是LLM呀,GPT你这都不懂吗?
所以,我把LLM模型,从gpt3.5-turbo换成了gpt4,回答正确了
因此,我知道每个模型的能力是有巨大差异的,不同模型有不同的长处和弱点,和应用场景!
也知道了,以后部署自己的模型,调试结果,可以多换模型去试试。
我现在是把1~2千字的简历切成一个向量,拿去和用户问题向量进行匹配,精确度很差。
其实也很好理解,比如:
方式1:让你读完2000字的简历,然后问你,里面有没有{滴滴出行}4个字。
方式2:把2000字的简历,拆分成5段,每段400字;每看完400字,问你,里面有没有{滴滴出行}4个字。
肯定是方式2更好判断。
因此后面,可以做的就是把简历再切小一些,比如基本信息一个片段,工作经历一个片段,项目经历一个片段。一旦匹配到合适的片段,再拼起来给到完整的这个人的简历信息。
刚才GPT也说了,JSON这种格式化的数据,数据库更好搜索。对于我来说,把简历转化为JSON格式是需要写很多正则表达式的,拆分成姓名、年龄、教育经历等,但是求助GPT应该问题不大。
简历库:这20个人有19个都是HR产品经理
我的需求:帮我找HR产品经理,越资深越好,最好在一线大厂里工作过,还要抗压。
简单的思路为,这19个人,可能都满足要求,但是要根据要求进行排序,匹配度达到80%的提供给招聘HR。这个阈值多少比较合适,需要大量的测试。
在我做的这个简陋的人岗匹配模型里,有4个重要的参数:
1.LLM模型选择。这决定了分析的效果和成本,GPT4肯定比3.5好,但是更贵;
2.数据库返回的结果个数。由用户需求定,他要找几个人我给他找几个人;
3.Prompt。非常重要。虽然就是写几个字,但这几个字,就决定了这个模型能否很好的理解并运行你让他做的事。(就像你老板让你做事一样,指令越清晰,越好做);
4.用户问题。用户问题问的越清晰、具体、没有歧义,回答的越好。(请人人都提升自己的提问能力)
我花了1天时间做的测试,只是基于经验,觉得哪些问题可能比较重要。要让这个人岗匹配功能拿得出手,甚至能拿去卖(商业),还需要做完整的测试集合,从方方面面测试这个功能的效果,包括稳定性、安全性、鲁棒性、准确性等等。
这条是上面的延伸。要拿去卖,你总不能说我的产品很牛逼,你试试,试几条成功就买。市面上有那么多人岗匹配功能,凭啥买你的?
需要有一个相对标准的人岗匹配效果的测评工具,来测试你的产品,效果是否达到市场基准线,或者超过某些产品。当然,购买决策还需要参考价格。好的东西肯定是贵的,要看ROI。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-02-01
2025-01-01
2024-08-13
2025-02-04
2024-07-25
2024-04-25
2024-06-13
2024-09-23
2024-04-26
2024-08-21
2025-03-16
2025-03-16
2025-03-16
2025-03-15
2025-03-15
2025-03-15
2025-03-15
2025-03-13