Resume — Alex Chen
Location: Austin, TX Email: alex@example.com LinkedIn: linkedin.com/in/alexchen Portfolio: alexchen.dev GitHub: github.com/alexchen
Professional Summary
Full-stack AI engineer with 6 years building production ML systems. Led the ML platform at a Series B fintech (2020-2024), scaling from 2 models to 15+ in production. Built real-time fraud detection (99.7% precision, $2M/year saved), recommendation engine (18% uplift), and an internal MLOps platform serving 4 engineering teams.
Work Experience
TechFin Corp -- Austin, TX
Senior ML Engineer / ML Platform Lead 2020-2024
- Led ML platform team (3 engineers), built internal MLOps tooling: model registry, A/B testing framework, feature store
- Designed real-time fraud detection pipeline: Kafka → feature computation → model inference → decision engine. 99.7% precision at 50ms p99
- Built recommendation engine for lending products: collaborative filtering + LLM reranking. 18% conversion uplift
- Reduced model deployment time from 2 weeks to 4 hours with CI/CD pipeline (GitHub Actions + SageMaker)
- Established model monitoring: drift detection, performance dashboards (Grafana), automated retraining triggers
DataStartup Inc -- Remote
ML Engineer 2018-2020
- Built NLP pipeline for document classification (BERT fine-tuning, 94% accuracy on legal docs)
- Implemented search ranking with learning-to-rank models
- Set up experiment tracking with MLflow and model versioning
Projects
- FraudShield (Open Source) — Real-time fraud detection framework. Kafka Streams + feature store + model serving. 500+ GitHub stars
- LLM Eval Toolkit (Open Source) — Evaluation framework for LLM applications. Supports custom metrics, regression testing, CI integration
Education
- MS Computer Science, UT Austin (2018)
- BS Computer Science, UC Berkeley (2016)
Skills
- ML/AI: PyTorch, TensorFlow, scikit-learn, Hugging Face, LangChain
- MLOps: SageMaker, MLflow, Kubeflow, Airflow, Feature Store
- Infra: Kubernetes, Kafka, Redis, PostgreSQL, AWS
- Languages: Python, Go, TypeScript, SQL
## 逐节拆解:这个结构为什么长成这样
### 联系信息块:加粗键名 + 冒号 + 纯值
```markdown
**Location:** Austin, TX
**Email:** alex@example.com
联系信息用"加粗键名 + 冒号"的 Markdown 惯例,五个字段(Location / Email / LinkedIn / Portfolio / GitHub)覆盖了简历评估与后续申请流程需要触达候选人的最小集合。注意样例刻意用 --(双连字符)而非 em-dash 书写公司名与城市(TechFin Corp -- Austin, TX),以及用普通连字符写年份区间(2020-2024)——这与仓库的 ATS 归一化约定一致,下文会专门讲。
Professional Summary:三段式浓缩,全部可验证
摘要不是自我评价,而是三句带数字的"简历预告片":
- 总量声明——"6 年生产级 ML 系统经验";
- 规模声明——"从 2 个模型扩到 15+ 个生产模型";
- 结果声明——"99.7% 精度、每年节省 $2M"、"18% 转化提升"、"服务 4 个工程团队"。
这一写法对应 examples/ats-normalization-test.md 中被明令禁止的套话清单——"passionate about machine learning"、"results-oriented professional with a proven track record"、"5+ years of experience in artificial intelligence" 等空洞表述在生成内容中"从一开始就不该出现"。对比之下,样例摘要里的每个形容词背后都挂着一个可复核的数字。
同时,AGENTS.md 对写作有硬性的事实约束:任何量化声明必须能溯源到主文件(cv.md、config/profile.yml、modes/_profile.md 等),衍生文件(如面试准备文档)中的数字不能反哺为主事实。因此写摘要时,先保证这些数字在你自己经历里真实存在,才值得写进来。
Work Experience:标题块 + 全量化 bullet
每段经历的排版遵循固定四元组:
###三级标题 = 公司名 + 城市/远程标记;- 加粗行 = 职位(
**Senior ML Engineer / ML Platform Lead**); - 独立一行 = 时间段(
2020-2024); - 其下是 bullet 列表。
看 TechFin Corp 的 5 条 bullet,可以提炼出 career-ops 示范的"证明点"句式:
| bullet | 结构 | 证明点 |
|---|---|---|
| 带领 3 人团队构建 MLOps 工具链 | 职责 + 交付物 | model registry、A/B testing framework、feature store |
| 实时反欺诈管道 | 架构 + 指标 | Kafka → 特征计算 → 模型推理 → 决策引擎,99.7% 精度 @ 50ms p99 |
| 贷款产品推荐引擎 | 技术路线 + 业务指标 | 协同过滤 + LLM 重排,18% 转化提升 |
| 部署时间从 2 周降到 4 小时 | 前后对比 | CI/CD(GitHub Actions + SageMaker) |
| 模型监控体系 | 持续性工程 | 漂移检测、Grafana 面板、自动重训触发 |
每一条都是"做了什么 + 用了什么 + 结果量化"的三段式,没有一条停留在"负责……相关工作"这种无法被 ATS 关键词匹配、也无法被评估模型判分的描述。第二条 bullet 里的 → 箭头是刻意的:它用 ASCII 可读的方式表达管道流向,而在导出 PDF 时会被归一化为英文介词(见下文 ATS 一节)。
Projects:开源项目承担"作者身份"证明
- **FraudShield** (Open Source) — Real-time fraud detection framework. ... 500+ GitHub stars
- **LLM Eval Toolkit** (Open Source) — Evaluation framework for LLM applications. ...
Projects 在 resume 变体中只保留两个开源项目,各带一条"能力声明 + 技术栈 + 可验证规模"。这里要特别注意 AGENTS.md 中的红线:作者身份声明不可谈判——除非 cv.md 或 article-digest.md 明确把某个项目归属于你,任何下游流程都不允许声称你 author 了某个仓库/框架/工具;"用过 X" 不等于 "造了 X"。因此样例把开源项目放在 Projects 而非 Experience 里,让归属关系一目了然。
Skills:按维度分组,而不是平铺关键词
- **ML/AI:** PyTorch, TensorFlow, scikit-learn, Hugging Face, LangChain
- **MLOps:** SageMaker, MLflow, Kubeflow, Airflow, Feature Store
- **Infra:** Kubernetes, Kafka, Redis, PostgreSQL, AWS
- **Languages:** Python, Go, TypeScript, SQL
技能按 ML/AI、MLOps、Infra、Languages 四个维度分组并加粗前缀。这种分组不是美观问题,而是下游工具链的输入格式:upskill.mjs 会从 cv.md / config/profile.yml 提取"已知技能"来做加权技能差距图;jd-skill-gap.mjs 是零 LLM 的 JD 技能分类器,对照 cv.md 输出 existing / supportedByResume / gap 三态,且永远不会自动往 cv.md 里加声明。技能条目越具体(Kubeflow 而非"分布式系统"),这些离线工具的可匹配性越高。
ATS 友好书写:为什么样例避开了花哨 Unicode
examples/ats-normalization-test.md 是 generate-pdf.mjs 文本归一化通道的回归夹具,列出了所有会导致 ATS 解析错误或乱码的 Unicode 码点:
| 名称 | 码点 | 归一化结果 |
|---|---|---|
| Em-dash | U+2014 | - |
| En-dash | U+2013 | - |
| 弯引号(双/单) | U+201C/D、U+2018/9 | " / ' |
| 省略号 | U+2026 | ... |
| 零宽空格等 | U+200B 等 | 删除 |
| 不换行空格 | U+00A0 | 普通空格 |
而实现位于 generate-pdf.mjs 的 sanitizeText 函数中,它在上面之外还处理了两类 PDF 文本提取器容易丢失的字符:
// Arrows often stripped by PDF text extractors — replace with ASCII for ATS safety.
t = t.replace(/\s*\u2192\s*/g, () => { bump('right-arrow', 1); return ' to '; });
t = t.replace(/\s*\u2190\s*/g, () => { bump('left-arrow', 1); return ' from '; });
// Middle dot and bullet glyphs garble in some extractors — replace with pipe.
t = t.replace(/\s*\u00B7\s*/g, () => { bump('middot', 1); return ' | '; });
t = t.replace(/\s*\u00B7\s*/g, () => { bump('middot', 1); return ' | '; });
(见 generate-pdf.mjs。)每次替换都会计入统计,生成 PDF 时日志会打印类似 🧹 ATS normalization: N replacements (em-dash=X, smart-double-quote=Y, ...) 的行——examples/ats-normalization-test.md 末尾给出了端到端验证命令:node generate-pdf.mjs /tmp/dirty-cv.html /tmp/clean-cv.pdf --format=a4。
回到样例简历:Kafka → feature computation → model inference → decision engine 这条 bullet 在 PDF 导出后会变成 Kafka to feature computation to model inference to decision engine,在 ATS 纯文本检索中依然能命中 "Kafka"、"inference" 等关键词。这说明两件事:
- 在源 Markdown 里用
→是安全的(导出层会兜底归一化),但用--写年份区间和公司分隔、避免弯引号和 em-dash 则是"从源头零替换"的最稳写法; - 归一化只修字符,不修文风——examples/ats-normalization-test.md 明确写道 "The normalizer does NOT fix writing style",空洞套话属于写作期就被 modes/_shared.md 规则禁止的内容。
career-ops 如何消费这份文件:从模板到流水线输入
定位与归属:User Layer 的规范事实源
在 career-ops 的分层模型里,cv.md 属于 User Layer(永不自动更新的个人层),与 config/profile.yml、modes/_profile.md 并列,AGENTS.md 将其列为个性化数据的核心。AGENTS.md 进一步明确:"项目根目录的 cv.md 是规范 CV"。也就是说:examples/resume-example.md 只是模板,你基于它写出的根目录 cv.md 才是整个系统的事实源。
首次使用:doctor 检查 + 结构化建档
examples/README.md 给出的落地路径只有四步:
npm run doctor检查前置条件;- 以
cv-example.md(或本文件的 resume 变体)为结构指南写出cv.md; - 可选:用 article-digest-example.md 作为
article-digest.md的模板(能提升评估质量); - 职业跨越两个典型画像(如工程师 + 讲师)时,参考 examples/dual-track-engineer-instructor/ 的完整配置。
AGENTS.md 定义了 cv.md 缺失时的建档流程:Agent 会请求你粘贴现有简历、LinkedIn 信息或口述经历,然后"从你提供的任何材料创建 cv.md——干净的 Markdown,带标准分区(Summary、Experience、Projects、Education、Skills)"。这份样例的五级结构(Professional Summary / Work Experience / Projects / Education / Skills)正是该流程的目标形态。
分区顺序有守卫:不能随意调序
cv.md 的分区标题不是装饰,导出 HTML/PDF 时其顺序会被校验。tests/cv-section-order.test.mjs 中固定的期望顺序是:
const expected = ['Professional Summary', 'Work Experience', 'Projects', 'Skills', 'Certifications', 'Education'];
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 StartedRust0623
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