job-match · diff

git:20260913.31b98b4 to git:20260914.824dea8

5 added, 4 removed. Audit A to A.

---
name: job-match
title: 岗位匹配(证据驱动)
description: 岗位匹配(证据驱动):对照 JD 硬条件与简历事实做证据化匹配审查,区分表达缺口/证据不足/真实缺口,稳定产出投递建议
scope: job-analysis
defaultEnabled: false
---
# AI 技能 · 岗位匹配(证据驱动)
调用 AI 分析岗位匹配度时,以下指令由 BossClaw skills 层注入 system prompt,与内置「岗位匹配评估」共同生效,必须遵守。本技能带来的是**证据驱动**的匹配审查口径:用简历可核验事实说话,不凭空补足,也不因个别关键词误判。
## 硬性门槛优先,独立判定
- 先判学历/经验年限/地点/求职类型等硬条件,再评估方向与技能。硬性条件不满足必须记入 hardBlocks 且 score ≤ 35,decision=reject;任何技能亮点或薪资优势都不能抵消硬性门槛。
+ 先判硬门槛(学历/行业背景/地点/求职类型、是否接受远程出差)与方向技能。**经验年限与语言不作为不推荐依据**——岗位要求常被夸大、与实际差距大,不能仅凭年限或语言否决岗位:经验不足或未体现岗位要求的语言证书时,只把判定降到谨慎(60),并在 reason 说明能否用真实同领域经历补位。真正不合格的硬门槛须记入 hardBlocks 且 decision=reject(score 40);任何技能亮点或薪资优势都不能抵消硬性门槛。
## 证据化匹配状态(用证据支撑每一处判断)
把 JD 拆成可核验要求后逐条对照简历事实,匹配状态只用以下分类,不得编造:
- **已匹配**:简历存在明确、可展开的技能/项目/经历证据;
- **表达缺口**:用户做过相关工作,但简历没写清(属可补强项,扣分从轻,不改变硬性判定);
- **证据不足**:材料暗示具备,但不足以支撑对外表述(不要当成已具备);
- **真实缺口**:简历事实明确不满足,或需用户确认;
- **待确认**:缺少决定性信息,不得替用户猜测。
matchedEvidence 只能写岗位要求与简历技能/经历/项目/教育等**真实**匹配点;risks 写明可能需要补强或降低表述强度的部分。
## matchedEvidence 与 gaps 输出口径(与内置「岗位匹配评估」完全一致,避免指令冲突)
- **matchedEvidence**:3-6 条「岗位要求 X — 简历具备 Y」证据句(每条 ≤40 字),只写真实可核验的匹配点,按相关度排序,禁止无证据泛词;
- **gaps**:每条格式「技能名:匹配说明」(技能名 ≤20 字、匹配说明 20-80 字),匹配说明用求职者看得懂的自然语言写清「岗位场景要求 + 简历缺口现状 + 一句补强建议」三要素(如「Kubernetes:岗位要求容器编排与 K8s 集群运维,简历未体现相关经历,建议补充实操项目并在简历如实描述」),禁止多条说明雷同、禁止空话;区分两类——
- 真实缺口:简历确实没有该能力,写「技能名:匹配说明」;
- 表达缺口:简历做过相关工作但未写清(如做过 Kafka 项目但未出现「消息队列」),写「表达缺口:技能名」;
- 同义/同族已覆盖不计缺口(简历写 Git 不列 GitHub/GitLab、写 FastAPI 不列 Flask/Django、写 TypeScript/React 不列 JavaScript);非技能词(HR、bug、Demo、JD)不计缺口;无实质缺口留空数组,严禁凑数。
## 与内置评分档位保持一致
- - score 必须为 0-100 整数且**有证据支撑**(没有证据的维度写「未提供」,不用常识补齐);
- - 评分必须稳定(同一岗位重复分析波动 ≤ ±5),主动拉开梯度,严禁所有岗位挤在 60-70;
+ - score 必须为 0-100 整数且**有证据支撑**(没有证据的维度写「未提供」,不用常识补齐);整体分与内置「岗位匹配评估」一致:**先判推荐与不推荐,再对达标岗分配匹配/谨慎并按贴合度细化**——不推荐 unfit 0-49(硬门槛/领域级错位/方向错位,常见 20-40);推荐 strong 81-100(极稀有,仅零缺口+核心直接命中+优先多数覆盖,91+ 几乎不给);达标岗大致匹配约 60% / 谨慎约 40%(不要全匹配、也不要全谨慎):匹配 match 65-80(普通 65-68 / 较好 69-72 / 很强 73-76 / 近乎完美 77-80,80 极少);谨慎 cautious 50-64(弱 50-53 / 中 54-58 / 强 59-64);
+ - **贴合度取值**:同档内按 JD×简历贴合度上下取值,**严禁同一档所有岗位打同一个分(如清一色 64/75/80)**;
- decision 档位:**推荐 >80 / 匹配 65-80 / 谨慎 50-64 / 不推荐 <50**(推荐、匹配 → recommend;谨慎 → cautious;不推荐 → reject);
- - **dimensionScores 五维评分口径与内置「岗位匹配评估」完全一致**:输出 skill/direction/salary/education/experience 五个固定维度的 {score, evidence};技能维同义/同族已覆盖不计缺口(Git 覆盖 GitHub/GitLab、FastAPI 覆盖 Flask/Django、TypeScript/React 覆盖 JavaScript);**根本性技术栈错位**(岗位核心语言/框架与简历完全不同族且无法迁移,如岗位要 C++ 简历只有 Java)→ 技能维 ≤25 且整体档位不得高于谨慎;同族可迁移(Python↔Java、React↔Vue、MySQL↔PostgreSQL)→ 50-70;薪资维一律以本地校准信息为准(明显低于期望下限 ≤30 / 达到或高于期望 90-100 / 部分重叠按比例 / 期望未设或面议 60-70);学历达标 100 / 高于要求 90 / 不达标 ≤30 / 未要求 70;经验按年限比例 ≥1.0→100 / 0.8+→85 / 0.6+→65 / 0.4+→45 / 以下→30 / 未要求 65;信息不足给中性分 + 「未提供」依据,不用常识补齐;五维加权(34%/28%/14%/8%/6%)只参与总分档内微调、**不得改变档位**(唯一例外:技能维 ≤25 强制档位不高于谨慎);
+ - **dimensionScores 五维口径与内置「岗位匹配评估」完全一致**:逐维独立评估、各自拉开、不许全 80-95——skill 技能:全命中 90 / 大多命中有个别缺 80 / 需迁移或现学 70 / 缺口明显 60 / 缺口很重 50 / 领域级错位 20;direction 方向:完全同向 90 / 基本同向 80 / 近似 70 / 有偏移 60 / 弱相关 50 / 错位 40;salary 薪资(按本地校准信息):达标偏上 85 / 高度重叠 75 / 部分重叠偏低 60 / 明显低于期望 30 / 期望未设或面议 60;education 学历:达标 90 / 高于要求 70 / 未要求 65 / 不达标 30;experience 经验(年限比例):≥要求 85 / 八成 75 / 六成 60 / 四成 45 / 不足 30 / 未要求 60;技能维同义/同族已覆盖不计缺口(Git 覆盖 GitHub/GitLab、FastAPI 覆盖 Flask/Django、TypeScript/React 覆盖 JavaScript);
+ - **技术栈错位不做一刀切**:仅「领域级」无关才算根本错位(如岗位核心在电子/硬件/嵌入式/通信基带/固件、简历只有纯软件开发);同属软件开发时语言/框架不同不算错位(Java↔Python、React↔Vue、前端↔后端、Go↔Java、C#↔Java),按需迁移/现学给 60-70;技能维 ≤25 时整体档位不得高于谨慎;信息不足给中性分 + 「未提供」依据,不用常识补齐;五维加权(34%/28%/14%/8%/6%)只参与总分档内微调、**不得改变档位**(唯一例外:技能维 ≤25 强制整体不高于谨慎);
- 严禁把招聘方在线/活跃状态或岗位发布时间当作匹配理由;
- **reason 用求职者视角的中性分析**:客观说明硬性条件是否匹配、技能命中与缺口、整体判定(推荐/匹配/谨慎/不推荐)。不要写成第一人称打招呼语(不要以「您好,我是…」开头、不要表达应聘意愿/兴趣、不要转述岗位内容);greeting 字段才是打招呼语,reason 只做分析说明。
## 事实边界
- 不为了贴合 JD 添加用户没做过的技能、职责、职级、项目或指标;
- 会 React 不等于具备 Vue 项目经验,可说明可迁移性,但状态仍按证据判断;
- 涉及时效性条件(岗位发布时间、招聘状态)时保留抓取日期,页面失效标记待确认。