ship 完 chatbot 还讲不清 attention 在干嘛,503 节课从手写 backprop 一路爬到 swarm

发布于 2026年07月20日 00:45 #Github 解读#Agents 原文链接

ship 完 chatbot 还讲不清 attention 在干嘛,503 节课从手写 backprop 一路爬到 swarm 封面图
  • AI Engineering from Scratch 是一门 39K Star 的开源课程,20 个 phase、503 节课,从线性代数一路堆到 autonomous swarm,主打 Build It / Use It / Ship It 三段式
  • 每节课的产物不是「恭喜学完」,而是一个能装进 Claude/Cursor/Codex 的 SKILL.md 工件,磁盘上实际 388 个 skill + 99 个 prompt + 6 个 agent,README 数字对得上
  • Phase 14 的 Agent Loop 课把 ReAct 五件套拆得很细,message buffer / tool registry / stop condition / turn budget / observation formatter,少一个就只是 chatbot
  • 亲自验证发现数字漂移,AGENTS.md 写 435 lessons、find-your-level skill 写 260、实际 503,号称 CI 自动校准的核心贡献者手册差了 68 节课
  • 提炼出 Skeleton-First Pattern,先手写最小骨架,再读生产框架的皮肉,最后把骨架沉淀成可复用工件,是这门课真正可迁移的方法论

大家好,我是若风。

最近刷 GitHub 老看到一个项目挂在 trending 上,叫 ai-engineering-from-scratch,39K Star,6.6K Fork,README 第一行写着「Learn it. Build it. Ship it for others.」。我点进去本来想随便扫一眼,结果被开场的两句话按住了。

84% of students already use AI tools. Only 18% feel prepared to use them professionally.

这句话后面跟着的解释更扎人。作者说现在学 AI 的人都在零散地拼,今天看一篇 paper,明天刷一个 fine-tuning 教程,后天看一个炫酷的 Agent demo。结果呢,「you ship a chatbot but can’t explain its loss curve. You hook a function to an agent but can’t say what attention does inside the model that’s calling it.」

你想想看,这话戳中了多少人。我自己见过太多这种状态了,调一个 LangChain Agent 跑得欢,问它为什么这么搭,答不上来。项目的作者 Rohit Goswami 说他想做的是给这种零散学习一条「spine(脊柱)」,20 个 phase,503 节课,从线性代数一直到 autonomous swarm,每一步都手写算法,最后每节课 ship 一个可复用的 artifact。

我花了两天把这个仓库扒了一遍,目录数了一遍,几个关键文件读了,发现这玩意儿确实有点东西,但 README 上几个数字也得掰扯掰扯。

这门课到底在解决什么问题

先说一句话定位。这是一门用「Build It / Use It」双轨结构把 AI 从数学底层打通到生产 Agent 的开源课程,每一节的产物不是「恭喜你学完了 X」,而是一个能装进你日常 workflow 的 prompt、Skill、Agent 或 MCP server。

这个定位本身就反主流。市面上 90% 的 AI 学习资料是两种形态,要么是「跟我从零手搓 GPT」这种偏底层但戛然而止的,要么是「30 分钟用 LangChain 搭个 agent」这种偏应用但完全不碰原理的。这两种之间有个巨大的鸿沟,作者管这个鸿沟叫「the framework stops being a black box」之前的断层。

你 hook 一个 function call 到 Claude 上跑通了,但你不知道模型内部那个 attention 机制为什么让 token 之间能互相看见。你用 PyTorch 的 AdamW optimizer 调参调得很爽,但你说不清 momentum 和 adaptive learning rate 在梯度更新里到底各干了什么。这门课的赌注是,这个鸿沟不补上,你写的 AI 系统永远在黑盒上叠黑盒,一旦出错你连 debug 入口都没有

课程的真实骨架

README 里画了一张 Mermaid 图,把 20 个 phase 的依赖关系摆得很清楚。我读完 ROADMAP.md 把每个 phase 的真实状态抄了下来。

