首页
/ career-ops 双轨职业画像配置实战:一个 profile.yml 同时驱动工程师与讲师两条赛道的求职评估

career-ops 双轨职业画像配置实战:一个 profile.yml 同时驱动工程师与讲师两条赛道的求职评估

2026-09-04 14:43:28作者:宗隆裙

当候选人同时拥有两条真实的职业主线(例如资深 AI 工程师 + 资深技术讲师)时,career-ops 默认的"单一北极星原型"配置会把其中一面压扁。本篇基于仓库中的完整示例目录 dual-track-engineer-instructor 展开,讲解如何用两个 fit: primary 的原型、双档薪酬区间、分层式 CV 结构,让 career-ops 的评估流水线在"以哪条赛道打头"这件事上做出正确判断——读完你能够完整复刻这套双轨配置,并理解它如何贯穿原型检测、报告头与面试异议应对。

一、为什么单原型配置不够用

career-ops 的默认示例都假设候选人只有一个北极星(north-star)原型。但训练营讲师、大学讲师、企业内 AI/ML 教育者、DevRel 工程师、培训架构师、内部赋能负责人这类人,简历上有两个"真岗位"。用单一原型的配置去跑,结果只能是二选一:要么工程那一面被压平,要么教学那一面被压平。

这个示例目录给出的正是解法,核心做四件事:

  1. profile.ymlarchetypes: 中配置两个 fit: primary 条目,而不是一个;
  2. 写一份 cv.md,把两边的可量化成果都放在招聘官面前,且互不稀释;
  3. 设置两档薪酬区间——工程与教学的薪资通常相差 20–40%,评估器需要知道对某份 offer 该用哪一档;
  4. 在评估时刻,针对桌面上这份具体的 JD,决定用哪条赛道打头。

示例中的人物是虚构的(Sam Rivera <sam@example.com>),仓库明确提醒:不要直接照抄这些数值,应改造为自己的。该目录包含三个文件:

文件 用途
cv.md 虚构的双轨简历(Sam Rivera),作为你自己简历的结构参考
profile.yml 带两个 primary 原型与两档薪酬区间的 profile 配置
README.md 本示例的说明文档

二、什么时候才该用双轨模式

示例文档给出了明确的使用门槛——只有以下三条全部成立时才用双轨:

  1. 两条原型都有可量化、且时效在 3 年以内的成果。不是"我讲过一次工作坊",而是真实数字:教学小时数、学员就业率、留存率、NPS;工程侧则是交付的 LOC、负责的系统、被拉低的延迟或成本。
  2. 两边的 offer 你真的都会接。如果只有一条是你真心愿意接、另一条只是勉强接受,那就用单轨,把另一面写成 summary 里的一条有力 bullet。
  3. 两条赛道处于大致相同的资深度。一个"初级教师 + staff 工程师"实际上是"恰好会带人的单轨工程师"。

反过来说,出现以下任一情况时应该回退到单轨:

  • 其中一面是业余级别。"我周末带带新人"不算教学职业。
  • 两侧资深度错配。
  • 职业早期,还说不清哪边才是主线。
  • 某一赛道的薪资期望不可谈判。那就选那个赛道,把另一面作为求职信里的差异化点。

三、profile.yml:两个 fit: primary 原型

示例的 profile.yml 是这份配置的完整蓝本。关键在 target_roles.archetypes 里放了两个 fit: primary,并各带一个 track 标签,供后续薪酬与叙事匹配使用:

target_roles:
  # North Star —— 两个 primary 赛道,而不是一个
  primary:
    - "Senior AI Engineer"
    - "Staff AI Engineer"
    - "Senior Technical Instructor (AI/ML)"
    - "Lead Curriculum Engineer"
  archetypes:
    - name: "Senior AI Engineer"
      level: "Senior/Staff"
      fit: "primary"
      track: "engineering"
      sell_when: "JD emphasizes shipping production AI, agent infra, LangChain/LangGraph, eval systems, ownership of an AI subsystem"
    - name: "Senior Technical Instructor (AI/ML)"
      level: "Senior/Lead"
      fit: "primary"
      track: "teaching"
      sell_when: "JD emphasizes curriculum, cohort delivery, bootcamp/university lectureship, DevRel education, internal enablement, instructor-led training"
    - name: "AI DevRel Engineer"
      level: "Senior"
      fit: "secondary"
      track: "hybrid"
      sell_when: "JD wants someone who can ship demos, write docs, AND speak at events / run workshops -- the natural dual-track landing zone"
    - name: "Head of AI Education / Curriculum Lead"
      level: "Lead/Manager"
      fit: "secondary"
      track: "teaching"
      sell_when: "JD wants ownership of an entire curriculum, hiring + managing instructors, working with industry partners"
    - name: "Forward Deployed AI Engineer"
      level: "Senior"
      fit: "adjacent"
      track: "engineering"
      sell_when: "JD wants client-facing technical work, fast prototyping, customer enablement -- teaching skills become a differentiator here"

