开源项目深度解读 · 孔明 v4.0 · 第一性原理 + 破界创新

求职 Agent 工作流
从「文书工具」到「闭环系统」

Mads Lorentzen 用 Claude Code 构建的端到端求职自动化框架——评估、生成、迭代、归档四段闭环,69 份申请换 1 个 AI Engineer offer。

📦 项目:MadsLorentzen/ai-job-search ⭐ 作者:Mads Lorentzen 📅 解读:2026-07-14 🧠 解读人:孔明(祖宁专属 AI 军师)
PHASE · 01 · 第一性原理

求职的元起点是什么?

这个项目藏着一个被绝大多数 AI 求职工具忽视的"第一性原理"。

💡

破界洞察

求职的瓶颈不是"写得好",而是 "判断准 + 写得好 + 闭环跑完"
市面上 90% 的 AI 求职工具只做"生成"那一段(生成 CV / 求职信),但 没有"评估+闭环"两段——这是本项目的破界点。

元起点:求职 = 信息闭环系统

把求职拆成 6 个环节,任何一个掉链子,前面再好也没用

01

选岗

从海量岗位里筛出值得投的(而不是 HR 推荐的)

02

评估匹配

5 维评分模型(技术/经验/行为/位置/职业),避免"硬技能匹配但文化冲突"

03

文书定制

LaTeX CV + 求职信,按岗位关键词重排

04

投递追踪

CSV 记录每份申请的状态

05

面试备战

STAR 案例 + 公司研究 + Mock Interview

06

结果复盘

归档 offer/reject/沉默,反哺评估模型

PHASE · 02 · 三层架构

三层能力架构

项目不是"功能集合",而是 Layer 1 评估 + Layer 2 生成 + Layer 3 迭代 的能力栈。

L3

迭代层 · Drafter-Reviewer 双 Agent 模式

自我对抗 + 自我修订 + ATS 校验循环 → 逼近 80 分稿

L2

生成层 · LaTeX 模板 + AI 改写

CV 模板 / 求职信模板 / 编译验证 → 输出可投递文档

L1

评估层 · 五维评分 + 行为画像匹配

技能匹配 / 经验匹配 / 行为匹配 / 位置 / 职业方向 → 判断该不该投

🧠

孔明点评

三层缺一不可。没有评估层,AI 帮你生成 100 份也投错岗;没有生成层,评估再准也无法输出;没有迭代层,永远停在"60 分稿",无法逼近"80 分稿"。

PHASE · 03 · 能力清单

12 个核心能力

按"评估 → 生成 → 迭代"分类,每个能力都有明确实现路径。

🎯 评估类(4 个)

能力实现价值
五维评分模型04-job-evaluation.md5 个维度独立打分,避免单一维度误判
行为画像匹配02-behavioral-profile.md解决"硬技能匹配但文化冲突"的死亡组合
薪资基准对比salary_lookup.py接 BYO 薪资数据,识别"低薪高岗"陷阱
死线 / Deal-breaker 过滤/rank 命令硬件级筛选:过期岗位直接剔除

✍️ 生成类(5 个)

能力实现价值
CV 定制05-cv-templates.md + moderncv按岗位重排经验 bullet,强调关键词
求职信定制06-cover-letter-templates.md一岗位一语言(Danish/English 自动匹配)
PDF 编译验证lualatex + xelatex 双引擎解决 LaTeX "看起来 OK 但 PDF 排版崩"的死亡陷阱
ATS 文本层校验pdftotext 提取 PDF 文本验证 ATS 真正能解析的内容(不是渲染出来的)
相关性剪裁评分驱动剪裁 CV不按时间剪,按"相关性+独特性+求职信依赖度"评分

🔁 迭代类(3 个)

能力实现价值
Drafter-Reviewer 双 Agent/apply 命令的 Step 3单 Agent 容易自我满足,双 Agent 互相纠错
公司研究自动化WebSearch + WebFetchReviewer 自动查公司官网/新闻/团队,避免编造
PDF 视觉检查Read tool 读 PDF解决"标题孤页"/"求职信溢出第二页"等问题
PHASE · 04 · 核心工作流

/apply 的 8 步流程

这是项目的灵魂——把"输入→输出"拆成 8 步,每步都有不可跳过的验证。

STEP 0

输入解析

URL 或文本 → 提取公司/岗位/地点/语言

STEP 1

DRAFTER 评估匹配

读取 04-job-evaluation.md + 01-candidate-profile.md,5 维评分 → 评估表 + 是否建议投递

STEP 2

DRAFTER 生成 CV + 求职信

CV 用 lualatex + moderncv(必须 2 页);求职信用 xelatex + cover.cls(必须 1 页)

STEP 3

REVIEWER 子 Agent 启动(全新上下文)

内联传入草稿(不重读文件,节省 token)→ 研究公司 + 批判 + 找漏关键词

STEP 4

DRAFTER 修订

根据 Reviewer 反馈迭代修改

STEP 5

编译 + 视觉检查(不可跳过)

编译 PDF → Read tool 看 → 修复 \needspace / \enlargethispage → 重新编译

STEP 6

ATS 校验(pdftotext 提取文本层)

检查:联系方式是文本不是图标 / 阅读顺序正常 / 关键词覆盖度

STEP 7

验证清单 + 呈现

pass/fail 表格呈现给用户

Token 优化黑科技

① Reviewer 通过内联传入草稿而非重读文件(节省 ~30% token)
② 验证清单只在最后跑一次(不重复浪费)
③ 跨步骤复用 context(已读过的文件不重读)

PHASE · 05 · 设计哲学

5 条黄金原则

