定向岗位简报
概述
把一份候选人简历转化为一份可直接投递的岗位简报:只收录匹配度达标(默认 ≥80%)的岗位,分「国企/事业单位」与「招聘网站」两组,每张卡片默认折叠、点击展开岗位介绍/薪资/匹配要点/待补短板/直达链接,最终输出单文件 HTML(白色背景、可直接打印或另存 PDF)。
本技能沉淀自真实交付(周自航 · 2026.9),包含两条硬性红线:链接必须可核验、折叠交互必须真的能用。
何时使用
- 用户上传/指定一份简历,要求推荐岗位、做匹配度分析
- 用户要求汇总国企事业单位招聘公告 + 招聘网站职位
- 用户要求把岗位信息做成 HTML/简报/表格交付
- 用户提出"只保留匹配度 80% 以上""重点关注国企事业单位""过去 7 天内的岗位"
交付物标准(不可协商)
| 项 | 标准 |
|---|---|
| 格式 | 单文件自包含 HTML,无外部依赖(不引 CDN、不引字体) |
| 配色 | 白色背景、深色文字(报表类统一 light 主题,便于嵌入正式文档与打印) |
| 布局 | max-width: 1000px,岗位卡片纵向排列 |
| 分组 | A 组「国企 / 事业单位 / 科研机构」+ B 组「招聘网站 / 市场化机构」,必须分组 |
| 折叠 | 每张卡片默认只露匹配度/岗位名称/单位/标签;详情收在折叠区。候选人画像、筛选口径、评分方法三个面板同样默认折叠 |
| 卡片字段 | 匹配度评分、岗位名称、公司(含性质)、标签、岗位介绍、薪资范围、匹配要点、待补短板、来源渠道、时间状态、直达链接 |
| 数量 | 25–30 个为宜(10–15 个会被反馈"太少") |
| 打印 | @media print 下全部自动展开,按钮与交互元素隐藏 |
| 命名 | YYYY.M.D-姓名-定向岗位推荐简报.html |
工作流
Step 0 — 先提问,后动手(不可跳过)
用户通常明确要求"先提问再干活"。分 3–4 轮提问,每轮用 AskUserQuestion 一次问 4 个,问完一轮先复述理解表再进入下一轮。必须问清 12 个维度:
- 匹配度口径(双硬匹配 / 沾边即可 / 严格同岗同业 / 由模型评分)
- 地域范围(仅北京 / 北京+沿海 / 全国 / 具体城市)
- 来源侧重与呈现(分组 / 并重 / 混合)
- 时效口径(发布日期近 7 天 / 截止日在未来 7 天 / 两者 / 放宽至 30 天)
- 求职方向优先级(数据分析 / 环境咨询 / AI 赋能…)
- 薪资呈现(原值 / 缺失估算 / 是否对标期望)
- 收录岗位数量
- 附加偏好(编制、央企、驻场出差、稳定性)
- 岗位类型范围(企业技术岗 / 事业编技术科研岗 / 高校岗 / 公务员选调)
- 公告附件如何处理(是否解析岗位表)
- 每岗是否附匹配分析(推荐「匹配要点 + 待补短板」)
- 保存路径
全部答复落成一张「需求理解确认表」贴给用户,声明理解度达标后再开工。
Step 1 — 解析简历
.docx最快:解压word/document.xml,正则去标签 +html.unescape,无需第三方库.pdf:直接用 Read 工具读;失败时改读同目录同名.docx- 提取:求职意向、学历专业、工作经历(公司/岗位/年限)、项目经历(体量与金额)、技能栈、证书职称、现居城市、现任职单位(用于后续"现东家岗位"识别)
Step 2 — 设计检索矩阵,多渠道并发检索
按「方向 × 地域 × 单位性质」组查询。WebSearch 的 freshness:d7 抓近 7 天,m1 抓近 30 天(国企事业单位公告零散,必须用 m1 兜底)。
渠道清单、检索词写法、以及国企事业单位的硬条件判定规则(应届限定/京籍/留学回国一年/沿海城市口径/邻接方向扩容)见 → references/岗位检索与判定规则.md。
Step 3 — 解析公告附件岗位表
带附件的公告(交通运输部、生态环境部直属单位等)必须下载岗位表逐岗核对,不要只看公告标题:
curl -sL -o job.xlsx "<附件URL>"
python -c "
import openpyxl
wb=openpyxl.load_workbook('job.xlsx',data_only=True)
for ws in wb.worksheets:
for r in ws.iter_rows(values_only=True):
print(' | '.join('' if c is None else str(c).replace(chr(10),' ') for c in r))
"
提取:招聘单位、招聘类别(社会人员/应届)、岗位名称、岗位简介、工作地点、招聘人数、专业要求、学历、其他要求(户籍/职称/年龄)。
Step 4 — 硬条件校验(最易翻车的一步)
逐条核对,不能只看专业要求:招聘对象是否限应届、是否要求京籍、留学回国人员通道是否要求"毕业不超过一年"、经验年限与职称等级、报名是否已截止。
不满足硬条件的岗位一律放入文末「关注区」并写明未达标原因,绝不混入达标组。详见 references/岗位检索与判定规则.md。
Step 5 — 匹配度评分(100 分制)
专业背景 30 + 岗位职责重合度 25 + 经验年限 20 + 技能与工具 15 + 平台与地域 10
- 经验年限:要求 2–4 年得满分;要求 5 年以上每超 1 年扣 5 分
- 仅保留 ≥80%;<80% 进关注区
- 每张卡片必须同时写「匹配要点」(绿块)与「待补短板」(橙块),短板要写得具体(缺哪个方法学、哪项资格、哪类客户经验)
Step 6 — 生成 HTML
按交付物标准产出。HTML 的结构清单、折叠交互实现、大文件分片写入、样式约定见 → references/HTML简报交付规范.md。
必须直接复用以下资产,不要重新推导:
| 资产 | 用途 |
|---|---|
assets/head-template.html |
已调好的完整 <head>(含全部 CSS、打印样式、<noscript> 兜底),只需替换 {{TITLE}} |
assets/toggle.js |
折叠交互脚本,整段放入 </body> 之前 |
scripts/check_briefing.py |
交付前结构自检 |
大文件必须分片写入:简报约 90–110 KB,单次 Write 会被截断(曾丢掉整段 script 与最后一整张卡片)。做法:切 prefix + 分片 tail,再用 Python 拼接。
Step 7 — 交付前自检(必跑)
python scripts/check_briefing.py "<简报路径>"
脚本检查:标签结构平衡、卡片字段完整、折叠所需元素齐全、重复岗位(同公司+同岗位名、同链接)、分组与关注区统计、文件正常闭合。退出码非 0 时先修复再交付。
Step 8 — 真机验证折叠(必做,别靠肉眼推断)
折叠功能必须在真实浏览器点一遍。用无头 Chrome 注入点击脚本并读回结果:
chrome --headless=new --disable-gpu --virtual-time-budget=6000 --dump-dom "file:///C:/Temp/test.html"
在测试副本里追加一段 setTimeout 脚本,依次触发:单卡 .job-bar.click()、.job-head.click()、#expandAll.click()、#collapseAll.click()、.panel-toggle.click(),把 classList.contains('open') 与按钮文案写进一个带特殊标记的 div。
坑:注入的结果标记不要含 < >——--dump-dom 会把它转义成 &lt; &gt;,grep 匹配不到,会误判成"测试失败"。
Step 9 — 收尾
- 清理临时目录
present_files交付 HTML(本地绝对路径)- 回复中说明:收录数量与分组、几条最值得投的岗位、实情与例外(未达标的岗位为什么没进、哪些薪资是估算、哪些日期平台未标注)、建议动作
- 若检索到候选人现任职单位发布的岗位,在文末单独说明并提示"疑似同团队扩编,投递前先与直属上级确认"
诚信红线
- 链接必须来自真实检索结果,不得编造 job id / 公告 URL
- 平台未标发布日期的,如实标注「检索时在招 · 平台未单列发布日期」,不得编造日期
- 薪资为推断值的,明确写「估算」;岗位标注值优先
- 报名已截止的公告:排除,或保留并明确标注状态
- 去重:同一「公司 + 岗位名称」或同一链接不得重复入卡(列表页链接极易被重复抓取)
- 公告的专业/资历要求与候选人情况冲突时,写进「待补短板」,不要掩饰