ATS 简历生成/优化 Skill
任务目标
- 本 Skill 用于:帮助用户创建、优化和管理 ATS 友好的专业简历
- 能力包含:简历生成、简历优化、投递可接受性检查、版本管理、导出文件
- 触发条件:用户需要创建新简历、优化现有简历、对比或导出简历
前置准备
- 依赖说明:本 Skill 使用纯本地 Python 库处理文件解析与导出(无任何外部服务/网络依赖)
pdfplumber>=0.10.0 # 解析 PDF 简历 python-docx>=1.1.0 # 生成 DOCX reportlab>=4.0.0 # 生成 PDF(内置 CJK 字体,纯 pip;缺失时自动回退 HTML) - 目录准备:在当前工作目录创建版本管理目录
mkdir -p .resume-versions
核心原则
硬性规则
- 绝不编造用户经历/数据:缺失内容用
【占位符】并输出"最小补充清单" - ATS 友好:默认单栏、无表格、无文本框、无图标;使用标准段落标题
- 投递可接受性:诊断报告必须从 HR 首筛视角检查标题是否对口、年限/地点/联系方式/工作授权/到岗时间是否清楚,以及是否存在照片、年龄、婚育、政治面貌、期望薪资等目标市场禁忌信息
- 完整输出:必须同时输出 ResumeIR JSON、诊断报告、投递可接受性结论、改写后的简历正文;导出文件按需由本地脚本生成(见"导出文件")
- 用户输入成本最低化:优先支持"粘贴文本/上传文件",仅在关键字段缺失时追问
输出结构
所有操作必须输出以下三部分(导出文件按需生成):
- ResumeIR JSON:固定字段名,符合 ResumeIR.v1 Schema
- 诊断报告:问题清单 + 严重度 + 建议,符合 诊断报告规范
- 投递可接受性结论:
application_acceptability,回答"现在能不能投 / HR 首筛会卡在哪里 / 先补什么" - 改写后的简历正文:纯文本预览
- (可选)导出文件:用户需要 DOCX/PDF 时,调用
scripts/render_resume.py本地生成
操作步骤
模式选择
根据用户需求选择模式:
- 模式 1:生成简历(从零):帮助用户从零创建简历
- 模式 2:优化简历(已有简历):基于用户已有简历进行优化
所有模式都支持可选输入:
- JD(用户粘贴原文)
- 目标岗位:target_title / target_level(中国:P6/P7、资深/专家/主管;美国科技岗:Senior/Staff、L5/L6、SDE II 等)
- 语言:zh-CN / en-US
- 行业:互联网/AI/数据/研发/运营/销售/职能等
- 模板:template_id(默认 cn_ats_a4_v1)
模式 1:生成简历(从零)
步骤 1:信息收集
使用最少的追问帮助用户收集以下信息:
- 基本信息:姓名、电话、邮箱、城市
- 目标岗位:target_title、target_level、target_industry
- 最近 2-3 段工作经历:每段包含公司、岗位、起止时间、3 个成果要点
- 教育经历:学校、学位、专业、毕业时间
- 技能:主要技能(primary)和次要技能(secondary)
步骤 2:生成 ResumeIR
将收集的信息转换为 ResumeIR 格式(完整字段见 ResumeIR.v1 Schema),缺失字段用 【占位符】 填充。最小骨架示例:
{
"meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
"basics": {"name": "张三", "phone": "【占位符】", "email": "【占位符】", "target_title": "产品经理"},
"summary": "",
"skills": {"primary": ["需求分析", "数据分析"], "secondary": []},
"work": [{"company": "某公司", "title": "产品经理", "start": "2021-06", "end": "present",
"bullets": ["主导……,使……提升 20%"]}],
"projects": [],
"education": [{"school": "【占位符】", "degree": "本科", "start": "", "end": ""}]
}
步骤 3:输出第一版简历
- 输出 ResumeIR JSON
- 输出纯文本预览(按标准顺序排版)
- 生成诊断报告(重点检查完整性)
- 生成投递可接受性结论:
ready / needs_fix / do_not_submit,并列出 HR 首筛会卡住的 3 个以内问题 - 输出最小补充清单(最多 8 条问题)
步骤 4:保存版本
自动保存为第一个版本:version_name = "{target_title}-{date}-{lang}"
模式 2:优化简历(已有简历)
步骤 1:解析简历
- 如果用户上传文件(PDF/DOCX/TXT):调用
scripts/parse_resume.py提取文本 - 如果用户粘贴文本:直接使用文本内容
步骤 2:回显确认
向用户回显以下关键字段,确认解析准确性:
- 姓名
- 最近公司
- 最近岗位
- 工作年限估计
步骤 3:收集 JD(可选)
询问用户是否有目标 JD,如有则粘贴
步骤 4:生成 ResumeIR 和诊断报告
- 从简历文本中提取信息,生成 ResumeIR(缺失用
【占位符】) - 输出诊断报告(评分 0-100,问题列表 + 严重度 + 建议)
- 输出投递可接受性结论:标题匹配、首屏可读、联系方式、地点/到岗/工作授权、市场禁忌信息、岗位证据是否满足 HR 初筛
- 生成改写后的 ResumeIR
- 输出纯文本预览(用户需要文件时再调用 render_resume.py 导出)
步骤 5:保存版本
自动保存为第一个版本:version_name = "{target_title}-{date}-{lang}"
简历改写规范
工作经历 bullet 写法
每个 bullet 必须符合以下结构:
动作动词 + 任务 + 方法/工具 + 结果(指标)
示例:
- ❌ 错误:负责数据分析和报表生成
- ✅ 正确:使用 Python 和 SQL 分析用户行为数据,通过 A/B 测试优化产品功能,使日活用户增长 20%
量化要求
- 尽可能使用具体数字、百分比、金额等量化指标
- 无法量化时使用
【metric】占位符,并在补充清单中提示
JD 关键词覆盖(如果有 JD)
- 对 primary skills 做关键词覆盖(≤12 个)
- 在 bullets 中自然体现,避免生硬堆词
版本管理
保存版本
使用脚本保存当前 ResumeIR:
python3 scripts/version_manager.py save --version-name "产品经理-2024-01-15-zh-CN" --resume-ir "resume_ir.json"
命名版本
python3 scripts/version_manager.py rename --old-name "v1" --new-name "产品经理-2024-01-15-zh-CN"
对比版本
python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"
回滚版本
python3 scripts/version_manager.py rollback --version-name "v1"
导出文件
本地导出(纯 Python,无外部服务/网络)
当用户要求导出时,将当前 ResumeIR 存为 JSON 后调用脚本:
python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out
导出采用降级阶梯,任何环境都能产出可用文件:
- DOCX:python-docx 生成,单栏、标准标题、无表格/文本框,ATS 友好(推荐投递格式)
- PDF:reportlab + 内置 CJK 字体直出(纯 pip,无需系统字体/系统库);若未安装 reportlab,则自动改出打印优化 HTML,并提示"用浏览器打开后 Ctrl+P 另存为 PDF"
- 脚本不依赖任何远程服务,clone 到本地即可运行
可用样式
cn_ats_a4_v1(中文,默认)/en_ats_a4_v1(英文);实际中英文由 ResumeIR 的meta.language决定- 查看:
python3 scripts/render_resume.py --list-templates - 生成双语或英文简历时,请参考 references/en-resume-conventions.md(动作动词库、禁照片/年龄/婚姻、1 页优先、英文日期 MMM YYYY、量化优先)
- 面向美国科技岗(SWE/PM/DS):可直接参考 assets/examples/ 下的
en-US-software-engineer.json、en-US-product-manager.json、en-US-data-scientist.json三份可渲染样例(含 LinkedIn/GitHub、美国职级、p99/QPS/SLA 等美国科技度量);meta.language=en-US时渲染层自动套英文区块标题,并把 ISO 日期YYYY-MM自动转MMM YYYY
资源索引
必要脚本
- scripts/parse_resume.py:简历解析脚本,支持 PDF/DOCX/TXT/MD
- 参数:位置参数
<文件路径>(亦兼容--input-file <路径>) - 输出:JSON
{"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true};失败返回{"error": "...", "exit_code": N}
- 参数:位置参数
- scripts/version_manager.py:版本管理脚本
- 参数:
save/rename/compare/rollback+ 对应参数 - 输出:版本操作结果
- 参数:
- scripts/render_resume.py:本地导出脚本(DOCX/PDF/HTML,无外部服务)
- 参数:
--resume-ir <JSON 文件>、--output-formats docx,pdf,html、--output-dir、--file-name - 输出:DOCX / PDF(或 HTML 兜底)文件
- 参数:
领域参考
- references/resumeir-schema.md:ResumeIR.v1 Schema 定义(何时读取:生成或解析 ResumeIR 时)
- references/diagnostic-report-spec.md:诊断报告输出规范(何时读取:生成诊断报告时)
- references/en-resume-conventions.md:英文简历规范(何时读取:生成双语/英文简历时)
对话流程示例
场景 1:从零生成简历
用户:帮我生成一份简历
智能体:好的,让我帮你创建简历。请告诉我:
1. 你的目标岗位是什么?
2. 目前的工作情况(公司/岗位/工作年限)?
...
[收集信息]
智能体:已生成第一版简历,以下是我的分析:
[诊断报告]
最小补充清单(8 个问题):
1. 请补充你的具体联系方式(电话/邮箱)
2. 在第一段工作经历中,你提到的【metric】具体是多少?
...
场景 2:优化已有简历
用户:帮我优化这份简历 [上传文件]
智能体:[解析简历] 我从你的简历中提取到以下信息,请确认:
姓名:张三
最近公司:某科技公司
最近岗位:产品经理
工作年限:3-5 年
是否有目标 JD?如有请粘贴。
[如有 JD]
智能体:已完成优化,诊断报告如下:
总评分:72/100
问题列表:
[P0] 工作经历部分缺乏量化指标(严重)
建议:每个 bullet 应包含具体的数字或百分比
示例改写:"负责产品迭代" → "主导 5 个产品迭代,使用户留存率提升 15%"
...
缺口清单(JD 要求但简历缺失):
1. SQL 技能(JD 明确要求)
最小补充问题:你是否有使用 SQL 的经验?用于什么场景?
[输出改写后的简历]
场景 3:导出文件
用户:导出这份简历
智能体:正在生成 DOCX 和 PDF 文件... [调用 render_resume.py]
已生成文件:
- 张三-产品经理-2024-01-15.docx
- 张三-产品经理-2024-01-15.pdf
场景 4:版本对比
用户:对比 v1 和 v2
智能体:[调用 version_manager.py compare]
主要差异:
1. 工作经历 - 某科技公司(2019-2022)
v1: 负责产品设计和需求分析
v2: 主导 8 个产品迭代,通过数据驱动优化,使用户满意度提升 25%
2. 技能 - primary
v1: ["产品设计", "需求分析", "项目管理"]
v2: ["产品设计", "需求分析", "项目管理", "数据分析", "SQL", "A/B 测试"]
建议:v2 版本内容更完整,建议使用 v2 版本进行投递。
场景 5:回滚版本
用户:回滚到 v1
智能体:[调用 version_manager.py rollback]
已回滚到 v1 版本(产品经理-2024-01-10-zh-CN)
注意事项
失败兜底
- 简历解析失败:要求用户粘贴纯文本;或让用户用"教育/经历/项目"分段粘贴
- 信息缺失:用
【占位符】+ 最小补充清单(≤8 问) - JD 太长:只抽取岗位职责与任职要求两段,其余忽略
- 生成内容过泛:强制每条 bullet 含"结果/影响",否则标记为 P1 问题并给改写示例
ATS 友好性(约束对象为"生成/导出"的简历;解析用户上传文件时可正常读取其中的表格内容)
- 使用标准段落标题(工作经历、教育、技能等)
- 避免使用表格、文本框、图标、图片
- 默认单栏布局
- 使用标准字体(如 Arial、Calibri)
- 避免使用特殊字符和装饰性元素
质量保证
- 所有 bullet 必须以动作动词开头(如"主导"、"设计"、"实现"、"优化"等)
- 确保每个 bullet 都有明确的结果或影响
- 避免"负责"、"参与"等弱化词
- 优先使用主动语态,避免被动语态
使用示例
示例 1:从零生成简历(中英文)
- 功能说明:帮助用户从零创建中英文双语简历
- 执行方式:智能体对话 + 脚本保存版本
- 关键参数:language=zh-CN/en-US,target_title,target_level
- 步骤:
- 收集基本信息和经历
- 生成中文版 ResumeIR
- 生成英文版 ResumeIR(自动翻译)
- 保存为两个版本(中文版和英文版)
示例 2:基于 JD 优化简历
- 功能说明:针对特定 JD 优化简历内容
- 执行方式:智能体分析 + 脚本解析
- 关键参数:JD 文本,原简历文件
- 步骤:
- 解析原简历
- 分析 JD 要求
- 对比找出缺口
- 改写简历以覆盖 JD 关键词
- 输出对比和优化建议
示例 3:多版本管理
- 功能说明:创建多个简历版本,对比并选择最佳版本
- 执行方式:脚本管理版本
- 关键参数:version_name,resume_ir
- 步骤:
- 保存 v1 版本
- 修改后保存 v2 版本
- 对比 v1 和 v2
- 回滚到最佳版本
- 导出最终版本