招聘与 HR 助手
招聘和 HR 场景用三类模型配合:小模型把简历解析成结构化字段,主力模型按招聘经理写好的岗位标准逐条评估、起草面试问题,另一个主力模型根据员工手册回答员工提问。模型只做整理和初筛,是否邀约面试、是否录用都由人决定。按每月 3,000 份简历、2,000 次手册提问估算,用各模型最低价分组的实时价格计算,模型费用每月约 ¥61.19。
价格更新于 2026年11月13日 17:58
月成本估算
假设:每月收到 3,000 份简历,每份解析输入约 2,500 tokens(简历约 2,000、字段说明约 500),输出约 800 tokens;每份按岗位标准评估输入约 2,500 tokens、输出约 500 tokens;300 位候选人进入面试,每位起草面试问题输入约 2,500 tokens、输出约 1,200 tokens;员工每月提问 2,000 次,每次带约 3,000 tokens 的制度原文,回答约 300 tokens。
业务问题
一个岗位常常收到几百份简历,格式五花八门:PDF、Word、招聘网站导出的页面。HR 要一份份打开,把学历、工作经历、技能抄进表格,再和岗位要求对比,真正和候选人沟通的时间反而不多。
让大模型直接“挑出最合适的人”并不可取:标准不透明,同一份简历问两次可能得到不同结论;简历里的姓名、性别、年龄、照片这些与岗位无关的信息,也可能影响模型的判断。
更稳妥的做法是:标准由人来定,并且写成明确的条目;模型逐条判断并引用简历原文,分数和排序由程序按固定规则计算;评估前去掉与岗位无关的个人信息;所有候选人都由招聘人员过目,决定由人作出。
推荐模型组合
推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 17:58。点模型名可查看全部分组价格。
简历解析(小模型)
qwen-flash通义千问
输入 ¥0.196 / 输出 ¥2.1 每百万 tokens国产模型分组
把简历文本解析成固定字段的 JSON:教育经历、工作经历、技能、证书。字段固定、不需要复杂推理,小模型就够用,简历量大时单价低的优势明显。图片或扫描版简历先转成文字,或者换成备选里支持识图的模型。
岗位匹配与面试问题(主力模型)
deepseek-v4.1-flashDeepSeek
输入 ¥2.8 / 输出 ¥11.2 每百万 tokens国产模型分组
拿结构化简历逐条对照岗位标准,给出满足、不满足或无法判断,并引用简历原文作依据;对进入面试的候选人,按岗位标准和简历里的具体经历起草追问。需要稳定地遵循指令,用主力模型。
员工手册问答(主力模型)
qwen3.5-plus通义千问
输入 ¥1.12 / 输出 ¥6.72 每百万 tokens国产模型分组
员工问年假、报销、考勤等问题时,先从员工手册和各项制度里检索相关段落,再让模型只根据这些段落回答并注明出处。输入长、输出短,检索做法和企业知识库方案相同。
参考架构
- 1
写清岗位标准
招聘经理把岗位要求写成几条能判断的标准,分出必须项和加分项,比如“3 年以上 B2B 销售经验”。同一岗位的候选人都用同一份标准,标准改动时记下版本。
- 2
解析简历
PDF 和 Word 简历先用程序提取文字,小模型按固定字段输出 JSON;程序检查日期格式和必填字段,解析失败的转人工录入。
- 3
去掉无关信息再评估
评估前由程序去掉姓名、联系方式、照片、性别、年龄、籍贯等与岗位无关的字段,主力模型只看经历和技能,逐条给出判断和简历原文依据。
- 4
程序分类,人工复核
程序按必须项是否全部满足,把候选人分成“优先查看”和“有缺口待确认”两类,不让模型直接打总分,也不自动淘汰任何人;每位候选人都由招聘人员查看。
- 5
准备面试
对进入面试的候选人,模型按岗位标准和简历里的具体经历起草追问问题,面试官删改后使用。
- 6
员工手册问答
员工手册、考勤和报销制度按知识库方案切块入库;员工提问时检索相关段落,模型只依据制度原文回答并注明出处;涉及个人薪资、绩效和劳动争议的问题转给 HR。
成本估算
假设:每月收到 3,000 份简历,每份解析输入约 2,500 tokens(简历约 2,000、字段说明约 500),输出约 800 tokens;每份按岗位标准评估输入约 2,500 tokens、输出约 500 tokens;300 位候选人进入面试,每位起草面试问题输入约 2,500 tokens、输出约 1,200 tokens;员工每月提问 2,000 次,每次带约 3,000 tokens 的制度原文,回答约 300 tokens。
| 项目 | 模型 | 用量假设 | 费用 |
|---|---|---|---|
| 简历解析 | qwen-flash | 3,000 次 × 输入 2,500 + 输出 800 tokens | ¥6.51 |
| 按岗位标准评估 | deepseek-v4.1-flash | 3,000 次 × 输入 2,500 + 输出 500 tokens | ¥37.8 |
| 起草面试问题 | deepseek-v4.1-flash | 300 次 × 输入 2,500 + 输出 1,200 tokens | ¥6.13 |
| 员工手册问答 | qwen3.5-plus | 2,000 次 × 输入 3,000 + 输出 300 tokens | ¥10.75 |
| 合计(每月) | ¥61.19 | ||
按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 17:58。
只含模型调用费用,不含招聘系统、存储和人工复核成本。员工手册问答的检索(向量化)费用很低,表中没有计入,怎么估算见企业知识库方案。简历份数翻倍,前两项费用大致翻倍。
示例代码
小模型把简历解析成固定字段;评估前去掉姓名和联系方式,主力模型逐条判断岗位标准并引用简历原文;程序按必须项把候选人分成两类,所有候选人都由招聘人员复核。
import json
import os
from openai import OpenAI
client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])
FIELDS = {
"name": "", "phone": "", "email": "",
"education": [{"school": "", "degree": "", "major": "", "graduated": "YYYY-MM"}],
"experience": [{"company": "", "title": "", "start": "YYYY-MM", "end": "YYYY-MM or now", "highlights": [""]}],
"skills": [""],
"certificates": [""],
}
# Written by the hiring manager; every candidate for this job is judged on the same list.
CRITERIA = [
{"id": "C1", "must": True, "text": "At least 3 years of B2B sales experience"},
{"id": "C2", "must": True, "text": "Has owned key accounts or a sales territory"},
{"id": "C3", "must": False, "text": "Has sold software or SaaS"},
{"id": "C4", "must": False, "text": "Has worked with overseas clients in English"},
]
NOT_FOR_SCREENING = ("name", "phone", "email")
def ask_json(model, system, user):
resp = client.chat.completions.create(
model=model,
messages=[{"role": "system", "content": system}, {"role": "user", "content": user}],
temperature=0,
)
raw = resp.choices[0].message.content
return json.loads(raw[raw.find("{"): raw.rfind("}") + 1])
def parse_resume(text):
return ask_json(
"qwen-flash",
"Copy the resume into JSON with exactly this shape: " + json.dumps(FIELDS)
+ ". Use empty values when something is not in the resume; never guess. Reply with JSON only.",
text,
)
def screen(profile):
facts = {k: v for k, v in profile.items() if k not in NOT_FOR_SCREENING}
result = ask_json(
"deepseek-v4.1-flash",
"You help a recruiter. For each criterion answer met, not_met or unclear, and quote the resume text "
"that supports it. Judge only the listed criteria. "
'Reply with JSON only: {"criteria": [{"id": "C1", "verdict": "met", "evidence": ""}]}',
"Criteria:\n" + json.dumps(CRITERIA) + "\n\nCandidate:\n" + json.dumps(facts, ensure_ascii=False),
)
verdicts = {c["id"]: c["verdict"] for c in result["criteria"]}
gaps = [c["id"] for c in CRITERIA if c["must"] and verdicts.get(c["id"]) != "met"]
# The model never rejects anyone: it only sorts the queue, and a recruiter reviews every candidate.
return {"queue": "review_gaps" if gaps else "review_first", "must_have_gaps": gaps, "criteria": result["criteria"]}
with open("resume.txt", encoding="utf-8") as f:
profile = parse_resume(f.read())
print(json.dumps(screen(profile), ensure_ascii=False, indent=2))常见问题
每月处理 3,000 份简历要多少钱?
按每份简历都解析和评估、300 位候选人起草面试问题、员工每月提问 2,000 次估算,用最低价分组计算约 ¥61.19。简历份数和岗位标准的长度对费用影响最大。
可以让模型直接决定淘汰谁吗?
不建议。模型的判断会出错,也会受到简历写法的影响。示例里的做法是模型只按标准逐条判断并给出依据,程序据此把候选人分成两类,所有候选人都由招聘人员查看,是否邀约面试、是否录用由人决定。
怎么让筛选标准对每个人都一致?
同一岗位用同一份书面标准和同一段提示词,temperature 设为 0,排序由程序按固定规则计算,不让模型自由打分;评估前去掉与岗位无关的个人信息;定期抽查评估结果,标准调整后记下版本,方便事后复核。
简历里的个人信息怎么处理?
简历含姓名、电话、邮箱等个人信息,请求会经本站转发给模型服务处理。建议只提交解析需要的内容,评估环节去掉身份和联系方式;告知候选人、取得同意、保存期限等事项,请按你们适用的个人信息保护规定和公司制度评估。
员工手册问答答错了怎么办?
让模型只依据检索到的制度原文回答并注明出处,资料里没有的直接说不知道并转给 HR;涉及个人薪资、绩效和劳动争议的问题一律转人工。制度更新后,重新入库对应的段落。