数学是地板,Agent 和生产是屋顶。Phase 0 到 Phase 19,层层堆叠。

  • Phase 0 — Setup & Tooling(14 小时,环境/Git/GPU/Docker/编辑器全过一遍)
  • Phase 1 — Math Foundations(23 小时,线性代数 + 微积分 + 概率 + 优化 + 信息论 + SVD + 傅立叶变换)
  • Phase 2 — ML Fundamentals(21 小时,线性回归到手搓决策树到集成学习)
  • Phase 3 — Deep Learning Core(15 小时,这里有个亮点,Phase 3 Lesson 10 叫「Build Your Own Mini Framework」,让你自己写一个 mini PyTorch)
  • Phase 4 — Computer Vision(27 小时)
  • Phase 5 — NLP
  • Phase 6 — Speech & Audio
  • Phase 7 — Transformers
  • Phase 8 — GenAI
  • Phase 9 — Reinforcement Learning
  • Phase 10 — LLMs from Scratch
  • Phase 11 — LLM Engineering
  • Phase 12 — Multimodal
  • Phase 13 — Tools & Protocols(MCP 在这里)
  • Phase 14 — Agent Engineering(这是屋顶的第一根梁,下面会重点拆)
  • Phase 15 — Autonomous Systems
  • Phase 16 — Multi-Agent & Swarms
  • Phase 17 — Infrastructure & Production
  • Phase 18 — Ethics & Alignment
  • Phase 19 — Capstone Projects

ROADMAP.md 里每个 lesson 前面都有个状态符,✅ 是完成,🚧 是 in progress,⬚ 是 planned。我把 Phase 0 到 Phase 3 全部抄了一遍,全是 ✅。这一点很重要,后面会用到。

每节课的固定六拍

这是这门课设计上最值得抄的一点。每节课目录结构是死的。

phases/<NN>-<phase-name>/<NN>-<lesson-name>/
├── code/      runnable implementations (Python, TypeScript, Rust, Julia)
├── docs/
│   └── en.md  lesson narrative
└── outputs/   prompts, skills, agents, or MCP servers this lesson produces

每节课跑同一个 loop,README 里画成六拍,MOTTO → PROBLEM → CONCEPT → BUILD IT → USE IT → SHIP IT。

这个「Build It / Use It」的拆分是真正的灵魂。BUILD IT 阶段用 raw math 手写,不依赖任何框架。USE IT 阶段同一个算法换成 PyTorch 或 sklearn 跑一遍。你之所以能看懂框架在做什么,是因为你已经写过一个更小的版本。

我扒了 Phase 14 Lesson 1「The Agent Loop: Observe, Think, Act」的实际产物验证这个结构是不是真的落地了。code/main.py 是一个纯 stdlib 实现的 ReAct loop,核心组件是 ToolRegistry(name → callable 的分发)、ToyLLM(一个确定性的脚本 LLM,让 loop 能离线跑)、AgentLoop(while 循环加 max turns 加 trace 记录)。文件开头注释写得很直白,「Swap ToyLLM for a real provider client and the control flow is identical」,你把那个假的 LLM 换成真实的 provider,控制流一模一样。

这就是「Build It」的真正含义。不是让你写玩具永远停在玩具,而是让你在玩具里掌握生产代码的骨架。

Phase 14 的 Agent Loop 拆得有多细

这是我读得最仔细的一节,因为我自己做 Agent 多,想看看作者到底有没有把 ReAct 这个老古董讲透。

lesson 的 docs/en.md 引了 Yao et al. 2017 年的原始 paper(arXiv:2210.03629),还把 2025-2026 的 Responses API native reasoning 演进也讲了一遍。关键观点是,无论你用 Claude Agent SDK、OpenAI Agents SDK、LangGraph、AutoGen v0.4、CrewAI、Agno、Mastra,底层都是同一个 ReAct loop。框架的差异只在于 loop 周边挂了什么,LangGraph 挂的是 state checkpointing,AutoGen v0.4 挂的是 actor-model message passing,CrewAI 挂的是 role templates,OpenAI Agents SDK 挂的是 tracing spans。loop 本身不变。

作者把一个正确的 Agent loop 拆成五个必备件,少一个你就只是个 chatbot。

  1. 一个会增长的 message buffer(user → assistant → tool → assistant → tool → final)
  2. 一个 tool registry(schema in,execution,result string out)
  3. 一个 stop condition(finish / 无 tool call / max turns / max tokens / guardrail 触发)
  4. 一个 turn budget(Anthropic computer use 公告说几十到几百步是常态,要按 task class 选 cap)
  5. 一个 observation formatter(把 400 错误变成字符串塞回去,不能让 loop 崩)

这个清单最值钱的地方在第 4 条。我见过太多 Agent 项目死在「没设 turn cap」上,跑到 80 步 context 爆了才发现。作者把它列为 reliability issue 不是 optimization issue,定位很准。

