资讯动态

523节全手写AI课程:从零实现神经网络与Agent框架

发布时间:2026/10/15 9:13:50 来源:尧图企业网站定制
1. 这个项目到底在做什么第一次看到“523节全手写实现”这个数字我的反应是这要么是个噱头要么是个狠人。523节按一天啃两节的节奏得连续啃八个多月。如果每节还都是手写代码从零实现那这个体量放在整个开源教育圈里都算得上罕见。先把话说清楚这个项目本质上是一套从零手写实现 AI 核心算法的开源课程。它不讲“调包”不教你怎么pip install一个库然后三行代码跑通而是把每一个算法、每一个模块用 Python 和 TypeScript 一行一行敲出来。从最基础的矩阵运算、梯度下降到神经网络的前向反向传播再到当下热门的 Agent 框架、多智能体协作、工具调用编排全部手写。它解决的是什么问题市面上 AI 教程分两类一类是“科普型”讲概念讲得天花乱坠但你看完还是不知道代码怎么写另一类是“调包型”上来就import torch跑通了但你不理解底层在干什么。这套课卡在中间——它逼你理解每一行代码为什么这么写。适合谁适合那些已经会一点 Python、想真正搞懂 AI 底层原理、但又不想啃纯数学教材的开发者。也适合做 TypeScript 前端但想往 AI Agent 方向转的同学因为课程里 TypeScript 的部分专门覆盖了类型声明、接口继承、静态方法重写这些工程化细节。我花了大概两周时间把课程目录和部分章节的代码过了一遍下面把我看到的东西、踩过的坑、以及如果你要跟着学该怎么规划完整拆解一遍。2. 课程整体设计与思路拆解2.1 为什么选择“全手写”而不是“调包”这个选择背后有很明确的逻辑。AI 领域现在最大的问题是抽象泄漏——你调一个model.fit()看起来很简单但一旦出错你根本不知道是数据问题、梯度问题还是超参问题。全手写的好处是每一层的输入输出你都能打印出来看每一个梯度你都能手动验证。我举个具体例子。课程里讲反向传播那一节不是直接给你公式而是让你先用 Python 写一个标量级的自动微分引擎类似 micrograd 那种。你得自己实现Value类定义__add__、__mul__、__pow__这些魔术方法然后在backward()里手动推导链式法则。写完之后你再看 PyTorch 的autograd会有一种“哦原来你帮我做了这些”的顿悟感。这种设计的好处是知识留存率极高。你看十遍教程不如自己手写一遍。坏处也很明显——慢。523节不是开玩笑的每节平均 20-30 分钟加上自己动手写代码的时间实际投入可能是视频时长的 3-5 倍。2.2 Python TypeScript 双语言并行这个组合乍看有点怪但仔细想很合理。Python 负责算法实现和模型训练TypeScript 负责 Agent 编排、工具调用、前端交互。现在的 AI 应用早就不只是训练一个模型了你需要把模型能力封装成 API、接入前端、做流式输出、处理并发请求。TypeScript 在这些场景下比 Python 更合适。课程里 TypeScript 部分专门讲了.d.ts类型声明文件的编写。这个点很关键——当你从 npm 装了一个没有类型定义的包或者你要给自己写的 JS 库加类型提示.d.ts就是唯一的出路。课程里不是泛泛讲语法而是让你手写一个完整的类型声明文件包括interface继承、static方法重写、泛型约束这些容易踩坑的地方。2.3 Agent 模块的定位Agent 是这套课里最“新”的部分也是和热词关联最紧的。课程没有把 Agent 讲成玄学而是拆成了几个可手写的组件工具注册与调用、对话状态管理、多轮规划、结果校验。每个组件都有对应的 Python 和 TypeScript 实现。我特别欣赏的一点是课程里专门有一节讲“Agent 和 Harness 的区别”。很多人把这两个概念混着用其实 Harness 更偏向测试执行框架Agent 是决策主体。课程用了一个很直观的类比Harness 是考场Agent 是考生。考场提供环境和规则考生负责答题。这个区分在工程上很重要因为你的测试框架和你的业务逻辑应该是解耦的。2.4 课程结构的取舍523节不是线性排列的它分了几条线基础线数学、Python、数据结构、核心线神经网络、反向传播、优化器、应用线Agent、工具调用、并发处理、工程线TypeScript、类型系统、项目组织。你可以按线学也可以交叉学。我的建议是如果你数学底子一般先走基础线的前 50 节把矩阵运算和梯度下降手写一遍。如果你已经会 Python 但没碰过 AI直接从核心线切入遇到不懂的数学再回头补。如果你是想做 Agent 应用开发应用线和工程线可以并行。3. 核心细节解析与实操要点3.1 手写自动微分引擎的关键细节课程里自动微分那部分我跟着写了一遍踩了几个坑。第一个坑是梯度累加。在backward()里你不能直接赋值self.grad ...而是要用self.grad ...。因为一个节点可能被多条路径用到梯度需要累加。这个点在 PyTorch 里是自动处理的但手写的时候很容易忽略。第二个坑是拓扑排序。反向传播需要按拓扑序从输出往输入走不能简单地递归。课程里用了一个很巧的方法先做一次前向遍历收集所有节点然后反转顺序。代码大概长这样def backward(self): topo [] visited set() def build_topo(v): if v not in visited: visited.add(v) for child in v._prev: build_topo(child) topo.append(v) build_topo(self) self.grad 1.0 for node in reversed(topo): node._backward()这段代码看起来简单但visited集合和topo列表的配合很精妙。如果你用递归直接算梯度遇到共享节点会重复计算效率极低。注意手写自动微分时_backward函数里对other.grad的累加必须用用会导致梯度被覆盖训练完全不收敛。这个 bug 我调了整整一个下午才找到。3.2 TypeScript 类型声明文件的编写要点.d.ts文件是 TypeScript 工程化的核心但很多人只会用any糊弄过去。课程里给了一个很实际的场景你写了一个 JS 工具库想给团队里的 TS 项目用但没有类型定义。这时候你需要手写.d.ts。关键点有几个。第一模块声明要用declare module your-lib包裹。第二导出类型要用export关键字函数用export function类用export class。第三接口继承用extends但要注意 TS 的接口可以多继承这点和 Java 不同。课程里有一个例子我印象很深给一个事件发射器写类型定义。你需要用泛型约束事件名和回调参数代码大概是这样declare module event-emitter { type ListenerT (payload: T) void; interface Events { [key: string]: any; } export class EmitterE extends Events { onK extends keyof E(event: K, listener: ListenerE[K]): void; emitK extends keyof E(event: K, payload: E[K]): void; } }这个泛型约束保证了emit的时候 payload 类型和on注册时的类型一致。如果你写any就失去了类型检查的意义。3.3 Agent 工具调用的实现细节Agent 的核心是“决策-执行-观察”循环。课程里手写了一个极简的 Agent 框架大概 200 行 Python。关键组件包括工具注册表一个字典key 是工具名value 是函数、对话历史一个列表存 user/assistant/tool 三种角色的消息、解析器从模型输出里提取工具调用指令。我实测下来最容易出问题的是解析器。模型输出的格式不稳定有时候是 JSON有时候是自然语言里夹着函数名。课程里用了一个很实用的策略先尝试 JSON 解析失败则用正则匹配tool_name(args)这种模式。如果都失败就把原始输出当作普通回复返回。提示工具调用的参数校验一定要做。我见过太多 Agent 因为模型传了一个字符串给需要整数的参数而崩溃。课程里建议用 Pydantic 或 Zod 做运行时校验这个建议非常中肯。3.4 并发处理的坑Agent 应用绕不开并发。课程里专门有一节讲“Agent 怎么扛并发”。核心思路是无状态化——把对话状态存到外部存储Redis 或数据库Agent 实例本身不持有状态。这样你可以水平扩展多个实例用负载均衡分发请求。Python 这边用asyncio做异步 IOTypeScript 那边用Promise.all做并行工具调用。但要注意不是所有工具都适合并行。比如写文件的操作并行会导致竞态条件。课程里给了一个判断标准只读操作可以并行写操作必须串行。4. 实操过程与核心环节实现4.1 环境准备与依赖安装课程推荐的环境是 Python 3.10 和 Node.js 18。Python 这边需要装numpy用于矩阵运算但课程强调核心算法部分不要用 numpy 的高级函数而是用原生列表和循环实现这样才能理解底层。numpy 只用来做性能对比和验证。安装 numpy 的方法很简单pip install numpy但如果你用的是 macOS 的 M1/M2 芯片可能会遇到编译问题。课程里给了一个替代方案用 conda 安装conda install numpy会自动选择预编译的 ARM 版本。TypeScript 这边需要初始化项目npm init -y npm install typescript ts-node types/node --save-dev npx tsc --inittsconfig.json里要把strict设为truetarget设为ES2022module设为NodeNext。这些配置课程里都有说明照着抄就行。4.2 第一个手写算法线性回归课程从线性回归切入但不是用 sklearn而是手写梯度下降。步骤是这样的生成模拟数据y 3x 2 噪声初始化权重w和偏置b为随机值定义损失函数均方误差MSE mean((y_pred - y_true)^2)计算梯度dw 2 * mean((y_pred - y_true) * x)db 2 * mean(y_pred - y_true)更新参数w - lr * dwb - lr * db重复 1000 次我实测下来学习率lr设 0.01 比较稳。设 0.1 会震荡设 0.001 收敛太慢。课程里给了一个自动调学习率的技巧先设一个大值如果损失发散就减半直到损失稳定下降。4.3 手写神经网络的前向传播线性回归之后是单层神经网络然后是多层。课程里用了一个很清晰的组织方式把每一层封装成类有forward和parameters两个方法。forward接收输入返回输出parameters返回该层的可训练参数列表。一个全连接层的实现大概是这样class Linear: def __init__(self, in_features, out_features): self.W [[random.uniform(-0.1, 0.1) for _ in range(in_features)] for _ in range(out_features)] self.b [0.0] * out_features def forward(self, x): # x: [in_features] out [] for i in range(len(self.W)): s self.b[i] for j in range(len(x)): s self.W[i][j] * x[j] out.append(s) return out def parameters(self): return [self.W, self.b]这段代码效率很低但胜在直观。你可以清楚地看到矩阵乘法的本质就是双重循环。等你理解了之后再用 numpy 的运算符做优化性能能提升几十倍。4.4 Agent 项目的完整搭建课程最后有一个综合项目搭建一个能查天气、能算数学、能搜索文档的 Agent。步骤拆解如下第一步定义工具函数。每个工具是一个 Python 函数有明确的输入输出类型。比如get_weather(city: str) - dict。第二步注册工具。用一个字典把工具名映射到函数同时生成工具的 JSON Schema 描述供模型理解。第三步构建提示词。系统提示词里要包含工具列表和调用格式说明。课程里用的格式是你可以使用以下工具 - get_weather(city: str): 查询城市天气 - calculate(expression: str): 计算数学表达式 调用格式tool工具名/toolargs{参数名: 参数值}/args第四步实现主循环。接收用户输入调用模型解析输出。如果输出里有工具调用标记执行工具把结果追加到对话历史再次调用模型。直到模型输出普通文本为止。第五步加并发。用asyncio.gather并行执行多个独立的工具调用。但要注意如果工具之间有依赖关系必须串行。我跟着搭了一遍最大的感受是提示词的格式设计比模型选择更重要。同样的模型提示词里工具描述写得清楚调用准确率能到 90% 以上写得模糊可能一半的调用都是错的。5. 常见问题与排查技巧实录5.1 梯度爆炸和梯度消失手写神经网络时梯度爆炸是最常见的问题。表现是损失变成NaN或者突然跳到很大的值。排查思路现象可能原因解决方法损失变 NaN学习率太大降低学习率到 0.001损失震荡学习率偏大减半学习率损失不下降梯度消失换 ReLU 激活函数参数更新后无变化梯度为 0检查激活函数是否饱和课程里给了一个很实用的技巧在每次更新前打印梯度的范数。如果范数大于 10就做梯度裁剪把梯度缩放到范数为 10 以内。5.2 TypeScript 类型报错排查TS 的类型报错信息有时候很绕。课程里总结了几个常见错误和解决思路Type X is not assignable to type Y通常是接口定义不匹配检查字段名和类型是否一致。Property X does not exist on type Y可能是.d.ts文件没写全或者导入路径不对。Cannot find module X检查tsconfig.json里的paths配置和baseUrl。提示遇到类型报错先看错误信息的最后一行那通常是最具体的错误位置。前面的堆栈信息可以暂时忽略。5.3 Agent 调用工具失败Agent 调用工具失败的原因很多我整理了一个速查表错误表现排查方向解决动作模型不调用工具提示词没写清楚在系统提示里加调用示例调用参数格式错参数类型没约束用 Pydantic 做校验工具执行超时工具函数阻塞加超时和异步支持多轮调用死循环没有终止条件设最大轮数限制课程里特别强调永远不要信任模型的输出。模型可能编造不存在的工具名可能传错参数类型可能陷入无限循环。你的代码必须能处理这些情况。5.4 并发场景下的状态污染这是我在实际项目中踩过的最大的坑。Agent 实例如果持有对话状态并发请求会互相污染。解决方案是每次请求创建新的 Agent 实例或者把状态完全外置。课程里给了一个很优雅的方案用contextvars在 Python 里做请求级别的上下文隔离。每个请求有自己的contextAgent 从context里读写状态天然线程安全。import contextvars conversation contextvars.ContextVar(conversation) async def handle_request(user_input): conversation.set([]) # 后续所有操作都从 conversation.get() 读写这个方案比加锁优雅得多性能也好。6. 学习路径与时间规划建议6.1 不同基础的学习路线如果你是完全零基础建议按这个顺序先花一周补 Python 基础函数、类、列表推导式然后从课程的“数学基础”模块开始手写矩阵运算和梯度下降。不要跳跳了后面会卡。如果你有 Python 基础但没碰过 AI直接从“神经网络基础”切入。遇到不懂的数学概念课程里有对应的补充材料点进去看就行。如果你是想做 Agent 应用开发可以跳过前面的算法部分直接从“Agent 框架”模块开始。但建议至少把自动微分那一节手写一遍不然你对模型行为的理解会停留在表面。6.2 时间投入的合理预期523节按每节平均 25 分钟算视频总时长约 218 小时。加上自己写代码、调试、做练习的时间实际投入大概是视频时长的 3 倍也就是 650 小时左右。如果你每天投入 3 小时需要 7 个月。每天 5 小时需要 4 个多月。我的建议是不要追求刷完。选一条线学透比囫囵吞枣刷完 523 节有价值得多。课程的价值在于深度不在于数量。6.3 配套练习的建议课程每节后面都有练习题但很多是“填空式”的——给你框架让你补全关键代码。我的做法是不看框架从零写。虽然慢但效果天差地别。另外课程里的代码示例建议手敲一遍不要复制粘贴。手敲的过程中你会注意到很多细节比如变量名拼写、缩进、括号匹配这些在复制粘贴时都会被忽略。提示每学完一个模块尝试用这个模块的知识做一个自己的小项目。比如学完线性回归用真实房价数据跑一遍学完 Agent做一个自动整理文件的工具。项目驱动学习的效果远好于被动看视频。6.4 社区和文档的利用这个项目是开源的意味着你可以直接看源码、提 issue、甚至贡献代码。课程里专门有一节讲“开源文档贡献”教你怎么读源码、怎么写文档、怎么提 PR。这个技能本身就很值钱。我建议在学习过程中遇到不懂的直接去 GitHub 搜相关 issue。很多时候你的问题别人已经遇到过了答案就在评论区里。如果没找到自己提一个维护者的回复通常很快。7. 这个项目适合谁不适合谁7.1 适合的人群想转行 AI 的后端开发者你有编程基础缺的是 AI 的底层理解。这套课的手写方式能帮你快速建立直觉。做前端想往全栈 AI 方向走的工程师TypeScript 部分的内容正好补上你在 AI 工程化方面的短板。在校学生课程内容覆盖了从数学基础到工程实践的完整链路比很多学校的课程更贴近实际。想自己做 AI 产品的独立开发者Agent 模块和并发处理的内容能直接用到你的产品里。7.2 不适合的人群想快速出成果的人523节不是速成课它需要你沉下心来慢慢啃。如果你下周就要交一个 AI 项目这套课帮不了你。完全不想写代码的人全手写意味着你必须动手光看是学不会的。只想调 API 做应用的人如果你不关心底层原理只想快速搭一个聊天机器人直接用现成的框架更高效。7.3 和其他资源的对比市面上有大量 AI 课程但大多数要么太浅只讲概念要么太深纯数学推导。这套课的定位很独特用代码讲原理。它不要求你会微积分但要求你会写代码。如果你符合这个画像它可能是目前最好的选择之一。我个人的体会是学完自动微分和反向传播那部分之后再看任何 AI 框架的源码都不再发怵了。这种“祛魅”的效果是看多少篇科普文章都换不来的。最后分享一个我自己的学习习惯每学完一个模块我会用自己的话写一篇总结发在个人笔记里。写不出来就说明没学透回去重看。这个习惯让我在学这套课时少走了很多弯路。如果你也在学不妨试试。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