1. 先别急着学框架:AI工程到底是什么
这两年"AI工程"这个词被提得越来越频繁,但很多人一开始都搞混了一个概念——把AI工程当成"用Python调模型"。我自己带过不少从算法转工程、从后端转AI的同事,也见过很多被"AI工程师"这个岗位名吸引进来的新人,大家最常见的误区就是:先学PyTorch还是先学LangChain,再不然就是从TensorFlow一路刷到Transformers,结果刷到第三周连一个能跑通的项目都没落地。
我想先说清楚一个容易被忽视的起点性问题:AI工程不是算法研究,也不是传统软件开发,它更像是一套"把AI系统从实验品变成生产工具"的工程方法论。
AI研究关心的是"这个模型在评测集上能不能涨点",AI工程关心的是"这个模型在真实流量里能不能稳定赚钱或省成本"。同样一个文本分类任务,研究员需要调的是模型结构、损失函数、训练策略;工程师需要想的却是数据管道怎么稳定产出、评估口径怎么对齐业务、模型出错了怎么兜底、流量上来之后怎么扩容。两者有一小段重叠区,但越往后走分叉越大。
还有一个维度是AI工程与传统软件工程的差别。传统软件工程里,需求基本是确定的:用户点按钮、系统写数据库、外部调接口,行为是可预期的,只要你按逻辑写对了,它就是对的。AI系统不一样,模型本身是概率性的,同一个输入今天可能给A结果、明天可能给B结果,数据一变行为就飘。所以AI工程的很多精力,花在"怎么让一个本质上不确定的系统,在业务层面表现得足够确定"上——这就要用到数据版本管理、模型评估体系、灰度发布、监控告警这些配套能力。
说回标题"ai-engineering-from-scratch"。我的理解是,它想表达的并不是"从零学会所有深度学习理论",而是"从一个什么系统都没有的状态,一步步搭出一套能开发、评估、部署、迭代AI应用的完整工程链路"。这篇文章我就按这条主线来写:从需求拆解和数据策略开始,到评估体系搭建、模型训练,再到部署上线的完整路径,以及上线之后怎么持续迭代。整个过程我会尽量给出可复用的框架、表格和踩坑记录,这样无论你是刚入门的新人,还是已经被项目折磨过的工程师,都能在里面找到对应自己阶段的那部分内容。
关于"从零开始"还有一个经验想先分享:新手最容易犯的毛病是铺太开,今天看看向量数据库,明天试试微调框架,后天又研究推理优化,一个月下来每个方向都只摸到皮毛。正确的做法是先按"数据—评估—训练—部署—监控"这条链路完整走通一个小项目,哪怕这个项目很小。有了端到端的体感之后,再纵深去补每一个环节的理论和工具,你才会知道自己缺的到底是哪一块。
2. 需求拆解与数据策略:AI项目里最隐性的成本中心
很多AI项目死得悄无声息,不是因为模型太差,而是从一开始就把问题定义错了。AI工程的第一道工序,不是选模型,而是把业务需求翻译成算法能优化的目标。这一步做不好,后面所有环节都是白费力气。
2.1 从业务目标到模型目标的翻译逻辑
业务方说"我们想要一个智能客服,减少人工介入率",这个需求直接抛给算法工程师,十有八九会做出一个客户不买账的东西。因为"智能客服"太宽泛了,你需要追问:是指自动回答常见问题?还是指辅助人工推荐话术?还是指识别用户情绪并转接?不同的答案对应的技术选型完全不同。
我习惯用一个"目标翻译四步法"来处理这类需求:
- 列出业务可量化的关键指标。减少人工介入率、提升首响速度、缩短平均处理时长、提高满意度——先让业务方把这些指标按优先级排出来。
- 明确模型输出的使用方式。模型结果是被系统直接采用,还是辅助人工决策?如果是直接采用,那么错误容忍度极低;如果只是辅助,评估标准就可以放宽。
- 定义"正确"的具体标准。以客服为例,两套标注员对同一句话的理解不一致怎么办?需要先制定打标规范,明确边界案例。
- 把业务目标翻译成模型训练目标。比如"减少人工介入率"对应的可能是"意图识别准确率+置信度阈值"的组合,也可能是"相似问法匹配的召回率"。
这里有个常见误区:以为业务指标可以直接作为模型训练目标。实际上业务指标通常是多个模型决策叠加的结果,直接建模往往很难优化,还是需要拆解到具体的分类或排序目标上。比如"用户留存提升5%"这个目标,可能需要拆成推荐点击率、Push打开率、落地页转化率三个子目标,分别建模再联动。
2.2 冷启动阶段没有数据怎么办
"从零开始"的项目,大概率面临一个冷启动问题:没有标注数据,甚至没有原始日志。这时候最常见的错误是等数据攒够了再动工,或者直接拿别人的开源数据集硬凑。我的建议是两条路并行:
第一,先搭一套规则基线。规则系统虽然蠢,但它有两个作用:一是立刻给业务提供一个可用的兜底方案,让流程先跑起来;二是通过规则系统的失败案例快速积累真实样本。比如做一个工单自动分类系统,第一版先拿关键词规则顶上,如果有人工复核环节,复核记录就是天然的标注数据。这个思路很多团队都验证过:初始规则越笨越好,因为它产生的"错误"才是后续训练数据里最有价值的部分。
第二,用人工标注小样本启动,再通过主动学习扩充。常见的启动规模是每类500—1000条,覆盖主要场景。我的经验是启动样本一定要人工精标,不要用弱监督批量打标,否则后面模型怎么调都带着系统性偏差。
数据层面的工程投入,必须比模型层的投入更早开始。我见过太多团队把数据管道写成一次性脚本,跑完就扔,结果每次模型迭代都要重新洗数据、重新对齐格式。正确的做法是把数据管道当产品做:清洗规则要配置化,版本要可追溯,每个字段的来源和加工逻辑要有文档。看起来浪费时间,实际上一次规范化能省下后面十次迭代的时间。
2.3 数据清洗和标注规范的隐形坑
数据清洗听起来不像技术活,但大多数AI项目效果差,根源都在这一环。我整理过一份高频问题清单:
| 问题类型 | 典型表现 | 后果 |
|---|---|---|
| 标签噪声 | 标注员理解不一致、边界案例随意标 | 模型学习到错误规律,评估指标虚高但线上效果差 |
| 样本偏差 | 训练数据里A类占80%,B类占5% | 模型对B类完全失明,线上出现B类时乱猜 |
| 重复/近重复样本 | 同一个问题被不同用户问了很多遍,原始日志里大量重复 | 训练集被冗余样本稀释,指标失真 |
| 时效性差异 | 用三个月前的数据训练,线上语义已经漂移 | 新词、新说法全部识别不了 |
| 字段缺失 | 关键上下文字段缺失,模型被迫在残缺信息上做判断 | 表现波动大,同一句话换个说法就崩 |
标注规范这块,我的经验是至少需要三个人参与制定:业务方定义"什么是对的",算法工程师定义"模型需要什么",标注管理员定义"标注员能不能一致执行"。三方各出一版意见,合并形成《标注手册》,手册里除了正常规则,一定要写清楚边界案例怎么处理。没有边界案例的标注手册,等于没有手册。
启动阶段还有一个常被忽略的成本:标注外包的验收机制。我习惯每次抽检10%—15%的标注结果,算标注员之间的一致性,低于阈值的批次直接退回重标。这个动作看似增加管理成本,但能防止整个数据集因为标注质量问题而作废。
3. 评估体系:先回答"怎么算好",再回答"怎么做好"
绝大多数AI项目在评估这个问题上栽过跟头。一个很常见的现象是:模型在开发集的准确率已经98%了,业务方一用就抱怨"这什么玩意儿"——因为开发集和真实场景根本不是一回事。
3.1 为什么评估要先于模型训练做设计
我在前面提到的链路顺序里,刻意把评估体系放在了模型训练之前。原因很简单:如果没有明确的评估标准,训练过程就没有方向,你根本不知道一次参数调整是变好了还是变坏了。
评估体系的设计需要包含三部分:
- 离线评估集:模拟真实分布的样本集,用于快速迭代。
- 线上评估机制:通过小流量或灰度方式,观察模型在真实业务中的表现。
- 人工评估流程:针对AIGC这类难以自动判别的任务,保留人类审核环节。
对于从零搭建的团队,我建议评估集的建设优先级高于模型训练本身。最少要预留项目周期的三分之一时间来做评估数据准备——这个比例在初听时很反直觉,但实际执行下来,几乎没有团队后悔过。
评估集的建设要注意"时间切分":不要随机抽样划分训练集和测试集,而是按时间切分,用前一段时间的数据训练、后一段时间的数据评估。因为真实业务场景中,用户行为、语言习惯都在随时间变化,随机切分会让模型"偷看"未来信息,评估结果虚高。
3.2 单一指标陷阱与切片评估
新手最爱问的问题是"准确率到多少算合格"。我的回答是:先别管准确率,看切片。
同一批数据整体准确率90%,可能掩盖了如下事实:A类场景的准确率是98%,B类场景只有60%,C类场景的样本太少根本没统计意义。这在真实场景中就是灾难——业务方只记住B类场景的失败案例,不会管你整体准确率多高。
我习惯建立一个切片评估框架:
| 切片维度 | 示例 | 价值 |
|---|---|---|
| 业务类目 | 工单类型、商品品类、渠道来源 | 发现弱势类目 |
| 文本长度/复杂度 | 短文本、长文本、多轮对话 | 发现模型能力边界 |
| 用户群体 | 新用户/老用户、会员/非会员 | 对齐产品策略 |
| 时间维度 | 工作日/周末、白天/夜间 | 发现数据分布变化 |
表格只是示例,每个项目要根据自己的业务设计切片维度。但原则不变:评估必须下钻到用户可感知的维度,而不是停留在一个整体数字上。
除了切片评估,还有一类常见的"指标幻觉"是使用不当的评估口径。比如分类不平衡的场景用准确率评估,基本等于没评估。这种场景应该看精确率、召回率、F1的组合,尤其是针对少数类别的召回率。二分类问题里,把阈值从0.5调到0.3,精确率和召回率的变化往往是反方向的——这个调参过程本身就需要评估体系配合,否则就是盲人摸象。
3.3 离线指标与真实体验之间的鸿沟
评估体系最难的还不是指标设计,而是离线指标和真实体验不对齐。尤其在AIGC这类开放式生成任务里,BLEU分数高不代表内容好,ROUGE相似度高不代表回答让用户满意。这时候就需要引入"人在回路"的评估方式。
我做内容生成类项目时,会专门设计一个人工评估打分表,从准确性、相关性、流畅度、安全性四个维度打分,每个维度分1—5档。虽然比自动评估慢,但它提供的信号是自动指标给不了的。实际操作中,可以把人工评估抽样的频率定为:每次模型迭代后,抽样100条,由两个评估员交叉打分,遇到分歧超过2分的案例进行人工仲裁。
这里有一个不得不提的教训:评估人选的多样性。如果人工评估员全部来自算法团队内部,评估结果会有明显的"自嗨"倾向——工程师知道模型哪些输出是好的,潜意识里会忽略真实用户更在意的方面。最佳实践是让产品、运营、客服等角色参与抽样评估,最好再引入真实用户的反馈信号。
4. 模型训练与调优的系统化方法:不要做"调参赌徒"
当我看到一个人窝在终端里反复改learning rate、换模型结构、调整batch size,却拿不出一套训练实验记录表的时候,我就知道这个项目离失控不远了。模型训练阶段最大的效率杀手不是算力不够,而是实验管理混乱。
4.1 先建基线,再谈优化
任何新任务的第一个实验目标都不是"效果好",而是"流程通"。我通常会把基线模型设置得非常简单:用通用预训练模型直接做zero-shot或few-shot推理,不微调、不优化,跑通完整流程,记录推理速度和初步效果。
这个基线的价值有三个:
- 验证数据管道的正确性——模型能跑起来,说明数据格式、加载逻辑、推理代码没有大问题。
- 提供一个对照锚点——后续所有优化都跟基线比,而不是凭感觉说"好像变好了"。
- 让业务方尽早看到可用版本——哪怕效果一般,也能收集反馈,避免等三个月后拿出来一个方向错误的东西。
有些新手会觉得"基线性能这么差,跑它有什么意义"。恰恰相反,基线会把"数据问题"和"模型问题"分开。如果基线在某个切片上表现奇差,你可以确定是数据覆盖不够,而不是模型结构不够先进——这能避免你在错误方向上浪费几周时间。
4.2 加数据不如"改"数据:微调中的真实杠杆
现在到了很多文章里最喜欢讲的"微调"环节。市面上的教程十有八九在教你怎么写训练脚本、怎么调超参数,但很少讲一个残酷的事实:对于大多数业务场景,微调效果的上限由数据集质量决定,而不是由训练技巧决定。
我在多个项目里验证过一个规律:清洗后的干净数据比脏数据用两倍的量效果更好。这个规律说起来平平无奇,执行起来却极其考验团队定力——因为"清洗数据"这三个字,意味着要把原始样本逐条过一遍,去掉标签错的、语义含糊的、上下文残缺的样本。
微调阶段另一个常被忽视的杠杆是"数据配比"。当训练集由多个来源的样本混合而成时,各来源的比例直接决定模型的行为偏向。比如指令微调时,如果通用对话数据占比过高,模型会变得废话连篇;如果业务数据占比过高,模型会过拟合到说话都带模板味。我一般会把业务数据为主、通用数据做正则化辅助,具体比例要看任务场景试出来,但实验记录里一定要写清楚每一版的数据配比。
超参数这块,我的建议是不要盲目网格搜索。先把最影响结果的几个参数固定下来:学习率(通常用1e-5到3e-5的区间)、batch size(尽量大,小batch稳定性差)、训练轮数(从小开始,观察验证集曲线)。每改一个参数,只保留一份实验记录表,记录模型版本、数据集版本、参数配置、评估结果。训练实验不是科学研究,但至少要做成"可追踪的工程活动"。
4.3 过拟合与欠拟合的判断和处理
"从零开始"的项目里,很多人第一版模型上来就过拟合——训练集loss蹭蹭往下掉,评估集指标纹丝不动。这时候不要急着加正则化,先复盘数据:是不是训练集里重复样本太多?是不是某个类别的样本太少导致模型死记硬背?
我整理了一个简单的排查表:
| 现象 | 优先排查方向 | 常规应对手段 |
|---|---|---|
| 训练loss下降但评估指标不动 | 数据泄漏/标签噪声/评估集分布差异 | 清洗评估集、检查数据切分逻辑 |
| 训练和评估指标同步差 | 模型容量不够或特征表达不足 | 换更大模型、增加训练数据 |
| 某类样本表现骤降 | 类别不平衡/边界样本不足 | 针对性采集数据、类目加权 |
| 训练评估都好但线上崩 | 线上数据分布与评估集不一致 | 补充线上真实样本、建立线上监控 |
过拟合的处理不是"加dropout"这种单一操作,而是要回到数据和评估的闭环里去调整。工程化的思路是:每次发现过拟合,先确认是数据问题还是模型问题,再对症下药。盲目堆正则化只会掩盖问题,让模型在评估集上看起来没问题、线上依旧崩。
5. 部署与服务化:从"模型能跑"到"系统能扛"
模型训练完了,评估也通过了,接下来到部署环节。这一环节看起来就是"把模型文件加载起来、暴露一个API",实际做起来牵扯的东西非常多,而且每个细节都能在线上出幺蛾子。
5.1 离线批处理与在线API的选型逻辑
很多AI应用的第一版需求是"给存量数据打标",而不是"实时响应用户请求"。如果业务场景可以接受分钟级甚至小时级的延迟,那么优先选离线批处理架构,而不是一上来就搭在线API服务。
离线批处理的好处非常明显:实现简单、排查容易、算力成本可控,模型性能出问题影响面也小。缺点是没有实时性。在线API适合那些真正需要实时响应的场景,比如客服机器人、实时审核拦截。我的建议是:能离线就别在线,先让业务跑起来,等明确存在实时需求了再演进。
如果确实需要在线API,那部署层面就要考虑几件事:
- 模型服务的容灾和水平扩展:单机部署挂了怎么办?流量翻倍了能不能扛住?
- 推理性能优化:首延迟多少算可接受?要不要上量化、剪枝、蒸馏?
- 请求日志记录:线上请求和推理结果一定要全量落日志,这是后续分析和数据回流的基础。
性能优化我多说一句:不要为了优化而优化。先压测,看业务瓶颈在哪——是模型推理慢,还是前后处理慢,还是网络延迟拖后腿。很多项目模型本身只占几十毫秒,前后处理和数据传输反而占了几百毫秒。你费劲做模型量化,不如先优化数据序列化和缓存策略。
5.2 灰度发布与回滚机制
把模型部署上线,跟发版一样,不应该直接全量切换。这里的关键是"灰度"——先让一小部分流量走新模型,观察效果,再逐步扩大。
灰度发布的具体操作因基础设施而异,但核心思路是:用流量切分来控制风险。比如先放5%的流量给新模型,跑一天,对比新老模型的关键业务指标。如果新模型明显更差,立即切回来;如果差异不大或更好,再逐步扩大比例。
这里有个小细节容易被忽略:灰度期间的评估指标,不能只看模型的离线指标,要看业务指标和用户反馈。有些模型离线分数高,线上用户就是不买账;有些模型离线分数略低,但用户投诉少了。只有灰度数据能告诉你真相。
回滚机制的设计要提前做好:保留上一版模型的加载路径、配置信息和推理代码,确保在检测到异常时,一键切回旧版本。很多团队在灰度前不准备回滚方案,真出问题时只能紧急改代码重新部署——这个操作在线上环境里,每多一秒都是风险。
5.3 一个稳定的推理服务里有哪些隐藏组件
推理服务不只是"加载模型、接收请求、返回结果"这么简单。我拆一个典型的在线推理服务,里面通常包含以下组件:
- 请求预处理:文本清洗、格式规范化、长度截断。
- 模型推理:核心推断逻辑。
- 结果后处理:概率转标签、置信度过滤、兜底规则匹配。
- 缓存层:高频问同样问题的时候,不重复跑模型。
- 降级开关:模型服务异常时,自动切到规则兜底或返回预设文案。
- 监控探针:记录延迟、QPS、错题率、资源使用率。
这些组件里,我特别想强调"兜底逻辑"。在AI系统里,模型一定会出错,关键是出错之后有没有一个体面的退路。比如意图识别置信度低于0.6时,不强行猜测,而是回复"我没太明白,您可以换个说法";比如生成式问答模型超时,不返回空字符串,而是返回人工坐席的转接提示。这些兜底逻辑能显著改善用户体感,也能降低线上事故的严重程度。
监控这块,至少要有三个层面的指标:系统层(CPU、内存、GPU利用率)、服务层(请求量、延迟分布、错误率)、业务层(结果分布、阈值命中率、兜底触发率)。业务层监控最容易被忽略,但它恰恰最有用——万一哪天数据分布漂移了,业务层指标会最先发出警告,而不是等到用户投诉了才发现。
6. 上线之后:自适应优化才是AI系统的分水岭
模型上线不是终点,而是真正的起点。这是AI工程和传统研发发版之间最大的区别:传统系统发完版只要不出bug就算完事了,AI系统上线之后要面对的是一个会变化的真实环境。
6.1 数据漂移监控与模型季度性退化
所谓数据漂移,指的是线上输入数据的分布和训练时用的数据分布发生了偏离。用户会造新词、业务方会改话术、季节变化会改变需求,这些都会让模型效果随时间衰减。
我在实践中观察到,很多模型在上线后的1-3个月内表现尚可,3个月后就开始出现明显退化。退化最早期的信号往往不是整体指标下降,而是某个切片表现异常——比如某个新出的产品品类,模型识别准确率直线往下掉。
应对数据漂移不能靠"重新训练一次"解决,而是要建立持续的监控和迭代机制:
- 定时统计线上请求的分布特征,和训练集分布做对比。
- 设定漂移阈值,触发告警后启动数据采集和重训流程。
- 积累线上高价值样本——尤其是模型出错但被用户或人工纠正过的样本。
- 周期性(比如每月或每季)重训模型,而不是等到效果崩了再救。
这些机制里,"积累线上高价值样本"是最核心的。我几乎在所有项目里都强调:模型上线后,人工修正的每一处错误,都是金钱买不到的训练信号。把这些信号回流到训练集,模型才会越用越聪明。
6.2 大模型落地中的评估运维难题
如果项目用的是大模型,无论是API调用还是自建模型服务,运维和评估的难度会再上一个台阶。
首先是成本控制。大模型按token计费的时候,一次不设上限的生成任务可以烧掉惊人的钱。我习惯在工程层面对token使用量做预算管理:设置单次请求最大token数、每日总限额,超限自动降级到小模型或规则方案。
其次是生成内容的一致性。同一个问题换两天问,答案可能完全不同,这在专业场景里经常导致用户困惑。一致性问题的工程对策包括:设置温度参数为较低值、引入固定模板的引导词、对敏感或关键问题强制走规则通道。
还有一个很隐蔽的问题是"大模型的错误比小模型更难以发现"。小模型出错通常是分类分错、识别失败,肉眼一看就知道不对;大模型生成的内容看起来流畅完整,但可能暗含事实错误或逻辑矛盾。这类问题的评估需要更精细的人工核查机制,必要时配合事实校验工具做交叉验证。
6.3 人机协同与反馈闭环的落地经验
最后聊一聊人机协同。很多AI项目不是要完全替代人工,而是让人工做得更轻松。这种情况下,系统设计从一开始就要考虑"人和AI分别负责什么、边界在哪里"。
我常用的协作模式是"AI先行,人工兜底":AI处理常见、标准化、低风险的任务,把不确定性高的案例交给人工。具体到系统设计上,置信度阈值就是人机分工的决策边界。阈值定得太高,AI能处理的量太少,人工压力大;阈值定得太低,AI犯的错太多,人工擦屁股更累。这个阈值需要根据人工处理成本、AI错误成本、业务风险承受力来动态调整。
反馈闭环这块,我的经验是"反馈越轻越好"。让用户或员工明确评价一条AI输出是否正确,操作成本很高,执行率会很差。反过来,把反馈动作嵌入正常业务流里——比如人工坐席处理完一条工单顺带修正了AI的意图标签——这种"无感反馈"的执行率能达到90%以上。
闭环跑通之后,系统就进入了自我进化的状态:线上数据产生信号,信号回流变成训练样本,重训模型,灰度上线,继续积累新信号。这个循环周期一开始可能是几周,跑顺了之后可以压缩到几天。能把这条循环跑通,才算是真正从零搭建起了一个AI工程体系,而不是仅仅"训练了一个模型"。
7. 写在最后的工程心法
按惯例,最后分享几点我这些年反复吃到红利的心法。
第一,AI工程里90%的价值在数据和评估上,模型的先进程度只占一小部分。很多团队在模型结构上卷生卷死,不如先把数据管道做稳、评估体系做实。在绝大多数业务场景,用前沿模型加GoodOld数据清理方案,效果远超盲目追新。
第二,要接受AI系统的"不确定性和不完美"。传统研发追求"零bug",AI工程追求"可接受的错误率+可控的兜底方案"。把系统做诚实一点——知道自己哪里不行,给用户一条体面的退路,比假装自己什么都行更容易获得信任。
第三,从零开始不是"把所有理论学完再动手",而是"先跑通第一个极小的闭环,再逐步加厚每一层"。第一个项目可以只是一个规则基线加一个分类模型,但一定要把数据、评估、训练、部署、监控这条链路完整走一遍。走完之后,你对"AI工程"这四个字的理解,会超过读十本教材。
最后再分享一个小技巧:养成写"实验记录"和"踩坑笔记"的习惯,不用很长,每次两三行就行。半年之后回头看,这些笔记里藏着你最值钱的工程经验。
路子就是这么个路子,剩下的,就是去你的项目里动手了。