Show HN:Lathe —— 使用大语言模型学习新领域,而非跳过学习
摘要
Lathe 是一个开源工具,能根据任何提示使用大语言模型生成动手实践的多部分技术教程,旨在教授用户而不是仅仅提供答案。它包括一个用于体验教程的本地用户界面,并支持与 Claude Code、Cursor 和 Codex 的集成。
Hey HN!<p>Lathe 是一个实验,旨在使用大语言模型来教我新知识,而不是替我完成工作。它会为你想学习的任何技术主题生成一个动手实践、有源可查的教程。然后你通过阅读并在专为此设计的本地用户界面中手动敲代码(<i>哎呀</i>)来亲自完成它。</p><p>它是一个 Go 语言编写的 CLI 加上大语言模型代理技能(Claude Code / Cursor / Codex)。你可以输入类似“/lathe build a 3D slicer in Erlang”的内容,运行 `lathe serve` 启动一个本地网页应用,并在浏览器中阅读。每个教程都包含那些过去让我自学体验愉悦的元素:</p><p>- 随滚动同步的目录<br>- 提示你思考的边注<br>- 供读者练习的习题<br>- 支持内容背后的源材料,可供深入探索</p><p>为了弥补教程背后缺乏人类智慧的问题,你还可以就内容提问,让另一个大语言模型验证教程是否真的能编译和运行,或者用另一部分来扩展它(不再有自 2021 年以来未更新的“第 4 部分 / 共 6 部分”)。</p><p>我构建 Lathe 不是为了替代人类编写的教程。我构建它是因为我 _热爱_ 人类编写的教程,但我想学习那些尚不存在优秀人类教程的技术领域(从零构建 3D 切片器、让嵌入式 Zig 更易上手等等)。在 README 中有一个更长的故事,讲述了我如何通过 PSP 自制软件教程开始编程,以及为什么看到这一点被大语言模型取代让我耿耿于怀,以至于构建了这个工具。</p><p>我不是来向您推销任何东西的(这里没有任何类似风投支持初创公司的东西 :D)。这是一个大语言模型,它的输出通常不错,但绝非完美。到目前为止,我的体验是,由于你亲自打字并且真正参与其中,你会捕捉到奇怪的地方(我发现对此提出质疑本身就是一种学习)。是的,它是 vibe coded(随性编码),因为它的范围小、风险低,而且正好满足个人需求。我本人是在 Claude Code + macOS 上运行它的,其他设置应该也能工作,但我尚未能够验证。</p><p>如果你能找到人类撰写的学习资源,请优先阅读它们。但当这种情况不存在时,Lathe 会填补空白。我希望它成为一个示例,展示大语言模型如何帮助我们更好地思考,而不是更少地思考。</p><p>仓库:<a href="https://github.com/devenjarvis/lathe" rel="nofollow">https://github.com/devenjarvis/lathe</a></p><p>如果你决定去看看,非常欢迎你的反馈!</p>
查看缓存全文
缓存时间: 2026/06/08 03:17
devenjarvis/lathe 来源:https://github.com/devenjarvis/lathe # Lathe 一个利用LLM教你思考、而不是替你思考的实验。Lathe能按需生成多部分互动式技术教程,技能经过调校,让内容更易上手。然后你可以在本地精心打造的UI中,亲手逐步完成学习。(就像石器时代那样 😎) ## 这是什么? - 从任意提示词生成互动式技术教程(单篇或系列) - 在专为本地上手而建的UI中亲自完成教程 - 使用技能提问、验证教程,或用新部分扩展它 - 从你的教程库中搜索、筛选和管理教程 - 每篇教程都记录其来源、使用的模型以及驱动教程“语调”的提示词 ## 快速开始 Lathe 由一组 LLM 技能和一个用于存储、管理和查看已生成教程的 Golang CLI 组成。安装后,你可以在任何 LLM 会话(支持 Claude Code、Cursor 和 Codex)中通过类似以下提示生成教程: /lathe build a 3D Slicer in Erlang 然后在任意终端打开 lathe: bash lathe serve # 启动 Web 服务器,打开浏览器 别担心,我们也有暗黑模式: 点击你想阅读的教程,开始学习! CLI 还有一些其他命令,但说实话,这些命令是为了给 LLM 一个确定性的方式来管理教程而构建的。我认为日常使用中上述命令就足够了(我自己也只用这些)。如果你想询问关于教程的问题、让 LLM 验证它,或者用额外部分扩展它,UI 提供了相应的操作入口,会给出确切的技能和提示词,供你在 LLM 中执行。 ## 安装 Lathe 是一个独立的二进制文件。你只需要将 lathe 放在 $PATH 中;技能在交互式 Claude Code、Cursor 或 Codex 会话中运行。 Homebrew(macOS,推荐): bash brew install devenjarvis/tap/lathe 以 cask(预构建二进制)形式分发,因此仅支持 macOS——在 Linux 上请使用下面的安装脚本或 go install。 安装脚本(curl | sh): bash curl -sSf https://raw.githubusercontent.com/devenjarvis/lathe/main/install.sh | sh Go(需要 Go 1.25+): bash go install github.com/devenjarvis/lathe@latest 从源码安装: bash git clone https://github.com/devenjarvis/lathe cd lathe go build -o lathe ### 安装技能 技能已打包在二进制文件中。安装 lathe 后,将它们放入项目目录,以便 Claude Code(或 Cursor / Codex)能发现它们: bash lathe skills install # ./.claude/skills//SKILL.md (本项目) lathe skills install --user # ~/.claude/skills//SKILL.md (所有项目) lathe skills install --agent cursor # ./.cursor/commands/.md (Cursor 斜杠命令) lathe skills install --agent codex # ./.agents/skills//SKILL.md (Codex Agent Skills) lathe skills install --agent all # Claude Code、Cursor 和 Codex lathe skills list # 显示捆绑的技能 Codex 使用与 Claude Code 相同的 SKILL.md 格式,因此其技能原样提供(--user 安装到 ~/.agents/skills/...)。Cursor 命令以 / 斜杠调用(如 /lathe);交互式交接模型为 Claude Code 设计,因此在 Cursor 和 Codex 上一些运行时细节有所不同。 ## 为什么存在这个项目? 我作为青少年在 2000 年代通过用 Lua 为我的 PSP(PlayStation Portable)制作自制游戏来学习编程,后来用 C++。当时我学到很多东西都要归功于我参与的小型 PSP 自制社区(我对此深表感激),但同样也要归功于当时互联网上免费在线资源和教程(特别感谢 2007 年的 cplusplus.com (https://web.archive.org/web/20070213043837/http://www.cplusplus.com/articles/Sacha1.html)——这网站现在的广告比当年多太多了 😅)。 后来我成为一名专业的软件工程师,在接下来的十年里,我通过寻找和阅读大量技术博客以及更重要的、适合我学习风格的动手教程来“提升技能”(虽然通常是为了学习比工作需要更有趣的主题)。资源包括 build-your-own-x 仓库 (https://github.com/codecrafters-io/build-your-own-x)、Crafting Interpreters (https://craftinginterpreters.com/),以及 1000 个其他一次性教程,它们教会了我从构建光线追踪器 (https://raytracing.github.io/books/RayTracingInOneWeekend.html)、时间序列数据库 (https://nakabonne.dev/posts/write-tsdb-from-scratch/)、线性代数矩阵库 (https://www.andreinc.net/2021/01/20/writing-your-own-linear-algebra-matrix-library-in-c/) 到介于两者之间的各种内容(真的,我无法一一列举所有影响过我的精彩动手教程)。 动手学习一直是我最好的学习方式。这些教程给了我所需的学习曲线,让我在全新领域从零到一,但更重要的是,它们给了我立足点和信心,让我能自行从一走到二、再到十。 快进到 2026 年,现在我们有了 LLM。我不会偏离主题去讨论我与 LLM 的复杂关系,但对于编写软件来说,它们很有趣,而且在很多情况下确实能提高生产力!但它们替你做了大部分工作,同时带走了帮助我学习新概念或领域的那部分。在某些情况下,这并不重要——我们有一个产品要交付,LLM 帮助我们更快交付——但对我而言,以及对这个领域和爱好的热爱,我仍然渴望那些“啊哈!”的时刻——当某个东西终于想通,我有了足够的信心开始将其塑造成属于自己的东西。 因此 lathe 是一个实验,旨在利用 LLM 来教我,而不是替我想。为了重现那些让我爱上这项工作的动手学习时刻,并将其与一个广泛“专家”LLM 的潜力结合起来,理论上它什么都能教我。我把 lathe 作为催化剂,让我开始那些不知如何着手、并且找不到现有人类编写资源来教授的项目。例如,我最初想到 lathe 是因为我想从头编写一个 3D 切片软件(光是查找 g-code 文档就很痛苦,特别感谢 reprap (https://reprap.org/wiki/G-code))。在撰写本文时,我正深入 Zig 嵌入式软件开发领域。在这两种情况下,lathe 都是一种有效的工具,帮助我在那些人类编写的资源尚不存在(而且我怀疑如果只有 LLM 阅读,人类还能坚持写教程多久……)的晦涩或极其年轻的领域中从零到一。 ## 但幻觉怎么办? Lathe 教程能和人类编写的教程一样好吗? 完全不能。但它们缺少的用心、个性和架构合理性,可以通过以下方式弥补:教程作者随时准备回答你的所有问题,总是愿意在你想要的不是 完全 那样时修复或更新教程,而且它们真的会完成从 2018 年开始编写的 6 部分系列(我们都经历过 😁)。 Lathe 是一个 LLM,虽然我已经尽我所能针对这个特定任务构建和调优它,但它仍然会以 LLM 失败的方式失败。我建议使用你能访问到的最大“思考”模型(Opus、GPT-5 Codex 等),因为这些任务不太像你编程时优化的迭代机械执行,而更像从头到尾研究、设计和解释一个具体概念。 此外,我认为在这种语境下幻觉风险要低得多。Lathe 旨在帮助 你 思考,并且基于你亲自输入代码的期望而构建。通过阅读指南并亲手输入,你积极参与工作,并且在遇到奇怪的地方时很自然地会问“等等,这合理吗?”。这时你可以 /lathe-ask(有时 LLM 会给出我因为不熟悉领域而没有的 好的 推理,我会学到一些东西),或者直接告诉你的 LLM 更新教程。 虽然我没有教学方面的资历来支持这一点,但我认为通过捕捉和质疑 LLM 的感知错误,我可能实际上在更内化概念。因人而异。 话虽如此,如果你能找到人类编写的教程,我总是会先选择那个。我希望大多数情况下你也会这样做。但如果你和我学习方式相同,并且想深入一个教学材料匮乏的领域,lathe 是一个相当酷的工具。只需记住它是 LLM 而不是人类。为了帮助这一点,我尽量随时让你清楚得到和没得到什么。编写教程的 lathe 技能会在其不确定所写内容时告诉你,虽然我提供了更“个人化”的语调,但我默认选择了一种不假装成其他东西的语调。 ## 老实说,你是“氛围编码”的吗?这和你自己的论点矛盾吗? 是的,lathe 是“氛围编码”的。在这种情况下,lathe 的范围和风险很低。它是一个活生生的论点,用于个人学习。话虽如此,我最近每天都在使用它,它已被证明是我工具箱中一个有用且稳定的工具。通过使用它我学到了很多东西,而且现在我认为它已经足够好,可能对其他人也有用。我期望接下来的几个小版本会有一些有意识的代码/架构清理,以确保它对其他人保持稳定,当然也会采纳我收到的任何反馈。尽管如此,出于透明度的考虑,今天我仅在 MacOS 上使用 Claude Code 测试 lathe 的我的用例。如果你不在这个设置中,lathe 应该 能工作,但我没有验证过。如果你愿意在不同的设置上尝试并且它确实能用,或者你遇到了障碍,我很乐意收到 issue,让我知道任何一种情况! ## 那么,它是如何工作的? - LLM 技能 — 生成和处理教程,全部在你的交互式 LLM 会话中运行:/lathe 编写 part-01.md,/lathe-extend 添加下一部分,/lathe-verify 遍历教程以确认它可以编译和运行,/lathe-ask 回答你正在阅读的部分的问题,/lathe-tag 为现有教程添加搜索标签。 - 我改为全部交互式运行,因为我是 Claude Code 用户,并且无头 claude -p 计划从 2026-06-15 开始按量计费。也许在那之后我会发现成本很小(与氛围编码相比,生成教程消耗的 token 并不多),我们可以将一些交互移回 UI。我们拭目以待! - lathe CLI(Go) — 将教程复制到 ~/.lathe/tutorials/,在 http://localhost:4242 提供渲染输出,并拥有所有持久状态。它本身从不调用 LLM:网页按钮和 lathe verify/lathe extend 命令只是将技能命令交给你粘贴到会话中,技能再回调 CLI(lathe store、lathe verify-result、lathe extend-start/extend-commit、lathe voice add)来记录结果。 ## 漂亮的 UI 是怎么回事? 很高兴你问到!Lathe 的技能和 CLI 是协同构建的,以提供(我认为是)很好的阅读和学习体验。几个关键特性使得使用 lathe 比仅仅直接提示 Claude 更有价值(对我而言)包括: ### 悬停右侧边栏时显示完整目录导航 ### 内容中穿插旁注,促使我更深入思考 ### 每篇教程末尾的留待读者练习 ## 写作语调 每篇教程都以一种语调编写。语调控制 散文听起来如何,但不会改变准确性、研究、引用、验证或结构,这些是固定的。Lathe 自带两种语调: - plainspoken(默认)——诚实且精确,没有虚构的人物或捏造的第一人称战争故事。它旨在避免将生成它的 LLM 拟人化。 - companion——尝试一种温暖、诙谐的第一人称“键盘旁朋友”风格。 每次运行通过在你的 /lathe 调用中指定语调名称来选择(“…使用 companion 语调”),或更改全局默认值: bash lathe voice list # 查看可用的;* 标记默认 lathe voice show companion # 打印语调的完整规范 lathe voice set-default companion # 更改新教程的默认语调 自定义语调。 如果你不喜欢 lathe 自带的语调,那也没关系,随你便。你可以在 LLM 会话中使用 /lathe-voice 创作自己的语调,它会与你讨论语气、人称和幽默感,起草规范,并在你批准后通过 lathe voice add --file - 保存到 ~/.lathe/voices/。自定义语调被指示不得冒充真实姓名的人物、编造资质或否认 LLM 作者身份。/lathe-voice 会拒绝这些,并且每个语调在生成时都会包裹一个固定的前言,强制执行相同规则。 一篇教程所用的语调会被记录下来(因此 /lathe-extend 会延续该语调),并在每篇教程顶部的作者署名行中披露:Generated by · voice ,其中模型是用于生成教程的具体 LLM(例如“Claude Opus 4.8”),语调名称展开以显示完整规范。 我完全认识到这是一场猫鼠游戏,任何安全方面的尝试都可能被规避。不幸的是,无论我是否发布 lathe,那些想要用 AI 垃圾教程淹没世界的坏演员已经全速前进了。但我想尽自己的一份力,明确 lathe 不适用于为你个人学习之外的内容创作。 ## 查找教程 随着你的教程库增长,Web 列表页面(lathe serve)提供了搜索框和筛选器来缩小范围——全部客户端,因此快速且可离线工作: - 搜索匹配教程的标题、主题、标签、仓库和工具版本。 - 排序按最新、最旧或标题(A–Z)。 - 筛选按状态、类型(单部分 vs 系列)、标签和版本。 默认端口为 4242;使用 --port 覆盖。 ## 存储布局 教程全局存储在 ~/.lathe/tutorials/ 中,每个唯一标识符一个目录: ~/.lathe/tutorials/ digital-synth-zig/ metadata.json part-01.md part-02.md part-03.md database-from-scratch-go/ metadata.json index.md metadata.json: json { "slug": "digital-synth-zig", "title": "Build a Digital Synth in Zig", "topic": "build a digital synth in Zig", "created": "2026-05-03T19:00:00Z", "status": "unverified", "tags": ["zig", "audio", "dsp"], "parts": ["part-01.md", "part-02.md", "part-03.md"], "tools": [{ "name": "zig", "version": "0.13.0" }], "sources": ["https://ziglang.org/documentation/0.13.0/"], "voice": "plainspoken", "model": "Claude Opus 4.8" } 核心字段(slug/title/topic/created/status)之外的所有内容都是可选的,为空时省略:tools(教程针对的语言/工具链,以版本标签形式和版本筛选器显示)、sources(研究轨迹——见下文)、voice 和 model(阅读页面的署名行),以及当教程针对特定 git 仓库编写时的 repo/repo_branch。 状态为 unverified(lathe store 后的默认值;不渲染标签)、verifying、verified、failed、skipped 或 extending(当 /lathe-extend 正在编写新部分时设置)。失败时,verify-result.json 会与失败部分、步骤编号和错误输出一起写入;Web UI 将其作为面板呈现在教程页面上。 ## 来源与出处 每篇教程都保留其背后的研究轨迹——生成技能在编写时实际查阅的 URL。这与部分 markdown 内联的 ## Sources 引用不同:它是持久性的、教程级别的记录,存储。
相似文章
Ask HN: 有人尝试用不同的方式使用LLM编程吗?
一位Hacker News用户向社区询问使用LLM编程的实验性方法,表达了当前提示-回应循环的不满,并寻求根本不同的方式。
我如何用LLM学习复杂主题
作者介绍了一种利用LLM构建低多边形交互式模拟来学习复杂主题的工作流程,例如ChipTycoon,该模拟将芯片制造过程可视化。这种方法比阅读或要点列表更有助于掌握知识。
@techNmak: 这是学习LLM工作原理的最佳方式。交互式3D,逐步讲解。涵盖:→ 嵌入 → 层归一化 → 自注意力…
一个交互式3D逐步指南,通过可视化方式学习LLM工作原理,涵盖嵌入、自注意力、softmax等关键Transformer概念。推荐使用视觉化方法,而非阅读论文。
@DanKornas:不要通过零散的教程学习 LLM。LLM from Scratch 是一个面向开发者的实践性 PyTorch 课程,适合那些想要……
一个实践性 PyTorch 课程,教授从 Transformer 基础到微调和对齐的 LLM 训练,包括 RLHF 和 GRPO。
Show HN: Bash4LLM+ – 一个轻量级、无依赖的 Bash 封装器,用于 LLM API
Bash4LLM+ 是一个轻量级、无依赖的 Bash 封装器,用于 LLM API,提供与 Groq 及其他提供者的安全、可审计交互,具有动态模型列表、流式输出和可扩展附加功能等特点。