Mads 不只写了功能,更写了一套反共识的设计哲学。

原则 1 · 真实优先于完美

"The system never fabricates skills or experience."

CLAUDE.md 和画像用占位符 [YOUR_NAME] 强制约束——AI 只能从画像里取数据,不能编造。这是反 hallucination 的硬约束。

原则 2 · PDF 验证而非源码验证

"Looks fine in the .tex is not acceptable."

LaTeX 的页面分割不可预测——很多模板在 .tex 看着 OK,但 PDF 里标题孤页、求职信溢出第 2 页、bullet 字体悄悄 fallback。
/apply 强制走 Read tool 看 PDF,迭代修复到完美。

原则 3 · 相关性剪裁而非时间剪裁

当 CV 超过 2 页时,不按"最老"剪,而是按相关性评分剪:跟岗位关键词的匹配度、在全文中的独特性、求职信是否依赖这条 bullet。旧角色但命中关键词的 bullet 优先保留。

原则 4 · Drafter-Reviewer 双 Agent 对抗

单 Agent 容易自我满足:"我写得很好了。" 双 Agent 强制拆开:
· Drafter:专注写
· Reviewer:全新上下文,查公司、找漏洞、批判
· Drafter 拿到反馈修订
这套机制可迁移到所有 Agent 工作流(翻译 / 报告 / 写作)。

原则 5 · ATS 校验而非肉眼校验

ATS(Applicant Tracking System)读的是 PDF 文本层,不是渲染。LaTeX 经常渲染好看但文本层是垃圾:邮箱被渲染成图标(ATS 看不到)、多列布局让阅读顺序错乱、关键词被图标打断。
/applypdftotext -layout 提取文本层,验证ATS 真正能看到的内容

PHASE · 06 · 实证案例

作者亲自跑出的 funnel

地球物理学家 Mads 用这套系统 5 个月拿到 AI Engineer offer——数据自己说话。

69
定制申请(Tailored Applications)
20
初面(First Interviews)· 转化率 29%
1
签约 offer · 2026 年 6 月入职 AI Engineer
🎓

Mads 原话

"I was upfront about it with every employer I spoke to, and instead of counting against me, it usually sparked a genuine technical conversation."
—— 他主动告诉每家雇主自己在用 AI 求职,结果不是减分,反而成为技术对话的起点

PHASE · 07 · 横向对比

vs 市场上 AI 求职工具

本项目是目前唯一端到端覆盖"评估→生成→迭代→归档"全流程的开源框架。

维度本项目Resume BuilderAI Cover LetterLinkedIn Easy Apply
匹配评估5 维评分
CV 定制LaTeX + ATS模板选择1 份通用
求职信定制一岗一信模板填空通用 AI
Drafter-Reviewer双 Agent
PDF 视觉验证强制仅模板预览
ATS 文本层校验pdftotext
薪资基准BYO 数据
面试备战STAR 框架简单建议
结果归档复盘outcome.mdLinkedIn 自带
行为画像匹配PI / DISC
PHASE · 08 · 局限性

5 条局限性

任何开源项目都有边界,诚实标注才能正确使用。

🌍 国家偏丹麦

5 个 CLI 搜索工具都是丹麦招聘网站,需要 /add-portal 扩展其他国家

⚖️ LinkedIn 违反 ToS

linkedin-search 只能低频使用,作者明确标注「personal use only」

🔧 依赖 LaTeX 环境

lualatex + xelatex + 字体安装复杂,对非技术求职者门槛高

🏗️ CI 偏重

跑 LaTeX smoke + skill lint + CLI typecheck,个人项目维护成本高

📊 薪资 BYO

salary_lookup.py 需要用户自己准备 salary_data.json,没有内置数据源

PHASE · 09 · 对祖宁的启发

5 条启发

从"分析别人"到"指导自己"——这个项目对祖宁当前阶段(求职冲刺 + 实在智能 Agent 运营)有 5 条直接启发。

🌟 启发 1 · 把求职当"信息闭环系统"

不要再纠结 CV 写得好不好——建立端到端闭环才是核心:选岗 → 评估 → 文书 → 投递 → 追踪 → 复盘

🌟 启发 2 · 评估先行于生成

Mads 的核心智慧:先评估再写。祖宁的"求职作战系统"(job-research + job-asset-manager)就是这个思路,下一步:把"五维评分"做成自动化评分卡。

🌟 启发 3 · Drafter-Reviewer 模式可迁移到所有 Agent 工作流

这是孔明可以学的通用模式:
· 任何需要"对抗式校验"的场景(求职 / 翻译 / 报告 / 写作)都适用
· 关键设计:Reviewer 用全新上下文 + 内联输入(节省 token)

🌟 启发 4 · 真实优先于完美 · 反 hallucination 硬约束

Mads 的 CLAUDE.md 用占位符强制约束,祖宁的求职材料也应该用类似机制:
· 简历只能从 MEMORY.md 取数据
· 不能在求职信里编造经历
· AI 输出必须人工校验

🌟 启发 5 · 业务借鉴点(最关键)

祖宁现在做实在智能 Agent 运营,这个项目的双 Agent 架构(Drafter-Reviewer)正好可以反向迁移到:
· EAOS 的「评估 Agent + 执行 Agent」协同模式
· 客户场景:「AI 生成方案 + AI 评审方案」的双轨设计
本项目可作为"AI 协作型工作流"标杆案例,用于销售/BD 与客户对话。

把「求职」从文书游戏升级为「信息闭环系统」

这是 Mads Lorentzen 给所有 AI 求职工具的一份公开答案——也是给所有"AI 协作型工作流"的一份范本。