课的 SHIP IT 产物是 outputs/skill-agent-loop.md,一个可以直接被 Claude/Cursor/Codex 装载的 SKILL.md 工件。我读了,里面有明确的 hard rejects 清单,比如「Looping without a turn cap」直接拒,「Swallowing tool errors into an empty observation」直接拒。这种带拒绝规则的 Skill 才是生产可用的,而不是「请帮我写一个 agent loop」这种废话 prompt。

那个「Ship It」的产物系统

这才是这门课真正的差异化壁垒。不是 503 节课本身,是每节课都 ship 一个可安装的工件。

我读完 README 数了一下,README 说 repo 里 ship 了 388 个 Skills 和 99 个 prompts。我用 gh api 拉了完整 file tree 自己数了一遍。

  • outputs/skill-*.md 文件,磁盘上实际是 388 个,对得上
  • outputs/prompt-*.md 文件,实际是 99 个,对得上
  • outputs/agent-*.md 文件,实际是 6 个
  • 课程目录 phases/NN-name/MM-name/ 实际是 503 个

这几个数 README 没骗人,磁盘真实存在。安装方式也很讲究,作者做了一个 scripts/install_skills.py,支持三种 layout,flat(平铺)、by-phase(按 phase 分目录)、skills(嵌套成 <name>/SKILL.md,这是 Claude/Cursor/Codex 的标准约定)。还支持 --type skill/prompt/agent/all--phase N--tag TAG 这些过滤。这个工具不是 README 里写着玩的,我读了源码,discover_artifacts() 真的在 glob phases/**/outputs/,frontmatter 真的在 parse,manifest.json 真的在写。

坦率讲这事儿挺香的,你学完整门课,手上有 388 个 Skill + 99 个 prompt + 6 个 Agent,全是你在每一节课亲手 build 过的,能装进任何支持 SKILL.md 的 Agent 里。

一些对不上的数字

坦白讲,这个项目让我最在意的是几个数字的不一致。

README 顶部的 badge 写「503 lessons」,README 正文也写「503 lessons. 20 phases. ~320 hours」。ROADMAP.md 开头写「Total estimated time: ~314 hours」,README 里又写「~320 hours」,到了 README 末尾那张「Where to start」表里写「~306 hours / ~270 hours / ~200 hours / ~100 hours / ~60 hours」。这几个时间数字本身就在打架,314、320、306 三个版本同时在。

但最离谱的是 AGENTS.md。这是给贡献者和 AI Agent 看的操作手册,README 直接说「Read it before opening a PR」。结果这份文件里两次写「435 lessons」,一次写「keeps 435 lessons coherent over time」,一次写「435 lessons. 20 phases」。而 README、ROADMAP、磁盘实际目录全是 503。AGENTS.md 这个最该被严格遵守的文件,lesson count 字段已经严重 drift 了,没人维护。

这事儿不是小事。作者专门写了 scripts/build_catalog.py 从文件系统派生 ground truth,写了 check_readme_counts.py 在 CI 里自动同步 README 计数,还专门在 AGENTS.md 里列了一张表说 README counts 由 readme-counts-sync workflow 自动修复。结果 AGENTS.md 自己的 435 这个数没人管。一个号称「CI 自动校准」的项目,核心贡献者手册的数字和实际差了 68 节课。

我还翻了一下 find-your-level 的 SKILL.md,这份给学习者做定位测验的 Skill 里写「260-lesson, 20-phase AI Engineering from Scratch curriculum」。260 这个数又是一个新版本,既不是 435 也不是 503,应该是更早时期的遗留没更新。一份让你「find your level」的测验,连课程总量都标错,你做完测验它给你规划的 path 也会偏差。

这种数字漂移背后其实是个 bus factor 问题。我查了 contributors,只有 8 个。一个 39K Star、号称 503 节课、五个月从 0 做到 trending 的项目,核心贡献者只有 8 个人。再翻 commit history 能看出来,主要内容产出高度集中在 rohitg00 一个人身上。这门课的体量已经大到一个人维护不动文档同步了,但还没建立起一个能把文档漂移兜住的贡献者梯队。

维护活跃度是真的

批判归批判,这个项目本身的活跃度没问题。我看了一下时间线。

仓库 createdAt 是 2026 年 3 月 18 日,到今天(2026 年 7 月 20 日)四个月出头。39K Star,最近一次 push 是 6 月 25 日,不到一个月前。site/stats.json 显示 30 天内 15 万独立访客、24 万页面浏览,数据来源标注是 Vercel Web Analytics(Production),不是拍脑袋。

