构建简历生成器 Skill 的实践分享

Jul 19, 2026 分钟阅读

一周前我动手做了一个 Resume Generator Skill,一个能根据岗位 JD 自动定制简历、生成面试准备的 Codex 工具。这篇文章记录了我为什么做它、怎么设计的、以及从中沉淀的一些思考。

为什么需要这个东西

换工作的朋友都懂:每投一个岗位,简历就得改一遍。JD 要求不同,侧重点不同,关键词不同——硬改十几版之后,格式乱掉、版本混淆是常事。

市面上有简历工具,但大多只解决排版问题,不改内容。而真正花时间的恰恰是后者:读懂 JD → 匹配经历 → 用 STAR 法重新组织描述 → 嵌入目标关键词。这是一套可流程化的操作,恰好适合用 AI Agent 来跑。

所以目标很明确:丢一个 JD 进去,拿到三份不同模板的定制简历和一个面试准备包。

整体工作流

整个 Skill 的工作流分为两层:分析层(AI 执行)和执行层(脚本 + AI)。

分析层(每次为新 JD 重新执行)→ 执行层(填充模板 + 生成面试包)→ 自动复检

分析层:AI 做的那些事

Step 1 — 收集信息:读取用户提供的 JD,自动提取公司名和岗位名。同时从 config/profile.yaml 加载个人履历数据,从 photo/ 加载证件照。

Step 2 — JD 需求优先级:把 JD 要求拆成三层:P1 必备(学历、年限、核心技术栈)、P2 重要(强烈期望的技能和经验)、P3 加分(nice-to-have)。同时提取 ATS 关键词、软技能要求和行业背景。

Step 3 — 经验匹配:逐条对比 JD 要求和 profile 里的经历,输出四类结果:直接匹配项、可迁移匹配项、差距短板、独特优势(论文、专利、竞赛等 JD 没写但能加分的内容)。

Step 4 — 定制化简历内容生成:核心步骤。根据匹配结果重新输出每条经历描述,按 STAR 法则改写。格式统一为:[行动动词] + [做了什么] + [怎么做的] + [量化结果]。每条经历的侧重点和排序都根据目标 JD 动态调整。

Step 5 — ATS 优化:确保使用 JD 中的原词(JD 写"需求预测"就不改成"需求预估"),同时保留缩写和全称(LLM / Large Language Model)。标准标题格式,避免表格和图片。

执行层:落地生成

Step 6 — 选模板:从 15 个模板中选择最适合目标岗位的 3 份。

Step 7 — 生成 HTML 简历:将 AI 定制的经历描述写入 profile,对每个模板执行 fill_template.py,输出 3 份 HTML 文件,编号 1 为最推荐。

Step 8 — 生成面试准备包:AI 自动输出完整的面试准备文档,包括 BOSS 直聘打招呼消息、三个版本的自我介绍、技能匹配度清单、常见面试问题 10-15 个、反问问题、优势与差距分析等。

Step 9 — 自动复检:检查模板中是否有残留的占位文本(如"北京大学"、“字节跳动"等),确保每份输出都是定制化的。

15 个简历模板

模板是整个体验的最后一公里。每个模板都是自包含的 HTML 文件,内嵌 CSS 和 JavaScript,支持:

  • 在线编辑 — 双击文本即可修改,修改内容自动保存到浏览器 localStorage
  • PDF 导出 — 一键打印为 PDF,印刷样式已优化
  • HTML 下载 — 保存为独立 HTML 文件

目前已支持的 15 个模板:

1-sidebar-left 2-top-banner 3-timeline 4-magazine-columns 5-centered-classic 6-header-card 7-letterhead 8-metrics-first 9-full-dark 10-side-accent academic editorial modern-tech plain swiss-clean

默认三件套:2-top-banner(推荐首选)+ 1-sidebar-left + 5-centered-classic。

2-top-banner 为例,顶部深色横幅展示姓名、头衔和联系方式,正文按专业概述、工作经历、开源项目、技能矩阵、教育背景、证书的结构排列。深色 + 大地色系的配色克制而有质感。

技术实现细节

模板引擎

fill_template.py 是一个纯 Python 脚本,使用正则表达式替换模板中的占位标记。每个可编辑区域通过自定义属性 data-k 标识,脚本读取 YAML 配置中的对应字段进行填充。照片自动裁剪缩放为 120x160 像素并转为 base64 内嵌。

python scripts/fill_template.py <模板路径> config/profile.yaml \
    --company "字节跳动" --title "高级后端工程师"

配置文件

个人履历数据以 YAML 格式组织,分 basiceducationwork_experienceprojectsskillslanguages 等模块,结构清晰,便于版本管理。

面试准备包

面试准备文档是一个 Markdown 文件,包含求职场景所需的全部素材:打招呼消息、自我介绍(30秒/1分钟/3分钟版本)、技能匹配度清单、核心面试问题和回答思路、反问问题清单、优势与差距分析。面试前打开这个文件就够了。

一些经验沉淀

分析框架的选择

在设计过程中参考了 composiohq 的 tailored-resume-generator 项目。它的 JD 需求优先级拆解(P1/P2/P3)和经验匹配框架非常成熟,直接拿来用大大降低了设计成本。

STAR 法则的落地

经历描述的改写是最重要的环节。约束 AI 按固定格式输出是关键:[动词] + [动作] + [方法/工具] + [量化结果]。这样产出的每条经历都结构一致、信息密集,HR 扫一眼就能抓到重点。

不需要过度设计

这个 Skill 的核心价值不在于模板有多少个,而在于从 JD 到定制内容这条链路的自动化程度。模板够用就好,15 个覆盖面已经很广,再多就成了维护负担。

ATS 优化是容易被忽略的一环

很多简历工具不关注关键词的一致性,但 ATS 系统是严格按词匹配的。JD 写"需求预测"你写"需求预估”,可能就筛掉了。这个 Skill 在 Step 5 专门做了 ATS 优化,确保关键词高度对齐。

如何使用

在 Codex 中安装该 Skill 后,通过以下触发词调用:

“针对这个岗位帮我生成简历” “生成简历+面试准备” “帮我定制简历” “出 3 份简历”

准备一个 profile.yaml 和一寸证件照,然后丢一个 JD 链接或文本,剩下的交给 Skill 完成。

一些感触

做这个 Skill 最大的收获不是技术实现——YAML 解析、正则替换、HTML 模板这些都不难——而是在于把一件日常琐事系统化、流程化的过程。

从一个模糊的需求(“改简历好烦”)出发,逐步拆解成可执行的步骤,再到每一步该用什么工具、谁来做(AI vs 脚本)、产出什么格式。这种从抽象到具体的推演过程,本身就是很有价值的思维训练。

如果你也在找工作,或者对 AI Agent 的开发感兴趣,不妨试试这个思路:找个你熟悉的场景,把它拆成步骤,然后用工具和 AI 把重复劳动自动化掉。

— 2026 年 7 月