几个值得注意的设计点:

  • fit 的三档语义primary = 梦想岗位、secondary = 良好匹配、adjacent = 可拉伸,这与规范示例 config/profile.example.yml 中的注释一致。双轨模式的本质就是把两个原型都提升到 primary 档。
  • track 字段是双轨的粘合剂engineering / teaching / hybrid 三个取值让"哪条赛道对应哪档薪酬、哪套叙事"有了可匹配的键。
  • sell_when 写明触发条件:不是模糊的"相关岗位都投",而是精确描述 JD 里出现什么信号时该原型胜出。评估时正是靠这类描述把 JD 信号映射到原型上。
  • 次级原型不是摆设:DevRel(hybrid)被定位为"双轨的天然落点",Forward Deployed(adjacent)则是"教学技能在这里成为差异化"的场景。从 modes/_shared.md 的原型检测表可以看到,career-ops 的内置原型体系(AI Platform/LLMOps、Agentic/Automation、Technical AI PM、Solutions Architect、Forward Deployed、Transformation)本身就承认"hybrid of 2"的分类结果,双轨配置与之衔接得很自然。

评估系统如何对待两个 primary

modes/_shared.md 定义了五维评分体系,其中"North Star alignment"维度衡量的是岗位与用户目标原型的契合度(原型数据来自 _profile.md / config/profile.yml);"Match con CV"维度则看技能、经验与 proof points 的对齐。也就是说,双轨配置不需要改动评分逻辑本身——两个 fit: primary 的原型都会参与 North Star 匹配,评估器按 JD 选择更接近的一个。README 的说法是:skill 对所有 primary 原型施加同等严格度,这正是双轨场景需要的。

四、双档薪酬:target_range + alternate_ranges

双轨模式在薪酬上做的扩展是:默认区间放工程档(通常更高),教学档放进可选的 alternate_ranges 块,评估器按检测到的赛道取对应区间。示例中的完整写法:

compensation:
  # 默认区间 = 工程区间(通常更高)
  target_range: "EUR 95K-130K"
  currency: "EUR"
  minimum: "EUR 80K"
  location_flexibility: "Remote within EU; up to 1 week/month on-site in Berlin or any EU city"

  # alternate_ranges —— 非标准字段,但双轨模式需要它
  # 评估器应选用与检测到的原型赛道匹配的那一档
  alternate_ranges:
    - track: "teaching"
      target_range: "EUR 70K-95K"
      minimum: "EUR 60K"
      note: "Teaching roles pay less than engineering. Walk-away is lower because the work is intrinsically rewarding, but not unlimited."
    - track: "hybrid"
      target_range: "EUR 90K-120K"
      minimum: "EUR 75K"
      note: "DevRel and Forward-Deployed roles -- price between the two tracks."

需要说明的是,alternate_ranges 是这个示例引入的非标准扩展——规范模板 config/profile.example.ymlcompensation 块只定义了 target_rangecurrencyminimumlocation_flexibility 四个字段。从仓库中的引用情况看,alternate_ranges 仅出现在该示例目录内,属于"约定优于解析"的写法:它依赖评估时的 agent 读取 profile 后按 track 自行匹配,而非某个脚本硬性消费该字段。如果你的 profile 走标准单轨流程,这个块可以整体省略;双轨场景下保留它并写清 note,能显著减少评估报告用错区间的情况。

配套地,narrative 块也要求"双轨自洽":

  • headline 一句话里点出两条赛道——示例是 "Senior AI engineer who also runs the curriculum -- 60K LOC in production, 5,200+ teaching hours, 80+ careers launched","稀缺组合"本身就是价值主张;
  • exit_story 把两条线拧成一个一致的求职动机;
  • superpowers 混合工程与教学两类能力;
  • proof_points 每条都带 track 标记(engineering / teaching / hybrid),与 archetypestrack 形成对照。

五、cv.md 的两种结构:分层 vs 分节

示例 README 给出两种组织简历的方式:

  • 分层式(Layered,推荐):只写一个 Professional Summary,第一句就点明双赛道;每个工作条目里同时包含工程与教学的 bullet。适用于两段经历在现实中确实交织的情况。示例的 cv.md 就是这种写法。
  • 分节式(Sectioned):分设 "Engineering Experience" 与 "Teaching Experience" 两个标题。适用于两条赛道发生在不同雇主、不必讲成一个故事的情况。

示例简历 cv.md 展示了分层式的几个关键技巧,可以直接对照自己的简历改写:

  • Summary 第一句即组合体:"Two jobs at once for the last four years: senior AI engineer ... and lead instructor at an applied AI bootcamp",并给出双边的硬数字(60K LOC、4M+ events/month 对 5,200 教学小时、80 人就业、92% 完课率)。README 的表述是:组合本身就是稀缺品,任何一面单独都不稀缺——"senior AI engineer who runs the curriculum"。
  • 独立 "Recent engineering (last 12 months)" 小节:专门对冲"你太久没写代码了"的质疑(见第七节)。
  • 每个 proof point 都带可验证锚点:NPS 71、完课率 92%(对比行业基线 60–75%)、47 个合并 PR 等,与 profile.ymlproof_points.hero_metric 一一对应。

