Resume Optimizer
概述
三阶段简历优化引擎:先全局评估(含JD匹配度雷达图)→ 再针对性改写 → 最后效果对比+导出。每次优化基于用户提供的真实简历和可选JD,绝不编造数据。以中文求职市场为主要场景,兼容英文简历。优化完成后可一键导出 ATS 兼容的 .docx 和跨平台 .pdf 文档,并生成量化效果对比报告让用户直观看到优化价值。
功能范围
- 阶段1·全局评估:先做简历绝对评估(量化密度/动词力度/结构/ATS风险),再做JD相对评估(关键词覆盖度+匹配度雷达图),让用户先看到全局短板
- 阶段2·简历改写:基于评估结果针对性改写——工作经验走STAR结构,项目经验走软性叙述(保留STAR要素但用自然语言组织),缺失数据时启动批量追问对话
- 阶段3·成果交付:六维评分前后对比报告 + Top3关键提升点 + 雷达图可视化 + .docx/.pdf 文档导出
伦理边界(必须严格遵守)
- 所有优化基于用户提供的真实经历。严禁编造数据、经历、技能、学历、公司名称
- 量化结果仅从用户已提供的数据中提取。缺失关键量化数据时,启动追问对话向用户询问真实数据,拿到后填充;不编造、不在终版简历中留
[建议补充]等占位符。详见"数据补全追问协议" - 关键词优化以自然融入为目标,拒绝堆砌(单条bullet ≤3个关键词)
- 如JD含年龄、性别、籍贯、婚姻状况、民族、宗教信仰、外貌要求任一敏感条件,标注提醒但不用于优化
- 如JD含"985/211"等硬性学历门槛且用户不满足,明确告知但不建议编造
路由决策树
收到用户请求后,按以下顺序判断:
用户是否提供了简历文件/文本?
├── 否 → 请用户提供简历(文件或粘贴文本均可)
└── 是 → 进行入参校验(≥200字且含工作/项目经历相关关键词)
├── 不通过 → 提示用户:内容过短或不像简历,请确认
└── 通过
├── 用户提供了JD?→ 是 → 自动进入三阶段完整流程
│ 阶段1:全局评估(绝对评估 + JD相对评估 + 雷达图)
│ 阶段2:简历改写(工作经验STAR + 项目经验软性叙述 + JD定向 + ATS)
│ 阶段3:成果交付(前后对比报告 + 文档导出)
└── 否 → 进入两阶段流程
阶段1:简历绝对评估
阶段2:简历改写(工作经验STAR + 项目经验软性叙述 + ATS)
阶段3:成果交付(前后对比报告 + 文档导出)
v1.5.0关键设计:用户提供了JD时,先执行阶段1的JD相对评估(含雷达图),让用户看到全局短板,再开始阶段2的针对性改写——这避免了"边改边补 JD关键词"的盲目性,让每次改写都精准锚定短板。
输入与文件处理
支持的输入形式
- 纯文本粘贴
.docx/.pdf/.txt/.md文件- 图片(截图/拍照)—— 先 OCR 提取文字,OCR 失败则请用户提供文本版
文件读取方式
.txt/.md:直接读取全文.docx:优先用python-docx提取段落和表格文本;如不可用,用unzip解压后读word/document.xml并剥离标签.pdf:优先用pdfplumber或pymupdf提取文本;扫描版 PDF(无文本层)走 OCR 流程- 图片:用
pytesseract(中文需chi_sim语言包)或调用平台多模态能力提取文字
提取后展示给用户确认:"已从文件提取简历内容如下,确认无误后开始评估。"
使用
完整端到端工作流示例
场景:用户提供了简历 + 猎聘CHO岗位JD
[用户] 这是我的简历,目标岗位是猎聘上看到的CHO,JD也附上了。
[Agent 阶段1·全局评估]
1. 简历绝对评估(模块1A:量化密度0%/动词力度35/结构60分/ATS 72%)
2. JD相对评估(模块1B:解析JD → 10个核心关键词 → 关键词-证据映射表)
3. 生成JD匹配度雷达图(六个维度展示简历相对JD的覆盖度)
4. 评估报告:综合匹配度约68%,最大gap是缺"大制造100亿上市CHO"经验
→ 让用户看到全局短板
→ 询问用户是否基于评估结果开始改写
[用户] 继续
[Agent 阶段2·简历改写]
2a. 工作经验STAR改写(基于评估短板——动词力度弱、量化缺失)
→ 标记所有缺失的量化数据点
2b. 项目经验软性叙述改写(避免"五维追问+bullet结构"的工程化感)
→ 标记缺失的角色/成果信息
2c. 汇总全部缺失数据 → 一次性发起批量追问(数据补全追问协议)
[Agent 追问示例]
"我已完成初步改写。为让简历更有说服力,需要补充以下真实数据:
1. 电商业务-会员体系搭建:覆盖了多少付费用户?付费转化率从X提升到Y?
2. 推荐系统AB实验:你在实验中是产品/算法/工程哪个角色?样本量多大?核心指标提升多少?
3. 跨境出海项目:首月GMV/新用户增长数据?
能提供的提供,记不清的告诉我,我用定性表述处理。"
[用户] 1.覆盖30万付费会员,付费率从8%提到14% 2.产品负责人,样本量50万,CTR+12% 3.记不清了
[Agent]
2d. 用真实数据填充 → 记不清的改用定性表述
→ 针对阶段1雷达图短板做JD定向优化
→ 18项ATS检查清单核对
→ 输出无占位符的最终优化简历 → 询问用户是否满意
[用户] 满意
[Agent 阶段3·成果交付]
3a. 优化效果对比报告(六维评分前后对比表 + 综合分提升 + Top3提升点 + 雷达图)
3b. 文档导出(.docx + .pdf)→ 告知文件路径
关键参数的设计原因
| 参数 | 值 | 原因 |
|---|---|---|
| bullet ≤50中文字 | 50字 | 基于中文阅读眼动研究,50字内可一次注视完成理解;超过则需扫读两次,ATS解析时也容易截断 |
| 高杠杆区域只改5个 | 5个 | 15-20分钟即可完成的轻量优化量。全量重写耗时且容易过度修改失去真实感;JD定向的核心是"对齐"而非"重写" |
| 关键词脊柱8-12个 | 8-12 | 低于8个覆盖不足,高于12个则包含噪音关键词(JD中偶尔提及的非核心词),稀释真正重要的匹配信号 |
| 单条bullet ≤3个关键词 | 3个 | 超过3个关键词堆砌会触发ATS的"keyword stuffing"检测(部分平台会降权),且人类阅读体验断崖式下降 |
| 雷达图六维度 | 6维 | 平衡信息密度与可读性。少于5维过于简单;多于7维读者难以快速识别短板 |
中间格式约定
简历在模块间传递时统一使用以下 Markdown 格式。中文简历用中文标准标题(与ATS检查项#7一致),英文简历用英文标题:
中文版:
# [姓名] - [目标岗位]
## 个人简介
[2-3句职业概述]
## 工作经验
### [公司名] | [职位] | [起止时间]
- [STAR优化后的bullet 1]
- [STAR优化后的bullet 2]
## 项目经验
### [项目名] | [角色] | [时间]
[2-4句软性叙述段落,保留STAR要素]
## 技能
[技能1, 技能2, 技能3](按类别分组:编程语言 / 框架工具 / 领域知识)
## 教育背景
[学校] | [学位] | [专业] | [时间]
英文版:使用 Summary / Experience / Projects / Skills / Education。
Before/After 展示模板
每条改写使用固定模板:
**原文**:[原始描述]
**优化后**:[改写结果]
**改动说明**:[一句话说明改了什么:补STAR要素 / 注入量化 / 动词升级 / 关键词对齐]
阶段1:全局评估
v1.5.0核心改进:把"评估"前移,作为整个优化流程的起点。用户先看到简历的绝对状态和相对于目标JD的匹配度雷达图,再决定改写方向。
模块1A:简历绝对评估
对简历做四项评估,输出诊断报告。同时必须缓存原始数据(总bullet数、含数字bullet数、强动词数、缺失模块数、ATS风险数等)供阶段3对比报告使用。
| 维度 | 评估标准 | 输出 |
|---|---|---|
| 量化密度 | 含数字(%/$/倍/人/天)的bullet占比 | 百分比 + "偏低/正常/优秀" |
| 动词力度 | 是否以强动词开头(主导/设计/落地/重构/优化)vs 弱动词(参与/负责/协助) | 弱动词占比 + 具体问题行 |
| 结构完整性 | 是否缺失个人简介/工作经验/项目经验/技能/教育背景任一核心模块 | 缺失模块列表 |
| ATS风险 | 是否含表格/图片/特殊符号/非标准章节标题/多栏布局 | 风险点列表 |
缓存原始数据(供阶段3对比):
original_total_bullets、original_quantified_bullets、original_strong_verb_bullets、original_weak_verb_countoriginal_modules_count、original_ats_risks、original_jd_keywords_covered(提供JD时)
模块1B:JD相对评估与匹配度雷达图
v1.5.0新增:把原来"模块2的JD定向"中的解析部分前置,让用户先看到简历相对于JD的覆盖度雷达图。
1B-1. JD解析
从目标JD中提取关键词并分类,详见 references/jd-tailoring.md。
输出关键词脊柱(8-12个核心词)和关键词-证据映射表:
| 关键词 | 类型 | 简历中已有证据 | 需补充/调整 |
|--------|------|-------------|------------|
| 用户增长 | Functional | "粉丝增长至3.2万" | 补充增长策略细节 |
| SQL | Hard | 无 | 如在技能区有则抽取,否则标红 |
| 跨部门协作 | Functional | "协调市场、产品、运营" | 已有,可前置强调 |
1B-2. 六维度匹配度雷达图
关键产出:用雷达图直观展示简历相对JD的覆盖度。修改后用阶段2的优化行动填满短板区域。
六个评估维度(与阶段3的效果对比报告共用维度,但评估角度不同——这里评估"原始简历",阶段3评估"优化后简历"):
| 维度 | 含义 | 计算方式 |
|---|---|---|
| 关键词覆盖 | JD核心词在简历中的覆盖度 | 已覆盖数 ÷ 关键词脊柱总数 × 100 |
| 经验对齐 | 简历经验类型与JD要求的匹配度 | 直接匹配经历数 ÷ JD核心职责数 × 100 |
| 量化成果 | 简历中量化数据的密度 | 含数字bullet占比(与1A同口径) |
| 技能匹配 | JD要求的硬技能在简历技能区的覆盖 | 已具备技能 ÷ JD硬技能数 × 100 |
| 资历达标 | 工作年限/职级/行业经验与JD硬性要求的差距 | 满足的硬性要求数 ÷ 总硬性要求数 × 100 |
| 关键词位置 | 关键词在简历中的突出度(前置/显著位置加分) | 前置关键词数 ÷ 关键词脊柱总数 × 100 |
雷达图渲染规范:
- 修改前用浅色填充(橙色 #F39C12,30%透明度)
- 修改后用深色填充(绿色 #27AE60,30%透明度)
- 六个维度按等角分布
- 数值轴范围 0-100,便于对比
- 标签清晰可读
示例输出:
## 简历相对JD的匹配度评估
### 关键词覆盖
- 关键词脊柱:10个核心词
- 已覆盖:6个(60%)
- 弱覆盖:3个
- 未覆盖:1个
### 经验对齐
- JD核心职责:5项
- 直接匹配:2项(用户增长、SQL分析)
- 可迁移:2项
- 需补充:1项
### 综合匹配度
约58%(基于六维加权平均)
最大短板:技能匹配(仅2/6硬技能满足)
雷达图的具体设计规范和可视化代码模板见
references/jd-tailoring.md的"雷达图渲染规范"章节
1B-3. 评估报告输出与决策点
阶段1完成后,输出:
- 绝对评估四维表(模块1A)
- JD匹配度雷达图(模块1B,可视化)
- 关键词-证据映射表(模块1B)
- 综合匹配度百分比 + Top 3 短板
- 询问用户是否开始阶段2改写——明确告知"基于以上短板,我们将在阶段2针对性改写"
阶段2:简历改写
改写顺序:工作经验STAR改写 → 项目经验软性叙述 → 数据补全追问 → JD定向优化 → ATS检查。前两步初步改写 + 标记缺失数据 → 第三步批量追问 → 第四步用真实数据填充 + 针对性JD补强 → 第五步ATS合规。
模块2A:工作经验STAR改写
逐条处理工作经验中的每条bullet(项目经验单独走模块2B软性叙述):
改写四步法:
- 提取:从原始描述中识别已有的S/T/A/R要素
- 补全:对缺失要素启动追问对话(详见"数据补全追问协议"),批量收集真实量化数据后填充,不留占位符
- 重构:按"强动词 + 具体行动 + 量化结果 + 关键词"顺序重组
- 校准:确保单条bullet ≤50中文字(英文≤25词),至少含1个量化指标
中文强动词库(按场景):
| 场景 | 推荐动词 |
|---|---|
| 从0到1 | 创建、搭建、建立、启动、发起 |
| 优化改进 | 重构、优化、精简、缩短、降低 |
| 主导推进 | 主导、牵头、推动、协调、统筹 |
| 技术实现 | 设计、开发、实现、集成、部署 |
| 数据分析 | 分析、挖掘、建模、追踪、归因 |
| 增长结果 | 提升、增长、扩大、达成、突破 |
完整中英文动词库、弱动词替换对照和 Before/After 示例见
references/star-methodology.md
改写示例:
**原文**:负责公司公众号运营,发布文章并维护粉丝
**优化后**:主导公司公众号从0到1搭建,6个月内输出原创内容120+篇,粉丝增长至3.2万(月均净增5000+),平均阅读量提升至行业Top 20%
**改动说明**:补STAR全要素,动词从"负责"升级为"主导",注入量化结果,补充规模和排名
模块2B:项目经验软性叙述改写
v1.5.0关键改进:从v1.4.1的"五维追问+bullet结构"改为"软性叙述段落"——保留STAR要素但用自然语言组织,避免"在填表"的工程化感。
核心设计思想
为什么改:v1.4.1的"五维追问法+S/T/A/R四要素+五种项目bullet模板"虽然完整,但呈现给用户和HR时显得生硬——读者一眼能看出"在按模板套用",反而降低简历的可信度和可读性。
软性化原则:
- 从bullet改为段落:项目经验用2-4句叙述段落,每个项目一段,不用bullet列表
- 隐性结构替代显性标签:S/T/A/R要素保留但用自然语言组织,不出现"S背景""R角色"等标签
- 故事化展开:背景→角色→行动→成果按叙事流自然过渡
- 数据嵌入但不让数据喧宾夺主:量化数据埋在叙述中,不堆砌
- 保留STAR的"硬"内核:所有要素不能丢,只是表达方式更软
软性叙述的段落结构
每段项目用2-4句话展开,建议四句结构:
第一句:项目背景(什么项目、多大规模、为什么启动)
第二句:个人角色(你在这个项目中的位置、带多少人、决策权)
第三句:关键行动(用了什么方法、克服了什么难点)
第四句:项目成果(量化结果+对业务/团队的长期影响)
Before/After 对比
v1.4.1生硬版(用五维追问+bullet结构):
**原文**:E-HR系统导入项目(金蝶:项目经理)
**优化后(v1.4.1)**:
- 项目背景:500人公司人力数字化转型
- 角色:项目经理,统筹产研+业务+金蝶三方共15人
- 目标:6个月完成全量上线,线上化率达95%
- 行动:需求调研→定制开发→分模块上线→全员培训
- 成果:覆盖中东区5国1200+员工,线上化率从30%提升至95%
v1.5.0软性版(用叙述段落):
**原文**:E-HR系统导入项目(金蝶:项目经理)
**优化后(v1.5.0)**:
作为项目经理主导了金蝶E-HR系统在中东区的导入项目,跨国产研、业务方与金蝶实施顾问三方共计15人协同,6个月内完成从需求调研、定制开发到分模块上线的全流程,最终覆盖5国1200+员工,区域人力流程线上化率从30%提升至95%。
软性版的提升:
- 5个bullet → 1段流畅叙述,视觉上不"工程化"
- S/T/A/R要素全部保留(背景:500人公司+5国1200人 / 角色:项目经理+15人 / 行动:全流程+三方协同 / 成果:30%→95%)
- 读起来像"项目故事"而不是"项目报告"
- 数据嵌入自然(1200+员工、30%→95%)不堆砌
软性叙述的五种项目类型模板
| 项目类型 | 软性叙述模板 | 适用场景 |
|---|---|---|
| 系统实施类 | 作为[角色]主导[系统名]在[范围]的导入,[协作方式]下[N人]协同[N月]完成[流程],覆盖[规模],[核心指标]从[X]提升至[Y] | E-HR/OA/ERP/CRM等系统实施 |
| 组织变革类 | 面对[业务痛点],作为[角色]引入[方法论]开展[诊断/重塑],[具体行动],最终[组织/效率变化] | 组织重建、流程再造、架构调整 |
| 体系搭建类 | 从0到1搭建[体系名称],作为[角色][设计/主导][核心要素],[落地方式]覆盖[范围],建立[长期机制] | 薪酬绩效/人才发展/任职资格体系 |
| 增长运营类 | 针对[业务目标],作为[角色][关键行动],[N月]内[核心指标]从[X]提升至[Y],形成[可复用方法论] | 用户增长/营收提升/产品迭代 |
| 资本运作类 | 配合[资本事件],作为[角色]主导[人力相关工作],[关键行动],[成果]对[业务/合规]的支撑 | 股权激励/并购整合/IPO人力准备 |
详细的项目类型模板、完整示例库、软性化改写技巧见
references/star-methodology.md的"项目经验软性叙述专章"
软性化改写的执行要点
- 保留所有数据:软性化≠弱化数据,相反要让数据"自然融入"叙述流
- 保留"角色"显式表达:用"作为项目经理""主导""负责"等显式词标识角色(虽然"主导"已偏硬,但比"角色:项目经理"标签更自然)
- 避免机械连接词:"首先/其次/最后""背景:""成果:"等连接词让叙述生硬
- 让数据服务于故事:数字不能是裸数据,要有语境(如"覆盖中东区5国1200+员工"比"覆盖1200人"更有故事感)
- 长度控制:单个项目段落2-4句、80-150字为佳,过长则失去精炼感
- 项目bullet优先于项目段落:如果用户简历原来是bullet形式且特别简短,可以保留bullet但用软化语言(而不是段段落)
改写示例
**原文**:负责公司公众号运营,发布文章并维护粉丝
**优化后**:主导公司公众号从0到1搭建,6个月内输出原创内容120+篇,粉丝增长至3.2万(月均净增5000+),平均阅读量提升至行业Top 20%
**改动说明**:补STAR全要素,动词从"负责"升级为"主导",注入量化结果,补充规模和排名
模块2C:数据补全追问协议
STAR改写和项目叙述过程中,缺失关键量化数据时必须启动追问对话,不留占位符直接输出。
触发条件
改写任一bullet/段落时,以下数据缺失则触发追问:
- 规模类:团队人数、覆盖员工数、涉及部门数、管理预算、项目周期
- 效果类:提升幅度(%)、降低幅度(%)、达成率、转化率、线上化率
- 对比类:优化前基线、行业排名、同业对比
- 产出类:交付数量、专利数、论文数、培养人数
追问方式:批量收集,不逐条打断
错误做法:每改一条bullet就停下来问一次,打断用户节奏 正确做法:先完成所有工作经验和项目经验的初步改写 → 汇总所有缺失数据点 → 一次性向用户发起批量追问
追问对话模板
我已完成简历的初步改写(工作经验STAR + 项目经验软性叙述)。为了让简历更有说服力,需要您补充以下真实数据(能提供的提供,记不清的标注"记不清",我会用定性表述替代):
【工作经验】
1. SaaS产品经理 - 增长模块:DAU/MAU从X增长到Y?付费转化率是多少?
2. 跨境电商 - 用户增长:拉新成本CAC多少?D7/D30留存率?
3. 内容平台 - 社区运营:UGC日均产出量?社区月活规模?
【项目经验】
4. AB实验框架搭建:累计跑了多少次实验?核心业务指标提升多少?
5. 会员体系重构项目:会员付费率从X提升到Y?ARPU变化幅度?
请逐条回复,或直接告诉我"都记不清了"我用定性表述处理。
用户回应处理
| 用户回应 | 处理方式 | 示例 |
|---|---|---|
| 提供具体数据 | 直接填充 | "覆盖1500人" → "覆盖1500名员工" |
| 提供范围值 | 用范围填充 | "大概30-40人" → "统筹30-40人团队" |
| 说"记不清了" | 改用定性表述,不编造数字 | "记不清了" → "统筹产研+业务+供应商三方团队" |
| 明确拒绝提供 | 同上,改用定性表述 | 同上 |
| 提供"大概很多" | 转化为定性量级词 | "大概很多" → "覆盖全员" / "大规模" |
禁止行为
- ❌ 在终版简历中保留
[建议补充]、[补充:XX]、[XX人]等占位符 - ❌ 未追问就自行编造数字(如"覆盖500人")
- ❌ 逐条追问打断用户节奏(应批量收集)
- ❌ 用户说"记不清"后仍反复追问同一数据点
追问与模块2B项目经验软性化的联动
项目经验软性叙述(模块2B)与数据补全追问(本协议)合并执行——在项目经验改写阶段同步收集缺失数据,不重复发起两轮追问。执行顺序:
- 先做工作经验STAR改写(模块2A)→ 标记缺失数据
- 再做项目经验软性叙述(模块2B)→ 标记缺失数据
- 汇总全部缺失数据 → 一次性发起批量追问
- 拿到用户回应后填充 → 输出无占位符的终版简历
模块2D:JD定向优化
v1.5.0位置调整:JD定向从原来的模块2(独立模块)调整为模块2D(阶段2的最后一个子模块),基于阶段1的雷达图短板做针对性优化。
高杠杆区域定向改写
只改5个区域(15-20分钟工作量),不是全量重写。每个区域的改写都锚定阶段1雷达图的对应短板:
- 标题/个人简介:注入目标岗位名称和top3关键词
- 技能区:按JD关键词优先级重排,补充缺失但真实掌握的技能
- 最近岗位前3条bullet:重排顺序让最匹配的经历前置,关键词自然融入
- 一条匹配的项目经验:选最贴合JD的项目前置
- 教育/证书:如JD有硬性要求,确保格式标准且关键词可解析
改完后输出完整的JD对齐版简历 + 匹配度评估:
**整体匹配度**:约78%(估算,基于关键词覆盖率)
**硬性要求满足**:5/6(缺失:Spark)
**经验对齐度**:核心经验2/3项直接匹配,1项可迁移
**需注意**:JD要求"3年以上团队管理",你当前经历侧重个人贡献,建议补充管理相关描述
匹配度公式权重(L1×50% + L2×35% + L3×15%)基于行业经验设定,非实证数据,仅作参考。
与阶段1雷达图的关联
阶段1输出的雷达图显示了"哪个维度最弱"(如关键词覆盖60%、经验对齐40%、技能匹配33%),模块2D的改写就针对这些短板做加强:
- 关键词覆盖弱 → 改写个人简介和最近岗位bullet,把缺失关键词自然融入
- 经验对齐弱 → 把可迁移经验从工作经历末尾前置,调整bullet侧重JD核心能力
- 技能匹配弱 → 在技能区补充JD硬技能(仅限用户真实具备的)
模块2E:ATS兼容性检查
18项检查清单
| # | 检查项 | 通过条件 |
|---|---|---|
| 1 | 字体 | 使用标准字体(中文:宋体/黑体/微软雅黑;英文:Arial/Calibri/Georgia) |
| 2 | 字号 | 正文10-12pt,标题14-16pt |
| 3 | 布局 | 单栏布局,无多栏混排 |
| 4 | 表格 | 无表格用于布局 |
| 5 | 图片 | 无照片/logo/图表/二维码 |
| 6 | 特殊符号 | 无★♦→●等装饰符号 |
| 7 | 章节标题 | 使用标准标题(工作经验、教育背景、项目经验、技能、个人信息) |
| 8 | 文件格式 | 优先.docx;若要求PDF则用PDF(检查确认) |
| 9 | 页眉页脚 | 无重要信息(联系方式等)放在页眉页脚 |
| 10 | 文本框 | 无文本框包裹内容 |
| 11 | 超链接 | 无超链接格式,URL使用纯文本 |
| 12 | 颜色 | 黑色文字,无彩色背景/底色 |
| 13 | 列对齐 | 日期右对齐可以用空格/tab,不用表格 |
| 14 | 联系方式 | 电话+邮箱在一行,不含在图片中 |
| 15 | 文件命名 | 格式:姓名_岗位_简历.pdf(非"简历.pdf") |
| 16 | 英文大小写 | 技能/工具名保持标准大小写(Python非PYTHON) |
| 17 | 空白字符 | 无隐藏的白色关键词(会被ATS检测并拉黑) |
| 18 | 底部信息 | 无页脚签名/页码等可能影响解析的内容 |
完整检查项和修复方案见
references/ats-optimization.md
关键词覆盖度热力图
对模块1B提取的关键词脊柱做逐一检查,输出三类标记:
- ✅ 已覆盖(关键词在简历中出现且位置合理)
- ⚠️ 弱覆盖(出现但位置不突出,建议前置)
- ❌ 未覆盖(缺失,如用户真实具备则补充)
阶段3:成果交付
模块3A:优化效果对比报告
v1.5.0增强:阶段3的对比报告与阶段1的JD雷达图共享同一组六维度(量化密度/动词力度/STAR完整度/结构完整性/ATS兼容性/JD匹配度),形成"前后对比"的完整闭环。
六维评分模型
| 维度 | 权重 | 计算方式 | 数据来源 |
|---|---|---|---|
| 量化密度 | 20% | 含数字(%)的bullet数 ÷ 总bullet数 × 100 | 模块1A诊断 |
| 动词力度 | 15% | 强动词开头bullet数 ÷ 总bullet数 × 100 | 模块1A诊断 |
| STAR完整度 | 20% | 四要素(S/T/A/R)完整的bullet数 ÷ 总bullet数 × 100 | 模块2A/2B改写 |
| 结构完整性 | 15% | 5大核心模块齐全数 ÷ 5 × 100 | 模块1A诊断 |
| ATS兼容性 | 15% | 18项检查通过数 ÷ 18 × 100 | 模块2E检查 |
| JD匹配度 | 15% | 关键词脊柱已覆盖数 ÷ 关键词总数 × 100 | 模块1B+2D |
无JD场景:JD匹配度维度不计入,其15%权重均分到其余5个维度(各+3%)。 权重说明:基于行业经验设定,非实证数据。量化密度和STAR完整度权重最高(各20%),因为这两项是简历说服力的核心驱动因素。
综合分 = Σ(维度分 × 权重),满分为100。
评分采集
修改前分数来自模块1A诊断阶段记录的原始简历指标;修改后分数来自优化完成后的终版简历重新评估。关键:模块1A诊断时必须记录原始数据(总bullet数、含数字bullet数、强动词bullet数等),供阶段3对比使用。
报告格式
## 简历优化效果对比报告
### 综合评分
修改前:XX分 → 修改后:XX分(+XX分,提升XX%)
### 六维评分对比
| 维度 | 权重 | 修改前 | 修改后 | 提升 |
|------|------|--------|--------|------|
| 量化密度 | 20% | 0 | 85 | +85 |
| 动词力度 | 15% | 55 | 90 | +35 |
| STAR完整度 | 20% | 20 | 80 | +60 |
| 结构完整性 | 15% | 60 | 100 | +40 |
| ATS兼容性 | 15% | 65 | 100 | +35 |
| JD匹配度 | 15% | 50 | 80 | +30 |
| **综合分** | 100% | **42** | **88** | **+46** |
### 关键提升点(Top 3)
1. [维度名]从XX提升至XX——[一句话说明优化动作带来的变化]
2. ...
3. ...
### 仍可继续优化建议
1. [具体建议 + 预期提升方向]
2. ...
关键提升点撰写要点
- 每条必须关联到具体的优化动作(数据补全追问 / STAR改写 / 项目软性叙述 / JD定向 / ATS修复),让用户知道提升来自哪里
- 优先展示提升幅度最大的维度
- 如某维度提升不明显(<10分),不强行包装,如实说明原因
可选可视化
如执行环境支持可视化输出,建议生成雷达图直观展示六维前后对比——修改前用浅色填充,修改后用深色填充,叠加在同一张图上。雷达图比纯表格更能让用户一眼看到优化效果的全貌。
v1.5.0增强:阶段3的对比雷达图与阶段1的JD匹配度雷达图共享视觉语言(相同的维度标签、相似的配色方案),让用户感受到"从评估到对比"的完整闭环。
执行时机
- 最早可生成时机:模块2E(ATS检查)完成后——此时所有优化已完成,六维数据齐全
- 推荐时机:模块3B(文档导出)完成后,作为整个优化流程的收尾报告
- 模块1A诊断时必须缓存原始简历的评分数据,否则无法做前后对比
模块3B:文档导出
优化完成后,询问用户是否需要导出为 .docx 和/或 .pdf 文件。
导出流程
- 将最终优化版简历整理为中间格式 Markdown(见"中间格式约定"章节)
- 写入临时文件(如
resume_optimized.md) - 调用
scripts/export_resume.py生成 .docx 和 .pdf - 将生成的文件路径告知用户
脚本调用方式
# 安装依赖(首次使用)
pip install python-docx reportlab
# 同时生成 .docx 和 .pdf(默认)
python scripts/export_resume.py resume_optimized.md -o <output_dir> -n <文件名>
# 仅生成 .docx
python scripts/export_resume.py resume_optimized.md -o <output_dir> -n <文件名> -f docx
# 仅生成 .pdf
python scripts/export_resume.py resume_optimized.md -o <output_dir> -n <文件名> -f pdf
脚本源码和详细说明见
scripts/export_resume.py
字体与跨平台兼容策略
.docx 文件:
- 正文字体指定为宋体(SimSun),标题字体为黑体(SimHei)——这是 ATS 平台标准字体
- Windows:原生渲染,ATS 完美解析
- macOS:Word/LibreOffice 自动替换为 STSong/STHeiti,显示正常
- 页面尺寸:A4(210mm × 297mm)
.pdf 文件(双路线保障):
| 路线 | 工具 | 字体处理 | 适用场景 |
|---|---|---|---|
| 主路线 | LibreOffice headless | 自动替换+嵌入(macOS: 宋体→STSong/Arial Unicode MS) | 系统已安装 LibreOffice |
| 备用路线 | reportlab | 注册系统 TTF 字体并嵌入(macOS: STSongti SC + STHeiti) | 无 LibreOffice 环境 |
两条路线均将字体子集嵌入 PDF(FontFile2 标记),确保:
- Windows / macOS / Linux / iOS / Android 上中文均正确显示,不依赖目标系统字体
- 嵌入的是字体子集(仅含简历中使用的字符),文件体积可控(通常 80-130KB)
- 符合 PDF/A 字体嵌入规范,主流 PDF 阅读器(Adobe Reader、Foxit、浏览器内置、WPS)均兼容
导出后的检查清单
生成文件后,向用户确认以下事项:
- 文件名格式:
姓名_目标岗位_简历.docx(符合 ATS 检查项 #15) - .docx 可在 Word/WPS 中正常打开,中文显示正确
- .pdf 可在 Adobe Reader / 浏览器 / 手机上正常打开,中文无乱码
- 页数符合预期(5年以下经验≤1页,5-10年≤2页)
- 如需投递要求 PDF 的岗位,使用 .pdf;否则优先 .docx(ATS 解析更准确)
产出物存放
- 阶段1评估报告直接在对话中呈现(含雷达图可视化)
- 阶段2改写结果用 Before/After 模板格式
- 阶段3对比报告含六维评分表和雷达图
- 如用户要求导出文件:
- Markdown 版写入
resume_optimized.md(当前工作目录或用户指定路径) - .docx / .pdf 版通过
scripts/export_resume.py生成,输出到同一目录 - 文件名优先使用
姓名_目标岗位_简历格式,如用户指定其他名称则用用户指定的
- Markdown 版写入
- 诊断报告、关键词映射表、ATS 检查结果、优化效果对比报告等中间产物不强制落盘,除非用户要求
边界场景处理
详细容错场景和边界处理(入参异常、JD解析异常、用户交互异常、结果异常、跨行业/特殊场景、多语言混合等 21 个场景)见
references/edge-cases.md
核心原则速查:
- 入参过短/非简历:先确认再处理,不强行优化
- JD 过短/关键词不足:降级为仅模块1,告知用户
- 用户拒绝/无法提供量化数据:启动追问对话批量收集(数据补全追问协议);用户说"记不清"或拒绝时,改用定性表述(如"覆盖全员""驱动显著提升"),不在终版简历留占位符
- 简历过长:5年以下→1页,5-10年→1-2页,10年以上→2页;合并早期经历
- 跨行业转行:抽取可迁移技能,用目标行业术语重新表达,保留量化成果
- 中英文混合/双语:识别主体语言(>60%占比为准),英文简历用英文STAR规则(≤25词/bullet)
- 应届生:教育前置,不过度追求量化,不编造实习经历
- 高管/20年+经验:重点放在"成就表述是否够高维",早期经历允许合并
