ai-engineering 这个词,过去两年在圈子里快被说烂了。但我今年真正动手把一件事从头做了一遍——就是标题里写的 ai-engineering-from-scratch:不靠现成平台、不依赖公司沉淀多年的算法中台,用一支小团队,从零开始把 AI 系统搭到能扛线上流量。今天这篇就是想把这三百多天的踩坑和沉淀,按我自己的实操顺序,完完整整拆给你看。这篇内容更适合刚从算法转向工程的同学,或者团队里还没有专职机器学习基础设施的人。它会告诉你 AI 工程到底在解决什么问题、从零开始第一步该碰哪里、核心模块怎么设计,以及我把哪些坑踩穿之后再也没回去过。
1. 别把“训练模型”当成“AI工程”
1.1 ai-engineering 到底在解决什么问题
很多人一听到 AI 工程,第一反应是“把模型训练出来,再调高几个点”。这个理解不算错,但只覆盖了整件事的前 10%。我今年最大的认知转变就在这:训练出一个模型只是起点,真正耗时间、耗人力、耗心智的,是让模型在一个真实业务系统里稳定、可控、可迭代地运行。模型是发动机,AI 工程是整辆车的底盘、油箱、仪表盘和刹车系统——发动机再好,没有后者也上不了路。
ai-engineering-from-scratch 的核心,不是“从零训练一个大模型”,而是“从零建立一套能持续产出、交付、维护 AI 能力的工程体系”。这套体系里至少包含五件事:数据怎么管理、实验怎么复现、模型怎么部署、线上怎么监控、效果怎么回归。任何一块缺失,前期可能看不出来,等流量上来、业务方开始认真看效果时,短板会一次性暴露。
我用一个实际例子说明。我们做过一个面向客服场景的文本分类服务,模型本身用的是开源预训练模型微调,准确率在离线测试集上能做到 92%。但上线后前两周,业务方频频反馈“模型变笨了”。排查下来根本不是模型参数问题,而是线上进来的文本分布和训练集差异太大——用户口语化表达、错别字、 emoji 混排,训练时完全没覆盖。如果只做“训练模型”这件事,这个问题永远不会被发现,更不会被解决。这就是 AI 工程存在的意义:让模型在真实环境里持续可用,而不是只在测试集上好看。
1.2 一个模型从 notebook 走到生产,差了哪几步
我见过太多团队,算法同学在 Jupyter Notebook 里把模型调得风生水起,一提到上线就陷入混乱。原因很简单:Notebook 是“探索”环境,生产是“约束”环境,两者之间的差距比想象中大得多。
从 notebook 到生产,标准链路我拆成七步:数据固化、实验固化、模型固化、服务化封装、评估验证、灰度发布、监控回归。每一步都有明确的交付物。数据固化要求数据集有版本、有 hash、有生成脚本;实验固化要求模型结构、超参数、训练代码、随机种子全部可复现;服务化封装要求输入输出协议明确、依赖隔离、推理延迟可预期;监控回归则要求每一版模型上线前,都有一套自动化测试来确认它没有把旧能力搞坏。
这七步里,最容易糊弄过去的是“评估验证”。很多团队上线前只看准确率、F1 这类宏观指标,忽略了切片指标、稳定性指标和失败案例分析。我后来把评估拆成三层:第一层是宏观指标,看整体水位;第二层是切片指标,按渠道、用户群、文本长度、类别交叉看,防止“平均下来很好,某个关键人群烂到底”;第三层是抽样人工审查,直接看预测错误的样本长什么样,这一步最花时间,但价值最高,几乎每次都能发现训练集和真实数据的隐蔽差异。
1.3 从零开始反而有的三个优势
在没有历史包袱的情况下从零搭建 AI 工程体系,听起来吓人,实际操作起来反而有优势。至少有三点是我切身体会到的。
第一,架构可以干净。老系统往往有各种历史遗留:不同团队用不同框架、不同存储、不同命名规范,整合成本巨大。从零开始,数据格式、接口规范、代码结构可以由你定,只要一开始想清楚,后面维护成本会低很多。
第二,流程可以精简。老团队容易堆流程——审批、评审、多级检查,每一步都有合理性,但叠加起来就是慢。小团队从零开始,可以只保留真正必要的环节,把“最少可用流程”跑通后再逐步加码。我在项目中只设了三个强制节点:数据版本更新要记录、模型上线前要通过自动评估、线上发生效果下降要有回滚方案。其他事情按需处理,不搞形式主义。
第三,团队认知能统一。老团队容易形成“算法只管模型、工程只管部署”的割裂,沟通成本高。从零开始的小团队,被逼着每个人都理解全链路。我们团队当时没有专职的 ML 平台工程师,所以算法同学要自己写服务化代码,工程同学要自己跑模型训练。这种交叉让团队对整条链路的理解深了很多,后面的协作摩擦明显减少。
2. 从零搭建 AI 工程化体系:五个核心模块怎么落地
2.1 数据底座:版本化管理优先于模型调参
我在项目开头给自己定了一条铁律:模型可以差,数据不能乱。数据是 AI 工程的底层土壤,土壤出了问题,上面种什么都长不好。从零开始的第一周,我没有碰任何模型代码,先把数据底座搭了起来。
数据底座至少包含四个部分:数据集版本管理、数据质量检查、特征一致性校验、数据血缘追踪。数据集版本管理是最基础的一环——每次数据变更都要留下记录,包括生成时间、生成脚本、变更原因、样本量、字段统计。我见过太多团队半年后想复现某个实验,发现当时的训练数据已经找不到了,或者改过之后没记录,只能凭着记忆猜,这种“猜”造成的代价远比想象中大。
数据质量检查分成两个层面。静态层面:检查缺失率、类别分布、文本长度分布、标签一致性。动态层面:检查线上数据与训练数据的分布差异,也就是常说的数据漂移。我建议在数据底座搭建时就引入一套基础的统计监控,每天对比线上抽样数据和最近一次训练集的分布差异,一旦差异超过阈值就要告警。这个能力在模型上线初期尤其重要,因为很多效果问题本质上不是模型坏了,而是数据变了。
特征一致性校验是我特别想强调的一点。很多模型上线后出现“训练时效果好、线上效果差”的现象,原因之一是训练时用的特征和服务时用的特征不一致——可能是字段名对不上、可能是离线特征和实时特征的计算逻辑有差异、也可能是缺失值处理方式不同。从零搭体系时,最好把特征定义收敛到一个统一模块,离线训练和在线推理都从这里取特征逻辑,从机制上杜绝两头不一致。
2.2 实验与训练:让每一次实验可复现
第二条铁律:不可复现的实验等于没做。我见过不少团队,训练脚本是散落在各台机器上的,超参数写在 notebook 里,随机种子不固定,GPU 环境一换结果就飘。这样的实验体系,即使调出了一个好模型,也很难知道“好”是来自算法改进还是来自运气。
从零搭建实验管理,不需要一开始就上重型平台。我建议从三件小事入手:第一,所有训练代码纳入版本管理,每次实验记录代码 commit id;第二,使用现成的实验跟踪工具记录超参数、指标、loss 曲线、模型产物路径;第三,固定随机种子和依赖版本,确保单卡环境下同代码同数据能复现结果。这三件事做完,实验体系的骨架就已经立起来了。
分布式训练可以后续再考虑。小团队起步阶段,先用单机多卡把流程跑通,等训练时间和数据量到了单机扛不住的程度,再引入分布式框架也不迟。我见过团队一上来就搭 Kubernetes 集群跑分布式训练,结果基础设施运维占用了大量精力,真正的算法迭代反而没做多少。从零开始要遵循“最小可用”原则——先把一条完整的链路跑通,再逐步加复杂度。
训练稳定性也是一个容易被低估的问题。训练中途 loss 突然变成 NaN、GPU 显存溢出、数据加载成为瓶颈,这些问题是每个做 AI 工程的人都会遇到的。排查思路我总结成一句话:先确认数据和代码,再看框架和环境。数据问题包括样本里有异常值、标签错位、数据加载顺序出错;代码问题包括梯度爆炸、学习率过大、损失函数计算错误;框架和环境问题包括 CUDA 版本不匹配、显存不足、分布式通信异常。按这个顺序排查,大多数训练事故都能在半小时内定位。
2.3 部署形态:在线、离线、流式怎么选
模型训练出来之后,怎么提供服务是 AI 工程里最需要动脑子的环节之一。部署形态没有标准答案,完全取决于业务场景对延迟、吞吐、成本的要求。我习惯把部署分成三类:在线实时推理、离线批量推理、流式近实时推理。
在线实时推理适用于对延迟敏感的场景——比如搜索排序、实时风控、在线客服机器人。这类服务通常要求 P99 延迟在几十到几百毫秒以内,需要模型服务化,配合缓存、降级、限流机制。我从零搭建时选择了轻量级的推理服务框架,把模型封装成 HTTP 接口,配合容器化部署。服务化设计上最重要的是三件事:输入输出协议要稳定、模型加载和热更新要顺畅、推理资源要和流量预估匹配。
离线批量推理适用于对延迟不敏感、但数据量大的场景——比如用户画像计算、日报周报生成、批量内容审核。这类任务通常用分布式计算框架跑,按天或按小时调度。它的优点是吞吐高、成本低、容错容易处理;缺点是结果有延迟,不适合实时决策。我做批量推理时踩过一个大坑:数据量一大,任务就容易被某个倾斜的分区拖死,后来通过重新设计分区键和增加重试机制才解决。
流式近实时推理是前两者的折中,常用于需要秒级到分钟级响应的场景——比如实时推荐、实时舆情监控。它一般接消息队列,用流处理引擎消费数据,再调用模型推理,结果写回在线存储。流式架构的问题是“消息积压”和“结果一致性”:消费速度跟不上生产速度时,积压越来越严重;数据重复消费时,结果是否要做幂等处理。这些细节在设计初期就要想清楚,否则后面改架构成本很高。
2.4 监控与闭环:模型不是“上线”就结束
模型上线不是终点,是监控的起点。很多团队把精力全放在训练和上线,上线后几乎不看效果,等到业务方投诉才来排查,那时候往往已经过去了两三周,影响已经造成。AI 工程体系里,监控与闭环是最后一块拼图,也是最容易被忽视的一块。
监控至少分成三个层面。系统层:服务的 CPU、内存、GPU 利用率、延迟、吞吐、错误率,这是最基础的健康指标。模型层:预测结果的分布、置信度分布、各类别命中率,这些指标能反映模型行为是否发生变化。业务层:点击率、转化率、通过率、用户反馈等,这些指标直接关联业务价值,也是业务方最关心的。
闭环是指监控发现问题后,能自动或半自动地触发改进动作。最简单的闭环是告警:当某个核心指标超过阈值时,通知相关责任人。更进一步的闭环是自动回滚:新模型上线后如果关键指标显著变差,系统自动切回旧模型。最强形态是自适应更新:系统根据线上反馈自动触发重新训练。我建议从零开始先把“告警 + 手动回滚”跑通,不要一上来就追求全自动,因为自动化本身就可能是新的故障源。
监控指标的选择也需要技巧。指标不是越多越好,而是越有代表性越好。我倾向于做分层:一级指标是“如果这个指标出问题,必须立即处理”,比如服务可用性、P99 延迟、核心业务转化率;二级指标是“出问题后可以先观察再处理”,比如模型置信度分布偏移、长尾类别效果变化;三级指标是“仅供周会回顾”,比如平均推理耗时、离线评测分数波动。分级之后,告警才不会变成“狼来了”的噪音。
2.5 一段参考配置:最小可运行体系
纸上谈兵聊完了,我给出一份最小可运行体系的参考配置,按我实践经验来,不算豪华但足够扎实。数据层用对象存储存原始数据和特征数据,用数据版本管理工具记录每次变更;实验层用现成的 MLflow 跟踪实验,把所有超参数和指标记录下来;训练层先跑单机多卡,用脚本管理训练任务;服务层用容器化部署推理服务,对外暴露统一的 HTTP/gRPC 接口;监控层用 Prometheus + Grafana 做系统监控,用一套自定义脚本做数据漂移和效果监控。
整个过程最核心的一条链路是:数据更新 -> 模型重训 -> 自动评估 -> 灰度发布 -> 线上监控。我建议在一开始就把这条链路用脚本串起来,哪怕每个环节都是手动触发,也要保证“一键执行”的体验。我们第一版就是手动触发的,但脚本已经把所有环节串好了,点击一个命令就能从头跑到尾。这样做的好处是:尽早暴露出链路中的断点,比如某个环节需要人工操作、某个环节依赖特定环境、某个环节的输出格式不畅,这些断点在初期暴露并解决,远比上线后暴露要好。
3. 关键动作与落地细节:模型怎么从测试集走到线上
3.1 离线评测不是终点,影子评估是第一步
模型训练好之后,常规操作是看一眼离线指标,觉得不错就上线。这个流程风险极大,因为离线指标和线上效果之间经常存在一个巨大的鸿沟。我后来养成了一个习惯:任何模型上线前,先跑一段时间“影子评估”。
影子评估的意思是:把新模型的预测结果和线上正在使用的模型并行运行,但新模型的结果只记录不下发,不影响真实业务。这样可以拿到新模型在真实流量上的预测结果,再和真实反馈做对比。影子评估的好处不言而喻:能在零风险的情况下,用真实数据验证新模型的效果,避免离线评测的“幸存者偏差”。
影子评估的关键是要设计好评估指标。我在做客服场景时,影子评估除了看准确率,还重点看了“高置信错误”的比例——模型非常自信但预测错误的情况。这种错误在实际业务中杀伤力最大,因为用户收到的是一段语气笃定但内容错误的回复,信任损耗非常大。通过影子评估,我们发现新模型的高置信错误率比旧模型低了 20%,这个发现直接改变了上线决策。
影子评估跑多久合适?我的经验是:至少覆盖一个完整的业务周期。如果业务有明显的周末效应或月初月末效应,影子评估至少要跑满一个周期,才能看到模型在不同时段的表现差异。跑太久也不行,因为数据分布会漂移,评估结论可能已经过期。一般场景 1-2 周是比较合适的窗口。
3.2 灰度发布与 A/B 测试:别只看点击率
影子评估通过后,模型就可以进入灰度发布阶段。灰度发布的核心原则是“小步快跑、随时可退”:先让新模型服务 1% 的流量,观察一段时间后再扩大到 10%、50%,最后全量。每一级放量都要有明确判断条件,达标才继续,不达标就回滚。
灰度发布最容易犯的错误是“放量过快、观察不足”。有些团队为了赶进度,1% 跑了半天就跳到 100%,结果线上出了问题,影响面已经很大。我的建议是:每一级灰度至少观察一个完整业务日,并且对比新旧模型的业务指标,不是技术指标。技术指标好不代表业务指标好,模型准确率提升了,但用户转化率下降的情况在业界太常见了。
A/B 测试和灰度发布经常被混为一谈。灰度发布是“渐进放量”,核心是风险控制;A/B 测试是“随机分桶”,核心是效果验证。两者可以结合使用,但目的不同。做 A/B 测试时要特别注意分桶的均匀性和一致性:同一用户要被分到同一个桶里,不能被不同请求分到不同桶,否则结论会被污染。
我强烈建议在灰度阶段关注“分桶内的效果对比”,而不是只看大盘指标。大盘指标会被很多外部因素干扰——大促、舆情、竞品动作,都会导致大盘波动。分桶内的对比能有效隔离这些干扰:新旧模型各自服务一批随机用户,在相同时间段内比较效果差异,才能相对干净地归因到模型本身。做这个分析时,要记得看看桶之间用户特征的分布是否接近——如果偏离了,结论也不能信。
3.3 成本控制与资源规划:推理账单会教你做人
模型上线后最容易被忽略的,是成本问题。很多团队在训练阶段精打细算,到了推理阶段反而大手大脚。我做 AI 工程的一个深刻教训是:推理成本才是长期的大头,因为训练是一次性的,推理是持续的。一个模型如果每天都服务千万级请求,推理开销会远超训练开销。
推理成本控制有几个抓手。第一,选择合适尺寸的模型,不要盲目用大模型完成小任务。很多任务用中小尺寸模型就能达到 95% 的效果,大模型边际收益很有限,但成本可能是数倍。第二,合理设置 batch size,在线推理时把多个请求合并处理能显著提升 GPU 利用率、降低单次请求成本。第三,利用缓存,对重复性高的请求做结果缓存,比如热门 query 的搜索结果、高频问题的回复,缓存命中率能到 30% 以上的场景都很值得做。
资源规划是成本控制的一部分,更提前一步。我习惯用“峰值预估法”来做资源规划:统计线上流量的峰值 QPS,乘以单次推理的资源消耗,再乘一个 1.5-2 的冗余系数,得出需要准备的资源量。冗余系数不能太小也不能太大,太小了扛不住突发流量,太大了资源浪费。峰值预估法有个前提:你得知道峰值流量长什么样。如果系统还没有历史数据,就只能用业务预估,这时候宁可多做一点冗余,也不能上线第一天就把服务搞挂。
3.4 回滚、容灾与稳定性:线上系统的底线
模型线上出问题不可怕,可怕的是出了问题回滚不了。我在搭建体系的早期就把回滚机制列为核心需求——不只是模型产物的回滚,还包括配置、特征逻辑、数据版本的回滚。任何一个环节出了严重问题,都要能做到十分钟内恢复到上一个稳定状态。
回滚机制设计上要考虑几个层面。模型产物层面:每次发布的模型都要保留上一个可用版本,最好保留最近三版,并给出版本与训练数据、代码 commit 的对应关系。代码层面:服务代码要支持快速回退到上一个 release 版本,这要求代码在发布时就要有完善的版本管理。数据与配置层面:线上使用的特征开关、规则配置要支持热更新和即时回退,不能改错了配置只能重启服务来恢复——重启在流量高峰期是极其危险的。
容灾不只是回滚,还包括降级和熔断。降级是指当模型服务不可用时,系统可以退回到一个更简单但可用的逻辑——比如退回到规则匹配、退回到默认推荐结果。熔断是指当上游服务持续报错时,自动切断对它的依赖,避免故障蔓延到整个系统。我在项目中把这些兜底策略视为“保险丝”,平时看起来没用,一旦发生故障,它们决定了系统是优雅降级还是直接崩溃。
关于稳定性,我还有一个经验心得:提前演练故障。每 1-2 个月主动制造一次故障场景——比如把模型服务进程 kill 掉,看看监控能不能发现、回滚能不能执行、用户影响能不能控制在范围内。演练时会发现很多平时注意不到的细节问题,比如某个告警通道配置错了收件人、某个回滚脚本依赖的环境已经不存在了。这些问题在真实故障中暴露的代价,远比演练时暴露大得多。
3.5 LLM 时代的工程新坑
如果你所在的方向和 LLM 相关,AI 工程体系的搭建会有一些新的挑战。LLM 应用通常不是“训练一个模型并部署”这么简单,而是“编排多种能力”:提示词管理、外部工具调用、知识库检索、多轮对话管理,每一层都有自己的工程问题。
提示词管理是个典型的坑。提示词看起来是文案,实际上是代码——它的变更直接影响模型输出质量和稳定性。我见过团队把提示词写死在业务代码里,改一次提示词要发一次版本,非常痛苦。更好的做法是:把提示词本身放到配置中心,支持按环境隔离、按版本管理,变更有审批和回滚能力。提示词也不是改了就好,需要配套回归测试,至少覆盖核心场景的输入输出,防止改了一个场景的提示词,把另一个场景的表现为干扰坏了。
LLM 应用的评估也比传统模型复杂。传统的准确率、F1 在这类场景里不够用,因为回答是开放的、多样的。可以引入 LLM 评估两条腿走路:一条腿用一组固定测试用例加规则判断覆盖确定性强的场景;另一条用更强的模型对生成结果打分,覆盖偏主观的质量维度。两条腿各有偏颇,组合起来能对一个 LLM 应用的整体质量建立基本认知。
成本在 LLM 应用里是硬约束。LLM 的 token 计费方式要求你对每次请求的开销非常敏感。从工程角度可以做的优化包括:上下文裁剪、缓存历史会话、用小模型先做路由判断决定是否调用大模型、对低风险请求用更小模型处理。这些优化听起来琐碎,但在真实业务里,它们共同决定了项目能不能可持续运营。
4. 常见问题与排查实录:我从这些坑里爬出来的
4.1 训练—服务不一致
这是 AI 工程里最经典、也最容易踩的坑:模型在训练时的表现和线上服务时的表现不一致。症状通常有两种:线上效果明显差于离线评测;同一个请求,离线推理和在线推理结果不一致。
大部分训练—服务不一致来自数据处理链路的分叉。训练时用了 A 逻辑处理缺失值,服务时用了 B 逻辑;训练时特征从离线表读,服务时从实时接口拿;训练时文本做了清洗,服务时忘了做。这类问题最难排查的地方在于“看起来都很正常”,但结果就是不对。
我的排查方法论是“输入对齐法”:在线上服务里,把真实请求的输入前处理后,原样保存下来;在离线环境里,用同一份输入跑模型推理;然后对比两份推理结果的差异。如果结果不一致,就把中间每一个处理环节拉出来对比。这个过程有点枯燥,但几乎能覆盖所有不一致问题。为了避免这个问题反复出现,最有效的办法是在架构上解决问题:把特征处理和模型推理分别封装成独立模块,离线和在线共用同一套代码,而不是各自维护一套。
4.2 评测集漂亮,线上效果崩盘
项目上线后最打击人的情况就是:离线评测所有指标都很好,线上效果却一塌糊涂。我早期遇到过一次,离线 AUC 0.89,线上业务指标反而下跌了 3%,花了一周时间才找到原因。
这类问题的根源通常是训练集和真实分布不一致。有几种典型情况:训练数据是从历史日志里搜集的,但历史日志本身就存在选择性偏差——比如用户点过某个内容才会进日志,没点过的内容根本没有记录,模型学到的是“事后视角”。还有一种是训练数据的时间跨度和上线时间跨度重叠度太低,用户行为模式已经变了,模型学到的规律过时了。
应对策略有两个层面。数据层面:训练集尽量贴近“预测时刻能看到的数据”,把时间穿越问题降到最低;引入人工标注的新鲜样本,补充纯历史日志覆盖不到的场景;定期更新训练集,让模型始终跟着分布变化走。评估层面:把离线评测设计得更接近线上——比如按时间分割训练集和验证集,而不是随机分割;加入时间衰减权重;在影子评估里用线上真实反馈做最终判断。
4.3 特征漂移和数据延迟
模型上线后,最怕的不是模型本身退化,而是上游数据悄悄变了。特征漂移指的是线上输入特征分布和训练时相比发生了偏移,导致模型输入落在训练分布之外,输出置信度虚高或表现紊乱。
数据延迟则更隐蔽:上游数据链路的某个环节出了问题,导致特征数据更新不及时,模型拿到的还是几个小时前甚至几天前的数据,但模型自己不知道。症状表现为预测结果整体偏移、特定用户群的预测突然集中变化。这两个问题的排查思路都指向同一个方向:把特征数据纳入监控范围。
我的落地做法是:对每个核心特征记录它的分布统计——均值、方差、缺失率、类别分布,每天自动和训练集对比。一旦分布偏移超过阈值,就进入排查流程:先看上游数据源,再看清洗逻辑,最后看特征存储。因为数据漂移可能发生在数据生产的任何一个环节,只能靠“链路上的每个环节都要有健康指标”来解决。
4.4 成本失控的几个征兆
成本失控是 AI 工程里的“慢性病”,刚开始感觉不到,月底对账单时才心疼。我整理了成本失控的几个典型征兆,自查用很方便:
| 征兆 | 现象 | 排查方向 |
|---|---|---|
| 推理冗余 | GPU 利用率长期低于 20%,请求量不高 | 检查 batch 策略、模型是否可以裁剪/量化 |
| 盲目追新 | 每次有更大的模型就迁移,但业务指标没有同步提升 | 回归对比新旧模型的核心业务指标 |
| 缓存缺失 | 大量重复请求全部打到模型,不走缓存 | 统计请求重复率,对高重复场景加缓存 |
| 特征过量 | 特征数量越来越多,但提升很小 | 做特征重要度分析,裁剪低贡献特征 |
| 无差别全量 | 所有请求都用最强模型,不做分层处理 | 加路由层:简单请求用轻量模型,复杂请求才用重型模型 |
成本控制不是一次性工作,而是持续性的工程习惯。我建议每个月做一次成本审查:把模型服务、训练任务、数据存储、标注成本都摊开来看,找增长最快的部分重点优化。很多不必要的成本就像房间里的灰尘,不打扫不会消失,只会越积越多。
4.5 新老系统交替
当新的 AI 工程体系搭建起来之后,如何和老系统平滑交替也是一个不小的工程问题。新老系统交替最容易踩的坑是“并行期不清不楚”:新系统上线了,但老系统还在继续跑,两边结果不一致时,没人说得清到底哪个是准的。
我的做法是:设置明确的并行期目标。并行期开始前定义好对比基准——哪些指标、哪个时间段、达到什么标准视为新系统胜出。并行期结束后,如果新系统达标,就正式立新;如果没达标,就回滚继续优化。最忌讳的状态是“两边都跑着,但没有人在拍板”,这会让团队陷入一种长期的混乱。
技术层面的过渡,我建议在网关层做流量切换,而不是改造老系统。新老系统并存时,通过流量配置控制两边比例,老系统代码一行不用改、不用动,新系统逐步接流量。这能大幅降低交替成本,也能在出现问题时快速回切。如果老系统必须下线,要提前盘清楚老系统里有哪些隐性依赖——某些业务方可能偷偷调用了老系统的接口,某种数据可能只有老系统在产出。忽视隐性依赖,几乎注定了下线过程中会出现事故。
5. 最后想说的几句实在话
从零搭建一套 AI 工程体系,最难的从来不是技术选型,而是持续面对那些“看起来不起眼但会反复咬你的细节”。数据版本不清晰、特征逻辑两头维护、灰度标准模糊、回滚路径不演练,这些都是我实际踩过的坑。每次出问题后回头看,都会发现早在体系设计之初就埋下了隐患。
我个人最大的体会是:AI 工程要的是“系统能自我纠错”的能力,不是“所有事情都最优”的能力。你不用一开始就把数据平台、训练平台、推理平台全部做到完美,但你一定要确保每个环节都有监控、有版本、有回滚;你不用让每个模型都做到最好,但你一定要知道每个模型在线上表现如何、出了问题怎么快速处理。
最后再分享一个实战经验的底色:把小步快跑焊死进团队流程。先跑通一个极小的端到端链路——一条数据、一个模型、一个接口、一个监控看板,哪怕只能处理一种业务场景。这个最小闭环一旦建立,后面的扩展都是加法;但如果一开始就追求大而全,很可能会陷入“基建做了三个月,一件实事没落地”的窘境。从零开始的意义就在于此:你有机会把每一步都走扎实,也有机会避开那些老团队用血泪换来的坑。