2026年AI大模型入门实战:我用一个周末搞定了智能简历筛选系统
AI应用的门槛真的降低了。三年前做这个需要训练模型、标注数据,现在只要会写Prompt和调API就行。你有什么想用AI解决的重复性工作?评论区告诉我,说不定下一篇就是你的点子!记得关注我,每周更新AI实战项目,咱们一起在2026年把AI玩明白。
写在前面
上周和做HR的朋友吃饭,她跟我吐槽:"每次招聘季,光看简历就要看到吐,100份里能有10份合适就不错了。" 我当时就想,这不就是个典型的AI应用场景吗?
于是周末两天,我撸了个简历智能筛选工具。成本不到10块钱,准确率能达到80%以上。今天把整个开发过程分享出来,代码全开源,你也能做一个。

一、我想要什么功能?
先别急着写代码,我花了半小时梳理了需求:
核心流程:
上传PDF简历 → 提取文本内容 → AI分析能力匹配度 → 输出结构化评分 → 按分数排序
技术选型思路:
-
PDF解析:PyPDF2够用了,别整那些花里胡哨的
-
AI大模型:用Claude API,理解能力强,关键是便宜
-
后端语言:Python,库多好上手
-
数据格式:JSON,方便后续对接前端
有个问题困扰了我挺久:到底是让AI直接打分,还是我自己写规则? 后来发现两者结合效果最好,后面会细说。
二、开发过程拆解
模块1:把PDF变成文字
一开始我想用OCR,后来发现大部分简历都是可复制的文本型PDF,直接提取就行。
import PyPDF2
def extract_resume_text(pdf_path):
"""提取PDF简历文本"""
text = ""
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
# 遍历每一页
for page in reader.pages:
text += page.extract_text()
return text.strip()
遇到的第一个坑:有些简历是扫描件,PyPDF2提取出来是乱码。解决方案是加个判断,如果提取文本少于100字,就调用OCR库(我用的paddleocr)作为补充方案。
模块2:设计Prompt让AI干活
这是整个项目的核心。我的Prompt经过了3次迭代:
第一版(太简单,效果差):
分析这份简历是否适合Python开发岗位
第二版(加了结构化要求):
你是资深HR,分析简历匹配度。
岗位要求:Python开发,3年经验,熟悉Django
请从技能匹配、经验年限、项目经历三个维度打分(每项10分)
第三版(当前使用,效果最好):
PROMPT_TEMPLATE = """
你是10年经验的技术招聘专家。请分析简历与岗位的匹配度。
【岗位需求】
{job_requirements}
【候选人简历】
{resume_text}
【评分标准】
1. 技术栈匹配度(40分):关键技术必须覆盖80%以上
2. 工作经验(30分):年限要求±1年可接受
3. 项目质量(30分):是否有类似项目经验
请以JSON格式输出:
{{
"score": 总分,
"tech_match": 技术栈得分,
"experience": 经验得分,
"project": 项目得分,
"reason": "一句话评价",
"highlights": ["亮点1", "亮点2"]
}}
"""
调用API的代码:
import anthropic
def analyze_resume(resume_text, job_desc):
client = anthropic.Anthropic(api_key="你的API密钥")
message = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
messages=[{
"role": "user",
"content": PROMPT_TEMPLATE.format(
job_requirements=job_desc,
resume_text=resume_text
)
}]
)
# 解析JSON结果
return json.loads(message.content[0].text)
模块3:加点规则提高准确率
纯靠AI有时候会"脑补",我加了关键词硬匹配:
def keyword_bonus(resume_text, keywords):
"""关键词加分机制"""
bonus = 0
for word in keywords:
if word.lower() in resume_text.lower():
bonus += 2 # 每个关键词+2分
return min(bonus, 10) # 最多加10分
比如招Python岗,简历里必须有"Django"或"Flask",否则直接-20分。这个小机制让误判率下降了15%。
模块4:批量处理和结果输出
import os
import pandas as pd
def batch_process(resume_folder, job_desc):
results = []
for filename in os.listdir(resume_folder):
if filename.endswith('.pdf'):
# 提取文本
text = extract_resume_text(
os.path.join(resume_folder, filename)
)
# AI分析
analysis = analyze_resume(text, job_desc)
# 关键词加分
bonus = keyword_bonus(text, ["Django", "FastAPI"])
analysis['score'] += bonus
results.append({
'name': filename,
'total_score': analysis['score'],
'reason': analysis['reason']
})
# 按分数排序
df = pd.DataFrame(results)
df = df.sort_values('total_score', ascending=False)
df.to_excel('ranking.xlsx', index=False)
return df
三、踩过的三个大坑
坑1:Token成本失控
最开始我把整份简历(5000字)全扔给AI,一份简历花3毛钱。后来优化成只提取工作经历和技能部分,成本降到5分钱。
坑2:JSON解析老出错
AI有时候返回的不是标准JSON(比如多了注释),加了try-except + 正则清洗才稳定:
import re
def clean_json(text):
# 去掉markdown代码块标记
text = re.sub(r'```json\s*|\s*```', '', text)
return json.loads(text.strip())
坑3:中文简历识别差
发现AI对中文简历的理解不如英文,解决方案是Prompt里加一句:"如遇中文,请先理解语义再评分"。
四、效果怎么样?
拿朋友公司真实的30份简历测试:
-
准确率:与HR人工筛选对比,前10名重合度83%
-
速度:30份简历3分钟搞定(人工要2小时)
-
成本:总共花了1.5元(Claude API费用)
有个有意思的发现:AI会发现人类忽略的亮点。比如有个候选人虽然经验只有2年,但GitHub有个8k stars的开源项目,AI给了高分,HR差点漏掉。
五、还能怎么优化?
周末的时间只够做个Demo,后续我打算加这些功能:
-
Web界面:用Streamlit搞个拖拽上传的页面,5分钟能做出来
-
简历去重:检测重复投递的候选人
-
岗位模板库:预设10个常见岗位的评分标准
-
导出HR报告:生成PDF版筛选报告
你觉得还缺什么功能?评论区说说你的想法,点赞前三的我下周实现!
六、完整代码获取
代码已上传GitHub(搜"resume-ai-screener"),包含:
-
完整源码(200行)
-
测试简历样本
-
Docker一键部署脚本
-
视频教程链接
小提示:如果你是AI开发新手,建议先跑通这个项目,再去改。遇到问题先看Issue区,80%的坑别人踩过了。
写在最后
这个项目让我感受到:AI应用的门槛真的降低了。三年前做这个需要训练模型、标注数据,现在只要会写Prompt和调API就行。
你有什么想用AI解决的重复性工作?评论区告诉我,说不定下一篇就是你的点子!
记得关注我,每周更新AI实战项目,咱们一起在2026年把AI玩明白
更多推荐


所有评论(0)