跳到正文
土土金API

招聘与 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。

¥61.19/ 月

  • 简历解析¥6.51
  • 按岗位标准评估¥37.8
  • 起草面试问题¥6.13
  • 员工手册问答¥10.75
看用量假设

业务问题

一个岗位常常收到几百份简历,格式五花八门:PDF、Word、招聘网站导出的页面。HR 要一份份打开,把学历、工作经历、技能抄进表格,再和岗位要求对比,真正和候选人沟通的时间反而不多。

让大模型直接“挑出最合适的人”并不可取:标准不透明,同一份简历问两次可能得到不同结论;简历里的姓名、性别、年龄、照片这些与岗位无关的信息,也可能影响模型的判断。

更稳妥的做法是:标准由人来定,并且写成明确的条目;模型逐条判断并引用简历原文,分数和排序由程序按固定规则计算;评估前去掉与岗位无关的个人信息;所有候选人都由招聘人员过目,决定由人作出。

推荐模型组合

推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 17:58。点模型名可查看全部分组价格。

参考架构

  1. 1

    写清岗位标准

    招聘经理把岗位要求写成几条能判断的标准,分出必须项和加分项,比如“3 年以上 B2B 销售经验”。同一岗位的候选人都用同一份标准,标准改动时记下版本。

  2. 2

    解析简历

    PDF 和 Word 简历先用程序提取文字,小模型按固定字段输出 JSON;程序检查日期格式和必填字段,解析失败的转人工录入。

  3. 3

    去掉无关信息再评估

    评估前由程序去掉姓名、联系方式、照片、性别、年龄、籍贯等与岗位无关的字段,主力模型只看经历和技能,逐条给出判断和简历原文依据。

  4. 4

    程序分类,人工复核

    程序按必须项是否全部满足,把候选人分成“优先查看”和“有缺口待确认”两类,不让模型直接打总分,也不自动淘汰任何人;每位候选人都由招聘人员查看。

  5. 5

    准备面试

    对进入面试的候选人,模型按岗位标准和简历里的具体经历起草追问问题,面试官删改后使用。

  6. 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-flash3,000 次 × 输入 2,500 + 输出 800 tokens¥6.51
按岗位标准评估deepseek-v4.1-flash3,000 次 × 输入 2,500 + 输出 500 tokens¥37.8
起草面试问题deepseek-v4.1-flash300 次 × 输入 2,500 + 输出 1,200 tokens¥6.13
员工手册问答qwen3.5-plus2,000 次 × 输入 3,000 + 输出 300 tokens¥10.75
合计(每月)¥61.19

按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 17:58。

只含模型调用费用,不含招聘系统、存储和人工复核成本。员工手册问答的检索(向量化)费用很低,表中没有计入,怎么估算见企业知识库方案。简历份数翻倍,前两项费用大致翻倍。

示例代码

小模型把简历解析成固定字段;评估前去掉姓名和联系方式,主力模型逐条判断岗位标准并引用简历原文;程序按必须项把候选人分成两类,所有候选人都由招聘人员复核。

示例代码(Python,简历解析与按标准评估)
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))

用一把 Key 试试这个方案

注册后在控制台创建 API Key,把上面代码里的 base_url 和 Key 换成你的就能运行。企业采购、开发票可以加客服微信 JsnonoChat。

土土金客服微信二维码
微信JsnonoChat

扫码或搜索微信号添加客服

常见问题

每月处理 3,000 份简历要多少钱?

按每份简历都解析和评估、300 位候选人起草面试问题、员工每月提问 2,000 次估算,用最低价分组计算约 ¥61.19。简历份数和岗位标准的长度对费用影响最大。

可以让模型直接决定淘汰谁吗?

不建议。模型的判断会出错,也会受到简历写法的影响。示例里的做法是模型只按标准逐条判断并给出依据,程序据此把候选人分成两类,所有候选人都由招聘人员查看,是否邀约面试、是否录用由人决定。

怎么让筛选标准对每个人都一致?

同一岗位用同一份书面标准和同一段提示词,temperature 设为 0,排序由程序按固定规则计算,不让模型自由打分;评估前去掉与岗位无关的个人信息;定期抽查评估结果,标准调整后记下版本,方便事后复核。

简历里的个人信息怎么处理?

简历含姓名、电话、邮箱等个人信息,请求会经本站转发给模型服务处理。建议只提交解析需要的内容,评估环节去掉身份和联系方式;告知候选人、取得同意、保存期限等事项,请按你们适用的个人信息保护规定和公司制度评估。

员工手册问答答错了怎么办?

让模型只依据检索到的制度原文回答并注明出处,资料里没有的直接说不知道并转给 HR;涉及个人薪资、绩效和劳动争议的问题一律转人工。制度更新后,重新入库对应的段落。