issue 区也活着。我翻了一下 open issues 按 comments 排序,最高赞的几个是真实的功能请求和 bug,比如 #293 要求用 KaTeX 渲染 LaTeX 数学公式(3 个赞),#307 要求脚本检测并自动修复 quiz 的答案长度偏差(2 个赞),#266 是一个安全 issue 报告说 model loading 有 RCE 风险需要关掉 sandbox bypass(1 个赞但标记 security)。#112 是有人提议加一个三卷本阅读模式(6 个赞,是 issue 区最高赞)。这些 issue 看起来都是真实用户在用,不是刷的。

MIT license,这个不用多说,干净的 permissive license,商用 fork 友好。

这门课值得谁花时间

我自己是个偏 Agent 方向的人,所以重点评估它对 Agent 工程师的价值。

如果你已经在做 Agent,Phase 14 那一整章 42 节课 值得单独拉出来看。从 Lesson 01 的 ReAct loop 一直到 Lesson 42 的 Agent Workbench capstone,中间把 ReWOO、Reflexion、Tree of Thoughts、Self-Refine、tool use、MemGPT、Voyager Skill libraries、HTN planning、Anthropic workflow patterns、LangGraph、AutoGen v0.4、CrewAI、OpenAI Agents SDK、Claude Agent SDK 全部铺了一遍。我读了其中几节的 docs/en.md,引用密度很高,原始论文、官方文档、2026 年的最新实践都揉在一起,不是那种「复制粘贴官方 quickstart」的水货。

如果你完全不懂 AI 想从头学,这门课的入口设计也考虑到了。/find-your-level 那个 Skill 会问 10 道题,5 个知识领域各 2 道,把你定位到一个起始 phase。你不想从头啃 320 小时的话,按 README 那张「Where to start」表跳着学也行,senior engineer 只想学 Agent 工程的话 60 小时从 Phase 14 切入就够了。

但有几个真实的使用门槛得说清楚。第一,这门课的「Build It」阶段需要你能读 raw math,Phase 1 那 23 小时的数学不是摆设,如果你连链式法则和反向传播推导都跟不上,Phase 3 以后会卡。第二,依赖约束很严,AGENTS.md 里写得很明确,Python 只允许 numpy/torch/h5py/zstandard/safetensors 加 stdlib,Rust 只允许 stdlib 单文件,Julia 只允许 4 个 stdlib。这个约束对学习是好事,但你别指望能在课程里看到 Triton、vLLM、DeepSpeed 这些工业级训练框架的实战。

收尾,我想提炼一个东西

扒完这个项目,我脑子里反复转的是它那个「Build It / Use It / Ship It」的三段式。这个结构其实是一种可迁移的工程学习模式,我管它叫「Skeleton-First Pattern(先骨架后皮肉)」。

它的核心赌注是,你要真正理解一个复杂系统,必须先手写一个能跑的最小骨架,再去看生产框架的皮肉,最后把骨架本身封装成可复用工件。这门课每一节都是这个 loop。Phase 3 Lesson 10 让你手写 mini framework 是骨架,Phase 3 Lesson 11 让你用 PyTorch 是皮肉,outputs/skill-*.md 是 ship 出去的工件。Phase 14 Lesson 1 的 ReAct loop 是骨架,LangGraph/AutoGen 是皮肉,skill-agent-loop.md 是工件。

这个模式的迁移价值在哪。你学任何复杂框架(不仅是 AI,数据库、编译器、操作系统都一样),都可以套这三段。先写个 100 行的玩具版掌握控制流骨架,再读生产代码看别人往骨架上挂了什么状态管理/容错/可观测性,最后把你理解的骨架沉淀成一个可调用的 prompt 或 Skill。你手上永远有一个「我能解释每一行」的最小版本兜底,框架再怎么迭代你都不慌。

这门课最值钱的不是那 503 节课,是这个 Skeleton-First Pattern 的完整示范。你把它内化了,任何新框架上来你都知道该怎么拆。

如果你要入门 AI 或者想把 Agent 工程从黑盒里拽出来,这门课值得收藏。npx skills add rohitg00/ai-engineering-from-scratch --phase 14 一行命令就能把 Phase 14 那批 Agent Skill 装进你的 Claude 或 Cursor。别一次学 503 节,那样你会放弃。先 /find-your-level 定个位,按你的真实水平切入一个 phase,跑完一节 ship 一个 Skill,半年后回头看,你已经攒了一个自己的 AI 工具箱。

这就是这门课真正的卖点,不是教你 AI,是教你如何系统地学会任何复杂的 AI 系统,并把它沉淀成可复用的资产

评论互动

© 2026 王若风的技术博客 · Powered by Astro