CommunitySchreiben & Editierengithub.com

lonelydoctor/ats-resume-builder

Local-first ATS resume builder and exporter for ResumeIR JSON.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add lonelydoctor/ats-resume-builder

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Dokumentation

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
    

核心原则

硬性规则

  1. 绝不编造用户经历/数据:缺失内容用 【占位符】 并输出"最小补充清单"
  2. ATS 友好:默认单栏、无表格、无文本框、无图标;使用标准段落标题
  3. 投递可接受性:诊断报告必须从 HR 首筛视角检查标题是否对口、年限/地点/联系方式/工作授权/到岗时间是否清楚,以及是否存在照片、年龄、婚育、政治面貌、期望薪资等目标市场禁忌信息
  4. 完整输出:必须同时输出 ResumeIR JSON、诊断报告、投递可接受性结论、改写后的简历正文;导出文件按需由本地脚本生成(见"导出文件")
  5. 用户输入成本最低化:优先支持"粘贴文本/上传文件",仅在关键字段缺失时追问

输出结构

所有操作必须输出以下三部分(导出文件按需生成):

  1. ResumeIR JSON:固定字段名,符合 ResumeIR.v1 Schema
  2. 诊断报告:问题清单 + 严重度 + 建议,符合 诊断报告规范
  3. 投递可接受性结论application_acceptability,回答"现在能不能投 / HR 首筛会卡在哪里 / 先补什么"
  4. 改写后的简历正文:纯文本预览
  5. (可选)导出文件:用户需要 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.jsonen-US-product-manager.jsonen-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 兜底)文件

领域参考

对话流程示例

场景 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
  • 步骤:
    1. 收集基本信息和经历
    2. 生成中文版 ResumeIR
    3. 生成英文版 ResumeIR(自动翻译)
    4. 保存为两个版本(中文版和英文版)

示例 2:基于 JD 优化简历

  • 功能说明:针对特定 JD 优化简历内容
  • 执行方式:智能体分析 + 脚本解析
  • 关键参数:JD 文本,原简历文件
  • 步骤:
    1. 解析原简历
    2. 分析 JD 要求
    3. 对比找出缺口
    4. 改写简历以覆盖 JD 关键词
    5. 输出对比和优化建议

示例 3:多版本管理

  • 功能说明:创建多个简历版本,对比并选择最佳版本
  • 执行方式:脚本管理版本
  • 关键参数:version_name,resume_ir
  • 步骤:
    1. 保存 v1 版本
    2. 修改后保存 v2 版本
    3. 对比 v1 和 v2
    4. 回滚到最佳版本
    5. 导出最终版本

Verwandte Skills