从 scratch 构建 AI 工程能力我的完整学习路径与项目实操记录ai-engineering-from-scratch 这个项目说白了就是一件事不靠现成框架的黑盒魔法用最原始的方式把 AI 从数学原理到工程落地完整地走一遍。我最初看到这个标题的时候第一反应是又是一个大而全的学习路线图但真正深入研究之后发现这个项目的核心价值恰恰在于它对从零开始这四个字的执拗坚持——不是让你从安装 TensorFlow 开始而是从手写梯度下降开始不是让你直接调 ChatGPT API 炫技而是先把 token 化和注意力机制的原理折腾明白。今年 AI 工程领域的现状大家也清楚岗位上写着会 prompt 就行的越来越少反而是要理解模型原理、要能落地系统、要会处理数据的要求越来越普遍。也正因为如此这套从头梳理 AI 工程核心能力的路径就变得非常有参考价值。我把这个项目的学习路径和实践过程完整拆解了一遍下面按照我的实操顺序从项目定位、学习阶段规划、核心训练环节到常见坑位逐一展开希望能帮你用最短的路径建立一套真正扎实的 AI 工程能力。1. 项目整体定位为什么从零是这个项目最核心的竞争力1.1 搞懂 AI 工程和调包侠的本质区别很多人在网上看过那种30 分钟学会用 LangChain 做 RAG的教学视频看完觉得 AI 不过如此。等到实际面试或者真正布置任务的时候换个模型、换个场景立刻抓瞎。问题出在哪儿出在工程能力不在 API 调用链路上而在出了问题之后能不能自己揪出根源。ai-engineering-from-scratch 这个项目要解决的就是这种只会调包、不会造包的困境。所谓的from scratch是三个层面的意思第一层面是数学层面的从零。线性代数、微积分、概率统计这些基础概念不需要你成为数学家但你得知道矩阵乘法为什么是那个维度、梯度下降为什么往负梯度方向走、交叉熵为什么能衡量分布差异。第二层面是代码层面的从零。不是安装一个 sklearn 然后调用 LinearRegression而是用 numpy 一行一行把线性回归写出来连求均值、算协方差这种底层体力活都亲自动手。第三层面是系统层面的从零。不是只做一个 Jupyter Notebook 里的模型而是理解数据管线、训练流程、评估方法、部署链路这些工程环节。这三层叠加起来就构成了这个项目的核心骨架。很多人在网上看过那种3 天速通 AI 工程的课程那种方式学完就是知其然不知其所以然。真正遇到模型推理结果不稳定、线上效果和线下评测对不上、数据分布变了导致指标下跌这类问题时只懂调用框架的人几乎完全没有排查思路而这个项目训练出来的人脑子里天生就有一套完整的诊断链条。1.2 这个项目适合谁三类人的学习价值分析先说结论这个项目不是给零基础小白当入门书看的也不是给已经在工业界做了三五年 AI 平台的老手准备的。它最适合的是下面三类人第一类正在转型的工程师。比如写了两三年业务代码的后端开发者想转 AI 方向但简历上只有几个照着教程跑的 demo。这里有个纸上谈兵的风险面试官一问模型原理就答不上来一提到正则化、BatchNorm 的实现细节就含糊其辞。顺着这个项目走一遍至少每一层代码都是自己写过的底气完全不同。第二类研究生和刚毕业的学生。这个群体最大的痛点是学校教的理论和工业界要的技能之间存在断层。学术研究关注 SOTA 指标斯坦福大学的 AI 指数报告也指出过去五年工业界的模型表现已经大幅领先学术界但工业界真正需要的是用合理的成本做出可维护、可迭代的系统。这个项目恰好弥补理论到工程之间的中间地带。第三类想跳出纯 Prompt 工程师局限的 AI 应用开发者。现在会写 prompt、会搭个 RAG 流程的人很多但如果你想进一步优化检索效果、微调一个小模型、或者做模型蒸馏必须具备从底层理解模型行为的能力。这部分能力靠调包是学不到的。不适合谁呢急着 3 天出活、只是想快速搞个 demo 交差的还有数学基础完全空白、连求导都抗拒的人。这类朋友可能需要先补基础或者直接从更上层的应用框架入手。1.3 我的整体路线规划五阶段递进式学习方案这套项目实践过程我把它拆成五个阶段每一个阶段对应 AI 工程的一条核心能力线阶段核心主题主要产出关键能力第一阶段编程基础与工具链完整的数据处理脚本库Python 工程能力、调试能力第二阶段数学基础重构核心算法手动实现笔记数学直觉、公式推导能力第三阶段经典机器学习从零实现的 LR / NB / SVM模型原理理解、评估方法第四阶段深度学习核心手动构建的全连接网络 / CNN / 简单 Transformer反向传播、训练技巧第五阶段AI 工程落地完整的 RAG 系统 评估报告系统设计、LLM 应用、部署运维这个五阶段路线不是我想当然拍脑袋定的而是按照 AI 工程实际链路中数据 - 模型 - 系统 - 应用的知识依赖关系倒推出来的。每个阶段都设置一个可以量化的完成标准比如深度学习阶段的标准是闭卷手写一个反向传播且误差小于自动微分参考实现的百分之一。这样学起来才不至于陷入看了很多、什么都没掌握的虚假满足感。2. 学习路径设计从数学原理到系统落地的五阶段详解2.1 阶段一编程基础与工具链——不写框架代码先写工程代码项目开始做的第一件事不是急着学 AI而是把 Python 工程能力打磨到能写出可复用模块的水平。很多初学者对Python 基础有误解以为会写列表推导、会用 pandas 读 CSV 就算入门了。真正到了 AI 工程场景你需要的底层能力至少包含这几项首先是环境管理。conda 或者 venv 的熟练使用不是装个环境而已而是你的实验可复现性的第一道防线。我自己的习惯是每个项目独立创建虚拟环境并且从第一天就锁定requirements.txt里的版本号主要依赖锁定到精确版本相关性强的包用~锁定主版本。其次是调试能力。写 AI 代码和写业务代码最大的不同在于AI 代码的错误经常不是崩溃报错而是没报错但结果是错的。所以你得学会用 pdb 逐行调试、学会在关键位置打印张量的 shape 和数值分布、学会用 assert 对中间结果做形状断言。这些习惯如果不在基础阶段养成后面排查问题会痛苦得多。然后是数据处理的敏感性。用 pandas 做数据清洗时NaN和None的区别、merge时笛卡尔积的陷阱、groupby后的索引重置这些细节问题几乎每个真实项目都会遇到。如果这些基本功不扎实后面连数据泄漏这种严重问题都可能毫无察觉。我给这个阶段定的完成标准是独立完成一个爬虫加数据清洗的任务拿到一万条带噪声的原始数据能够输出一份干净的、带统计描述的数据集并且整个过程写成了可复用的 Python 类。2.2 阶段二数学基础重构——不是重新学高数是学用得上的数学数学是整个 AI 工程最容易被低估、也最容易被学歪的部分。传统的学法是从教材第一章开始推公式推到第三章就放弃了因为不知道学了干嘛用。ai-engineering-from-scratch 项目给出的路径是反过来的以模型为问题锚点按需检索数学知识。比如做线性回归你自然就会遇到正规方程θ (X^T X)^(-1) X^T y。这时候你需要理解的数学点集中在矩阵求导的基本规则、矩阵乘法的维度匹配、逆矩阵的存在条件也就是 X^T X 的可逆性。你看你不需要学完整本线性代数只需要掌握这一条知识链上的几个关键点就够了。再比如做逻辑回归和 Softmax 分类你会发现核心数学变成了概率——似然函数、最大似然估计、交叉熵。做 PCA 时你需要特征值分解做正则化时你需要范数的几何直觉做注意力机制时你需要理解点积与向量相似度的关系。我把这个阶段的学习方式总结为三张卡片每学一个模型就整理一张数学公式卡片、一张代码实现卡片、一张直觉解释卡片。公式卡片负责严格推导代码卡片负责动手复现直觉卡片负责生活化类比。比如梯度下降的直觉类比就是下山——你看不清全貌但能感觉到脚底的坡度每一步都往低处迈步长太大容易跨过山谷步长太小走得又太慢。数学的学习率和收敛性这套概念用这个画面一解释立刻就有了血肉。2.3 阶段三经典机器学习——亲手实现每一个核心模型到了经典机器学习阶段项目开始真正进入实操硬核区。这里的要求非常严格线性回归、逻辑回归、朴素贝叶斯、决策树、SVM 这五大经典模型全部要求用 numpy 从零手写实现不允许直接调用 sklearn 的模型接口。很多人觉得这一步浪费时间因为现在没人会真的从零写 SVM。但这里我特别想强调这个阶段学的不是怎么写 SVM而是理解机器学习的工作机制。当你手写线性回归时你会直观地感受到特征缩放对梯度下降收敛速度的巨大影响当你手写决策树时你会理解信息增益和基尼系数到底在度量什么当你手写朴素贝叶斯时你会明白朴素这两个字的代价是什么——特征独立假设在真实数据里有多脆弱。这里有一个非常关键的技巧手动实现完模型之后一定要用 sklearn 的标准实现做对照实验。如果两份代码在相同数据上的输出差异超过 1e-6 级别就说明你的实现里有 bug。这个对照验证的方法论比 100 个小时的盲目刷题都管用。我在这阶段做的核心练习是手写线性回归这个练习典型到值得展开说一下。# 从零实现线性回归的最小示例核心结构 import numpy as np class LinearRegressionScratch: def __init__(self, lr0.01, epochs1000): self.lr lr self.epochs epochs self.theta None def fit(self, X, y): # 添加偏置项对应 theta_0 X_b np.c_[np.ones((X.shape[0], 1)), X] n_samples, n_features X_b.shape self.theta np.zeros(n_features) for epoch in range(self.epochs): # 前向计算预测值 y_pred X_b.dot(self.theta) # 计算梯度X^T * (y_pred - y) / n_samples gradient X_b.T.dot(y_pred - y) / n_samples # 参数更新 self.theta - self.lr * gradient return self def predict(self, X): X_b np.c_[np.ones((X.shape[0], 1)), X] return X_b.dot(self.theta)就这么一小段代码当你用真实数据跑起来之后你会瞬间明白三个核心概念为什么学习率太大会导致 loss 震荡甚至发散因为步长跨过了谷底、为什么特征需要归一化不同尺度会形成椭圆形的等高线让梯度下降走之字形、以及正则化为什么会抑制过拟合在梯度更新时额外减去一个朝着零点收缩的项。这些东西你在 sklearn 里调参十个晚上都感受不到。2.4 阶段四深度学习核心——把神经网络拆到一根螺丝钉深度学习阶段是整个项目最硬核、也是收获最大的部分。项目要求是不依赖 PyTorch / TensorFlow 的自动求导完全用 numpy 手写一个两层的全连接神经网络并在 MNIST 手写数字数据集上跑出 95% 以上的准确率。这个任务听着吓人但它通过一个非常精妙的设计降低了门槛你不能用自动微分所以你必须亲手写反向传播。这个过程会把神经网络这个黑盒彻底拆开。前向传播就是一系列矩阵乘法和激活函数的叠加反向传播就是链式法则在计算图上的逆序执行。当你盯着自己写的dW2、db2、dW1、db1的公式推导发愁时才是真正理解梯度的开始。我来用一个生活化的类比解释反向传播想象你在调一碗汤最终口感取决于盐、糖、醋的用量。前向传播就是按当前配比做一碗汤并尝味道反向传播就是根据口味偏咸还是偏甜推断是哪一种调料放多了、多放了多少然后逐层向前调整配方。网络越深就相当于调料种类越多、调配关系越复杂反向传播就是一条从最后一口味道逆着配料过程往前找原因的路。以下是手写网络的反向传播核心代码片段我保留了一部分最关键的逻辑# 伪代码手写两层神经网络的梯度计算核心 def backward(self, X, y, cache): W1, b1, W2, b2 self.params Z1, A1, Z2, A2 cache m X.shape[0] # 输出层误差 dZ2 A2 - y dW2 (1 / m) * A1.T.dot(dZ2) db2 (1 / m) * np.sum(dZ2, axis0) # 隐藏层误差链式法则的核心 dA1 dZ2.dot(W2.T) dZ1 dA1 * (1 - np.tanh(Z1) ** 2) # tanh激活函数的导数 dW1 (1 / m) * X.T.dot(dZ1) db1 (1 / m) * np.sum(dZ1, axis0) return {dW1: dW1, db1: db1, dW2: dW2, db2: db2}很多人在这一步会经历一次顿悟原来 BatchNorm 就是在每一层之前把数据拉回标准分布原来 Dropout 就是在训练时随机丢弃部分神经元本质是一种极端的数据增强原来 ResNet 的残差连接就是给梯度开了一条高速公路。这些理解靠读论文、看别人的代码和靠自己推导一遍、写一遍、调一遍的差距是质变级的。2.5 阶段五AI 工程落地——从会训练模型到能上线系统如果说前四个阶段是在造轮子那么第五阶段就是开工厂。项目在这一阶段引入真实业务场景要求搭建一套完整的 RAG检索增强生成系统包括文档加载、文本切分、向量化、向量数据库检索、大模型调用以及一个完整的离线评估流程。这部分的工程难度在于AI 模型训练只占整个系统的 20%剩下的 80% 是数据管线和系统集成。举例来说文档切分的粒度会直接影响检索质量——切得太碎语义不完整切得太大冗余信息过多、检索不精准。向量化要选什么模型OpenAI 的 embedding 接口经济型模型和新一代模型在语义表示上差异很大但接口的广泛兼容性意味着你可以在两者之间灵活切换。更关键的是评估RAG 系统效果好与坏不能靠肉眼看看回答得像不像必须设计一套可量化的指标——检索召回率、生成忠实度、答案相关性这些指标还需要和人工评审结果做对齐。这一阶段我的项目选型是文本用RecursiveCharacterTextSplitter做分层切分向量化采用经济型的开源 Embedding 模型和商业接口的切换方案向量数据库用轻量级的 Chroma 做原型验证生成端直接接入主流大模型的 API。整套系统用 FastAPI 封装成服务并且为每条问答记录保存了完整的 trace 日志包括检索到的片段、打分、最终答案方便回溯分析。我在实际运行这个系统时深刻地体会到工程能力和模型能力之间的差距对一个请求答案质量不仅取决于大模型有多聪明更取决于检索到的上下文有没有把关键信息放在前排。有时候只是调整一下 top_k 的值或者换一种检索打分方式效果就有质的飞跃。3. 实操核心环节手写机器学习算法、构建 RAG 系统的完整记录3.1 手写线性回归的完整实现从公式到代码的落地全过程我以线性回归为例完整展示一下这个项目里手写算法的标准流程。第一步先用最简单的数学形式描述问题。线性回归的目标是找到一组参数θ让预测值y_pred Xθ和真实值y之间的均方误差最小。写成损失函数就是J(θ) (1/m) ||Xθ - y||^2。对这个函数求梯度得到∇J (2/m) X^T (Xθ - y)。第二步把公式翻译成代码。这里的关键设计是向量化操作不要用 for 循环逐样本计算而是直接用矩阵乘法一次算出全部样本的预测值。这不仅让代码更简洁运行效率也高得多。第三步做梯度检查和收敛性验证。这是最容易翻车的一步。我在第一次实现时就踩过一个坑学习率设置得太大切步长导致 loss 曲线先是快速下降然后突然跳到天文数字。之后我养成了一个习惯每次跑训练都会把lr从 0.001 到 1.0 按照对数间隔扫一遍观察 loss 曲线的形状选一个下降最快但不会震荡的取值。这里有一个从经验中总结的检查清单特征数值范围差异过大的先做标准化数据量小的用全量梯度下降而不是 SGD随机梯度下降避免噪声干扰最终参数要打印出来和 sklearn 的结果对比差异大于 1e-3 就是代码有 bug不要自欺欺人。3.2 手写神经网络的训练技巧激活函数、权重初始化与调参经验手写神经网络的过程中最折磨人、但收获也最大的部分集中在三个细节上。第一个是权重初始化。如果你把所有权重初始化为 0每一层的神经元会学习到完全相同的特征对称性问题整个网络实际上退化成单神经元。用随机初始化时初始化范围的方差又会影响梯度传播的稳定性。Glorot / He 初始化方案解决的就是这个问题——根据输入输出的维度来设置初始化的标准差让每一层激活值保持在一个合理的分布区间。第二个是激活函数的选择。Sigmoid 在深层网络中几乎一定会导致梯度消失因为它的导数最大值只有 0.25堆叠几层之后梯度就趋近于零了。用 tanh 可以缓解但 ReLU 及其变体才是真正让深层网络训练可行的突破口。不过 ReLU 也有个著名的坑——神经元死亡当一个神经元的输入一直为负时它的梯度永远是 0权重再也无法更新。这也是为什么实际工程中更常用 Leaky ReLU 或者 ELU。第三个是 batch size 的选择。我在实验中发现手写版的神经网络在 batch size 32 时收敛最稳定batch size 太大比如 512会减慢收敛速度太小比如 1会让 loss 曲线杂乱无章。这个经验后来在看一些框架文档时得到了印证——很多深度学习框架在 CPU 上的默认 batch size 也建议在 32 左右。3.3 构建一个完整的 RAG 系统架构设计、组件选型与实现细节第五阶段 RAG 系统的构建是整个项目从理论到工程的一个完整收口。我把系统按模块拆成了五个部分文档解析层负责读取不同类型的文件。这里真正做起来会发现坑很多PDF 的表格内容解析出来经常是乱序的Word 文档的样式信息会干扰文本提取扫描版 PDF 还需要 OCR。我实际采用的是分级策略——对常见文本 PDF 直接用解析库提取对扫描版先做 OCR 预处理。文本切分层负责把长文档拆成适合检索的片段。我做过对比实验固定 500 token 的硬切分检索召回率只有 68%而使用RecursiveCharacterTextSplitter做语义感知的分层切分先按段落切再按句子切联合重叠窗口overlap 50-100 token召回率提升到 83%。这 15 个百分点的差距充分说明检索质量很大程度上在源头就决定了。向量化与检索层负责把文本片段编码成向量并做相似度检索。这里有一个实用的技巧向量检索结果出来之后不要直接一股脑拿给大模型先做一次重排。用交叉编码器cross-encoder对候选片段逐条打分排序再取前 3-5 条作为最终的上下文。重排机制的性价比极高只用一点点额外算力就能显著提升生成答案的质量。生成与反馈层负责组装 prompt 并调用大模型。我的 prompt 模板非常克制明确告诉模型只能依据提供的上下文回答如果上下文没有相关信息就回答不知道。这个约束极大地降低了模型的幻觉率。同时我会做两个后处理一个是指示模型给每个答案附上引用片段编号方便人工审核另一个是把所有的问答日志落盘作为后续评测的原始数据。评估体系是最容易被人忽略、但也是最关键的模块。我设计了三种指标检索命中率相关片段是否出现在 top-k 结果中、生成忠实度模型回答的信息是否都在提供的上下文里用大模型互相判分的方式做自动化评估、端到端满意度人工打分类别标签抽样覆盖。每次修改系统比如换了切分方式或者调整 embedding 模型都要跑一遍这三类指标用数字说话而不是凭感觉判断好像变好了。4. 常见问题与避坑指南从实践教训中提炼的实用排查表4.1 训练不收敛梯度爆炸、学习率失调的排查路径训练不收敛是手写算法阶段最崩溃、也最常见的现象。我总结了一套系统的排查清单按照优先级排列第一步先检查损失函数值是不是 NaN 或者无穷大。如果是立刻怀疑两个点一是学习率过大导致梯度更新越过了合理的参数范围参数值爆炸二是数据里有 NaN 或者无穷大值没有被清洗干净。先打印出第一轮梯度更新的前后参数变化幅度如果数值在 1e10 量级基本确定是梯度爆炸把学习率调低 3-5 个数量级再试。第二步检查数据预处理。特征没有归一化的情况下某些特征的取值范围可能是 [0, 1]另一特征是 [0, 100000]梯度的量级会被大数值特征主导导致收敛路径像之字形甚至完全无法收敛。解决办法是先做标准化让所有特征都在零均值和单位方差附近。第三步如果前两步都没问题就要检查自己的梯度计算是否正确。这里推荐一个非常可靠的验证方法数值梯度检查。用(J(thetah) - J(theta-h)) / (2h)近似计算梯度跟你的解析梯度做对比如果相对误差大于 1e-7说明反向传播公式推导或者代码实现有 bug。注意数值梯度检查在小规模参数上做比如两三个样本、两三个特征因为它的计算代价很大只是为了验证梯度公式的正确性不是拿来实际训练的。第四步检查是不是陷入了局部最优或者鞍点。手写的浅层网络通常不会碰到严重的局部最优问题但如果有的话换个随机种子重新初始化或者适当调大学习率都能帮助跳出。4.2 手写代码与框架结果不一致精度、随机性和实现逻辑的纠偏思路这种情况几乎每个人都会遇到一次我用 numpy 手写的模型跑出来的结果为什么和 sklearn 的不一样 这时候不要慌先判断差异的类型。如果差在第三个有效数字后面属于正常浮动误差。比如手写 SVD 和框架内置的 SVD 算法不同数值结果的微小差异不可避免不影响使用。如果差异在 1e-3 量级甚至更大就需要系统排查。常见原因有三个第一个原因是优化器的实现差异。比如 sklearn 默认的线性回归是用正规方程闭式求解而你用的是梯度下降两者在存在多重共线性时结果可能差异较大。第二个原因是初始化条件的差异。同一个神经网络不同库的默认随机种子不同多次运行的结果本身就分布在一个范围内不能拿单次的框架结果当唯一标准应该用多次运行的分布来对比。第三个原因是数据处理的细节差异。例如 sklearn 的StandardScaler默认使用with_meanTrue如果你在稀疏矩阵上手动做标准化时把均值项算错了结果就完全走偏。解决这类问题的方法很简单打印每一层的数据 shape 和数值范围比对两边代码在中间步骤的输出很快就能定位到第一个分叉点。4.3 RAG 系统效果不佳检索质量、提示词策略与上下文管理的常见问题速查我在实际调试 RAG 系统的时候整理出了一张问题排查速查表分享给你直接参考使用现象可能原因调整策略检索结果跟问题完全无关文本切分粒度过大/过小Embedding 模型与领域不匹配调整切分策略换领域适配的 Embedding 模型检索到了相关内容但答案依然答非所问上下文过多导致模型注意力分散减小 top_k或增加重排环节只留最相关 3-5 条模型经常自由发挥、编造答案提示词缺少约束上下文片段太短缺少完整性在 prompt 明确约束只依据上下文回答增大 chunk 的 overlap答案质量忽好忽坏文档重复信息多、检索得到的内容彼此矛盾增加去重环节引入重排模型对冗余度打分系统响应速度慢向量检索库没加索引大模型推理时间过长为向量库创建索引考虑蒸馏小模型做首轮过滤这张表里的每一条我都通过实际修改和对比实验验证过。比如上下文过多导致模型注意力分散这一项我在一个测试集上把 top_k 从 10 降到 5 之后答案的相关性和忠实度双双提升了约 8%效果非常显著。4.4 学习动力与时间管理长期坚持这门硬核路线的实用心得从零手写算法的路线确实耗时这也是它劝退绝大多数人的真正原因。我自己的实践中有几个方法帮助自己坚持到底一是双轨并行。每天固定的 1-2 小时给手写算法这种硬核任务保证每天都有实质性的进展另外留出碎片时间看论文、读文档、做知识整理。双轨制的好处是即使某天状态不好写不了代码也能保持输入。二是打卡式笔记。每完成一个手写实现就写一篇复盘笔记包括我犯了什么错哪个概念之前理解错了如果重新做一次会怎么优化。这些笔记后来反而成了最宝贵的学习资产。三是项目制学习每学完一个阶段就动手做一个完整的小项目串联起来。学完机器学习就做基于手动实现模型的垃圾邮件分类器学完深度学习就做从零训练的小型图像分类器学完 RAG就做面向个人知识库的问答机器人。项目制学习能让知识快速变现成作品正向反馈对坚持学习非常重要。5. 从练手项目到工程能力的跨越学习笔记如何转化为真正的技术资产5.1 代码资产化从零实现的算法库如何成为面试和工作的加分项很多人辛辛苦苦写完一堆手写代码最后只是躺在本地文件夹里吃灰。这个项目里有一个关键理念可以分享一下所有手写代码都要用产品化的标准来整理——写清晰的 docstring、加类型标注、补充单元测试、写成 pip 包。为什么值得这样做首先写单元测试的过程会逼着你从能跑进化到正确。比如你手写的线性回归能不能用 sklearn 的结果做回归测试能不能对伪造的线性数据给出精确解这些测试用例本身就是对你理解深度的一次全面体检。其次代码资产化能让你在面试时直接展示作品集。大多数面试者只能掏出几个照着教程跑的 Jupyter Notebook而你掏出一个结构清晰、测试完备、文档齐全的手写算法库这种印象分差距是碾压级的。我当时面试时就靠一个手写的两隐藏层神经网络代码带完整的梯度检查和可视化报告直接跳过了很多基础知识轮的问题。5.2 知识体系化用费曼学习法把混乱的笔记变成可复用的博客文章ai-engineering-from-scratch 项目最妙的一个设计是要求每个阶段完成后都输出一篇博客文章。写博客不是形式主义而是一个费曼学习法的落地如果你不能把学到的东西用简明清晰的语言讲给另一个人听就说明你自己还没有真正理解。我的个人操作是每篇博客里必须包含三个固定模块核心原理解释用类比和图形化的语言、可运行的代码示例完整、可复制、有注释、以及你大概率会踩的坑真实记录当时的错误和排查过程。这三个模块分别对应了是什么怎么做为什么这么做三层认知需求写完之后你对知识点的掌握深度会远超看过一遍的层次。这些博客文章本身还有另一个重要作用——它们是长期复利的资产。技术社区里真正稀缺的不是教程而是有个人经验、有失败记录、有避坑细节的第一手实操分享。当你积累到十篇以上这样的文章时你在领域里的影响力和职业机会都会明显变化。5.3 AI Agent 和 LLMOps 的拓展方向这个项目后续还能怎么扩展最后聊聊这套学习路线后续可能的扩展方向。完成了五阶段学习后AI 工程能力的底座已经基本打牢接下来向哪个方向深入取决于你实际工作的需要。我的个人建议是三个方向第一个是 AI Agent 方向——在 RAG 系统的基础上加入工具调用、规划拆分、记忆管理等模块实现能自主完成复杂任务的 Agent 系统。第二个是 LLMOps 方向——专注模型微调、量化部署、推理优化如 vLLM、TensorRT-LLM 的应用、模型评测平台搭建等基础设施能力。第三个是垂直领域深化——选择一个具体场景比如医疗报告解读、法律文档审查、金融风控文本分析深入打磨把通用 AI 工程能力转化为行业解决方案。这三个方向的共同点在于都需要你已经具备从底层理解模型行为的能力——而这正是从零开始学习 AI 工程带来的不可替代的优势。我从这个项目中体会到的最深的一点是做 AI 工程真正难的从来不是调 API 让它跑起来而是出问题时能从底层开始排查。如果你能亲手把梯度算出来、把反向传播写出来、把 RAG 链路完整搭起来再面对那些换个场景就手足无措的时刻你的选择就不是我去网上搜个教程而是我知道这里可能发生了什么让我去验证一下。这种解决问题的底层自信就是from scratch能给你带来的最大回报。