Initial commit
This commit is contained in:
127
skills/jd-resume-tailor/SKILL.md
Executable file
127
skills/jd-resume-tailor/SKILL.md
Executable file
@@ -0,0 +1,127 @@
|
||||
---
|
||||
name: jd-resume-tailor
|
||||
description: 给定一份 JD 和一份现有简历,做"JD 拆解 + 简历定向改写"。拆 JD 抽出硬技能、软技能、加分项;对照简历做 gap 分析;产出针对该岗位重写后的简历,突出相关经验、补齐关键词缺口、并保留候选人真实经历不编造。当用户说"针对这个岗位 / 这家公司改简历""帮我对一下这个 JD""我想投这个职位你看怎么改""把这份简历针对 X 公司优化""做一份定向版简历",或同时给出 JD 文本 + 简历文件时,必须触发本 skill。**请勿用本 skill 做"从零写简历"**——那是 resume-builder 的事。
|
||||
---
|
||||
|
||||
# JD ⇄ Resume Tailor(JD 拆解 + 简历定向改写)
|
||||
|
||||
这个 skill 的边界很窄:**只解决"已有 JD + 已有简历,要改一份命中率最高的版本"**。
|
||||
|
||||
不做的事:
|
||||
- 写新简历(去 `resume-builder`)
|
||||
- 找方向 / 推荐岗位(去 `job-intent-tracker`)
|
||||
- 出面试题(去 `interview-prep`)
|
||||
|
||||
---
|
||||
|
||||
## 何时触发
|
||||
|
||||
强信号:
|
||||
- 用户给了 JD 链接 / JD 文本 + 一份简历 → **必触发**
|
||||
- "针对这个岗位帮我改简历"
|
||||
- "对照一下这个 JD"
|
||||
- "我想投 X 公司的 Y 岗,帮我看简历"
|
||||
- "做一份定向版"
|
||||
|
||||
弱信号(先确认):
|
||||
- 只给了 JD 没有简历 → 问"你的简历方便发我看一下吗?没有的话,我可以先帮你从零做一份(resume-builder)"
|
||||
- 只给了简历说"改简历" → 问"是针对哪个 JD 改?没有 JD 就用 resume-builder 通用优化"
|
||||
|
||||
---
|
||||
|
||||
## 工作流
|
||||
|
||||
### Step 1: 解析 JD
|
||||
|
||||
输入可能是:
|
||||
- 纯文本(用户粘贴)
|
||||
- 链接(**不要**自动 fetch,提醒用户复制 JD 文本进来;若用户授权 fetch,使用 web_fetch)
|
||||
- 截图(用 OCR / 视觉识别,让用户确认抽取结果)
|
||||
- doc/pdf 文件
|
||||
|
||||
调用脚本:
|
||||
|
||||
```bash
|
||||
python scripts/parse_jd.py --jd-file <jd.txt> --out jd_parsed.json
|
||||
```
|
||||
|
||||
脚本会从 JD 抽出:
|
||||
- **硬技能 must-have**("必须" / "要求" / "至少 X 年" 等强信号词后面的技能)
|
||||
- **硬技能 nice-to-have**("加分" / "优先" / "熟悉者优先" 等弱信号)
|
||||
- **软技能信号**(沟通 / 推动 / 跨部门 / 抗压 等)
|
||||
- **职责动词 + 对象**("负责 X" / "搭建 Y" / "推动 Z")
|
||||
- **特殊要求**(出差 / 学历 / 证书 / 语言 / 城市)
|
||||
|
||||
把结果展示给用户,让用户**确认 / 修正抽取是否准确**(关键 must-have 不能漏)。
|
||||
|
||||
### Step 2: 解析简历
|
||||
|
||||
输入:用户上传的简历文件(.pdf / .docx / .md / .txt)。
|
||||
|
||||
调用对应 skill 解析:
|
||||
- pdf → pdf skill
|
||||
- docx → docx skill
|
||||
|
||||
抽出:基本信息、教育、每段工作 / 项目经历的(公司、岗位、时间、职责 bullet)、技能列表。
|
||||
|
||||
### Step 3: Gap 分析
|
||||
|
||||
调用:
|
||||
|
||||
```bash
|
||||
python scripts/jd_gap.py --jd jd_parsed.json --resume resume.txt --out gap.md
|
||||
```
|
||||
|
||||
脚本输出三类清单:
|
||||
|
||||
1. **完美命中**(JD must-have 在简历里有明确证据)
|
||||
2. **隐性命中**(JD 要求 X,简历里有 X 的近义经验,但用词不一样 → 改写时可以"提一下")
|
||||
3. **真缺口**(JD 要求但简历完全没有)
|
||||
|
||||
对"真缺口"分两类:
|
||||
- **可补救**:简历里其实做过类似的事,只是没写出来 → 追问用户"你做过 X 吗?"
|
||||
- **不可补救**:用户确实没做过 → **不能编**,建议用户在 cover letter 或 summary 里诚实说明并强调 transferable skill
|
||||
|
||||
### Step 4: 定向改写
|
||||
|
||||
按以下原则重写简历:
|
||||
|
||||
**a. 重排经历顺序**:与 JD 最相关的工作 / 项目放最前(不改时间真实性,但可以把项目经历拆成两块"相关项目 / 其他项目")
|
||||
|
||||
**b. 重写每条 bullet**:
|
||||
- 把 JD 里的"职责动词"自然嵌入 bullet(如 JD 说"主导 ___ 系统设计",简历里就把"参与"改成"主导"——前提是用户确实主导了)
|
||||
- 数字保留并放大("用户 100 万"是好事,别藏起来)
|
||||
- 补 JD 关键词(如 JD 说"A/B 测试",但简历里写的是"灰度对比",改成"A/B 测试(灰度对比)")
|
||||
|
||||
**c. 重写 Summary**:用 2~3 行总结你为什么是这个岗位的合适人选,**直接对应 JD 的 must-have**
|
||||
|
||||
**d. 调整技能列表**:把 JD 提到的技能移到最前面(前提是真的会)
|
||||
|
||||
**e. 不改的事实**:
|
||||
- 公司名、岗位名、起止时间、学历 —— 一字不改
|
||||
- 项目规模、用户量、收入数据 —— 不能编,只能让用户确认后填准
|
||||
|
||||
### Step 5: 自检 + 报告
|
||||
|
||||
输出三个文件:
|
||||
1. `resume_tailored_<公司>_<岗位>.md`(改写后的简历)
|
||||
2. `gap_analysis.md`(gap 分析报告)
|
||||
3. 聊天里给一个 ATS 命中率对比:"改前 X% → 改后 Y%"
|
||||
|
||||
附:诚实提醒用户**哪些 bullet 是基于现有信息推测改写的**,让用户复核后再投。
|
||||
|
||||
---
|
||||
|
||||
## 反模式(不要做)
|
||||
|
||||
- ❌ 编造经历("加上一段你没做过的项目"——绝对禁止,哪怕用户要求)
|
||||
- ❌ 把 JD 的整段话直接粘进简历(很容易被 HR 一眼识破,且 ATS 反作弊会标记)
|
||||
- ❌ 关键词堆砌(在末尾塞一长串技能词凑命中率,HR 一眼能看出)
|
||||
- ❌ 把"参与"改成"主导"但没有问用户实际角色 → 必须先核实
|
||||
- ❌ 不给用户看 gap,自己默默改 → 用户会失去对简历的"理解"
|
||||
|
||||
## 与其他 skill 的协作
|
||||
|
||||
- 改完后用户说"帮我准备这家公司的面试" → 转 `interview-prep`,把 JD + 改写简历传过去
|
||||
- 用户说"我想知道还能投哪些类似的岗" → 转 `job-intent-tracker`
|
||||
- 用户说"我现在简历不太行,能不能整体重做" → 转 `resume-builder`
|
||||
Reference in New Issue
Block a user