Initial commit
This commit is contained in:
136
skills/job-intent-tracker/SKILL.md
Executable file
136
skills/job-intent-tracker/SKILL.md
Executable file
@@ -0,0 +1,136 @@
|
||||
---
|
||||
name: job-intent-tracker
|
||||
description: 帮助用户梳理求职意向、生成目标岗位画像,并维护一份结构化的"岗位投递追踪表"。当用户说"我想换工作 / 不知道投什么岗 / 帮我看看我适合什么岗位 / 帮我管理投递进度 / 我投了好几家但记不住状态了 / 想做一个求职 OKR / 整理一下求职方向",或上传简历但没说要改简历时,应该主动触发本 skill。本 skill 也适用于实习生、应届生、转行候选人在求职启动阶段做"自我盘点 + 目标画像 + 投递管理"三件事。
|
||||
---
|
||||
|
||||
# Job Intent Tracker(求职意向 + 岗位追踪)
|
||||
|
||||
这个 skill 解决"求职启动期"的三个核心问题:
|
||||
|
||||
1. **我适合投什么岗?** —— 从用户背景里抽取信号,反推 2~3 个目标方向
|
||||
2. **目标岗位长什么样?** —— 为每个方向生成"岗位画像 / Target Profile"
|
||||
3. **投了哪些、进度如何?** —— 维护一份结构化追踪表(Excel / Markdown 表)
|
||||
|
||||
不要把这个 skill 用成"简历改写"或"面试题生成"——那是 resume-builder / jd-resume-tailor / interview-prep 的事。本 skill 只关心"方向"和"管理"。
|
||||
|
||||
---
|
||||
|
||||
## 何时触发本 skill
|
||||
|
||||
强信号(基本必须用):
|
||||
- "我想换工作 / 想跳槽 / 想找下一份工作"
|
||||
- "帮我看看我适合什么岗位"
|
||||
- "帮我管理投递进度 / 跟踪一下我投的公司"
|
||||
- "我有 X 年 Y 经验,下一步该往哪走"
|
||||
- "我投了好多家但忘了进度"
|
||||
|
||||
弱信号(先确认再用):
|
||||
- 用户只丢了一份简历,没说目的 → 先问"你是想梳理方向、改简历,还是准备面试?"
|
||||
- 用户说"想找工作"但很模糊 → 先问"你心里有目标方向吗?还是想让我帮你判断方向?"
|
||||
|
||||
---
|
||||
|
||||
## 工作流程
|
||||
|
||||
按这个顺序走,一步都不要跳:
|
||||
|
||||
### Step 1: 自我盘点(Background Intake)
|
||||
|
||||
用 AskUserQuestion(或在没有该工具时直接问)收集以下信息。**不要一次问完,分 2~3 轮,每轮 2~3 个问题**,否则用户会被"问卷感"劝退。
|
||||
|
||||
第一轮(必问):
|
||||
- 当前 / 最近一份工作的岗位、公司类型、年限
|
||||
- 核心技能 3~5 个(关键词即可)
|
||||
- 目标行业 / 目标方向(如果用户有)—— 没有也没关系,跳到 Step 2
|
||||
|
||||
第二轮(看情况问):
|
||||
- 期望薪资 range(用户不愿意说就跳过)
|
||||
- 城市偏好 / 是否接受 remote
|
||||
- 排除项("不想做销售 / 不想加班 / 不接受出差"等)
|
||||
|
||||
第三轮(深度信号,仅在前两轮信息不足以画像时问):
|
||||
- 最有成就感的 1~2 个项目
|
||||
- 最不喜欢做的事
|
||||
- 5 年后的画面
|
||||
|
||||
如果用户上传了简历 .pdf / .docx,**先调用 pdf 或 docx skill 解析出文本**,再从中抽取以上信息,避免用户重复打字。
|
||||
|
||||
### Step 2: 推荐求职方向
|
||||
|
||||
基于 Step 1 的信息,生成 2~3 个候选方向。每个方向都要写清楚:
|
||||
|
||||
```
|
||||
方向 N:<岗位名>(如:互联网产品经理 / 数据分析师 / 量化研究员)
|
||||
- 匹配度:高 / 中 / 低(高=核心技能直接命中;中=需补 1~2 个关键技能;低=需要转岗叙事)
|
||||
- 匹配理由:基于用户的 ___ 经验和 ___ 技能
|
||||
- 缺口:用户还需要补 ___ 才能成为强候选人
|
||||
- 典型雇主:<3~5 个具体公司或公司类型>
|
||||
- 薪资带(仅供参考):__k - __k(注明"市场行情,仅供参考,建议用户自行通过职级查询")
|
||||
```
|
||||
|
||||
**重要:不要只推荐"安全"的方向。** 如果用户技能允许,至少给一个"跳一跳能够到"的方向,并诚实标注缺口。
|
||||
|
||||
### Step 3: 生成岗位画像(Target Profile)
|
||||
|
||||
为用户**最终选定**的 1~2 个方向(让用户主动选),生成详细画像。模板在 `references/target_profile_template.md`,需要读取这个文件后再填充。
|
||||
|
||||
画像要包含:岗位职责典型描述、技能要求 must-have / nice-to-have、面试流程预期、对标公司列表(按 tier 分层)。
|
||||
|
||||
读取行业关键词库决定 must-have / nice-to-have:
|
||||
- 互联网产品 / 运营 / PM → `references/keywords_internet.md`
|
||||
- 技术 / 研发 / 数据 → `references/keywords_tech.md`
|
||||
- 金融 / 咨询 / 商科 → `references/keywords_finance.md`
|
||||
- 通用 / 跨行业 → `references/keywords_general.md`
|
||||
|
||||
### Step 4: 创建投递追踪表
|
||||
|
||||
调用 `scripts/init_tracker.py` 生成初始追踪表。脚本支持两种格式:
|
||||
|
||||
```bash
|
||||
python scripts/init_tracker.py --format xlsx --output /path/to/tracker.xlsx
|
||||
# 或
|
||||
python scripts/init_tracker.py --format md --output /path/to/tracker.md
|
||||
```
|
||||
|
||||
默认推荐 xlsx(用户可以排序、加 conditional formatting)。如果用户明确要求轻量,用 md。
|
||||
|
||||
追踪表的列结构(脚本里已经预设好,不要改):
|
||||
公司、岗位、来源(猎头/官网/内推/招聘网站)、JD 链接、投递日期、当前阶段(投递/笔试/一面/二面/HR 面/Offer/Reject/沉默)、下一步动作、Deadline、薪资范围、内推人、备注
|
||||
|
||||
### Step 5: 用 Artifact 做"求职看板"(可选但推荐)
|
||||
|
||||
如果当前环境里有 `mcp__cowork__create_artifact` 工具,主动提议:"要不要我把这个追踪表做成一个可以每天打开看的看板?"
|
||||
|
||||
如果用户同意,创建一个 HTML artifact,从追踪表数据渲染:
|
||||
- 顶部 KPI:投递总数 / 进入面试数 / Offer 数 / 待跟进数
|
||||
- 中部表格:按"当前阶段"分组的 Kanban 视图
|
||||
- 底部提醒:3 天没动静的公司、deadline 临近的任务
|
||||
|
||||
---
|
||||
|
||||
## 输出风格
|
||||
|
||||
- **结构化、可执行**,不要泛泛而谈"建议你多投简历"这种话
|
||||
- 涉及薪资、行业判断时,**明确标注"市场参考、非承诺"**
|
||||
- 推荐方向时不要谄媚(不要把所有用户都推向"高薪 AI 岗"),诚实评估匹配度
|
||||
- 用户拒绝某个方向时不要劝,问清楚为什么然后调整
|
||||
|
||||
---
|
||||
|
||||
## 与其他 skill 的协作
|
||||
|
||||
- 用户选定方向后说"那帮我改简历" → 调用 `resume-builder`,把岗位画像传过去
|
||||
- 用户说"那针对这家公司的 JD 改一下" → 调用 `jd-resume-tailor`
|
||||
- 用户说"帮我准备面试" → 调用 `interview-prep`,把岗位画像传过去
|
||||
|
||||
输出"我已经把你的岗位画像存到 ___,下一步可以让我用 resume-builder 改简历"这样的衔接句,让 agent 在多步任务里能流转。
|
||||
|
||||
---
|
||||
|
||||
## 反模式(不要做)
|
||||
|
||||
- ❌ 一上来就问 8 个问题
|
||||
- ❌ 不问用户偏好,直接推 5 个方向
|
||||
- ❌ 不给追踪表,只在聊天里讲一通
|
||||
- ❌ 把"运营 / 产品 / 项目经理"塞给所有文科背景用户
|
||||
- ❌ 看到"AI / 大模型"就无脑推 LLM 岗,不评估实际技能匹配
|
||||
78
skills/job-intent-tracker/references/keywords_finance.md
Executable file
78
skills/job-intent-tracker/references/keywords_finance.md
Executable file
@@ -0,0 +1,78 @@
|
||||
# 金融 / 咨询 / 商科 关键词库
|
||||
|
||||
## 投行 / IBD
|
||||
|
||||
**Must-have**
|
||||
- 财务建模(DCF、LBO、Comps、Precedent Transactions)
|
||||
- 估值方法、敏感性分析、scenario analysis
|
||||
- 行业研究、招股书 / pitchbook、deal experience
|
||||
- Excel 建模、PowerPoint 高阶、Bloomberg、Capital IQ、Wind
|
||||
|
||||
**职级 & 信号**
|
||||
- Analyst(应届/1-3 年):execution、模型搭建
|
||||
- Associate(3-6 年):项目管理、客户接触
|
||||
- VP / Director:deal origination、客户关系
|
||||
|
||||
**典型雇主**
|
||||
- 外资九大行:高盛、摩根士丹利、摩根大通、美林、巴克莱、瑞银、瑞信、德银、花旗
|
||||
- 中资头部:中金、中信、华泰联合、海通、招商
|
||||
- 精品行:Lazard、Centerview、Moelis、Evercore、华兴、汉能
|
||||
|
||||
## 咨询(Consulting)
|
||||
|
||||
**Must-have**
|
||||
- 结构化思维(MECE、issue tree、hypothesis-driven)
|
||||
- Case Interview 能力:market sizing、profitability、M&A、market entry
|
||||
- 行业知识 + 客户沟通
|
||||
- 工具:PowerPoint(必)、Excel(必)、Tableau / Alteryx(加分)
|
||||
|
||||
**MBB 信号**:先 sizing 再框架,框架要 collectively exhaustive,假设清晰可证伪
|
||||
|
||||
**典型雇主**
|
||||
- MBB:McKinsey、BCG、Bain
|
||||
- Big 4 战略:Strategy&(PwC)、Monitor Deloitte、EY-Parthenon、KPMG Strategy
|
||||
- 二线:Roland Berger、Oliver Wyman、A.T. Kearney、L.E.K.
|
||||
- 内资:埃森哲战略(已并入)、华兴 Alpha、艾瑞、易观、罗兰贝格本土化团队
|
||||
|
||||
## 买方 / 二级市场(Buy Side)
|
||||
|
||||
**Must-have**
|
||||
- 行业研究、公司研究、估值模型
|
||||
- 投资逻辑、催化剂、风险点
|
||||
- 写作能力(投研报告)
|
||||
|
||||
**细分**
|
||||
- 公募基金:行业研究员 / 基金经理助理
|
||||
- 私募 / 对冲基金:基本面 / 量化 / CTA / 多策略
|
||||
- 险资 / 资管:稳健、负债端思维
|
||||
- VC / PE:早期 / 成长期 / 并购,技术 + 商业判断
|
||||
|
||||
## 量化(Quant)
|
||||
|
||||
**Must-have**
|
||||
- 数学:随机过程、统计、优化、概率
|
||||
- 编程:Python(必)、C++ / Java(HFT 必)、Q/KDB
|
||||
- 策略类型:CTA、stat arb、market making、HFT、ML 因子
|
||||
- 工具:vnpy、聚宽、米筐、Bloomberg、Wind、Tushare
|
||||
|
||||
**典型雇主**
|
||||
- 国际:Two Sigma、Citadel、Jane Street、Jump Trading、HRT、DRW
|
||||
- 国内:九坤、明汯、灵均、宽德、幻方、鸣石、致诚卓远
|
||||
|
||||
## 战略 / 商业分析(in-house)
|
||||
|
||||
**Must-have**
|
||||
- 商业模型理解、unit economics、市场地图
|
||||
- 数据驱动决策、SQL 基础
|
||||
- 战略 deck 输出、跨部门推动力
|
||||
|
||||
**典型场景**:互联网战投、车企战略、新消费品牌战略、跨国公司中国区战略
|
||||
|
||||
## 财务 / FP&A / 内审 / 税务
|
||||
|
||||
略,按需补充。
|
||||
|
||||
## 反信号
|
||||
- 投行 / 咨询岗位简历**没有 deal / case 列表** → 致命
|
||||
- 量化岗**没有策略实盘 / 回测结果** → 弱
|
||||
- 公募 / PE 岗**没有具体 coverage 行业** → 假研究员
|
||||
45
skills/job-intent-tracker/references/keywords_general.md
Executable file
45
skills/job-intent-tracker/references/keywords_general.md
Executable file
@@ -0,0 +1,45 @@
|
||||
# 通用关键词库(跨行业)
|
||||
|
||||
## 通用软技能(任何岗位都吃香)
|
||||
|
||||
- Ownership / 主人翁意识
|
||||
- 跨部门 / 跨团队协作
|
||||
- 推动落地 / drive
|
||||
- 业务 sense / 商业化思维
|
||||
- 数据驱动 / 量化思维
|
||||
- 用户同理心 / 客户导向
|
||||
- Learning agility / 快速学习
|
||||
- Ambiguity tolerance / 应对模糊
|
||||
- 影响力 / 说服力
|
||||
|
||||
## 通用硬技能
|
||||
|
||||
- SQL(半数岗位需要)
|
||||
- Excel 高阶(vlookup、pivot、power query、宏 / VBA)
|
||||
- PowerPoint / Keynote(结构化输出)
|
||||
- 英语(书面 + 口语,外企 / 跨境必备)
|
||||
- 项目管理:Jira / Asana / Notion / 飞书
|
||||
|
||||
## 通用职业资质
|
||||
|
||||
- 学历:本科 / 硕士 / 博士 + 学校 tier
|
||||
- 证书:CFA、CPA、ACCA、PMP、AWS / GCP / Azure 认证
|
||||
- 语言:托福 / 雅思 / 多语种
|
||||
|
||||
## 量化结果通用模板
|
||||
|
||||
写简历 / 画像时,**所有动作都尽量量化**。模板:
|
||||
|
||||
- "通过 ___,使 ___ 提升 X%(基线 Y → 现状 Z)"
|
||||
- "在 ___ 期间,覆盖 ___ 业务,规模 X 万 / 亿"
|
||||
- "主导 ___ 项目,缩短 ___ 时间 X%"
|
||||
- "管理 X 人团队,覆盖 X 个业务线"
|
||||
|
||||
## 转行 / 跨界叙事关键词
|
||||
|
||||
- "可迁移技能"(transferable skill)
|
||||
- "跨界视角"
|
||||
- "第一性原理"
|
||||
- "从 0 到 1 / 从 1 到 N"
|
||||
|
||||
转行候选人的画像应该突出**结构化思维 + 学习速度 + 已有 case**,而不是硬编技能词。
|
||||
54
skills/job-intent-tracker/references/keywords_internet.md
Executable file
54
skills/job-intent-tracker/references/keywords_internet.md
Executable file
@@ -0,0 +1,54 @@
|
||||
# 互联网产品 / 运营 / 项目管理 关键词库
|
||||
|
||||
用于:判断匹配度、生成画像、ATS 关键词覆盖率检查。
|
||||
|
||||
## 产品经理(PM)
|
||||
|
||||
**Must-have 信号词**
|
||||
- 需求文档(PRD)、需求评审、产品规划、产品迭代
|
||||
- 用户访谈、用户画像、JTBD、Persona
|
||||
- 数据驱动、A/B 测试、漏斗分析、留存、转化率
|
||||
- 跨部门协作、推动落地、项目管理
|
||||
- 0-1、1-N、增长、商业化
|
||||
|
||||
**方向细分关键词**
|
||||
- C 端:用户增长、社交裂变、内容生态、ugc、推荐算法理解
|
||||
- B 端 / SaaS:客户成功、续约、ARR、PLG、CRM
|
||||
- 国际化 / 出海:本地化、合规、多语言、海外支付
|
||||
- AI 产品:LLM、prompt 工程、模型评估、RAG、Agent
|
||||
- 工具类:用户体验、效率、workflow、生产力
|
||||
|
||||
**Nice-to-have**
|
||||
- SQL、Python、Figma、原型工具
|
||||
- 行业报告输出、PR 经验、对外发声
|
||||
|
||||
## 运营
|
||||
|
||||
**Must-have**
|
||||
- 用户运营、内容运营、活动运营、社群运营
|
||||
- 增长黑客、AARRR、私域、公域
|
||||
- GMV、ROI、CAC、LTV、转化漏斗
|
||||
- SOP、流程化、可复制
|
||||
|
||||
**方向细分**
|
||||
- 内容运营:选题、内容矩阵、KOL、爆款方法论
|
||||
- 用户运营:分层、生命周期、push 策略、CRM
|
||||
- 活动运营:节点营销、品效合一、预算管理
|
||||
- 社群运营:社群分层、KOC、转化路径
|
||||
- 直播 / 电商运营:选品、达人合作、GMV、复购
|
||||
|
||||
## 项目经理(PMP / TPM)
|
||||
|
||||
**Must-have**
|
||||
- 项目排期、里程碑、风险管理、stakeholder 管理
|
||||
- 敏捷 / Scrum / 看板、Sprint planning、retro
|
||||
- 跨团队协作、跨时区、escalation
|
||||
|
||||
**Nice-to-have**
|
||||
- PMP 证书、PRINCE2、CSM
|
||||
- 工具:Jira、Confluence、Asana、Notion、Linear、飞书项目
|
||||
|
||||
## 反信号(出现这些词,不是好 PM / 运营画像)
|
||||
- 大段堆砌"参与了 ___"——没有 ownership
|
||||
- 没有任何数字 / 百分比 / 量化结果
|
||||
- 全是软技能描述,没有具体动作
|
||||
87
skills/job-intent-tracker/references/keywords_tech.md
Executable file
87
skills/job-intent-tracker/references/keywords_tech.md
Executable file
@@ -0,0 +1,87 @@
|
||||
# 技术 / 研发 / 数据 关键词库
|
||||
|
||||
## 后端 / 服务端
|
||||
|
||||
**Must-have 语言 & 框架**
|
||||
- 主流语言:Java / Go / Python / C++ / Rust / Node.js
|
||||
- Web 框架:Spring Boot、Gin、FastAPI、Django、Express、NestJS
|
||||
- 微服务:Spring Cloud、gRPC、Service Mesh、Istio
|
||||
- 中间件:Kafka、RabbitMQ、Redis、ZooKeeper、Etcd
|
||||
|
||||
**系统设计信号**
|
||||
- 高并发、高可用、分布式、CAP、一致性、限流、降级、熔断
|
||||
- 存储:MySQL、PostgreSQL、MongoDB、ClickHouse、HBase、TiDB
|
||||
- 缓存策略、读写分离、分库分表
|
||||
- 容器化:Docker、Kubernetes、Helm
|
||||
- 云:AWS / GCP / 阿里云 / 腾讯云 / 火山
|
||||
|
||||
**职级判断**
|
||||
- 初级(1-3 年):能独立完成模块开发
|
||||
- 中级(3-5 年):负责子系统设计、code review、带新人
|
||||
- 高级(5-8 年):架构设计、跨团队协作、技术选型
|
||||
- 资深 / Staff(8+ 年):业务架构、技术战略、影响力
|
||||
|
||||
## 前端
|
||||
|
||||
**Must-have**
|
||||
- HTML / CSS / JavaScript / TypeScript
|
||||
- 框架:React、Vue、Angular、Svelte
|
||||
- 工程化:Webpack、Vite、Rollup、Turbopack
|
||||
- 状态管理:Redux、Zustand、Pinia、MobX
|
||||
- 全栈倾向:Next.js、Nuxt、Remix
|
||||
|
||||
**Nice-to-have**
|
||||
- 跨端:React Native、Flutter、Electron、Tauri
|
||||
- 性能优化:FCP / LCP / CLS、SSR、SSG、CDN
|
||||
- 可视化:D3、ECharts、Three.js
|
||||
- 微前端:qiankun、single-spa、Module Federation
|
||||
|
||||
## 算法 / 机器学习
|
||||
|
||||
**Must-have**
|
||||
- 数学基础:概率统计、线性代数、优化
|
||||
- 经典 ML:sklearn、XGBoost、LightGBM、特征工程
|
||||
- 深度学习:PyTorch、TensorFlow、JAX
|
||||
- 训练:分布式训练、数据并行、模型并行、混合精度
|
||||
- 部署:ONNX、TensorRT、TorchServe、Triton
|
||||
|
||||
**LLM / GenAI 方向**
|
||||
- 预训练、SFT、RLHF、DPO、PPO
|
||||
- RAG、向量检索、Embedding、Reranker
|
||||
- Prompt 工程、Tool use、Agent、MCP
|
||||
- 模型评估:benchmark、人工评估、LLM-as-Judge
|
||||
- 推理优化:vLLM、量化、KV cache、speculative decoding
|
||||
|
||||
**CV / NLP / RecSys 细分**
|
||||
- CV:检测、分割、OCR、视频理解、扩散模型
|
||||
- NLP:分类、NER、问答、对话、信息抽取
|
||||
- RecSys:召回、粗排、精排、重排、CTR / CVR、Cold Start
|
||||
|
||||
## 数据 / 数仓
|
||||
|
||||
**Must-have**
|
||||
- SQL(必考,不熟练直接 pass)
|
||||
- 数仓建模:维度建模、星型 / 雪花、ODS/DWD/DWS/ADS
|
||||
- 大数据:Hive、Spark、Flink、Presto / Trino
|
||||
- 调度:Airflow、DolphinScheduler
|
||||
- BI:Tableau、PowerBI、Superset、Quick BI
|
||||
|
||||
## 数据分析师 / 商分
|
||||
|
||||
**Must-have**
|
||||
- SQL(中级以上:窗口函数、CTE、复杂 join)
|
||||
- 业务理解:能从需求方一句话拆出指标 + 维度
|
||||
- 实验设计:A/B test、显著性、样本量
|
||||
- 工具:Python (pandas)、R、Excel 高阶、可视化工具
|
||||
|
||||
## DevOps / SRE
|
||||
|
||||
- CI/CD:Jenkins、GitLab CI、GitHub Actions、ArgoCD
|
||||
- IaC:Terraform、Pulumi、Ansible、Chef
|
||||
- 监控:Prometheus、Grafana、ELK、Datadog、SkyWalking
|
||||
- 故障处理:On-call、SLO、SLA、错误预算、事故复盘
|
||||
|
||||
## 反信号
|
||||
- 简历只有"熟悉 / 了解 / 会用" → 弱
|
||||
- 列了一堆框架,没有项目对应 → 假
|
||||
- 没有任何性能数字 / 数据规模 → 单薄
|
||||
74
skills/job-intent-tracker/references/target_profile_template.md
Executable file
74
skills/job-intent-tracker/references/target_profile_template.md
Executable file
@@ -0,0 +1,74 @@
|
||||
# 岗位画像(Target Profile)模板
|
||||
|
||||
填写时把所有 `<占位>` 都换成具体内容。空着不填等于没画像。
|
||||
|
||||
---
|
||||
|
||||
## 一、岗位基本信息
|
||||
|
||||
- **岗位名称**:<如:高级产品经理 - 用户增长方向>
|
||||
- **方向定位**:<如:B 端 SaaS / C 端工具 / 内容平台 / Fintech>
|
||||
- **职级范围**:<如:P6-P7 / 中级-高级 / Senior IC>
|
||||
- **目标城市**:<北京 / 上海 / 深圳 / 杭州 / Remote / 海外>
|
||||
- **薪资带(市场参考)**:<__k × __ 月,仅供参考,建议核实职级和城市差异>
|
||||
|
||||
---
|
||||
|
||||
## 二、典型职责描述(JD 共性)
|
||||
|
||||
罗列 3~5 条该岗位常见的职责动词 + 对象:
|
||||
- <如:负责 ___ 业务线的产品规划与迭代>
|
||||
- <如:通过数据分析定位用户流失环节并设计实验>
|
||||
- <如:跨部门协作,推动 ___ 项目落地>
|
||||
|
||||
---
|
||||
|
||||
## 三、技能要求
|
||||
|
||||
### Must-have(缺一票否决)
|
||||
- <硬技能 1,如:5+ 年 C 端产品经验>
|
||||
- <硬技能 2,如:熟练使用 SQL,能独立完成数据分析>
|
||||
- <硬技能 3,如:有从 0 到 1 的产品案例>
|
||||
|
||||
### Nice-to-have(加分项)
|
||||
- <如:有海外市场或跨境业务经验>
|
||||
- <如:懂基础前端,能跟开发深度沟通>
|
||||
- <如:有大厂背景或被收购初创经验>
|
||||
|
||||
### 软技能信号(HR / 终面会 probe)
|
||||
- <如:跨部门协调能力>
|
||||
- <如:业务 sense / 商业化 sense>
|
||||
- <如:用户同理心>
|
||||
|
||||
---
|
||||
|
||||
## 四、面试流程预期
|
||||
|
||||
按公司 tier 分层估算,给用户一个心理预期:
|
||||
|
||||
| 公司类型 | 流程长度 | 典型环节 |
|
||||
|---------|---------|----------|
|
||||
| 大厂 / Tier 1 | 4~6 周 | 简历 → 笔试 → 1 面(专业)→ 2 面(深度)→ 3 面(leader)→ HR 面 → Offer |
|
||||
| 中厂 / Tier 2 | 2~4 周 | 简历 → 1 面 → 2 面 → HR → Offer |
|
||||
| 创业 / Tier 3 | 1~2 周 | 简历 → 1~2 面(含创始人)→ Offer |
|
||||
|
||||
填写实际预期:<具体到该方向的常见流程>
|
||||
|
||||
---
|
||||
|
||||
## 五、对标公司清单
|
||||
|
||||
按 tier 分层列 3~5 家:
|
||||
|
||||
- **Tier 1(梦想 offer,匹配度需达 80%+)**:<公司 1>、<公司 2>、<公司 3>
|
||||
- **Tier 2(合理选择,匹配度 60%+)**:<公司 1>、<公司 2>、<公司 3>
|
||||
- **Tier 3(保底 / 练手,匹配度 40%+)**:<公司 1>、<公司 2>、<公司 3>
|
||||
|
||||
---
|
||||
|
||||
## 六、求职策略提示
|
||||
|
||||
- **简历重点**:突出 ___ 经验,弱化 ___
|
||||
- **作品集 / case**:建议准备 ___(如:一个完整的产品分析报告 / 一份 SQL 项目)
|
||||
- **网络渠道**:优先走 ___(内推 / 猎头 / 官网 / 拉勾 / 脉脉),少用 ___
|
||||
- **时间预算**:从准备到拿 offer,建议留 <8~12 周> 缓冲
|
||||
194
skills/job-intent-tracker/scripts/init_tracker.py
Executable file
194
skills/job-intent-tracker/scripts/init_tracker.py
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
init_tracker.py — 初始化求职投递追踪表
|
||||
|
||||
用法:
|
||||
python init_tracker.py --format xlsx --output tracker.xlsx
|
||||
python init_tracker.py --format md --output tracker.md
|
||||
|
||||
xlsx 模式生成带表头、下拉验证、条件格式的 Excel。
|
||||
md 模式生成轻量的 Markdown 表格,便于在 Notion / Obsidian / 飞书文档里粘贴。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
COLUMNS = [
|
||||
"公司",
|
||||
"岗位",
|
||||
"来源", # 猎头 / 官网 / 内推 / 招聘网站 / 其他
|
||||
"JD链接",
|
||||
"投递日期",
|
||||
"当前阶段", # 投递 / 笔试 / 一面 / 二面 / 三面 / HR面 / Offer / Reject / 沉默
|
||||
"下一步动作",
|
||||
"Deadline",
|
||||
"薪资范围",
|
||||
"内推人",
|
||||
"备注",
|
||||
]
|
||||
|
||||
STAGE_OPTIONS = [
|
||||
"投递", "笔试", "一面", "二面", "三面", "HR面", "Offer", "Reject", "沉默",
|
||||
]
|
||||
|
||||
SOURCE_OPTIONS = ["官网", "内推", "招聘网站", "猎头", "校招", "其他"]
|
||||
|
||||
|
||||
def write_md(path: Path) -> None:
|
||||
header = "| " + " | ".join(COLUMNS) + " |"
|
||||
sep = "| " + " | ".join(["---"] * len(COLUMNS)) + " |"
|
||||
sample = "| 示例公司 | 高级产品经理 | 内推 | https://... | 2026-05-07 | 投递 | 等HR反馈 | 2026-05-14 | 40-55k | 张三 | 内推码 ABC123 |"
|
||||
legend_lines = [
|
||||
"",
|
||||
"## 字段说明",
|
||||
"",
|
||||
f"- **来源**:{' / '.join(SOURCE_OPTIONS)}",
|
||||
f"- **当前阶段**:{' / '.join(STAGE_OPTIONS)}",
|
||||
"- **下一步动作**:写一句具体可执行的事,比如『5/10 前发感谢信』『等 HR 回复,5/15 未回则催』",
|
||||
"- **沉默**:超过 7 天没反馈的状态,提醒自己主动 follow up 或放弃",
|
||||
"",
|
||||
]
|
||||
content = "\n".join([
|
||||
"# 投递追踪表",
|
||||
"",
|
||||
header,
|
||||
sep,
|
||||
sample,
|
||||
*legend_lines,
|
||||
])
|
||||
path.write_text(content, encoding="utf-8")
|
||||
print(f"✓ Markdown 追踪表已生成:{path}")
|
||||
|
||||
|
||||
def write_xlsx(path: Path) -> None:
|
||||
try:
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Alignment, Font, PatternFill
|
||||
from openpyxl.worksheet.datavalidation import DataValidation
|
||||
from openpyxl.formatting.rule import CellIsRule
|
||||
except ImportError:
|
||||
print(
|
||||
"✗ 缺少 openpyxl,请先安装:pip install openpyxl --break-system-packages",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
wb = Workbook()
|
||||
ws = wb.active
|
||||
ws.title = "投递追踪"
|
||||
|
||||
# 表头
|
||||
ws.append(COLUMNS)
|
||||
header_fill = PatternFill("solid", fgColor="305496")
|
||||
header_font = Font(bold=True, color="FFFFFF")
|
||||
for cell in ws[1]:
|
||||
cell.fill = header_fill
|
||||
cell.font = header_font
|
||||
cell.alignment = Alignment(horizontal="center", vertical="center")
|
||||
|
||||
# 列宽
|
||||
widths = [16, 22, 10, 28, 12, 10, 26, 12, 14, 10, 30]
|
||||
for idx, w in enumerate(widths, start=1):
|
||||
ws.column_dimensions[chr(64 + idx)].width = w
|
||||
|
||||
# 示例行
|
||||
sample_row = [
|
||||
"示例公司",
|
||||
"高级产品经理",
|
||||
"内推",
|
||||
"https://example.com/jd/123",
|
||||
"2026-05-07",
|
||||
"投递",
|
||||
"5/14 未回则发邮件 follow up",
|
||||
"2026-05-14",
|
||||
"40-55k",
|
||||
"张三",
|
||||
"内推码 ABC123",
|
||||
]
|
||||
ws.append(sample_row)
|
||||
|
||||
# 下拉验证:来源(C 列)
|
||||
dv_source = DataValidation(
|
||||
type="list",
|
||||
formula1=f'"{",".join(SOURCE_OPTIONS)}"',
|
||||
allow_blank=True,
|
||||
)
|
||||
dv_source.add(f"C2:C200")
|
||||
ws.add_data_validation(dv_source)
|
||||
|
||||
# 下拉验证:当前阶段(F 列)
|
||||
dv_stage = DataValidation(
|
||||
type="list",
|
||||
formula1=f'"{",".join(STAGE_OPTIONS)}"',
|
||||
allow_blank=True,
|
||||
)
|
||||
dv_stage.add(f"F2:F200")
|
||||
ws.add_data_validation(dv_stage)
|
||||
|
||||
# 条件格式:F 列 = Offer 绿色,Reject 灰色,沉默 黄色
|
||||
ws.conditional_formatting.add(
|
||||
"F2:F200",
|
||||
CellIsRule(operator="equal", formula=['"Offer"'],
|
||||
fill=PatternFill("solid", fgColor="C6EFCE")),
|
||||
)
|
||||
ws.conditional_formatting.add(
|
||||
"F2:F200",
|
||||
CellIsRule(operator="equal", formula=['"Reject"'],
|
||||
fill=PatternFill("solid", fgColor="D9D9D9")),
|
||||
)
|
||||
ws.conditional_formatting.add(
|
||||
"F2:F200",
|
||||
CellIsRule(operator="equal", formula=['"沉默"'],
|
||||
fill=PatternFill("solid", fgColor="FFEB9C")),
|
||||
)
|
||||
|
||||
# 冻结首行
|
||||
ws.freeze_panes = "A2"
|
||||
|
||||
# 第二个 sheet:使用说明
|
||||
legend = wb.create_sheet("使用说明")
|
||||
legend["A1"] = "投递追踪表使用说明"
|
||||
legend["A1"].font = Font(bold=True, size=14)
|
||||
legend_lines = [
|
||||
"",
|
||||
"1. 每投递一个岗位,新增一行。",
|
||||
"2. 「来源」「当前阶段」是下拉框,直接选。",
|
||||
"3. 「下一步动作」务必写具体可执行的事 + 时间点。",
|
||||
"4. 状态超过 7 天没动静时,把「当前阶段」改成『沉默』,提醒自己跟进或放弃。",
|
||||
"5. 拿到 Offer 后,行会变绿;被拒后会变灰,方便区分。",
|
||||
"6. 建议每周固定一个时间(比如周日晚)回顾一遍这张表。",
|
||||
"",
|
||||
"如果你想看『有多少在面试中 / 投递总数 / 沉默率』等统计,",
|
||||
"可以让 Claude 帮你做一个看板(artifact)。",
|
||||
]
|
||||
for line in legend_lines:
|
||||
legend.append([line])
|
||||
|
||||
wb.save(path)
|
||||
print(f"✓ Excel 追踪表已生成:{path}")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="初始化求职投递追踪表")
|
||||
parser.add_argument(
|
||||
"--format", choices=["xlsx", "md"], default="xlsx", help="输出格式"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output", required=True, help="输出文件路径(含文件名)"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
out = Path(args.output).expanduser()
|
||||
out.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if args.format == "xlsx":
|
||||
write_xlsx(out)
|
||||
else:
|
||||
write_md(out)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
128
skills/job-intent-tracker/scripts/profile_match.py
Executable file
128
skills/job-intent-tracker/scripts/profile_match.py
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
profile_match.py — 把用户技能列表 vs 关键词库做匹配,输出匹配度报告
|
||||
|
||||
用法:
|
||||
python profile_match.py --skills "SQL,Python,产品规划,A/B测试" \
|
||||
--library internet \
|
||||
[--out report.md]
|
||||
|
||||
library 取值:internet / tech / finance / general
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
LIB_MAP = {
|
||||
"internet": "keywords_internet.md",
|
||||
"tech": "keywords_tech.md",
|
||||
"finance": "keywords_finance.md",
|
||||
"general": "keywords_general.md",
|
||||
}
|
||||
|
||||
|
||||
def extract_keywords(md_path: Path) -> list[str]:
|
||||
"""简单解析 markdown,把所有 bullet 后面的中英文词汇收集起来。"""
|
||||
text = md_path.read_text(encoding="utf-8")
|
||||
# 匹配 - 开头的行
|
||||
bullets = re.findall(r"^\s*[-*]\s+(.+)$", text, flags=re.MULTILINE)
|
||||
keywords: set[str] = set()
|
||||
for line in bullets:
|
||||
# 去掉括号内的解释、占位符、markdown 控制字符
|
||||
clean = re.sub(r"[((][^))]*[))]", "", line)
|
||||
clean = re.sub(r"_{2,}", "", clean)
|
||||
clean = clean.replace("**", "").replace("__", "")
|
||||
for token in re.split(r"[、,,//\s]+", clean):
|
||||
token = token.strip().strip("::。.\"\"''`*").lower()
|
||||
# 过滤掉只含标点 / 短横 / 数字 的词
|
||||
if not re.search(r"[一-龥A-Za-z]", token):
|
||||
continue
|
||||
if 1 < len(token) < 30:
|
||||
keywords.add(token)
|
||||
return sorted(keywords)
|
||||
|
||||
|
||||
def match_score(user_skills: list[str], lib_keywords: list[str]) -> dict:
|
||||
"""返回匹配命中、缺失、命中率。模糊匹配:包含即算命中。"""
|
||||
user_lower = [s.strip().lower() for s in user_skills if s.strip()]
|
||||
hits, missing = [], []
|
||||
for kw in lib_keywords:
|
||||
if any(kw in u or u in kw for u in user_lower):
|
||||
hits.append(kw)
|
||||
else:
|
||||
missing.append(kw)
|
||||
rate = len(hits) / len(lib_keywords) if lib_keywords else 0
|
||||
return {
|
||||
"hits": hits,
|
||||
"missing": missing,
|
||||
"rate": rate,
|
||||
"user_skills": user_lower,
|
||||
}
|
||||
|
||||
|
||||
def render_report(result: dict, library: str) -> str:
|
||||
rate_pct = f"{result['rate'] * 100:.1f}%"
|
||||
# 缺口前 20 个,避免太长
|
||||
top_missing = result["missing"][:20]
|
||||
lines = [
|
||||
f"# 岗位画像匹配报告 — {library}",
|
||||
"",
|
||||
f"- **命中率**:{rate_pct}({len(result['hits'])} / {len(result['hits']) + len(result['missing'])})",
|
||||
f"- **用户提供技能**:{', '.join(result['user_skills'])}",
|
||||
"",
|
||||
"## ✅ 命中的关键词",
|
||||
"",
|
||||
", ".join(result["hits"]) if result["hits"] else "(无)",
|
||||
"",
|
||||
"## ⚠️ 缺口(前 20 个,按字典序)",
|
||||
"",
|
||||
", ".join(top_missing) if top_missing else "(无)",
|
||||
"",
|
||||
"## 解读",
|
||||
"",
|
||||
"- 命中率 < 20%:方向不匹配,建议重新评估目标岗",
|
||||
"- 命中率 20-50%:可投但需要补关键缺口",
|
||||
"- 命中率 > 50%:核心匹配,可以重点投",
|
||||
"",
|
||||
"注意:本工具是关键词级别的粗筛,不能替代真实 JD 对照(用 jd-resume-tailor 做精准对比)。",
|
||||
]
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--skills", required=True, help="用户技能列表,逗号分隔")
|
||||
parser.add_argument(
|
||||
"--library", choices=list(LIB_MAP), required=True, help="关键词库"
|
||||
)
|
||||
parser.add_argument("--out", help="输出 markdown 报告路径,缺省直接打印")
|
||||
parser.add_argument(
|
||||
"--references-dir",
|
||||
default=str(Path(__file__).resolve().parent.parent / "references"),
|
||||
help="references 目录路径",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
lib_path = Path(args.references_dir) / LIB_MAP[args.library]
|
||||
if not lib_path.exists():
|
||||
print(f"✗ 找不到关键词库:{lib_path}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
lib_keywords = extract_keywords(lib_path)
|
||||
user_skills = [s for s in args.skills.split(",") if s.strip()]
|
||||
result = match_score(user_skills, lib_keywords)
|
||||
report = render_report(result, args.library)
|
||||
|
||||
if args.out:
|
||||
Path(args.out).write_text(report, encoding="utf-8")
|
||||
print(f"✓ 报告已生成:{args.out}")
|
||||
else:
|
||||
print(report)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user