六、评估报告:验证 Archetype:

双轨配置下,career-ops 评估一份 offer 时应自动完成三件事:检测 JD 面向哪个原型、选用匹配的薪酬区间、选用匹配的 CV 侧重点与 STAR 故事。由于评分逻辑对全部 primary 原型一视同仁,两个 fit: primary 条目"基本就能正常工作"。

但示例特别强调一个验证点:检查报告头部的 Archetype:。career-ops 的报告头固定包含报告编号、分数与原型,例如 modes/apply.md 中的邮件草稿就引用 Report #NNN | Score: X.X/5 | Archetype: [type],各本地化市场模式(如 modes/ja/kyujin.mdmodes/hi/naukri.md)同样携带该字段。如果检测选错了原型,报告后续的薪酬对照、叙事框架、STAR 故事全都是错的——所以这是双轨用户读每份报告时应先扫一眼的一行。

七、双轨特有的面试异议与失败模式

双轨简历会触发单轨简历不会触发的两类质疑,示例把它们整理成可直接套用的应对模板。

"你也在教学,为什么还来投工程岗?"

"Teaching is how I keep the engineering sharp. I have to ship code that students can actually run, debug, and extend, so I cannot get away with hand-waving. The reason I am here for [role] is [specific reason about the team / product / scope]. Teaching stays as a side activity, not a competing job."

要点:以工程成果打头;把教学作为可信度信号提一句("我讲过 Transformer 大概 200 次,所以清楚大家会在哪里卡住"),而不是并行的第二个承诺。

"你确定想教课?你工程背景这么强,会无聊的。"

"The students I want to teach are going to ship production systems, not pass a quiz. My engineering background is exactly why I can get them there. I have done both for [N] years. This is not a step down. It is the same work in a different format."

要点:以教学成果打头(小时数、就业率、留存、NPS);工程背景作为可信度证明,而不是退路。

"你为什么不干脆选一边?"

"Because the combination is the actual value. Engineers who can teach end up leading onboarding, writing internal docs people actually read, and running technical interviews. Teachers who can ship get hired to design curriculum that survives contact with production. I am looking for roles where both matter."

过度/不足资格的双重风险

双轨候选人会被纯教学岗读成"过度qualified"("你会六个月后跑去干工程"),又被纯工程岗读成"不足qualified"("你两年没全职写代码了")。两者都会杀死申请。示例给出的缓解矩阵:

风险 CV 中的缓解 面试中的缓解
教学岗被读成过度资格 Summary 以课程设计与学员成果打头,而不是 LOC 讲一个你重写的课程如何改变了学员结果的案例,展示你关心教学法而不只是交付
工程岗被读成不足资格 加一个 "Recent Engineering" 小节,列出过去 12 个月的交付 带代码。面试中直接打开最近一个月写的 PR,用大白话讲架构决策

这个矩阵与 cv.md 的结构是呼应的:简历里的 "Recent engineering (last 12 months)" 小节正是为第二行"不足资格"风险准备的。

八、把示例落到你自己的 Data Root

把这套模式落到实际使用时,路径映射关系如下(对应 README 的 "Related files" 一节,已转换为仓库根目录起的相对路径):

  • examples/cv-example.md —— 单轨简历示例,用于对照双轨写法的差异;
  • config/profile.example.yml —— 规范 profile schema,本示例是在它基础上做双轨扩展(新增 tracksell_whenalternate_ranges 三个非标字段);
  • modes/_shared.md —— 原型如何进入评分与框架逻辑的权威位置(原型检测表、五维评分、报告规则);
  • modes/_profile.template.md —— 用户侧原型表与自适应框架(Adaptive Framing)模板:双轨用户应在这里为两条原型各配一行"该原型下强调什么、proof 来自哪里";
  • CONTRIBUTING.md —— 本示例即按其中 "Add example CVs for different roles" 的指引贡献的。

操作上是把示例的 profile.yml 拷贝到你 Data Root 下的 config/profile.yml 后按自己数据改写,再按第六节逐份核对报告的 Archetype: 行。需要留意的前提:alternate_rangestrack/sell_when 目前是该示例约定的扩展字段,规范模板未定义其解析逻辑,它们依赖评估 agent 在读取 profile 时遵循注释约定;如果你的流程是高度脚本化、不走 agent 读取的,这两个扩展的收益会打折扣,此时更稳的做法是把两条赛道的区间都写进标准字段并在 _profile.md 里用自然语言写死"哪类 JD 用哪档"。

小结

双轨模式的全部技巧可以浓缩为一句话:archetypes 里放两个 fit: primary 并打上 track 标签,在 compensation 里配好与标签对应的 alternate_ranges,用分层式 CV 让两侧成果互相加证,最后靠每份报告的 Archetype: 行验证选边是否正确。 示例目录中的虚构人物 Sam Rivera 提供了每个文件级的参照物,把数值换成你自己的真实数字,这套配置即可直接跑通 career-ops 的评估流水线。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384