周一上线三个Agent,周二两个退场:特征存储让我重报了机器学习入门

发布时间:2026/9/9 17:58:25
周一上线三个Agent,周二两个退场:特征存储让我重报了机器学习入门 周一上线三个Agent,周二两个退场:特征存储让我重报了机器学习入门灰度第二天,业务方在群里连发三条“智能体怎么不回答了”。我打开监控一看,两个 Agent 的决策链路全乱--本该调库存接口的 Agent 反复去查用户画像,另一个直接超时重试把请求队列打爆。CTO 在走廊拦住我问:“三个智能体就活了一个,这算哪门子交付?”我憋了半天只说出一句:“特征存取出问题了。”那之前我一直以为,Agent 落地的核心是 prompt 工程和工具调用编排。直到上线翻车,我才意识到问题的根扎在数据层--训练时用的用户特征、上线后实时传入的特征,根本对不齐。团队没建特征存储,线上特征版本混乱导致输出漂移,像给一个健忘的办事员写了一套完美流程,他却拿错了客户档案。当天下午,我打开机器学习入门课程,直接翻到管线和特征工程那几章--因为这门课不光是教模型,还带着拆解从数据到上线的整个链路,特别适合我这种在工程岗多年、半路接手 AI 项目的人。当时我们怎么设计的 Agent这三个智能体的定位很清楚:一个做订单状态查询与改单,一个做智能补货建议,一个做售后 FAQ 转接。架构上统一走大模型 工具调用,底层接一套自建的特征存储方案--说是自建,其实就是把离线特征表往 Redis 里一倒。我当时的判断是:prompt 写好、工具描述写准,Agent 就能跑。结果压测环境一切正常,灰度发布头两天也没大问题。但真实流量进来后,线上特征的表字段和离线训练时的 schema 出现了三处不一致: - 用户等级字段线下是int,线上传成了string,导致 Agent 判断 VIP 身份的规则全部失效; - 补货 Agent 依赖的商品周销量特征在线版本更新延迟超过 8 小时,Agent 拿的是上周的滞销数据去做补货决策; - 售后 FAQ Agent 的用户意图分类特征,在线版本和训练版本的特征分桶边界不同,同一个数值被分到了完全不同的桶里。这三个坑本质上都是特征存储的治理失败。在线特征服务没有明确的版本管理与 schema 校验,训练和推理之间缺了一条可靠的机器学习管道。第一个翻车现场:订单 Agent 把用户当成黑名单订单 Agent 的工具链里有一个check_user_status函数,依赖传入的用户等级特征来做流程分支。由于线上传的是3而不是3,类型强转失败后,Agent 默认把用户判定为“风险账号”,直接拒绝了所有修改请求。def check_user_status(user_id, user_level): # 线下训练用的特征是整数等级 if user_level 0: return banned elif user_level 5: return vip else: return normal日志里全是user_level类型错误,而 Agent 的输出却一句都不提--它把函数返回的None当成了正常结果,继续往下执行。我在排查时翻到机器学习基础里讲数据预处理的章节,那门课用了一个完整的管道案例演示了怎么在特征进入模型或规则引擎之前做 schema 强校验。当时我要是先把基础补扎实,上线前至少会给特征存储接一层类型检查。数据预处理不是只洗一次的事,它在管道里要反复执行。第二个翻车现场:补货 Agent 把滞销品当爆款采购补货 Agent 的推理逻辑是:先拉商品近一周销量,加上库存周转天数,算出建议补货量。但它取到的“近一周销量”是 8 小时前的离线批计算结果,而周末那波促销的实时销量根本没进来。Agent 拿着滞销数据,给已经卖空的 SKU 下了最小采购量,把仓库里还有 200 件库存的冷门商品又补了 300 件。业务负责人找我复盘时,我在白板上画了另一张图:正确做法应该是在线特征直接走特征存储的实时写入能力,而不是依赖离线表的定时拉取。当时我还没系统学过特征工程,对在线/离线特征的一致性没有概念。后来在机器学习入门课程里看到一个案例--用 Amazon SageMaker Feature Store 做特征的统一管理,训练和推理拿的是同一套特征定义,不会出现延迟不一致的问题。学完那章我才真正理解,特征存储不是简单的缓存层,而是一个带版本管理、实时读写和 schema 校验的服务,它能直接堵住我们这次的 bug 根因。第三个 Agent 为什么能活下来三个智能体里唯一没崩的售后 FAQ Agent,是因为它的特征链路我被迫重构过。上线前一周,我发现 FAQ Agent 的在线特征和训练特征出现了轻微的数据漂移--也就是同一条用户问题,线下模型给的分类是“退换货”,线上却分成了“物流查询”。我用混淆矩阵一测,准确率一周掉了 6 个百分点。from sklearn.metrics import confusion_matrix # 线下版本评估 y_true [0, 1, 2, 0, 1, 2, 0, 1, 2] y_pred_offline [0, 1, 2, 0, 1, 2, 0, 1, 2] print(confusion_matrix(y_true, y_pred_offline)) # 准确率 100% # 线上版预测 y_pred_online [1, 1, 2, 0, 1, 2, 0, 2, 1] # 漂移后 print(confusion_matrix(y_true, y_pred_online))我直接停了线上版本,把问题归结为特征的分布偏移--也就是数据漂移。解决思路是用特征存储把训练时特征的统计量(均值、方差、分位数)也存下来,线上推理时对比实时特征的分布,一旦偏离超过阈值就触发告警,并降级到规则版本。这正是机器学习管道里特征校验的核心逻辑。补完AWS 基础知识中关于 SageMaker 管道的讲解后,我给 FAQ Agent 加上了这个监控层,上线两周没再出现漂移误判。补课才知道:我从一开始就低估了特征工程翻车之后我做的第一件事,是把机器学习课程体系重新梳理了一遍。我发现之前自己在工程侧花了太多时间研究 prompt 模板和工具链,却跳过了一个所有模型和 Agent 共用的地基--特征工程。机器学习入门课里专门有一章讲特征工程、数据预处理和特征存储的关系,用实际数据演示了如何进行特征分桶、缺失值处理和归一化--这些东西我以前只在 Kaggle 比赛里模模糊糊用过,从来没有在线上系统里系统化地实践。学完之后我重新设计了一套特征生命周期管理流程: - 所有模型上线前必须在特征存储中注册特征组; - 训练脚本从特征存储拉取特征,推理时也从同一个特征组读取; - 上线前自动对比离线/在线特征的分布,超过阈值则禁止发版。我还把深度学习入门也一并刷了,因为后续有想法给补货 Agent 加上时间序列预测模型。那门课用 PyTorch 手把手搭了一个 LSTM 销量预测,结合特征存储里沉淀的历史特征,训练三轮就比我们当初的规则版本准了 15%。特征存储不只是存数据,它是打通所有 AI 组件的中央枢纽。给同样想落地 Agent 的团队三张表复盘这次事故后,我在内部整理了三个必须核查的列表:特征对齐检查清单1. 训练特征和线上特征是否来自同一个特征存储源? 2. 类型、schema、缺失值处理逻辑是否完全一致? 3. 特征更新时间是否满足推理延迟要求?Agent 稳定性检查清单1. 是否对工具调用的输入做了严格校验? 2. 是否针对特征漂移设置了监控和降级策略? 3. 是否对过拟合做了在线评估?--即使离线准确率很高,线上仍可能因为特征变化而失效。学习路径建议1. 如果你和我一样是工程背景转 AI 负责人,先把机器学习入门完整走一遍,尤其是管道和特征工程部分--它会让你从“只会调 API”变成能端到端排查问题。 2. 补机器学习基础里的数据预处理和超参调优,这两块直接影响模型从实验到生产的稳定性。 3. 如果团队已经开始用大模型做 Agent,务必看深度学习基础,理解神经网络对输入特征的敏感度,以及分布式训练的基本原理--未来你们可能要微调模型,不能全靠 prompt。 4. 学完这些,再去看特征存储的具体实现,比如 Amazon SageMaker Feature Store,你就能理解为什么版本管理、在线服务和离线批处理必须统一。现在每次有新同事问“Agent 怎么上手最快”,我会直接说:先别急着写 prompt,把亚马逊云科技机器学习的入门课刷完,搞懂特征从哪里来、怎么流、怎么不变形--否则上线第一天就会重演我那两个 Agent 的翻车。