
这两年ai-engineering这个词被提得越来越密尤其是大模型冒出来之后几乎每周都有人跑来问我我零基础想走AI工程这条路到底该怎么开始说实话这个问题我也被问了无数遍。我自己就是从数学不太好、代码也一般的情况下一点点摸进来的踩过的坑可能比大多数人想象中要多。今天这篇就把ai-engineering-from-scratch这件事掰开揉碎讲清楚AI工程到底意味着什么、从零起步需要学什么、第一个项目怎么做、上线部署有哪些坑以及后续怎么保持成长。这篇不搞虚的全部按我自己实操过的路径来适合刚入门、或者已经会跑几个模型但总觉得隔着一层纸的朋友。1. 从零进入AI工程先想明白工程二字的分量1.1 AI工程不是调包而是系统级的交付很多人以为AI工程就是会用TensorFlow、PyTorch或者会调用OpenAI的API这其实是个很大的误解。工程化和写算法Demo是两码事Demo只需要在Notebook里跑通一个结果而工程化要考虑数据从哪来、模型怎么训练、怎么部署、上线之后怎么监控、效果变差了怎么回滚还要考虑成本、延迟、并发甚至团队里别人怎么接手你的代码。我自己带过几个新人最明显的共性问题是他们能把一个模型训练得很好却不知道如何把它变成一个别人能用的服务。有一次一个同事做了个很不错的分类模型本地跑F1值到了0.9结果准备上线时才发现模型推理一次要2秒接口完全扛不住并发线上数据格式和训练时也对不上。这就是典型的会算法、不会工程。AI工程的核心能力其实是在模型之外数据处理管线的健壮性、训练脚本的可复现性、部署运维的自动化程度、监控告警的完备性。这些能力不性感但决定了你的模型到底能不能真正产生价值。1.2 零基础起步需要具备的三项储备我一般建议想入行AI工程的人先自测三项基础不需要全满分但至少要达到够用的水平编程能力Python是必须的至少要能熟练写类、装饰器、生成器会管理虚拟环境能看懂别人开源项目的代码结构。不是会写for循环就算会Python而是要能组织一个多文件的工程化项目。数学直觉不需要你会推公式但得知道梯度下降在干什么、过拟合是什么、损失函数的意义是什么。线代里的矩阵乘法、概率里的贝叶斯思想这些都是用到再补也行但不能完全没有概念。业务理解这经常被忽略。模型是给业务用的你得知道你的用户是谁、数据从哪产生、预测错了会有什么后果。比如做信贷风控模型误判一个坏人的代价和误杀一个好人的代价完全不同这决定了你的阈值怎么设、评估指标怎么选。这三项里编程能力是最硬的敲门砖数学直觉决定你能走多深业务理解决定你能不能做出真正有用的东西。1.3 我踩过的最大的一个弯路说一个我自己的弯路。刚入行那会儿我花了整整两个月去啃西瓜书和花书想着把算法原理全搞明白再动手。结果呢两个月后我连一个完整的训练脚本都写得磕磕绊绊。后来我才明白正确的姿势是带着问题学原理——先跑通一个最简单的模型再倒回去看它为什么有效、为什么失效。现在回头看AI工程的学习路径不应该是线性的它更像一个螺旋先动手做一个小项目遇到不懂的原理再回头学学完再回去优化项目如此循环。这一篇接下来的内容就按这个螺旋逻辑来展开。2. 环境搭建和第一个最小闭环跑通比什么都重要2.1 硬件和云资源怎么选才不花冤枉钱环境搭建是第一个劝退点。我自己早期就在这上面浪费了很多时间折腾CUDA版本、驱动兼容一弄就是好几天。很多人一上来就要买4090或者租A100真没必要。我的建议是分阶段来阶段推荐方案理由入门学习跑通代码个人电脑CPU跑小模型或用Google Colab免费版学习阶段重点是理解流程小数据量CPU完全够用正式做小项目数据量几万条Colab Pro / Kaggle免费GPU免费额度足够跑中小型模型T4的算力训练文本分类绰绰有余训练大模型/大规模微调按需租用云GPU按小时计费不需要一次性买卡用多少租多少这里有个非常现实的经验不要用本地环境折腾深度学习的GPU加速。我自己在Windows上配TensorFlow-GPU前前后后折腾了不下五次每次都能遇到新问题。现在我的建议是——本地只装CPU版本的库用来写代码调试真正训练放到云上去。调试用CPU、训练用GPU这个组合能让你少掉一半头发。2.2 Python环境和依赖管理越早养成好习惯越省心新人最容易犯的错就是全局装包。今天装一个requests明天装一个transformers几个月后环境乱成一锅粥某个库升级导致另一个库崩掉根本查不出原因。我现在的标准操作是每个项目单独建一个虚拟环境用python -m venv venv或者直接用conda管理。项目依赖用requirements.txt或pyproject.toml锁版本特别要锁传递依赖。所有实验都用seed固定随机数保证结果可复现。# 创建项目目录和虚拟环境 mkdir my-ai-project cd my-ai-project python -m venv venv source venv/bin/activate # Windows下用 venv\Scripts\activate # 安装基础依赖 pip install numpy pandas scikit-learn # 深度学习框架建议分开装方便排查问题 pip install torch # CPU版先调试这套流程看起来笨但后面做项目能省巨量的时间。我后来接手过不少别人的代码最头疼的就是那种在我电脑上明明能跑的问题九成都是依赖没锁版本导致的。2.3 第一个最小闭环训练一个文本分类模型环境好了就该跑第一个端到端流程。我第一次完整跑通的项目是一个垃圾邮件分类器数据量只有几千条用TF-IDF加逻辑回归就能到0.95的准确率。这个项目虽然简单但它让我第一次完整经历了数据→训练→评估→保存→加载推理的全流程后来的所有复杂项目都是在往这个骨架里填充更重的内容。最小闭环大概长这样import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report # 1. 数据 df pd.read_csv(spam.csv) X df[text] y df[label] # 2. 特征化 vectorizer TfidfVectorizer(max_features5000) X_vec vectorizer.fit_transform(X) # 3. 训练 model LogisticRegression() model.fit(X_vec, y) # 4. 评估 print(classification_report(y, model.predict(X_vec)))这四个步骤是AI工程的最小原子单元数据、特征化、训练、评估。你后面做的任何复杂系统本质上都是在每个环节上做得更精细。跑通这个你就有了工程感的第一块基石。3. 数据、模型、评估三者之间的关系比你想的更微妙3.1 数据质量决定模型上限这个规律永远有效Kaggle上有句话我印象很深Garbage in, garbage out. 模型的上限是由数据决定的模型只是去逼近这个上限。我做过一次很惨的教训一个文本分类项目训练集准确率99%测试集却只有70%一开始我以为是模型过拟合结果排查了半天才发现是数据泄漏——我在做数据清洗的时候把标签信息通过特征工程泄漏进了训练集。数据清洗这件事看着简单但它是AI工程里最消耗时间的环节。我通常会把数据处理分成三层结构层面处理缺失值、重复值、异常值统一格式这两步大概占数据工作量的30%。语义层面去停用词、纠正常见错误、处理专业术语这一步需要领域知识占40%。分布层面检查类别分布是否均衡、时间分布是否有偏移、训练测试集是否同分布这占30%但经常被忽略。第三层尤其重要。很多模型上线后效果滑坡就是因为训练数据和线上数据的分布发生了偏移这个在训练阶段根本发现不了只能靠上线后的监控去抓。3.2 模型选型的逻辑先在简单模型上找基线选模型有个常见的陷阱一上来就上最先进的模型。BERT效果好那就用BERTLLaMA效果好那就微调LLaMA。结果是训练成本高、部署复杂还不一定比简单模型好多少。我的习惯是反向操作先跑一个最朴素的基线文本分类先跑TF-IDF 逻辑回归或朴素贝叶斯。图像分类先跑一个小型CNN比如ResNet18。只有基线跑不通或者基线离业务目标差距明显才升级到Transformer系列。这个做法的核心逻辑是基线模型能帮你快速定位问题的性质。如果简单模型效果就很差那大概率是数据问题或任务定义问题换再大的模型也没用如果简单模型效果尚可但不够好那升级模型才有意义。我在一个命名实体识别项目上就吃过亏一开始直接上BERT-large训练慢、显存吃紧效果也只是比CRF好一点点。后来我换成先跑CRF发现主要问题其实在于训练数据里实体标注不一致BERT再好也学不会混乱的标注。把数据修好之后CRF的效果已经能应付大部分场景最后我用BERT只是在它基础上加了3个点。3.3 评估指标的骗局准确率高不代表模型好用评估是很多人最容易糊弄的一环。最常见的问题就是只看准确率。我见过一个信贷风控模型坏样本只占1%模型全部预测为好准确率99%看似完美实际上毫无用处。正确的做法是回到业务场景去定义指标类别不平衡看精确率Precision和召回率Recall的P-R曲线根据业务代价选F1或者其他加权指标而不是单一准确率。排序类任务如推荐、搜索看NDCG、MRR这类指标更关注好结果是否排在前面。回归类任务看MAE和RMSERMSE对大误差更敏感MAE更直观。成本敏感场景引入业务代价矩阵去计算总代价比如错误拒绝一个VIP客户的成本是X错误接受一个骗子的成本是Y两者不是一个量级的。我自己的习惯是每个项目在开始之前先写一段评估方案明确业务上什么算好、什么指标最贴切、门槛值是多少。这段文字一般不超过一页但能让后续所有实验都有了一个锚点不会在指标的迷宫里迷失。4. 把模型变成产品部署与服务化的实战要点4.1 模型部署的三种方式按需选择模型训练完了真正的工作才刚开始。部署方式没有绝对的好与坏只有合适与不合适离线批量预测用调度工具比如cron或Airflow定时跑批把预测结果写入数据库。这种方式实现最简单适合对实时性没要求的场景比如每日用户分群、批量内容审核。在线API服务把模型封装成一个HTTP接口实时接收请求返回预测。这是最常见的形态适合实时风控、在线推荐、聊天机器人等场景。边缘端部署把模型压缩后放到移动端或嵌入式设备上运行不依赖网络。适合离线翻译、端侧语音助手等场景但受限于算力需要做剪枝量化。我早期做的项目基本上都是离线批处理因为最简单。后来做在线服务时才意识到在线部署对代码质量的要求高了一个数量级——你要考虑超时、限流、熔断、并发安全、内存泄漏这些都是Notebook里永远不会出现的问题。一个最简单的在线服务其实没有想象中那么玄# FastAPI torch 的最小在线推理服务 from fastapi import FastAPI from pydantic import BaseModel import torch from transformers import BertTokenizer, BertForSequenceClassification app FastAPI() tokenizer BertTokenizer.from_pretrained(local_model) model BertForSequenceClassification.from_pretrained(local_model) model.eval() class Request(BaseModel): text: str app.post(/predict) def predict(req: Request): inputs tokenizer(req.text, return_tensorspt, truncationTrue, max_length128) with torch.no_grad(): logits model(**inputs).logits pred logits.argmax().item() return {label: pred}这段代码能跑但它只能算Demo。真正生产级的服务还要加模型版本管理、请求日志、QPS监控、异常重试每一样都需要单独设计。4.2 推理性能优化先用便宜的招服务上线后最先遇到的问题就是慢。我在实际项目中总结了一套从便宜到贵的优化顺序按这个顺序来能省很多事模型蒸馏或换小模型把BERT换成DistilBERT速度提升接近一倍效果只掉一两个点。这是性价比最高的方案。批量推理batching把多个请求攒到一起进GPU推理吞吐量可以提升好几倍。用FastAPI的话可以配合异步队列实现。缓存对高频重复的请求做结果缓存比如热门文章的情感分析结果可以被复用。量化把FP16或INT8量化模型体积变小、速度变快代价是轻微精度损失。换推理框架比如用ONNX Runtime或TensorRT替换原生PyTorch推理不改变模型结构就能提速。有一个很典型的经历我之前做一个文本分类API单次推理平均200ms压测时5个并发就超时了。我先上了批量推理把P99延迟压到了150ms然后换上了量化后的INT8模型延迟降到了80ms最后加了一层缓存热点请求直接命中延迟只剩下10ms。每一步都很简单但叠加起来效果惊人。需要特别强调的是优化之前一定要先量化你的瓶颈。我用过一个GPU性能分析工具发现很多情况下模型推理只占30%的时间剩下都在数据预处理和后处理上。一味的在模型侧压榨不如先看看前后处理的代码有没有冗余。4.3 线上监控与模型迭代你不能只交付一次模型上线从来不是终点。我做过的所有项目里凡是效果持续稳定的背后都有一套监控系统。监控的核心四件事输入数据监控特征的分布有没有偏移有没有涌现新的数据模式比如一个模型训练时样本都是简体中文结果线上突然出现大量繁体输入这就是分布偏移。预测结果监控预测值的分布有没有变化分类模型各类别的占比如果突然变化通常意味着线上数据出问题了。业务效果监控最终业务指标有没有达成比如点击率、通过率是否达标这个指标比模型指标更直接。系统性能监控QPS、延迟、错误率、显存占用。这些是工程侧的红线超出阈值就得告警。监控这件事看着繁琐但它其实是AI工程和算法研究最重要的分界线。算法研究追求离线指标更好AI工程追求的是系统长期稳定地产生价值。5. 一个完整入门项目的复盘从0到上线的全过程5.1 项目选题怎么选一个既能练手又不过于复杂的题目如果让我推荐一个最适合入门AI工程的完整项目我会选新闻标题的多分类。原因有三个数据容易获得公开数据集很多不需要爬虫和标注。任务难度适中简单模型能跑到0.85复杂模型能到0.95可以明显感受到不同方法带来的收益。分类任务链路完整数据清洗、特征工程、模型训练、评估、部署、监控每个环节都能练到。避免一开始就做那些看起来炫酷但复杂度太高的题目比如从零预训练一个大模型、做多轮对话系统因为这类项目的调试周期太长你很难快速建立一个完整的工程闭环。5.2 我从这个项目里整理出的标准流程我通常会把这个流程固化下来做成项目模板后面每个项目都在这个骨架里替换内容定义问题明确输入是什么、输出是什么、业务上怎么用。数据探查写一个Data Profile脚本统计数据量、字段类型、缺失率、类别分布。基线模型用一个简单的模型快速跑通流程定下第一个评估基准。迭代优化加特征、换模型、调参每次只改一个变量记录实验日志。部署上线把模型封装成服务写好接口文档。监控复盘上线后记录线上指标定期对比离线评估和线上效果的差距。其中第4步最容易乱。我的经验是实验日志一定要结构化管理。用个表格记录日期、数据版本、模型版本、参数、评估结果、备注。否则过了两周你就忘了当时那个0.91的准确率到底是用什么参数跑出来的。5.3 复盘这个项目踩过的坑希望你别再踩这个项目我做的时候踩过几个坑现在回看都是很典型的初学者问题第一个坑是训练集和验证集的划分不干净。我当时做数据清洗时先对整个数据集做了标准化然后再切分训练测试集这导致了数据泄漏——测试集的信息通过标准化过程流进了训练集验证结果虚高。后来改成先切分再分别处理验证结果瞬间真实了很多。第二个坑是忽视了数据的时间属性。这个数据集里的新闻是有发布时间的不同时间的新闻主题分布差异很大而我直接随机切分了。正确的做法应该是按时间切分用前期的数据训练、后期的数据验证这样才能模拟线上真实场景。第三个坑是急于上复杂模型。一开始就微调BERT结果训练时间和调试成本都很高最后发现用简单的TF-IDF加LightGBM就已经能到0.9BERT只提升了两个点。如果先跑基线后面每一步的收益都会更清晰整个项目的节奏也稳很多。6. 后续进阶路线与实用建议6.1 不同背景的人怎么继续走AI工程这个领域最适合的状态是持续小步快跑。不同背景的人侧重点不同偏工程的开发者已经有较强的编码能力重点补机器学习和深度学习的基础知识要多做模型训练的实验理解数据、损失函数、优化器之间的相互作用。偏算法的研究者模型功底很好重点补软件工程能力代码规范、单元测试、CI/CD、容器化、监控告警。这部分是你和纯算法岗拉开差距的地方。完全零基础转行者先用两到三周跑通前面说的最小闭环建立整体认知再决定往哪个方向深入。我个人的体会是AI工程岗的核心竞争力不是某项单一技术而是把多个技术栈串起来的能力。你能独立做到拿到一个业务问题设计数据方案训练模型部署上线再监控迭代你就是能独当一面的AI工程师。6.2 一个可自测的阶段性清单如果你想评估自己在哪个阶段可以参考我给自己设计的清单阶段一入门能独立跑通一个完整的训练评估流程能读懂常见模型的官方文档能写简单的数据预处理脚本。阶段二熟练能把模型封装成接口上线能定位并解决服务性能瓶颈能设计并落地监控方案。阶段三独立能独立负责一个AI项目从0到1能根据业务场景选择合适的模型方案能制定优化计划并按期交付。每次带新人我都会让他在第一阶段把基本功打扎实尤其是依赖管理、实验记录、代码规范这些不性感但必须的东西。这些习惯越早养成后面做复杂项目时就越从容。最后分享一个我自己一直在用的小技巧无论项目多忙每周固定留出半天时间做技术复盘。把这周遇到的问题、解决思路、还有哪些没弄懂的点都记下来。很多当年觉得高深莫测的知识其实就是在这样一次次复盘和补漏中不知不觉变成你自己的东西的。AI工程从来不是一条笔直的路但只要能持续闭环迭代你一定会发现自己的进步比想象中快得多。