career-ops 的候选人侧写作启发式:从风险图到六秒清晰度门控的简历与申请写作规范
在 career-ops 这套开源 AI 求职工作流中,modes/heuristics/recruiter-side.md 是所有"候选人面向文档"(CV 摘要、项目要点、求职信、申请表答案、LinkedIn 消息、招聘官话术、面试准备)共享的写作启发式核心:它要求生成任何面向招聘者的内容前,先建立一张招聘官视角的"风险图",再用"六秒清晰度门控"和"商业价值要点公式"组织内容,最后用"ATS 现实检查"守住可解析性底线。读完本文,你将掌握这套启发式在 pdf、apply、interview-prep 等模式中的实际加载路径与调用时机,并能把它移植到你自己的简历写作流程中。
一、文件定位:非路由模式的共享启发式
在 career-ops 的 modes/ 目录中,绝大多数文件都是"一个文件一个模式"(如 pdf.md、apply.md),由 AI 编码 CLI 读取后执行。而 modes/heuristics/ 子目录是例外——它存放的是被其他模式加载的共享写作启发式,本身不是可路由模式。这一点可以从源码结构中得到确认:modes/README.md 的子目录表中明确写道:
heuristics/— Shared candidate-facing writing heuristics loaded by other modes —recruiter-side.mdgoverns PDF summaries, bullets, cover letters, form answers, and outreach
modes/pdf/hm-audit.md 也用一个类比说明了它的加载方式:heuristics/recruiter-side.md 是通过加载它的模式(如 pdf)被"间接到达"的,而不是有独立模式名。它没有出现在路由表中,没有独立的模式名——这是设计意图,而非遗漏。
在数据契约层面,test-all.mjs 的系统文件清单中把 modes/heuristics/recruiter-side.md 列为必须存在的系统文件之一(第 1676 行),与 modes/pdf.md、modes/scan.md 等核心模式并列,意味着它是系统完整性校验的一部分——缺失会导致 test-all.mjs 的 data contract 校验失败。
适用范围与边界
文档开篇即划定适用边界,这是整套启发式最重要的前提:
- 适用:所有候选人面向的产出——PDF 摘要、要点(bullets)、求职信、表单答案、LinkedIn 消息、招聘官话术、面试准备;
- 不适用:内部评估报告(career-ops 的 A–H 评估块、评分与分析),除非某个模式显式要求分析。
这个边界与 modes/_writing.md 的"Professional Writing & ATS Compatibility"一节互相印证:该节同样声明规则只作用于"最终进入候选人面向文档的全部生成文本",并直接指引用户去读 modes/heuristics/recruiter-side.md 获取风险映射、六秒清晰度、商业价值要点与 ATS 现实检查的完整规则。modes/ja/_shared.md(日文模式共享上下文)也镜像了同样的指引,说明该启发式是跨语言模式共享的单一事实来源。
二、招聘官侧风险图(Recruiter-Side Risk Map)
核心机制
在生成任何 CV、求职信、表单答案、招聘官话术或面试准备之前,先建立一张内部风险图,其结构是一个三列表格:
| 潜在疑虑(Potential doubt) | CV/报告中的证据(Evidence) | 候选人侧的修复方式(Candidate-facing fix) |
|---|---|---|
| 他们能用这套技术栈吗? | 匹配的工具、系统、项目 | 在真实语境中放入精确的技术栈 |
| 他们够资深吗? | 所有权、范围、权衡、带人 | 以资深行为打头,而非仅凭年限 |
| 领域相关吗? | 相似用户、工作流、规模、约束 | 把相邻证明翻译成 JD 的语言 |
| 有物流阻塞吗? | 地点、薪资、工作许可、可入职时间 | 仅在表单/招聘官问到时才回答 |
| 申请是通用的吗? | 薄弱或宽泛的要点 | 围绕该岗位的具体问题重写 |
文档对此有三条硬性约束:
- 用图来降低审阅风险,而非展示图本身——"除非模式输出显式要求分析,否则不要打印它"。风险图是内部工作产物;
- 绝不编造证据来闭合疑虑。当 CV 中确实没有对应证据时,风险图只是暴露问题的工具,而不是要求 Agent 硬编出"证据";
- 修复动作必须与具体文档部分挂钩(
pdf模式 Step 9 要求明确"which document section should address each doubt")。
在各模式中的实际调用
风险图是 career-ops 多条流水线之间的共享推理结构,仓库中可以看到至少四处加载点:
- modes/pdf.md Step 9:生成定制 CV 前,"Build an internal recruiter-side risk map from the JD using
modes/heuristics/recruiter-side.md: likely doubts, matching evidence, and which document section should address each doubt"。随后 Step 12 要求"按 JD 相关性和按风险图重排经历要点:最强匹配证据放最前"。也就是说,风险图不只是检查表,它直接驱动了 CV 内容的排序; - modes/apply.md Step 7:为申请表每个问题生成答案时,用风险图"识别该问题想解决什么疑虑(动机、技术栈匹配、物流、薪资、工作许可、可入职时间、资深度),并直接回答那个疑虑"。这把风险图从"文档维度"推广到了"逐题维度"——每道表单题背后都对应招聘官的一个疑虑;
- modes/interview-prep.md 输入 6:面试准备的输入之一是"评估/PDF/申请流程中已有的招聘官侧风险图",并说明要"使用
modes/heuristics/recruiter-side.md中的风险类别来确认面试流程必须解决的风险"。其 Step 4 的hiring-manager受众包进一步要求"Risk map closure——确保评估中最可能的疑虑用具体证据而非热情来回答"; - 日文模式 modes/ja/oubo.md:本地化的
apply模式同样在第 6 步引用该文件,说明风险图规则随模式翻译一并继承。
从源码结构看,这个设计形成了一个贯穿"评估 → CV → 申请 → 面试"的风险一致性链:同一条疑虑(例如"领域是否相关")在 CV 中被翻译为 JD 语言的要点、在申请表中被逐题回答、在面试准备中成为必须闭合的证明点,避免候选人在不同材料中给出互相矛盾的"修复方式"。
三、六秒清晰度门控(Six-Second Clarity Gate)
规则本体
对每一份 CV/PDF 和求职信,页面顶部三分之一必须让目标岗位的匹配度"不可能被错过",具体包含五个要素:
- 目标岗位/原型(target role/archetype);
- 最强匹配的技术栈或领域;
- 一个生产环境或业务结果(one production or business outcome);
- 地点/远程匹配度——仅当对该文档合适时;
- 可用的作品集/案例研究链接(如相关)。
判定标准是反证式的:"如果一个招聘官必须从散落的要点中推断匹配度,就重写摘要和第一段经历要点。"——即门控不通过的唯一信号是"需要推断",通过的标准是"不需要推断"。
在 pdf 模式中的落地位置
modes/pdf.md 把该门控作为定制流程中的两道独立工序:
- Step 9:先建风险图(上文已述);
- Step 15:定制完成后执行"Apply the six-second clarity gate: top third must make target role, strongest fit, and proof obvious"。
它与 pdf 模式的"Section order (optimized '6-second recruiter scan')"设计相互呼应:该模式规定的版面顺序(大字号头部 → 3–4 行关键词密集摘要 → 核心能力网格 → 工作经历 → 项目 → 教育/认证 → 技能)本身就是为"六秒扫描"服务的排版——门控管"内容够不够直白",版面顺序管"直白内容出现在第几秒"。
与 Markdown 加粗语法的协同
modes/pdf.md 的 "Markdown bold" 一节给出了一个具体的协同点:在 JSON 渲染载荷的 bullets 中用 **…** 包裹量化结果,"typically the quantified result a recruiter should catch in the six-second scan",例如:
"bullets": ["Cut p99 latency from 840 ms to **120 ms** across 14 services"]
modes/latex.md 对 LaTeX 侧的加粗也用了同样的表述("the quantified result a recruiter should catch in the six-second scan")。同时两份文档都强调一条与风险图同源的原则:加粗只重排注意力,不增加声明——加粗文本与其余要点适用同一套"禁止编造"规则,且"加粗每句等于没加粗"。可以推断,"六秒清晰度"在 career-ops 中不仅是一条写作规则,还是一条贯穿 HTML 与 LaTeX 两条渲染管线的排版语义。
四、商业价值要点公式(Business-Value Bullets)
优选句式
文档给出的核心公式是:
Action + system/scope + tool/approach + outcome + proof
即每个要点由五段构成:动作 + 系统/范围 + 工具/方法 + 结果 + 证据。在此之上给出四种可复用模板:
Resolved [problem] in [system], improving [business/system effect].Built [capability] with [tools], enabling [user/team outcome].Migrated [old] to [new], reducing [risk/cost/latency/debt].Improved [metric] from [before] to [after] by [technical action].
注意第四条模板的隐含要求:必须有 before/after 两个数字,且技术动作要能解释这个数字变化——这与风险图中"最强匹配证据"的诉求一致。
弱开头黑名单
当更强的所有权表述成立时,避免以下弱开头:
- "helped"(帮助)
- "assisted"(协助)
- "responsible for"(负责)
- "worked on"(参与了)
- "participated in"(参加了)
该黑名单与 modes/_writing.md 的"避免陈词滥调"列表形成两层防线:_writing.md 管词汇层面的 AI 味("leveraged"、"spearheaded"、"passionate about" 等),recruiter-side.md 管句式层面的所有权弱化。两者的关系在 modes/_writing.md 中有明确说明:若存在用户层的 voice-dna.md,其禁用词表是更完整的权威版本并优先适用;_writing.md 内置列表只是没有该文件时的兜底。
五、ATS 现实检查(ATS Reality Check)
规则清单
文档的立场一句话概括:为可解析性和人工审阅优化,而不是为"ATS 技巧"优化(Optimize for parseability and human review, not "ATS hacks")。具体六条:
- 精确的 JD 关键词只出现在真实语境中(exact JD keywords only in truthful context);
- 无隐藏文本;
- 无关键词堆砌;
- 无白字(white-font)技巧;
- 无破坏解析的装饰性版面;
- 不写用户事实来源中不存在的技能或指标。
第 6 条是全部条款中最强的一条,它与整个仓库的"事实门"(fact gate)机制对齐:modes/pdf.md Step 19 规定 PDF 渲染前必须通过 node verify-cv-facts.mjs {html-path} 这一硬门控,"若失败,停止并修正生成的 HTML——删除编造的指标,或把已验证证据补进 cv.md、article-digest.md、config/cv-facts.json"。ATS 现实检查是"内容层"的诚实约束,verify-cv-facts.mjs 是"执行层"的硬校验。
源码印证:verify-ats.mjs 的确定性结构检查
仓库提供了一个与这套规则直接对应的确定性工具 verify-ats.mjs。它的文件头注释自我定位为 verify-cv-facts.mjs 的"孪生":后者守护 CV"声称了什么",前者守护"ATS 能否解析它"——无 LLM、无网络、无写入,读取一份 CV HTML,输出 0–100 结构分、字母等级和具体可修复问题列表。其权重表把"ATS 现实检查"翻译成了可审计的打分维度:
const WEIGHTS = {
text: 15, // 存在真实可选文本(非图片/栅格化)
sections: 20, // 标准、可识别的章节标题
contact: 15, // 正文中可达的邮箱(+电话)
layout: 20, // 单栏,无布局表格/多栏 CSS
images: 10, // 无烘焙进图片的 CV 文本
fonts: 10, // 标准、可嵌入字体
charset: 5, // 声明 UTF-8
hidden: 5, // 无隐藏文本/关键词堆砌
};
其中 hidden: 5 权重直接对应"无隐藏文本/无关键词堆砌"条款,layout: 20 对应"无破坏解析的装饰性版面"。用法与退出码语义如下:
node verify-ats.mjs output/cv-{candidate}-{company}.html
node verify-ats.mjs <cv.html> --keywords "python,kubernetes,rag"
node verify-ats.mjs <cv.html> --min-score 80 --json
退出码 0 表示结构分不低于 --min-score(默认 70)且无 critical 问题;关键词覆盖率只报告、从不改变结构分(advisory)。modes/pdf.md 明确区分了它的角色:"deterministic, read-only, and advisory——报告 0–100 分与具体问题,但从不阻断生成(不像 Step 18 的 verify-cv-facts.mjs 事实门)"。另外 modes/ats.md 是与之配套的模式文档,提供了完整的使用说明。
从源码结构看,verify-ats.mjs 的 ATS_SAFE_FONTS 白名单还内置了模板随附的 CJK/阿拉伯文回退字体(如 Noto Sans CJK、PingFang SC),确保"真实的多语言 CV 永不被惩罚"——这与 career-ops 多语言 CV 模板(如 templates/cv-template.zh-minimal.html)的设计目标一致。
六、四块内容的协作关系与整体调用链
把文档的四块内容放回 career-ops 的流水线中,可以整理出一条完整的调用链:
JD 输入
└─ Step 9: 建风险图(五类疑虑 × 证据 × 修复方式) ← recruiter-side.md
└─ 要点重写: 商业价值公式 + 弱开头黑名单 ← recruiter-side.md
└─ 关键词注入: 仅真实语境(NEVER invent) ← recruiter-side.md
└─ Step 15: 六秒清晰度门控(顶部 1/3) ← recruiter-side.md
└─ Step 19: verify-cv-facts.mjs 事实门(硬阻断)
└─ verify-ats.mjs 结构检查(advisory,0–100)
└─ generate-pdf.mjs 渲染(含 Unicode 归一化)
几点值得注意的分工:
- 风险图决定"写什么、放哪里":它是唯一与 JD 深度耦合的构件,负责把 JD 的隐性疑虑显式化;
- 六秒门控决定"是否合格":它是一个反证式验收标准,不合格就回退重写摘要与首段要点;
- 商业价值公式决定"怎么写":它约束每个要点的句法结构;
- ATS 现实检查决定"怎么活":它守住解析性与诚实性的底线,由
verify-cv-facts.mjs(硬门)与verify-ats.mjs(咨询分)两道代码关卡执行。
modes/pdf.md 的 "Recruiter Review Gates" 一节可以视为这套启发式的验收口径摘要:"摘要应回答'这个人瞄准什么岗位,为什么是这一家';首屏应呈现 1–2 个映射到 JD 最高风险要求的证明点;要点强调结果、系统、用户或业务影响,而非任务清单;地点、工作许可、薪资、可入职时间等物流信息只在市场和画像合适时才进 CV,否则放到表单答案或招聘官话术里"——这与风险图中"物流阻塞只在被问到时回答"一列完全对应。
七、可复用的要点
如果你要把这套启发式移植到自己的 AI 求职工作流,仓库给出的最小可复制单元是:
- 风险图表格:五个标准疑虑类别(技术栈、资深度、领域、物流、通用感)×(证据、修复方式),生成任何面向招聘者的材料前先在内部建立,默认不打印;
- 五要素门控:顶部三分之一必须自含目标岗位、最强匹配栈、一个生产/业务结果、(酌情)地点匹配、(酌情)作品集链接;"需要推断即重写"是唯一的判定逻辑;
- 要点公式:
Action + system/scope + tool/approach + outcome + proof,配合弱开头黑名单(helped / assisted / responsible for / worked on / participated in); - ATS 六条禁令:关键词仅在真实语境、无隐藏文本、无堆砌、无白字、无破坏性版面、无事实来源之外的技能与指标;
- 两道可执行关卡:硬性事实门(生成即阻断)+ 确定性结构分(只报告不阻断),二者职责分离——前者管"没编造",后者管"能解析"。
需要说明的适用前提:这套启发式定义于 Markdown 提示文件层,由 career-ops 的 AI 编码 CLI(Claude Code、Codex、OpenCode 等)在执行 pdf、apply、interview-prep、cover 等模式时读取生效;它本身不包含可独立运行的代码,其"代码化"程度体现在 verify-ats.mjs 与 verify-cv-facts.mjs 两道校验脚本,以及 test-all.mjs 对该文件存在性的契约校验上。所有路径均相对于仓库根目录,可在当前仓库中直接查证。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00