最近 HN 上有篇帖子引起了我的注意:一个叫 Lathe 的开源项目,247 points,标题是"Use LLMs to learn a new domain, not skip past it"。

说实话,看到这个标题的第一反应是:又一个 LLM 教学工具?市面上这类东西已经太多了——NotebookLM、各种 AI tutor、ChatGPT 自己就能教你任何东西。但仔细看完 README 和 HN 评论区之后,我觉得这个项目抓住了一个很多人没说出口的痛点。

问题出在哪?

过去一年,“Vibe Coding"这个概念从 Andrej Karpathy 的一条推文变成了整个行业的主流工作方式。打开 Claude Code、Cursor 或者 Copilot,描述你想要什么,AI 帮你生成代码,你负责 Review 和微调。效率确实高,但这里有一个很少被正面讨论的问题:你到底学到了什么?

HN 上另一篇今天 807 points 的帖子——“LLMs are eroding my software engineering career”——把这个焦虑写得很直白。一位资深工程师说,LLM 正在侵蚀他的软件工程职业,他不知道该怎么办。评论区里各种声音都有,但核心矛盾其实就一个:当 AI 代劳了思考过程,工程师的价值在哪里?

这不是杞人忧天。看看现在的 AI 编程成本追踪工具(比如 Budi)就知道,很多团队每个月在 AI 编程上的开销已经不小了。但如果你问这些开发者"你从 AI 生成的代码里学到了什么”,大部分人会沉默。

Lathe 的反直觉设计

Lathe 的作者 Deven Jarvis 在 README 里写了一段很长的个人经历,我读完觉得挺真诚的。他在 2000 年代通过 PSP 自制游戏社区学会了编程,后来通过各种 hands-on 教程(build-your-own-x、Crafting Interpreters 这类)不断精进。他说这些教程给他的不只是知识,更是"从零到一"的信心和继续深入的底气。

然后他发现 LLM 把这个过程跳过了。

Lathe 的设计哲学很明确:LLM 应该是你的老师,不是你的代笔。 具体来说,它做的是:

  1. 生成手把手教程:你给一个主题(比如"用 Zig 写一个 3D 切片器"),Lathe 会生成多部分的详细教程,每一步都有代码和解释
  2. 你必须亲手敲代码:教程在本地 UI 里展示,但代码不会自动复制到你的编辑器——你得自己打
  3. 带验证机制:教程可以被 LLM 自己验证,跑一遍看能不能编译通过
  4. 记录信源:每个教程都记录它参考了哪些资料,方便你溯源

技术实现上,Lathe 是一个 Go CLI + LLM Skills 的组合。CLI 负责存储和管理教程(存在 ~/.lathe/tutorials/),本地 Web 服务(端口 4242)负责展示,而生成、验证、提问这些操作都通过 LLM Skills 完成。目前支持 Claude Code、Cursor 和 Codex。

Skills 架构:比想象中更精巧

Lathe 的 Skills 设计值得单独说一下。它不是简单地让 LLM “写一篇教程”,而是拆分成了多个专门的 Skills:

Skill功能
/lathe生成教程(单篇或系列)
/lathe-extend在现有教程基础上追加新部分
/lathe-verify在临时目录里跑一遍教程,验证能不能正常工作
/lathe-ask针对教程内容提问
/lathe-tag给教程添加搜索标签
/lathe-voice自定义写作风格

这个设计的好处是:每个 Skill 都有明确的输入输出和行为约束,不会出现"LLM 突然开始帮你写代码而不是教你"的情况。尤其是 /lathe-verify,它在 mktemp -d 临时目录里执行,不会碰你的项目代码,但能验证教程的可执行性。

自定义 Voice 功能也很有意思。默认有两种风格:“plainspoken”(平实直接)和"companion"(温暖的第一人称)。你还可以用 /lathe-voice 让 LLM 采访你的写作偏好,生成自定义风格。不过有一点值得注意:所有 Voice 都被要求不能冒充真人、不能伪造资质、不能否认 LLM 作者身份。这种透明性设计在现在的 AI 写作工具里其实不多见。

与 NotebookLM 和传统 AI 教学的区别

HN 评论区有人问"这和 Google NotebookLM 有什么区别"。我觉得核心区别在于:

NotebookLM 是被动学习:你上传资料,它帮你总结和回答问题。学习的主体还是你,但交互模式是问答式的。

Lathe 是主动学习:它生成结构化的动手教程,要求你实际操作。学习过程中你会遇到真实的编译错误、运行时问题,这些"挫折"本身就是学习的一部分。

还有一个关键区别:Lathe 的教程会记录信源(sources),在 UI 里展示"Researched against N sources"。这意味着你可以追溯 LLM 的知识来源,而不是像 ChatGPT 那样凭空给你一段看起来很专业的解释。

坦白说,这个方案也有局限

Lathe 不是万能的。作者自己也很坦诚地承认了几个问题:

  1. 幻觉风险依然存在:虽然教程要求你亲手写代码(这意味着你会自然地发现不合理的地方),但 LLM 生成的教程本身可能有错误
  2. 学习效果取决于你的投入:如果你只是机械地抄代码而不思考,效果和直接让 AI 写没区别
  3. 依赖 Claude Code 等付费工具:作者提到 Claude Code 的 headless 模式即将收费(2026-06-15),这可能影响成本
  4. 目前主要在 macOS + Claude Code 上测试:其他平台的兼容性还需要验证

但我觉得,这些问题恰恰说明了 Lathe 的定位很清醒——它不是要取代人类写的教程(作者明确说"能找到人类写的教程就先看那个"),而是填补那些"没有现成教程的冷门领域"的空白。

对开发者工具的启示

Lathe 给我最大的启发不是它本身,而是它代表的一种设计模式:用 LLM 的能力来增强人的学习,而不是替代人的思考。

Claude Code 的 Routines 这类工具里,我们已经看到 LLM 可以被约束成"按规则办事"的执行者。Lathe 更进一步,把 LLM 约束成"按规则教学"的老师。这种思路可能比单纯追求"AI 帮你写更多代码"更有长期价值。

想想看,如果每个 AI 编程工具都有一个"学习模式"——在帮你写完代码之后,用教程的形式解释为什么这样写、背后的原理是什么、有哪些替代方案——那"LLM 侵蚀工程师职业"的焦虑可能会小很多。

怎么用?

如果你感兴趣,安装很简单:

# macOS(推荐)
brew install devenjarvis/tap/lathe

# Linux
curl -sSf https://raw.githubusercontent.com/devenjarvis/lathe/main/install.sh | sh

# 或者 Go 安装
go install github.com/devenjarvis/lathe@latest

然后在 Claude Code(或 Cursor/Codex)里:

# 安装 Skills
lathe skills install

# 生成教程
/lathe build a raytracer in Rust

# 启动本地 UI
lathe serve

项目地址:github.com/devenjarvis/lathe

目前 550 stars,MIT 协议,4 个 release,作者(和 Claude)123 commits,非常活跃。如果你和我一样,觉得"Vibe Coding 虽然爽但总有点心虚",可以试试这个。


参考资料: