招聘與 HR 助手
招聘和 HR 場景用三類模型配合:小模型把簡歷解析成結構化欄位,主力模型按招聘經理寫好的崗位標準逐條評估、起草面試問題,另一個主力模型根據員工手冊回答員工提問。模型只做整理和初篩,是否邀約面試、是否錄用都由人決定。按每月 3,000 份簡歷、2,000 次手冊提問估算,用各模型最低價分組的即時價格計算,模型費用每月約 ¥61.19。
價格更新於 2026年11月13日 下午6:08
月成本估算
假設:每月收到 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日 下午6:08。點模型名可檢視全部分組價格。
簡歷解析(小模型)
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日 下午6:08。
只含模型呼叫費用,不含招聘系統、儲存和人工複核成本。員工手冊問答的檢索(向量化)費用很低,表中沒有計入,怎麼估算見企業知識庫方案。簡歷份數翻倍,前兩項費用大致翻倍。
示例程式碼
小模型把簡歷解析成固定欄位;評估前去掉姓名和聯絡方式,主力模型逐條判斷崗位標準並引用簡歷原文;程式按必須項把候選人分成兩類,所有候選人都由招聘人員複核。
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;涉及個人薪資、績效和勞動爭議的問題一律轉人工。制度更新後,重新入庫對應的段落。
