帮助用户撰写/优化简历,并基于简历推荐匹配的岗位,提供完整的求职支持。
本 skill 提供完整的求职流程支持:
> 数据源查询方式:岗位数据来自腾讯在线表格《2026春招表》,AI通过腾讯文档MCP工具实时查询,不依赖本地缓存。
当用户提出以下类型的问题时,应使用此skill:
⚠️ 使用前检查(必须执行)
在开始前,先检查工作目录是否存在旧的JSON数据文件:
resume_form_data.jsonform_data_*.jsonmatched_jobs.json如果发现这些文件:
⚠️ 第一步:询问用户是否已有简历(必须执行)
在开始时,必须先询问用户:"你现在有现成的简历吗?(PDF或Word格式都可以)"
根据用户回答,进入不同流程:
第二步:生成HTML表单
scripts/generate_form.py 生成HTML表单页面python3 scripts/generate_form.py form.html第三步:收集表单数据
第四步:选择简历模板
第五步:生成简历
scripts/generate_resume.py 生成HTML和PDFpython3 scripts/generate_resume.py data.json <模板名称> output.pdfassets/resume_template_<名称>.html)第六步:提供优化版本
第七步:询问是否继续优化
第二步:上传简历
user_resume.pdf 或 user_resume.docx)第三步:解析简历(必须执行)
```bash
python3 scripts/parse_resume.py <用户简历文件> resume_parsed.json
```
示例:
```bash
python3 scripts/parse_resume.py 张三简历_v1.pdf resume_parsed.json
```
chi_sim+eng)```bash
python3 scripts/parse_resume.py <用户简历文件> resume_parsed.json --ocr
```
或让脚本自动检测(常规提取失败时会自动启用OCR)
```bash
# macOS
brew install tesseract
brew install tesseract-lang # 安装中文语言包
# Ubuntu/Debian
sudo apt install tesseract-ocr tesseract-ocr-chi-sim
# Windows
# 下载安装:https://github.com/UB-Mannheim/tesseract/wiki
# Python包
pip install pytesseract Pillow
```
```python
# AI读取解析后的简历数据
with open('resume_parsed.json', 'r', encoding='utf-8') as f:
resume_data = json.load(f)
# 获取原始文本进行分析
raw_text = resume_data['raw_text']
```
第三步(关键):从raw_text完整提取结构化信息(必须执行)
⚠️ parse_resume.py 提取的结构化字段通常不完整(技能可能只有一部分、项目可能为空等)。
必须运行 convert_resume_format.py 从 raw_text 中完整提取所有信息!
python3 scripts/convert_resume_format.py resume_parsed.json resume_full.json
该脚本会从 raw_text 中提取:
验证提取结果:脚本会输出提取的统计信息,例如:
✅ 个人信息: 张三
✅ 技能: 30 项,5 个分类
✅ 项目经历: 5 个
✅ 工作经历: 2 段
✅ 教育背景: 1 条
✅ 自我评价: 120 字
✅ 原始文本: 1800 字(已保留作为后备数据源)
⚠️ 重要:resume_full.json 是后续所有操作的"数据源"。岗位匹配和简历调整都基于这个完整数据。
不要使用 resume_parsed.json 或 resume_converted.json,它们的数据不完整!
第四步:分析并提供修改方向
第五步:选择简历模板
第六步:生成修改后的简历
scripts/generate_resume.py 生成HTML和PDF第七步:用户确认并迭代优化
⚠️ 必须询问用户确认
在简历阶段完成后,必须询问用户:"是否基于这份简历为你推荐匹配的岗位?"
只有当用户确认后,才能进入岗位推荐阶段。
⚠️ 前置条件:检查腾讯文档连接状态(必须执行)
在执行岗位搜索前,必须先提醒用户:
> "请确保你已经在 WorkBuddy 中连接了腾讯文档(😇→设置→已连接服务→腾讯文档),否则我无法读取岗位数据。"
确认连接后,继续执行以下步骤。
第一步:从简历提取关键词(AI自行处理)
AI 直接根据简历JSON(resume_full.json)提取以下关键信息:
关键词提取逻辑参考 extract_keywords_from_resume() 函数(在 match_resume_to_jobs.py 中)。
生成搜索查询组合:将城市+岗位、城市+技能、纯岗位、纯技能等组合成多个查询对,用于后续搜索。
第二步:AI实时查询腾讯文档表格数据(核心)
AI 通过腾讯文档 MCP 工具实时读取表格数据执行搜索,具体步骤如下:
```python
# 使用 get_sheet_info 获取表格信息(file_id 已内置于 skill)
get_sheet_info(file_id="DQUZ5RUdFd2hveXJm")
# 确认子表信息
sheet_info → 子表 "2026春招表"(sheet_id: eno0p4),26列×3633行
```
```python
# 先读取表头行确认列结构(row index 2,即第3行)
get_cell_data(
file_id="DQUZ5RUdFd2hveXJm",
sheet_id="eno0p4",
start_row=2, end_row=2, # 表头
start_col=0, end_col=13,
return_csv=True
)
# 然后从第4行(row index 3)开始分批读取数据
# 每次读取200行,在AI端进行关键词匹配
# 在以下列中搜索:招聘岗位(列6)、公司名称(列1)、工作地点(列8)、行业大类(列4)
搜索逻辑(参考 search_records()):
for 每批数据:
for 每条记录:
for 每个搜索关键词:
在关键列中模糊匹配(不区分大小写)
如果匹配,保留该记录
去重逻辑:
使用 (公司名称, 招聘岗位, 工作地点) 作为唯一标识去重
```
腾讯文档表格列结构(数据从第3行开始,第1-2行为标题行):
| 索引 | 列名 | 说明 |
|---|---|---|
| :----: | :---- | :---- |
| 0 | 序号 | 记录编号 |
| 1 | 公司名称 | 公司全称 |
| 2 | 批次 | 春招/秋招 |
| 3 | 企业性质 | 央国企/民企/外企等 |
| 4 | 行业大类 | 行业分类 |
| 5 | 招聘对象 | 面向人群 |
| 6 | 招聘岗位 | 岗位名称 |
| 7 | 网申状态 | 招聘中/已截止 |
| 8 | 工作地点 | 多城市用空格分隔 |
| 9 | 更新时间 | 日期 |
| 10 | 截止时间 | 截止日期或招满即止 |
| 11 | 官方公告 | 公告名称或URL |
| 12 | 投递方式 | 投递链接或描述 |
| 13 | 内推码/备注 | 备注信息 |
第三步:计算匹配度
AI 对匹配到的每个岗位计算匹配度分数(参考 calculate_match_score() 逻辑):
| 维度 | 分数 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| 城市匹配 | 30分 | 工作地点与期望城市一致 |
| 岗位名称匹配 | 25分 | 岗位名称与期望岗位相关 |
| 技能匹配 | 25分 | 岗位要求与简历技能匹配 |
| 公司类型/行业 | 20分 | 公司类型与期望行业匹配 |
AI 也可以使用脚本辅助计算:
# 从 match_resume_to_jobs.py 导入 calculate_match_score
# AI将读取到的数据传入脚本
python3 -c "
from match_resume_to_jobs import calculate_match_score
import json
with open('record.json') as f:
record = json.load(f)
with open('resume_full.json') as f:
resume = json.load(f)
score = calculate_match_score(record, resume)
print(score)
"
第四步:生成岗位推荐HTML报告
AI 收集到匹配结果后,使用 scripts/generate_job_report.py 生成HTML报告:
python3 scripts/generate_job_report.py resume_full.json matched_jobs.json report.html
该脚本会生成包含以下内容的HTML报告:
第五步:展示报告给用户
在预览面板中展示HTML报告,让用户查看推荐的岗位。
第六步(核心):为所有匹配岗位批量生成不同版本的简历
展示报告后,询问用户:"是否需要为你推荐的每个岗位分别调整简历,让每份简历都最匹配对应岗位?"
展示报告后,询问用户:"是否需要为你推荐的每个岗位分别调整简历,让每份简历都最匹配对应岗位?"
如果用户选择"是":
adapt_resume_to_job.py --batch 一次性为所有匹配的岗位生成对应版本python3 scripts/adapt_resume_to_job.py resume_full.json matched_jobs.json --batch --output-dir ./outputadapted_for 字段)adjusted_resume_<公司名>.jsonexplanation_<公司名>.mdbatch_adapt_summary.json(包含所有版本的概览)resume_full.json(完整数据),不要用 resume_parsed.json脚本只做了排序,AI必须做深度的内容差异化改造——核心原则是"量体裁衣,因企而异"。
⚠️ 常见Bug说明:之前出现过的问题——AI优化后5份简历读起来几乎一模一样,只是个别词有替换。这是因为没有真正做内容差异化。以下规则必须逐条执行,缺一不可。
差异化改造必须执行的8条规则:
① 项目排序差异化:每个公司最相关的项目必须排在第一位。不同公司的前3个项目组合必须不同。
② 项目描述差异化:同一项目在不同公司简历中写不同的角度。例如"某智能客服Agent平台":
③ 工作经历描述差异化:同一段工作经历(如"某科技公司"),为不同公司写不同的描述重点:
④ 自我评价完全重写:每个版本必须是全新的自我评价,从不同角度切入:
⑤ 技能分类排序调整:在每个技能分类内部,把最匹配目标公司的技能移到最前面。
⑥ 项目精选控制:每个版本从原简历中精选4-6个最相关的项目,不相关的剔除。
⑦ 教学/非技术经历差异化处理:
⑧ 求职意向调整:每个版本的 job_intention 字段必须是对应公司的目标岗位全称,不能所有版本都用同一个意向。
执行后的自检标准(必须逐项验证):
如果自检发现"只是同义词替换",必须重新改。
explanation_<公司名>.md,说明:该版本改了哪些内容、突出了什么、压缩了什么explanation_<公司名>.md,说明该版本修改了哪些内容、为什么要这么修改。这份说明也应该展示给用户看。修改说明模板(以下内容必须逐条填写):
```markdown
# 简历修改说明 - {公司名}
## 目标岗位
## 为什么这么修改
这家公司的岗位要求是{核心要求},因此我的简历做了以下针对性调整:
## 修改了哪些内容
### 1. 项目排序调整
### 2. 项目描述角度调整
### 3. 工作经历描述调整
### 4. 自我评价重写
### 5. 项目精选
### 6. 技能排序调整
```
在向用户交付PDF时,同时展示这份修改说明,让用户清楚知道每份简历做了哪些针对性调整。
scripts/generate_resume.py 为每个版本生成PDFpython3 scripts/generate_resume.py adjusted_resume_<公司名>.json <模板名称> adjusted_resume_<公司名>.pdfbatch_adapt_summary.json 中的每个条目,逐个生成PDF如果用户选择"否":
scripts/job_jd_templates.py - JD推断模板adapt_resume_to_job.py 调用scripts/adapt_resume_to_job.py - 根据岗位调整简历python3 scripts/adapt_resume_to_job.py <原始简历JSON> <岗位数据JSON> <输出简历JSON> [--explain 输出说明文件]matched_jobs.json 中获取某个岗位的数据)job_jd_templates.py)根据用户回答,提供选项:
| 维度 | 分数 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| 城市匹配 | 30分 | 工作地点与期望城市一致 |
| 岗位名称匹配 | 25分 | 岗位名称与期望岗位相关 |
| 技能匹配 | 25分 | 岗位要求与简历技能匹配 |
| 公司类型/行业 | 20分 | 公司类型与期望行业匹配 |
以下包按功能分类,按需安装(不需要全部装):
| 功能 | 依赖 | 安装命令 |
|---|---|---|
| ------ | ------ | --------- |
| HTML→PDF 转换(简历/报告) | Playwright | pip install playwright && playwright install chromium |
| 解析 PDF 简历(常规模式) | PyMuPDF | pip install PyMuPDF |
| 解析 PDF 简历(扫描件 OCR 模式) | pytesseract + Pillow | pip install pytesseract Pillow |
| 解析 DOCX 简历 | python-docx | pip install python-docx |
brew install tesseract tesseract-langsudo apt install tesseract-ocr tesseract-ocr-chi-sim> ⚠️ 所有第三方依赖均为懒加载(使用时才检查),即使未安装也不会影响脚本加载,只在调用对应功能时报错并提示安装。
本 skill 包含以下脚本,每个脚本都有明确的功能:
scripts/generate_form.py - 生成HTML表单python3 scripts/generate_form.py <输出文件.html>scripts/form_server.py - 本地表单服务器(备用)python3 scripts/form_server.pyscripts/parse_resume.py - 解析上传的简历python3 scripts/parse_resume.py <简历文件> <输出.json> [--ocr]--ocr 参数可强制使用OCR解析扫描版PDFscripts/generate_resume.py - 生成HTML简历并转为PDFpython3 scripts/generate_resume.py <数据.json> <模板名称> <输出.pdf>pip install playwright && playwright install chromium)scripts/generate_resume_simple.py - 简化版简历生成器(备用)python3 scripts/generate_resume_simple.py <数据.json> <输出.pdf>generate_resume.py 的备用方案,当Playwright不可用时使用scripts/match_resume_to_jobs.py - 基于简历匹配岗位extract_keywords_from_resume(resume_json) - 从简历提取关键词generate_search_queries(keywords) - 生成搜索查询组合calculate_match_score(record, resume_json) - 计算单条记录的匹配度(纯函数)scripts/search_and_generate.py - 腾讯在线表格搜索与HTML报告生成search_records(records, keywords, search_mode='AND') - 在记录列表中搜索generate_html_report(results, keywords, output_file) - 生成HTML报告get_apply_link(record) - 提取投递链接scripts/generate_job_report.py - 生成岗位推荐HTML报告python3 scripts/generate_job_report.py <简历.json> <匹配岗位.json> <输出.html>scripts/job_jd_templates.py - JD推断模板(新增)adapt_resume_to_job.py 调用scripts/adapt_resume_to_job.py - 根据岗位调整简历(支持批量)python3 scripts/adapt_resume_to_job.py <原始简历JSON> <岗位数据JSON> <输出简历JSON> [--explain 说明文件] [--job-index N]python3 scripts/adapt_resume_to_job.py <原始简历JSON> <岗位数据JSON> --batch [--output-dir 输出目录]resume_full.json)matched_jobs.json 或单个岗位JSON)--job-index N:指定岗位列表中的第N+1个岗位(从0开始,仅单个模式)--batch:批量模式,为所有匹配岗位分别生成对应版本的简历--output-dir:批量模式的输出目录(默认当前目录)adjusted_resume_<公司名>.json:每个岗位对应一份调整后的简历JSONexplanation_<公司名>.md:每个岗位对应的修改说明batch_adapt_summary.json:批量处理摘要(包含所有版本的概览:公司、岗位、匹配度、数据完整性等)job_jd_templates.py)adapted_for 字段)generate_resume.py 生成PDFscripts/convert_resume_format.py - 简历格式转换(重写版)parse_resume.py 的 raw_text 中完整提取结构化信息,生成 generate_resume.py 和 match_resume_to_jobs.py 需要的格式python3 scripts/convert_resume_format.py <输入.json> <输出.json>parse_resume.py生成的简历JSON文件(必须包含 raw_text 字段)resume_full.json),包含:personal:完整的个人信息(姓名、电话、邮箱、求职意向、地点、语言、生日等)skills_by_category:按分类的技能列表(AI & Agent、AIGC & 视觉、工程开发、数据分析等)skills:扁平化的全部技能列表projects:完整的项目经历(项目名称、描述、技术栈)experiences:完整的工作经历(公司、岗位、时间段、描述)education:教育背景self_evaluation:自我评价raw_text:原始文本(保留作为后备数据源)resume_full.json 是后续所有操作的数据源本 skill 的岗位搜索数据来自腾讯在线表格,AI 通过腾讯文档 MCP 工具实时查询:
DQUZ5RUdFd2hveXJm(调 MCP 工具时使用)eno0p4(2026春招表的子表ID)get_cell_data MCP 工具分批读取数据,在AI端进行搜索匹配job-search-assistant/
├── SKILL.md # Skill说明文档(本文件)
├── scripts/
│ ├── generate_form.py # 生成HTML表单脚本
│ ├── parse_resume.py # 解析上传的简历(PDF/DOCX)
│ ├── generate_resume.py # 生成HTML简历并转为PDF
│ ├── search_and_generate.py # 腾讯在线表格搜索与HTML报告生成
│ ├── match_resume_to_jobs.py # 基于简历匹配岗位(接受外部数据)
│ ├── generate_job_report.py # 生成岗位推荐HTML报告
│ ├── job_jd_templates.py # JD推断模板
│ ├── adapt_resume_to_job.py # 根据岗位调整简历
│ └── convert_resume_format.py # 简历格式转换
├── assets/
│ ├── form_template.html # HTML表单模板
│ ├── resume_template_classic.html # 简历HTML模板 - 简洁商务风
│ ├── resume_template_modern.html # 简历HTML模板 - 现代卡片风
│ ├── resume_template_sidebar.html # 简历HTML模板 - 左栏侧边风
│ └── job_report_template.html # 岗位推荐报告HTML模板
└── references/
├── questions.md # 表单问题列表(备用)
├── data_format.md # 腾讯在线表格数据格式说明
├── field_mapping.json # 腾讯在线表格列名定义
└── option_mapping.json # 腾讯在线表格常见值参考
本阶段在岗位推荐完成之后、模拟面试之前执行。针对用户选定的公司/岗位,分析公司背景、岗位解读、薪资行情、技能缺口,并给出求职策略建议。
⚠️ 进入就业指导前,必须确认已有目标公司/岗位(如用户从推荐列表中选中了某家)。如用户没有目标,可以先帮用户分析简历适合什么方向,再推荐具体公司。
用户选定公司/岗位后,AI基于自身知识和网络搜索能力,生成一份简要的分析报告,包含以下内容:
> 报告格式:以清晰的Markdown结构呈现,用粗体突出关键结论,适当使用项目符号。避免长篇大论,控制在500-800字以内。
报告展示后,进入问答环节:
就业指导完成后,询问用户:"要不要针对这家公司/岗位来一场模拟面试?"
本阶段在简历优化和岗位推荐完成后执行。模拟面试会根据用户的简历、目标公司/岗位的JD,生成针对性的面试题。
⚠️ 执行模拟面试前,必须先确认是否有用户的简历数据。判断逻辑:
resume_full.json 存在):直接进入面试matched_jobs.json 存在或用户指定了公司/岗位):结合简历+岗位信息出题面试采用一问一答的真实面试节奏:我提问 → 用户回答 → 我点评并给出下一题,每次只出一题。
面试环节(共5轮):
| 轮次 | 环节 | 时长 | 说明 |
|---|---|---|---|
| :----: | :---- | :----: | ------ |
| ① | 自我介绍 | ~2分钟 | "请简单介绍一下自己,重点说说为什么适合这个岗位" |
| ② | 技术问题 × 2 | ~5分钟 | 根据用户技能栈和JD出题(Agent/RAG/AIGC/工程等方向) |
| ③ | 项目深挖 × 1 | ~3分钟 | 从简历中挑出与目标岗位最相关的项目,追问技术细节和个人贡献 |
| ④ | 行为问题 × 1 | ~3分钟 | STAR问题(如"讲一次解决过的技术难题"、"最有成就感的事") |
| ⑤ | 反问环节 | ~2分钟 | "你有什么想问我的吗?" |
面试结束后,生成面试复盘评分卡,输出格式如下:
════════════════════════════════════════
📋 面试复盘评分卡
════════════════════════════════════════
目标公司:{公司名称}
目标岗位:{岗位名称}
面试表现:
技术理解: 7/10
项目表达: 8/10
逻辑沟通: 7/10
岗位匹配: 6/10
综合印象: 7/10
───────────────────────────────────
综合得分: 7/10
💪 优势:
1. XXX
2. XXX
🔧 改进建议:
1. XXX
2. XXX
📚 复习方向:
1. XXX
2. XXX
════════════════════════════════════════
评分卡基于面试过程中的回答质量动态生成,不生成PDF,直接在聊天对话中展示。
评分卡展示后,询问用户:
用户:"帮我找找工作"
AI:"好的!我来帮你。你现在有现成的简历吗?(PDF或Word格式都可以)"
用户:"没有,我是应届生,还没写过简历"
执行步骤:
scripts/generate_form.py 生成HTML表单scripts/match_resume_to_jobs.py 从简历提取关键词并搜索匹配岗位scripts/generate_job_report.py 生成岗位推荐HTML报告用户:"我有一份简历,帮我优化一下,然后根据简历推荐一些岗位"
AI:"好的!请上传你的简历(PDF或Word格式),我帮你优化,然后根据优化后的简历为你推荐匹配的岗位。"
执行步骤:
pdf skill,DOCX用docx skill)用户:"我有一份简历,帮我推荐一些适合的岗位"
AI:"好的!请上传你的简历(PDF或Word格式),我会基于你的简历为你推荐匹配的岗位。"
执行步骤:
scripts/match_resume_to_jobs.py 从简历提取关键词并搜索匹配岗位scripts/generate_job_report.py 生成岗位推荐HTML报告用户:"帮我推荐一些岗位,然后根据岗位调整我的简历"
AI:"好的!请上传你的简历(PDF或Word格式),我会为你推荐匹配的岗位,然后为每个岗位分别生成定制版简历。"
执行步骤:
convert_resume_format.py 提取完整结构化信息scripts/match_resume_to_jobs.py 从简历提取关键词并搜索匹配岗位(5-10个)scripts/generate_job_report.py 生成岗位推荐HTML报告```bash
python3 scripts/adapt_resume_to_job.py resume_full.json matched_jobs.json --batch --output-dir ./output
```
generate_resume.py 生成PDF示例对话:
AI:"这是为你推荐的5个岗位(展示报告)。是否需要为你推荐的每个岗位分别调整简历?"
用户:"好的,帮我每个岗位都调整一下"
AI:"好的!我正在为5个岗位分别生成定制版简历...
✅ 批量适配完成!共生成 5 个版本:
| 序号 | 公司 | 岗位 | 匹配度 |
|------|---------------|----------------------|--------|
| 1 | 某科技公司 | AI算法工程师 | 85分 |
| 2 | 某互联网公司 | 大模型应用开发工程师 | 80分 |
| 3 | 某数据公司 | Python开发工程师 | 75分 |
| 4 | ... | ... | ... |
| 5 | ... | ... | ... |
现在我对每份简历进行深度内容差异化改造——按每家公司JD要求,重新排序项目、改写描述角度、完全重写自我评价,确保每份简历读起来明显不同...
✅ 全部优化完成!5份定制版简历已生成PDF。
| 版本 | 项目侧重点 | 自我评价角度 | 擅长方向 |
|------|-----------|-------------|---------|
| 某科技公司-AI算法 | 数据分析 > 工程 > 视觉 | 算法工程能力 | LLM/RAG/Agent |
| 某互联网公司-Agent | Agent平台 > 工作流 > 数据 | Agent架构能力 | 链路设计/MCP |
| 某公司-视觉岗 | 视觉识别项目 > 多模态Agent > AIGC工具 | AIGC视觉能力 | 图像生成/视觉理解 |
每份简历的内容侧重点都不同,请在投递时使用对应版本。对哪些版本需要进一步调整?"
用户:"第2份的大模型应用开发,项目经历再突出一些"
AI:"好的,我调整第2份简历的项目经历部分...(重新生成PDF)
✅ 第2份简历已更新,请查收。"
本skill使用Playwright将HTML转为PDF,优势:
使用方法:
# 安装Playwright
pip install playwright
playwright install chromium
# 生成简历
python3 scripts/generate_resume.py data.json classic output.pdf
本skill提供3个简历模板:
用户可以在生成简历前选择模板,也可以为每个优化版本选择不同模板。
岗位推荐报告使用专门的HTML模板(assets/job_report_template.html),包含:
最后更新:2026-05-14(通用化改造:去个人信息+去硬编码路径+环境依赖说明+腾讯文档实时查询)
共 1 个版本