添加适配评分

This commit is contained in:
zk
2026-06-24 18:14:57 +08:00
parent dc02969f3a
commit 00deef31ad
7 changed files with 153 additions and 4 deletions
+39
View File
@@ -0,0 +1,39 @@
"""求职助手 - 岗位匹配评分 AI 引擎
根据简历与岗位在技能/学历/经验上的要求评估匹配度,输出 0-100 分。
依赖:job_agent/prompts、model_config.JobAgentModel.MATCH_SCORE、parse_llm_json
"""
import time
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from app.ai.job_agent.prompts import RESUME_JOB_MATCH_SCORE_PROMPT
from app.ai.model_config import JobAgentModel
from app.core.logger import log
from app.tool.json_helper import parse_llm_json
_score_chain = (
ChatPromptTemplate.from_messages([("system", RESUME_JOB_MATCH_SCORE_PROMPT), ("human", "请开始评估。")])
| JobAgentModel.MATCH_SCORE
| StrOutputParser()
)
async def score_match(job_title: str, job_skill_tags: str, job_description: str, resume_text: str) -> int:
"""评估简历与岗位匹配度,返回 0-100 整数分,失败返回 0"""
t0 = time.monotonic()
try:
raw = await _score_chain.ainvoke({
"job_title": job_title, "job_skill_tags": job_skill_tags or "",
"job_description": job_description or "", "resume_text": resume_text or "暂无简历信息",
})
parsed = parse_llm_json(raw)
score = int(parsed.get("score", 0))
score = max(0, min(100, score)) # 兜底夹取到 0-100
log.info(f"岗位匹配评分完成 score={score} ({round(time.monotonic() - t0, 2)}s)")
return score
except Exception as e:
log.error(f"岗位匹配评分失败: {e} ({round(time.monotonic() - t0, 2)}s)")
return 0
+34
View File
@@ -38,3 +38,37 @@ RESUME_EXPERIENCE_OPTIMIZE_PROMPT = """你是一个求职投递助手。用户
3. 适当使用岗位要求中的关键词润色描述,但不要编造内容
4. description 字段是 [{{"id": "xxx", "text": "xxx"}}] 格式:修改时保留原 id 只改 text,新增段落生成随机8位字符串作为 id,删除段落直接移除
5. 返回修改后的完整模块数据(JSON 格式,与输入格式一致)"""
# ===== 岗位匹配评分 Prompt =====
RESUME_JOB_MATCH_SCORE_PROMPT = """你是一名资深招聘评估专家,负责客观评估候选人简历与目标岗位的匹配程度。请从【技能】【学历】【经验】三个维度逐项分析,再综合给出一个 0-100 的匹配分数。
【候选人简历】
{resume_text}
【目标岗位】
岗位名称:{job_title}
技能标签:{job_skill_tags}
岗位职责与要求:{job_description}
【评估维度与要点】
1. 技能匹配(建议权重约 50%):候选人掌握的技能/工具/技术栈与岗位技能标签、JD 中要求的硬技能的覆盖程度;核心技能命中比软技能更重要,关注关键技能是否缺失。
2. 学历匹配(建议权重约 20%):学历层次、院校、专业与岗位学历门槛及专业相关度;满足门槛即可得高分,明显高于要求不额外加分,低于门槛要扣分。
3. 经验匹配(建议权重约 30%):工作/实习/项目/竞赛经历与岗位职责的相关性、年限、岗位层级、业务领域贴合度;优先看相关经历的深度与成果,而非堆数量。
【打分档位(用于校准总分)】
- 90-100:高度匹配,核心技能基本全覆盖、学历达标、有强相关经验,可直接进入面试
- 75-89:较匹配,主要要求满足,存在少量可弥补的差距
- 60-74:基本匹配,满足部分核心要求,但有明显短板
- 40-59:匹配度偏低,多数关键要求不满足
- 0-39:基本不匹配或简历信息严重不足
【规则】
1. 严格基于简历已有信息评估,简历中缺失或未提及的能力一律按"不具备"处理,不得臆测或脑补
2. 客观打分,避免一律给高分;不相关的经历/技能不计入加分
3. 岗位信息或简历信息明显不足时,应给保守分而非高分
4. 先在心里完成三维度分析与加权,最终只输出一个综合整数分(0-100),越高代表越匹配
严格只返回 JSON,不要任何分析过程或其他内容:
{{"score":85}}"""