●jialong@columbia:~/site$cat ./lab/resume-tailor.md
> 实验室 · Waaangjl/resume-tailor

resume-tailor

仓库:
Waaangjl/resume-tailor
语言:
Python · LaTeX
年份:
2026 · 在做

这是一个很小的 Python 工具。给它一份 LaTeX 简历和一份职位描述(JD),它只重写简历里的经历要点,让措辞更贴近这份工作。唯一不能越过的线,是编造。如果原文写着「2025 年 3 月搭建一份含 40 个工作表的现金流模型」,工具可以换动词、调整重点、把更相关的结果提前,却不能把 40 改成 50,也不能把 3 月改成 2 月。

为什么写它

SIPA 的集中招聘季像一台不停的跑步机。十五家银行、十家咨询公司、十二只气候基金,每一家都要单独修改简历和求职信,截止日期却常常挤在同一个星期日。

修改本身并不烧脑。它只是大量小心的复制粘贴,加上一连串「哪条经历应该放在前面」的微小判断。

第一轮我老老实实用手改。改到第七份时,我发现自己一直重复同样几个动作:调整时态,重排第一条经历;职位描述提到 Python,就在不增加事实的前提下,把已有技能写得更具体,例如「Python(pandas、statsmodels)」。这种边界清楚、范围很小的改写,正是语言模型擅长的事。

于是我写了它。

它怎么工作

输入一份 .tex 文件后,工具会找出每条 \item{...},把完整简历、职位描述、岗位级别和用户设置的限制一并交给模型,再按三条规则重写每项经历:

  1. 不增加事实。原文没有数字,重写后也不能凭空多出一个。
  2. 不能改专有名词。Wood Mackenzie 还是 Wood Mackenzie,不许换成「一家研究机构」。
  3. 尽量采用职位描述里的准确用词。如果对方写的是 valuation,就不要用一个更宽泛的 modeling 含糊过去。

输出是一份新的 .tex 文件和一张彩色差异对照,方便逐项检查、拒绝任何偏离原意的修改。工具还可以在同样约束下,基于五段式模板起草求职信。

模型端可以使用 Claude Code(通过 claude -p),也可以接入任何与 LiteLLM 兼容的模型。我通常用 Sonnet 完成初次修改;若某份简历确实值得再看一遍,才会交给 Opus。

它不做的事

  • 不排版。你自己 pdflatex。
  • 不追踪求职结果。它不会记录「第三版简历拿到了某公司的面试」。我试着做过,后来觉得这件事令人不适,就删掉了。
  • 不揣摩公司文化。例如「这家公司很重视同事关系,所以写得暖一点」。模型可以照做,但结果并不好,我也删掉了这个功能。

那条不能越过的线

修改措辞没有问题,编造经历有。上面三条规则的全部意义,就是尽量把工具留在这条线的正确一侧。用户当然可以覆盖限制,让模型说谎;我只希望你不要这样做。

克隆

git clone https://github.com/Waaangjl/resume-tailor
cd resume-tailor
pip install -r requirements.txt
python tailor.py --resume me.tex --jd job.txt --out me-tailored.tex

仓库:github.com/Waaangjl/resume-tailor。