1. 从"能跑通"到"能上线":AI工程的第一道坎
做AI工程和做算法实验完全是两码事,这是我入行几年后最深的体会。实验室里模型在验证集上跑到95%准确率,demo跑得飞起,可一旦放到生产环境,各种问题就像雨后春笋一样冒出来:数据对不上、延迟过高、效果波动、监控告警刷屏。很多团队把大部分精力花在调模型架构、调超参数上,却忽略了真正决定一个AI系统能否稳定运行的工程问题。这篇文章不聊论文里的SOTA,只聊我在实际项目中踩过的坑,以及那些没人提前告诉你、但迟早会撞上的问题。
一句话概括:AI工程的目标不是做出来一个“准”的模型,而是做出来一个“能长期稳定运行、效果可解释、出问题时能快速定位”的系统。这个定位差异,决定了我们思考问题的方式完全不同。
1.1 模型效果和业务效果之间隔着一个系统
最常见的一个误区,是把“模型准确率的提升”直接等同于“业务收益的提升”。某团队做过一个推荐系统改版,离线A/B测试中模型AUC提升了0.02,所有人都觉得稳了,结果上线后业务指标不升反降。排查到最后,发现模型输出的分数分布发生了变化,虽然排序质量变好了,但阈值没有调整,导致推送给用户的平均内容风格突变,用户反馈变差。
这背后的原因在于,模型只是整个业务链路里的一个环节。上游有特征服务、策略规则、审核流程,下游有文案展示、用户行为反馈。模型输出任何一个微小变化,都可能被其他环节放大。我在做电商搜索排序时遇到过类似情况:模型优化了相关性分数,但原先依赖分数做价格折价的逻辑没有同步更新,导致某些高价商品被推到前面,点击率掉了。所以AI工程里必须有一个意识:模型上线不是终点,链路联调才是真正的开始。
实践上,我的建议是每次模型迭代,不要只看离线指标,还要看模型输出分数分布的变化、对下游链路的影响、以及预期的业务指标是否真的动起来。最好建一个“模型影响面清单”,列出这个模型会影响哪些上游特征、下游策略、用户触点,每次改动前先过一遍。
1.2 评测指标的选择:离线打不准,线上才露馅
另一个让我栽过跟头的地方,是评测指标设计得太粗糙。分类任务只看准确率,回归任务只看MSE,这种习惯在工程化之后特别危险。举个实际例子:营销场景的流失用户预测,正样本占比通常不到10%,这时候准确率没有意义,瞎猜反而准;即使你用AUC,它也只度量排序能力,不度量概率校准,而营销投放的预算分配恰恰需要准确的概率值。
我后来总结出一个核心原则:离线评测指标必须服务线上决策逻辑。模型输出的分数在线上是怎么用的,离线就该怎么评。如果线上是拿分数做排序,那评测就应该以排序指标为主,比如NDCG、AUC;如果线上是拿分数做阈值判定并进入下一个流程,那就要关注召回率、精确率、F1以及概率校准曲线;如果是回归类数值预测,要关注误差在不同区间的分布,而不是一个MSE打天下。
这里还得提醒一句:评测集本身的构建也同样关键。有人为了省事直接用历史几天的数据做评测,却忘了业务本身有周期性。某次我做活动大促的效果预估模型,训练集和评测集都来自普通日,结果一到大促,误差直接翻倍。后来我们专门留出大促期间的样本做压测,才算真正把评测集建全了。
1.3 数据分布漂移:你的训练集和未来隔着一条河
做AI工程久了,你会发现一个残酷的事实:模型上线那一刻,就开始“过时”了。因为训练数据的分布和现实数据的分布永远存在差距,而且这个差距会随着时间不断变大。常见的情况包括:用户行为随季节变化、商品品类随活动变化、传感器设备随批次更换、文本表达随网络热词演变。
有次我们做一个文本分类系统,上线初期效果很好,三周后准确率明显下滑。查监控发现,输入文本的平均长度变短了,很多用户开始用缩写和表情符号表达情绪,训练集里根本没有这些。这件事给我的教训是:数据分布漂移不是偶发事件,而是常态,AI系统必须把“分布漂移检测”当成基础能力来建设。
具体做法上,我推荐至少监控三个东西。第一,输入数据的统计特征,包括均值、方差、分位数、缺失率、类别占比;第二,模型输出的分布,包括分数均值、分数方差、阈值命中率;第三,业务关键指标,例如转化率、点击率、误报率。不要追求复杂的数学检测方法,先用控制图或者简单的分桶对比,一旦发现连续几天分布出现系统性偏移,就触发人工复盘。这个问题越早建机制,后期越省心。
2. 数据处理环节的几个"老坑"
数据是AI工程的地基,但地基恰恰是最容易被低估的部分。很多项目上线后出问题,追根溯源,都出在数据身上。这一节我分享几个高频且隐蔽的数据问题,每个都是我自己或身边团队真实踩过的。
2.1 数据清洗里的脏数据比想象中更能伤害你
脏数据不是说格式不对,而是那些“看起来没问题、实际上含义不对”的数据。比如空值被填充成-1,模型把它当成一个真实特征;比如用户年龄字段里混进了注册天数;比如同一件商品在不同渠道的类目标签不一致。这类问题如果不做系统性探查,几乎不可能发现。
我做用户画像项目时,发现模型对某个人群的预测总是反常地高。查了很久才发现,数据管道把“未知”性别编码为0,把“女”编码为1,把“男”编码为2,但有一段时间新老管道混跑,老管道把“未知”也写成1。结果模型学习到“女性用户”就是“未知用户”,整个预测逻辑都歪了。
这件事之后,我给自己定了一条规矩:凡是特征工程里的编码、填充、分箱规则,必须写成文档,并且每个版本都要做数据质量验证。不要相信任何字段的“约定俗成”,用代码去校验分布、校验枚举值、校验跨表一致性。脏数据的杀伤力,不在于它能被一眼看出来,而在于它会安静地污染模型,直到你在线上付出代价。
2.2 标签不一致问题
标签是监督学习的指挥棒,但很多团队对标签质量的管理非常粗放。最常见的问题是人肉标注时标准不统一:同一个样本,两个标注员给出的标签完全相反;同一个规则产出的标签,在不同时间窗口内语义发生变化;还有一种是「标签泄漏」,用未来信息生成标签,导致离线指标虚高,上线效果直接崩。
标签不一致的根源,通常是缺少一个「标签定义文档」。不要觉得这是形式主义,我见过因为标签定义含糊,开发、产品、运营各执一词的混乱场面。一次信贷风控项目里,产品经理认为“逾期”是超过还款日晚上12点,运营认为是超过3天宽限期,开发按“超过30天”建表。等模型上线,业务方反馈“预测不准”,一查,标签口径整整偏了一个月。这种事听起来魔幻,但真实发生过。
我建议在项目启动时就把标签口径定下来,写成包含正负例定义、排除条件、回看窗口、标注规则、修订记录的统一文档。每次迭代都要检查标签分布是否发生突变,突变时先排查规则变更还是数据源变更。标签的稳定性,直接影响模型效果的上限。
2.3 数据泄漏:最常见却又最隐蔽的错误
数据泄漏是AI工程里最经典的翻车原因,它指的是训练集中出现了预测时无法获取的信息。泄漏不一定是故意的,很多时候是因为特征拼装时没有对齐时间戳。比如做销售预测,特征表里不小心包含了“当天优惠券发放数量”,而这个数据是在销售结束之后才能统计出来的,模型离线AUC漂亮得吓人,上线后立刻原形毕露。
我给自己总结了一个检查套路:每个特征都要问三个问题。第一,这个特征在预测时间点是否已经存在?第二,它是否存在版本回溯或重算的可能?第三,它是不是通过目标变量反向推导出来的?在代码层面,严格按照预测时间截断特征,确保训练样本中每个特征的时间戳都小于目标时间戳。还可以故意用随机噪声替代某个可疑特征,看离线指标降多少,如果几乎不降,说明模型本来就没依赖它;如果降得离谱,就要警惕这个特征是不是带上了未来信息。
数据泄漏最恶心的点在于,它会让你的离线评测完全失真,而你还在为虚高的指标开心。等上了线,真实分布的敲打会让团队措手不及。
2.4 数据集版本管理
很多AI团队用Git管理代码,却让数据随便躺在共享目录里,这是巨大的隐患。一旦数据被覆盖或字段被修改,之前的实验结果就无法复现。我见过一次严重事故:同事重跑历史实验,发现效果和当初记录差了5个点,查了两天,原来是原始数据表被另一个任务覆盖了某些字段。
数据版本管理不需要一开始就上复杂工具,但至少要做到三点:原始数据只读、处理脚本可追溯、每份数据集带版本号和生成时间。到后期,可以引入专门的数据版本管理工具,或者在数据仓库里做快照表。另一个实用习惯是,每个实验都在记录里保存完整的“数据指纹”,包括行数、列数、每列的唯一值数量、缺失率、均值方差。这样即使数据文件丢了,靠指纹也能确认找到的是不是同一个版本。
数据管理看起来不性感,但它决定了团队能不能在三个月后回答“当初这个模型是怎么做出来的”这个基本问题。如果回答不了,所谓的迭代和优化就都是空中楼阁。
3. 训练环境与基础设施的"隐形负债"
这一节聊的是AI工程中偏底层的部分。这些工作不被业务方看到,但一旦出问题,整个项目的节奏都会被打乱。
3.1 依赖地狱与环境一致性
做过Python AI项目的都知道,环境问题是第一道门槛。今天CUDA版本不兼容,明天依赖包冲突,后天机器上没有GPU驱动。最痛苦的是,你在自己电脑上跑得好好的模型,放到同事电脑上就是起不来。这种「依赖地狱」在团队协作里会浪费大量时间。
我的建议是,从第一天就用镜像化方式管理环境。把Python版本、CUDA版本、系统库、pip依赖全部锁定,做到“一次构建,处处运行”。每次升级依赖都必须重新做完整回归,不能只跑一个小demo就上线。还有个经验:不要轻易升级大版本,除非有明确的新特性需求。在AI工程领域,“能用就好”往往比“最新最好”更安全。
另外,环境的漂移也是一个风险点。有人手动在服务器上装了新的软件包,可能改动全局Python环境,导致其他任务崩溃。为此我坚持所有训练任务都使用隔离环境,并且每次训练都记录环境指纹。如果复现不了实验结果,环境不一致往往是第一嫌疑犯。
3.2 训练资源调度:GPU并不便宜
GPU资源永远是稀缺的,尤其是多人共用训练集群的时候。常见的问题有两个:一是单卡显存不够,二是多卡利用率上不去。很多初学者拿到一个模型就按默认batch size跑,结果显存爆掉,于是调小batch size,又开始担心效果变差,其实这是多卡并行和batch调大之间的平衡问题。
还有一个现实问题是任务排队。团队几个人同时要训练,没有调度系统时只能互相“抢卡”,非常低效。后来我们引入任务队列,给不同项目划分优先级和配额,简单粗暴地解决了冲突。这里我想特别提醒:先搞清楚训练任务是IO密集型还是计算密集型。数据读取慢导致的GPU空转,在视觉任务里非常常见。解决办法是预先将数据打成长条文件或内存映射格式,并用多进程预读取。有时候把数据管好,训练速度直接提升一倍以上,比优化模型结构划算得多。
3.3 实验追踪与可复现性
没有实验追踪的AI项目,就像没有记账本的小店,赚了赔了全靠拍脑袋。很多团队的实验记录是一套文件名乱飞的日志,比如“model_final_v7_final2.pth”,里面到底用了什么参数、什么数据、什么代码版本,全靠当事人的记忆。这种状态,一旦核心人员休假或离职,项目基本瘫痪。
可复现性是AI工程的底线能力,它要求每一次实验至少记录四件事:代码版本、数据集版本、环境版本、超参数配置。在这个基础上,再记录关键评测指标和模型产物路径。我自己的习惯是给每次实验生成一个唯一ID,所有日志、指标、产物都挂在这个ID下。时间长了,回头查一个三个月前的实验结果,几分钟就能定位。
这里额外提一个容易忽略的点:随机种子。用了随机种子不代表可复现,因为GPU的非确定性算子仍然存在。如果真的要求严格复现,需要设置环境变量并固定算子实现。不过大部分业务场景,不是每次随机初始化都要完全一致,重点在于趋势和结论可复现,而不是数值完全一致。取决于你们项目的严谨程度。
3.4 分布式训练的不确定性
模型大到单卡装不下时,我们自然要上分布式训练。但分布式训练并不是简单的多卡并行,它带了大量额外问题。比如数据并行时,梯度同步策略选不好,模型收敛就慢;通信开销过大,导致加速比达不到预期;还有模型并行时,各层的显存分配极不均衡。
最常见的坑是「batch size变大后需要同步调整学习率」,很多人直接照搬单卡配置,导致模型发散。另一个坑是不同卡之间的样本顺序不一致,影响BatchNorm的统计量,导致推理结果漂移。
我想建议的是:不到万不得已,先别上分布式。先把单卡的训练效率用尽,比如调整数据读入、混合精度、梯度累积等。如果数据量真的很大,优先考虑异步流水线和梯度检查点技术,而不是盲目堆机器。分布式训练带来的调试复杂度,往往比想象中高得多,尤其在稳定性方面,会消耗大量人力。
4. 模型部署与服务化:另一个世界
训练搞定只是开始,把模型塞进线上服务才算真正进入AI工程的核心战场。部署环节的问题,常常让人怀疑自己做的还是同一个模型。
4.1 模型线上推理延迟的幻觉
模型推理延迟是一个经常被低估的指标。很多人在离线测试时用单样本跑一次,得出“耗时2毫秒,很快”的结论,结果一上线,服务被压到100 QPS,尾延迟直接飙到500毫秒。因为离线测试没有考虑并发、内存带宽、特征拼接、序列化等开销,实际情况差得很远。
我做过一次NLP线上服务优化,模型本身是轻量级BERT,单次推理在GPU上确实只要几毫秒。但一次请求要拼接多段文本,还要做分词、填充、归一化,再加上排队等待和前向计算,总延迟硬生生到了100毫秒。后来做了一系列优化:特征预计算、请求批处理、模型动态量化,才把P99压到50毫秒以内。
这里有个经验:上线前必须做压测,而且要用线上真实的请求分布来做。不要只测平均延迟,要看P50、P99、P999,还要测不同并发下的表现。推理引擎的选择也很有讲究,比如用TensorRT、OnnxRuntime,还是直接用Python的TorchServe,不同方案在不同硬件上的表现差异巨大,一定要实测后再定。
4.2 模型文件大小与加载时间
很多团队把模型做得很“大”,动辄几个GB,结果在加载阶段就出了问题。模型服务是自动伸缩的,每扩容一个实例,业务机器都需要从对象存储拉取模型文件并加载到内存,这个耗时可能长达数分钟。如果弹性伸缩策略设得比较紧,扩容跟不上流量高峰,系统就崩了。
有一次我们有一个超过2GB的排序模型,每次实例重启要花3分钟加载。流量突增时,调度器扩容了一批实例,结果这些实例还没ready,流量已经击穿了原有实例,服务直接不可用。后来我们做了三个优化:一是用模型压缩技术把体积降到700MB;二是改成异步加载加“边加载边降级”策略,新实例在模型未ready前先用旧规则兜底;三是把模型文件放在高带宽存储上,减少拉取时间。
模型体积这件事,不能只看推理指标,还要看它带来的工程代价。几百MB的减小,可能换来的是几倍的服务稳定性提升。特别是对线上服务,模型文件应该和生产环境解耦,走独立发布流程,要不然每次发模型都要重启服务,运维成本很高。
4.3 版本升级与回滚策略
模型和普通软件一样需要版本管理,但很多团队做得很随意。直接覆盖旧模型、直接改线上配置、没有灰度,这些操作我全都见过,也全都出过事。模型升级比代码升级风险更大,因为即使离线指标看起来更好,也可能存在未知的分布外行为。
我的经验是做灰度发布,至少分三批:第一批内部流量或影子流量,只记录预测结果但不影响用户体验,对比新旧模型输出;第二批5%-10%流量,观察实时业务指标和异常;第三批全量。这个过程看似拖节奏,但能挡住大部分问题。另外,要随时准备回滚机制,模型产物的历史版本要保留,回滚时要连同特征和策略一起回滚,否则很容易出现新旧模型参数和特征逻辑不匹配。
很多人会问,回滚会不会损失一些效果呢?我的答案是,损失一点效果远好于线上事故。AI系统出了问题,用户不会怪模型,只会怪产品。稳,永远是第一位的。
4.4 并发和资源水位问题
线上推理服务的资源管理,是一个动态平衡问题。分配太紧,高峰会打满CPU、内存、GPU显存,造成延迟飙升;分配太松,成本又浪费。尤其是GPU服务,显存大小限制了并发数量。一个模型占用的显存除了模型本身,还有中间激活值和框架缓存,很多人在估算时只算了模型权重,导致上线就OOM。
建议在上线前精确测量不同batch size下的显存占用、延迟、吞吐,画出一条容量曲线。然后根据业务预期的峰值流量加上缓冲余量,定出每个实例的并发上限。同时,把自动伸缩的阈值评估好,不要让扩容指令在流量已经打进来之后才下发。更保险的做法是,配合流量护栏,一旦某个实例的队列深度超过阈值,立即丢弃部分非核心请求,避免雪崩。
还有一个小细节:CPU和GPU的比例。有些服务对单样本延迟不敏感,但对吞吐敏感,这时用批处理来提升GPU利用率,但同时会增加延迟,需要仔细权衡。CPU推理虽然慢,但在低流量场景下成本优势明显,可以做成“按需切换”的双模式。
5. 监控、治理与迭代闭环
很多团队认为模型上线就是大功告成,其实上线那一刻,AI工程的工作才进行到一半。监控和治理决定了系统能活多久,能否持续创造价值。
5.1 上线不监控,等于裸奔
监控不是看看系统不宕机就行,而是要看模型表现是否和预期一致。我们吃过一次大亏:一个推荐模型因为上游特征源切换,缺失率从2%涨到60%,但服务没有报错,因为代码里用了默认值填充,推荐结果虽然没有明显异常,但点击率几天内掉了20%,没人发现,直到业务方来投诉。
那之后我们搭了一套三层监控体系。第一层是系统监控:CPU、内存、延迟、QPS、错误码;第二层是数据监控:输入特征的缺失率、分布变化、异常值比例;第三层是模型监控:预测分数分布、正负例比率、关键业务指标。三层监控互为补充,任何一层出现偏离都自动报警。这样做的好处是,问题可以在几分钟内被发现,而不是在几周后被动地复盘。
另外一个容易忽视的点是,监控阈值的设置不能一成不变。业务有周期,比如大促期间流量天然会高,如果阈值写死,每到高峰期就误报。需要引入“同比”和“环比”的概念,用历史同期做基线,比固定阈值可靠得多。
5.2 预测漂移与数据血缘
预测漂移,简单说就是模型输出的分布和训练时不一样了。它不一定是模型坏了,有可能是业务模式变了、用户群变了、或者上游数据逻辑变了。要快速定位漂移原因,光靠模型指标是不够的,必须有数据血缘关系。
我建议对关键特征建立数据血缘图,记录“原始表→清洗逻辑→特征工程→模型输入”的完整链路。一旦模型效果下滑,可以顺着血缘链快速排查是哪个环节发生了变化。如果没有这层信息,就只能靠猜,效率极低。
数据血缘的维护确实需要投入,但它能在关键时刻救团队一把。我记得有一次线上分类准确率骤降,靠着血缘图十分钟就定位到是某个上游业务系统改了字段含义,回滚后恢复。如果不做血缘追踪,那次至少排查一整天。
5.3 特征一致性排查
训练和推理之间的特征不一致,是AI系统最隐蔽、也最致命的问题之一。训练时特征是从离线表中拼接的,特征值A来自历史快照;推理时特征是从线上服务实时算出来的,特征值B来自当前请求。两边的逻辑可能有一点差异,训练时用了过去7天的平均,推理时忘了除以7;或者离线用全局归一化系数,线上没有同步。
这个问题的诡异之处在于,模型离线指标往往不错,因为训练脚本和推理脚本是两套代码,你们各自都“对”。解决方式只有一个:统一特征计算逻辑,训练和推理使用同一套代码和配置。实践中可以通过特征仓库或特征平台,把特征定义、计算、存储都标准化。哪怕没有条件上平台,至少也要用共享的库函数来生成特征,而不是在离线脚本里手写一份、在线上服务里再抄一份。
我给团队定了一个死规矩:每次训练完模型,把线上抽取的特征和离线样本的特征做一次分布对比,并计算一致性指标。做不到这个,就不允许上线。这是用血的教训换来的规则。
5.4 模型退役与再训练策略
模型不是永动机,它的效果会随时间衰减,所以需要制定再训练策略。常见的有定时重训和触发式重训。定时重训简单,比如每周或每个月重跑一次,但可能浪费资源;触发式重训基于监控指标,比如效果下滑或漂移超标时自动触发。我倾向于两者结合:固定节奏跑,同时监控指标触发加急重训。
再训练本身也有坑。用新数据重训时,要注意不要丢掉之前学到的“历史经验”,否则有可能在一段时间内效果不如旧模型。常用的做法是,在训练集中保留一部分历史样本,或者用“回放”机制。另外,模型更新太频繁会给下游带来不稳定,业务方会抱怨“今天和昨天的结果又不一样了”。我们后来给模型设定了“冷静期”,新模型的分数和旧模型差异过大时,会通过分数对齐或平滑策略减小突变。
退役模型也不能一刀切。对于仍在某些场景下有价值的旧模型,可以先降级为候选模型,保留其输出用于对比分析。AI系统的治理,本质上是对一系列版本、数据、策略的管理,越正规越省事。
6. 组织与流程层面的"慢即是快"
AI工程的问题,一半出在技术,一半出在协作。很多项目推进慢,不是算法不够强,而是角色、流程、沟通出了问题。
6.1 需求沟通失真
AI项目和传统软件最大的不同,是目标很难一开始就定义清楚。业务方说“帮我们提高转化率”,算法团队以为是“做个点击率预测模型”,前前后后做下来,却发现业务方真正想要的是“识别高意向用户并推送优惠券”,两者虽然有关,但特征、输出、策略完全不同。需求失真带来的返工成本,在AI项目里常常是最高的。
我的经验是,启动需求后第一件事,是把“输入-输出-约束”定义出来。输入是什么数据,来自哪个部门,产出是什么形式,是分数、标签还是排序?约束有哪些,比如响应时间、可解释性、合规性?把这些写成一页纸的需求说明书,多花半天时间,能避免后面半个月的返工。
另外,业务方和技术方要一起制定成功标准。离线指标是技术指标,业务指标才是最终标尺。不能只定“AUC要提升多少”,还要定“点击率提升多少”“成本降低多少”。如果标准不一致,后面验收时必然扯皮。
6.2 谁为模型负责?角色边界
很多AI团队在推进过程中会出现“三不管”地带。算法工程师认为数据归数仓管,数据工程师认为模型归算法管,运营认为效果不好是算法的事。出了事故,拉来拉去,责任不清。
我建议在立项时就明确角色边界,至少四个角色要画清楚:业务负责人,负责定义问题、验收效果;数据工程师,负责数据质量和数据链路;算法工程师,负责特征、模型、评测;MLOps或运维工程师,负责部署、监控、容量。每个角色都有明确的责任边界和交接标准。小团队哪怕一人身兼数职,也要把职责说清楚。
角色边界不是官僚主义,而是为了在高压和复杂场景下减少内耗。AI工程本身不确定性高,如果协作再乱,项目基本就成了互相挖坑。
6.3 流程机制:评审、发布、审计
在AI工程里,流程不是负担,而是避险工具。我经历过从“没有任何评审直接上线”到“严格评审但流于形式”两个极端。真正有效的流程,应当轻量而关键。
至少要建立三类机制。第一类是模型评审,上线前对照需求说明书逐项检查数据、特征、离线评测、安全项;第二类是发布审批,明确谁可以发布、发布窗口是什么、回滚预案是什么;第三类是定期审计,每季度检查线上模型的监控记录、效果趋势、特征质量和数据血缘。审计不只是看指标,还要看有没有隐藏的“技术债”,比如临时补丁、手工数据修复这些短平快的操作。
这些机制看起来繁琐,但它们能在关键时刻保护团队。某个模型出了问题,只要有完整的评审、发布、审计记录,排查和定责都会快得多。流程的价值不在于限制行动,而在于让每一次行动都留有痕迹。
6.4 一个可参考的AI工程质量检查清单
日常工作中,我习惯把质量检查固化成清单,每次迭代、上线前逐项打勾。这里分享一份我常用且觉得有效的清单:
| 检查项 | 具体内容 | 通过标准 |
|---|---|---|
| 数据质量 | 数据分布、缺失率、枚举值、跨表一致性 | 关键特征分布环比无明显突变,缺失率低于阈值 |
| 标签口径 | 正负例定义、回看窗口、文档齐备 | 标签定义文档签收,标注一致性抽查通过 |
| 特征一致性 | 训练/推理同一套代码,时间戳对齐 | 一致性校验通过,无未来信息 |
| 实验追踪 | 代码、数据、环境、超参数齐全 | 实验记录可复现,指标可追溯 |
| 离线评测 | 指标贴合线上决策,评测集覆盖典型场景 | 关键指标达标,分布外样本有压测 |
| 部署验证 | 压测覆盖P99,灰度计划明确 | 容量余量充足,回滚方案演练通过 |
| 监控建设 | 系统、数据、模型三层监控 | 告警规则覆盖关键异常,响应流程清晰 |
| 协作机制 | 需求说明书、角色边界、发布流程 | 关键文档齐备,评审记录完整 |
这个清单不一定适合所有团队,但可以作为起点,按自己的项目类型调整。它最大的价值,是让团队在高强度的开发中不忘记“工程化”这件事本身。
我自己在实际操作中的体会是:AI工程的难点从来不在某个单独的算法模型里,而在于把所有模块黏合成一个可靠系统的过程。每一个“小问题”在大规模、长期运行的前提下,都可能变成大事故。与其等线上事故逼着你补课,不如从一开始就把数据、环境、评测、部署、监控、流程这六件事当成和模型同等重要的工作来对待。
最后再分享一个小技巧:每个项目做完后,花半天时间做一次“事故复盘”式的回顾,哪怕项目顺利也要做。把过程中所有卡过壳、让人困惑、返过工的点写下来,形成团队自己的坑列表。下次再遇到类似情况,直接翻清单,能省掉很多重复踩坑的时间。这大概是我这几年做AI工程,觉得最值得保留的一个习惯。