数据涅槃:搜索推荐数据生产体系Agentic化改造实录
发布时间:2026/11/4 14:00:53 锦皓数字建站

最近半年我一直在折腾一件事把搜推方向的数据生产体系从“跑批报警”的结构重构成Agentic智能体化的结构。这个标题我起名叫“数据涅槃”因为过程真的跟涅槃差不多——旧体系是一套撑了三年的庞然大物链路像缠在一起的毛线每次业务迭代都像在毛线团里找线头。动手重构的导火索是一次上游表字段rename直接带崩了整条样本链路全量修复用了整整两天。那两天我除了修数据想得最多的一个问题就是为什么这些脏活儿累活儿不能由系统自己感知、自己处理非得靠人半夜爬起来看日志、跑重算这个念头最终长成了一整套Agentic数据生产体系。如果你也在维护一套搜推数据体系下面这些从0到1的拆解、踩坑记录和个人复盘大概率能用得上。1. 先对齐搜推数据生产体系到底在生产什么1.1 一条完整的数据生产链路长什么样搜索和推荐系统的效果最终取决于两点模型结构以及喂给模型的数据。结构决定上限数据的质量和生产稳定性决定下限。所谓搜推数据生产体系解决的核心问题就是把用户的每一次行为变成模型能直接消费的训练样本和特征。一条典型链路是这样的用户在前端产生曝光、点击、收藏、购买等行为埋点服务把行为打成日志经过采集通道进到消息队列然后分两条路走。一条是实时路Flink消费日志流算实时特征写进特征存储供线上推理使用另一条是离线路Spark消费日志落地成明细表再经过清洗、去重、口径对齐生成训练样本表同时计算离线特征。样本和特征最终都要打上版本产出快照供训练和评测使用。通常还会有一条近线路用增量计算兼顾时效和稳定性应对实时和离线之间的灰度地带。整条链路如果再详细拆至少包括埋点Schema管理、日志采集的时效保障、曝光/点击/转化明细表的清洗、样本Join和负样本采样、离线特征计算、实时特征计算、特征存储与线上特征对齐、样本版本生成与回滚、质量监控与告警这些环节。我习惯用一张表把每个环节的典型实现和常见问题列出来方便新人快速建立全局认知环节典型实现常见问题行为采集埋点SDK 日志采集服务漏采、重复、字段缺失实时特征Flink任务消费Kafka实时计算窗口延迟、状态丢失离线样本Spark批任务Join明细表生成数据倾斜、样本穿越特征存储Redis / FeatureStore线上线下特征不一致调度编排Airflow / DolphinScheduler任务失败连锁、依赖混乱质量监控规则引擎 告警告警滞后、误报多这个表看起来简单但每一个格子展开都是一部血泪史。以“样本穿越”为例如果你在生成训练样本时不小心把用户点击之后产生的特征也拼了进去模型在训练时“看到了未来”离线评估会很漂亮上线之后一塌糊涂。这种问题藏得深常规质量监控根本发现不了只能靠特征时效校验把这个窗口卡死。1.2 传统体系的“三座大山”搜推数据生产体系发展到一定规模后会稳定地卡在三类问题上。我把它们称为三座大山。第一座告警驱动靠人救火。质量监控的默认行为是定一堆阈值超过阈值就发告警然后值班的人去定位。问题在于告警本身不告诉你根因你只看到“训练样本数量骤降30%”这类结论至于是因为上游Hive表分区没跑出来、埋点字段改名了、还是业务流量下跌全靠人排查。排查链条往往要跨好几个团队数据链路越长根因定位越慢。大促期间一次误报可能让几个开发白白排查一整个通宵。第二座Schema变更的“连环爆炸”。搜推数仓的上游经常变化业务方字段改名、加字段、改枚举值是家常便饭。每次变更下游所有依赖该字段的加工任务都要跟着改改漏一个线上表现要么是样本丢失要么是特征全错。更麻烦的是很多下游脚本是不同时期不同人写的文档普遍缺失你根本不知道谁依赖了什么字段。一次rename从源头到样本层层层炸开修复成本呈指数级增长。第三座数据质量反馈严重滞后。离线样本和特征是每天跑批生成的但有效性的验证往往要等模型训练完成、上线之后看线上指标中间隔了一整个天级甚至更长的周期。等发现问题时坏数据已经污染了训练集模型带着毒数据学了几轮再纠正的代价远比预防高。说白了这个体系里“数据生产”和“数据验证”是脱节的前者闷头跑后者发生后置审判。这三座大山放在一起最后的体感就是平台团队每天忙于救火业务团队的迭代节奏被数据链路绑架。很多搜推团队的现状都是算法和模型迭代只花30%的时间剩下70%都在处理数据问题。这个比例一旦形成整个组织就会被拖拽在一个低水平循环里。2. Agentic不是玄学它是数据生产的第三种组织形式2.1 先搞清楚Agentic到底指什么“Agentic”这个词这两年非常热但很多讨论把它和“智能体聊天”混为一谈。聊个天、调用一个API不叫Agentic。Agentic的核心特征是自主感知环境、基于目标做决策、调用工具执行动作、根据执行结果反思修正形成闭环。放到数据生产体系里就是一套能够自动发现问题、判断影响范围、执行修复动作并沉淀经验的系统。我习惯用一个类比传统数据体系像一条工厂流水线每个环节都是固定工位工人只在报警铃响的时候冲过去处理。Agentic体系更像是每个关键工位都站了一个“能自己看、自己想、自己动手的老师傅”小问题直接解决大问题才举手叫人。这里的重点不是“用了AI”而是把原来由人承担的判断职责转移成了系统里可运行、可观测、可回滚的逻辑。2.2 从“管道模型”到“多智能体协作”传统的数据生产体系本质上是管道模型数据从一端流入经过一个个预定义好的节点最终流向模型训练。管道的好处是确定性高坏处是太脆——任何一个节点出问题整条管道都不转。Agentic体系的组织形态是“多智能体协作”数据链路被拆成若干自治域每个自治域由对应的Agent负责。Agent之间有明确的信息交换协议而不是硬编码的流程依赖。质量治理Agent发现问题后不是傻傻地报警等人工处理而是发布一个“数据事件”特征加工Agent、样本生命周期Agent根据各自的职责订阅并响应。举个例子。上游Schema变更传统做法是DBA通知开发开发排查所有依赖、改脚本、上线。Agentic做法是特征加工Agent感知到Schema变更事件比对变更前后的字段映射自动从知识库中检索受影响的特征定义生成新的加工逻辑提交审核后自己执行。整个过程可能只需要几分钟而且全程有审计记录。从这个角度看Agentic并没有把数据生产变成“黑盒魔法”它只是把原来依赖人的判断、协调和执行变成了程序化的、可观测的、可回滚的自主流程。这和组织管理上“把命令下发变成目标管理”是一个道理。2.3 为什么搜推数据生产特别适合Agent化不是所有数据场景都适合Agent化。比如财务对账要求强一致、强审计你很难让Agent自主改账。搜推数据生产适合Agent化我总结有三个理由。第一链路长且标准化。搜推链路有大量固定拓扑的加工任务环节之间边界清晰非常适合按自治域拆分Agent。第二容错空间相对弹性。搜推数据的价值在于统计规律单条数据的微小错误不会带来灾难性后果系统允许Agent试错并快速回滚数据分布的变化能通过模型效果快速反馈形成一个天然的验证闭环。第三故障代价高、返工成本高。正因为链路长、依赖多故障定位和修复成本极高Agent的自主感知和自动处置能直接缩短MTTR收益非常直观。所以我的判断是搜推数据生产体系几乎是Agentic方法论的最佳试验田之一。它既有足够的复杂度来体现Agent的价值又有足够的容错空间来承接Agent的不完美。3. 我在重构中设计的四个核心Agent3.1 质量治理Agent从报警到自主止血质量治理Agent是整条链路的“哨兵”。它的核心变化是从被动告警变成主动感知和自主止血。它的工作流是典型的感知-决策-执行-反思闭环。感知阶段周期性采集样本量、正负样本比、特征覆盖率、空值率、延迟水位等指标用动态基线替代固定阈值来识别异常。决策阶段判断异常类型是突发性事件比如上游任务断跑、趋势性变化比如大促流量爆发导致样本量激增还是结构性漂移比如业务改版后行为分布变了。执行阶段对突发性问题直接触发下游隔离防止坏数据污染训练集对趋势性变化则调整基线不误报。反思阶段每次处置都记录为一条结构化经验沉淀成事件处置案例库后续遇到类似问题时可以检索复用。这里有一个非常关键的实操细节质量Agent的判断不能只看单指标要结合多指标组合。样本量下降30%如果同时伴随曝光量下降30%很可能是因为流量下跌而不是链路故障只有当样本量的下降显著高于曝光量的下降时才判定为链路异常。这个规则是我在踩过多次误报坑之后总结出来的后面第5章会展开讲。3.2 特征加工Agent吃掉一场Schema变更事故特征加工Agent是我这次重构里收益最直接的一个模块。它的触发源是元数据变更通知上游表结构变化后Agent自动拉取新Schema比对旧Schema识别出字段改名、类型变更、新增字段、删除字段四类操作。然后做三件事从特征注册中心检索所有受影响的特征生成适配后的加工SQL或代码跑校验任务对比新旧特征的分布差异。如果差异在阈值内自动提交上线如果差异超阈值挂起并申请人工复核。这个流程我用伪代码表达过很多次核心逻辑大致是这样的# 特征加工Agent的Schema变更响应 def on_schema_change(event): new_schema fetch_schema(event.table) diff diff_schema(previous_schema, new_schema) affected_features feature_registry.query(tableevent.table) for feat in affected_features: new_sql rewrite_sql(feat.sql_template, diff) if validate_distribution(new_sql, feat.baseline): apply_feature(feat, new_sql) publish_feature_update(feat) else: request_review(feat, reasondistribution_shift_over_threshold)这个Agent上线后第一次真实场景就接住了上游一次字段改名从感知到自动适配只花了十几分钟。放在以前这个改动至少要半天还要拉上三方团队对口径。不过它也踩出过一个“自动适配但口径跑偏”的坑这个我在第5章详细说。3.3 样本生命周期Agent兜住样本漂移样本生命周期Agent负责训练样本的生成、采样、版本管理和淘汰。它解决的核心问题是样本不能一直“闷头生成”要有人盯着它是不是还符合当前业务分布。它的职责具体拆开有四块。第一监控样本分布漂移包括正负样本比、时间衰减、特征值分布变化。第二触发负样本挖掘当正负样本比失衡且负样本噪声上升时自动启动难例挖掘流程。第三样本版本化自动管理每次生成的样本集都有独立版本训练任务可以精确回溯到任意历史版本。第四样本过期淘汰基于模型反馈动态调整样本有效窗口把过期样本自动挪进冷存储。这里我想重点解释“样本有效性窗口”。很多人以为历史样本越多模型越稳其实不然。业务在快速变化三个月前的用户行为分布很可能已经和现在完全不同留着大量陈旧样本只会拖慢模型收敛。样本生命周期Agent会基于模型效果的反馈动态调整有效窗口长度离线评估掉点了就缩短窗口数据量不足了就适度放宽。这本质上是一个带反馈控制的库存管理问题。实操中一个典型场景是某场景正负样本比1:20Agent发现近一周负样本噪声比例明显上升于是触发负样本细化难例挖掘流程把比例调整到1:10然后自动对这份新样本做离线回放确认离线评估没有下降后再正式让训练任务切到新版本。整个过程基本不需要人工介入。3.4 口径对齐AgentAgentic RAG把知识库接到生产链路上搜推数据生产有一个特别折磨人的问题指标口径。比如“点击率”在不同团队的定义可能完全不同有的是点击次数除以曝光次数有的是点击用户数除以曝光用户数还有的是带后验过滤的。口径不一致跨团队协作时就会反复扯皮。口径对齐Agent做的事情本质上就是业界常说的Agentic RAG它维护一个特征口径知识库把每个指标的定义、计算公式、负责人、变更历史全部沉淀下来用向量化方式存储。当某个Agent在处理任务时遇到一个口径模糊的字段它通过检索知识库找到最匹配的口径定义并生成一段解释跟着解释附上溯源信息交给下游使用方确认。这样做最大的收益是口径不再只存在于人的脑子里或零散的文档中而是变成了数据生产链路里可以被机器自动检索、自动应用的知识资产。后来特征加工Agent每次生成新的加工逻辑也强制加了一步语义校验调用口径对齐Agent做RAG检索比对生成逻辑的语义与历史定义是否一致一致才允许上线。这一步直接堵住了“自动适配但口径跑偏”的隐患。4. 如何把Agentic体系从图纸落到线上4.1 现状盘点和Agent边界划定落地的第一步不是写代码而是盘点现状。我建议用一个表格把现有链路节点、负责人、依赖关系、已知痛点全部列出来然后逐项确认这个环节如果出问题通常是谁发现的、怎么发现的、恢复要多久。这个动作看起来很基础但它直接决定Agent边界怎么划。划定边界时我用了三条筛选原则。判断逻辑相对闭环能不能用清晰的规则或模型判断“是否异常”动作相对标准化修复动作能不能模板化容错窗口允许试错即使误操作也能快速回滚。同时满足这三条的环节优先Agent化不满足的继续保留人工流程不要硬上。我的实操心得是一开始只选三个场景做试点而不是全面铺开。Agent体系本身也是新系统如果带着所有历史包袱一次性改造风险太大。先跑通三个最小闭环让团队看到效果、攒出经验再去覆盖更多环节。4.2 技术选型编排框架、通信协议、资源底座技术选型我分三层来做。第一层Agent编排框架。现在开源的多Agent编排框架已经不少比如LangGraph、AutoGen这类。我的选择是先用开源框架跑通流程重点考察它的事件订阅/发布、状态持久化、断点恢复能力。这个能力在数据生产场景里特别重要因为任务长、依赖多Agent跑着跑着挂了不能从头再来要支持从断点恢复。实测下来框架的状态持久化做得好不好直接决定Agent在凌晨睡了一觉醒来还能不能接上昨天的任务。第二层Agent之间的通信协议。我定义了一套统一事件协议所有Agent通过事件总线通信事件类型包括DataQualityEvent、SchemaChangeEvent、SampleVersionEvent、FeatureUpdateEvent等。事件里必须带上数据源标识、影响范围、置信度、处理动作建议和上下文信息。这样下游Agent才能做判断而不是拿到一个无脑指令。简化的事件内容长这样{ eventType: DataQualityEvent, severity: critical, domain: recall_training_sample, metric: sample_count, observedValue: 120000, baselineValue: 180000, dropRate: 0.33, relatedTables: [dwd_recall_expo, dws_recall_sample], suggestedAction: isolate_downstream_training, confidence: 0.92 }第三层资源底座。Agent本身是无状态的真正执行数据加工还需要计算资源。在多集群、多云场景下把Agent调度和底层资源解耦是关键。社区里像Karmada这类云原生多集群管理项目正好可以做资源底座让Agent按需申请资源底层任务被调度到哪个集群对Agent完全透明。这样做的好处是Agent化体系不绑定单一集群某个集群出问题或资源紧张时其他集群可以平滑接管。4.3 灰度上线与效果评估Agent化的效果不能靠“感觉”来评估必须量化。我用的核心指标有四个自动处置率指Agent能自主完成处置、无需人工介入的异常事件占比平均故障恢复时间MTTR从异常发生到链路恢复的时间误处置率Agent错误判断并执行了错误动作的比例人工复核通过率随机抽样Agent的决策让资深开发复核通过的比率。灰度策略我分了三个阶段。第一是影子模式跑两周左右。影子模式下Agent只感知、只做决策、不执行把决策结果写到日志由人来复核。等影子模式的决策准确率稳定在95%以上再切到半自动模式低风险动作自动执行高风险动作等人工确认。最后才进入全自动模式。我们真正全自动上线是在第六周前五周都在反复修Agent的认知。这类系统重构真的急不得前期的“慢”就是为了后期的“稳”。4.4 责任边界Agent的权限设计和人工兜底任何一个自称“自主”的系统都必须回答一个问题出事了谁负责我的答案是人负责但人通过设计目标和事后审计来负责而不是通过事中盯盘来负责。权限设计上做三件事。分级授权低风险动作如调整基线、重跑任务Agent自动执行高风险动作如删表、改线上特征、回滚版本必须经过审批流。全链路审计Agent的每次感知、决策、执行、反思都写审计日志事后可以完整回溯知道每一步是谁触发的、为什么触发、执行了什么。Kill Switch任何一个Agent都提供一键暂停能力人工可以随时接管。这个设计不是不信任Agent而是数据生产链路毕竟给模型训练提供燃料出了大错会影响整个线上系统。给Agent留好“刹车”反而能让它跑得更快更远。5. 实操三个月踩过的坑和排查实录5.1 质量Agent的误报把大促流量波动当成了异常上线第二周质量Agent在凌晨发出高优告警样本量较基线骤降25%判定为critical自动触发了下游隔离。等我们早上看到消息的时候训练样本已经断供了半个多小时。结果业务方反馈那是大促奖励活动的流量阶段性收缩根本不是链路故障。这次误判直接浪费了半天的数据产量还让团队对Agent产生了不信任感。复盘后做的改进就是把“单一指标判断”改成“多维指标共振判断”。样本量下降25%的同时如果曝光量也下降25%转化率没变那大概率是业务流量波动只有样本量下降显著高于曝光量下降时才判定为链路异常。这个规则听起来很简单但它挡掉了后续大量误报。后来我还让Agent在发布告警時附上“参考指标对比”方便人工快速确认而不是光秃秃一个结论。5.2 特征血缘断裂Agent自愈了但口径乱了有一次上游字段改名特征加工Agent成功自动适配并上线了新特征。但过了几天算法同学发现新模型的离线AUC明显低于预期查了很久才发现Agent在适配时自动生成的特征加工逻辑沿用一个过期的口径定义把“近30天点击次数”算成了“近30天曝光次数”。链路是修好了但口径错了而且错得悄无声息。这个坑的根本问题是Agent的自动适配缺少“语义校验”。从那以后我在特征加工Agent里加了一步每次生成新的加工逻辑必须调用口径对齐Agent做一次RAG检索比对语义是否与历史定义一致。只有语义校验通过才能进入上线流程。也正是在这个阶段Agentic RAG对我来说不再是一个热搜词汇而是一个真正在兜底的组件。5.3 样本漂移误触发重算风暴样本生命周期Agent有一次判定样本分布严重漂移触发了全量重算。重算任务同时占用了大量计算资源把其他正在跑的实时训练任务堵了整整一个多小时。那次之后我意识到重算决策不能只看数据分布还要考虑资源约束。解决方案是给样本Agent加了一个资源预算模块任何重算任务先向资源管理器申请配额配额不足时自动降级为增量计算或者排队等待低峰期执行。这个模块上线后重算任务再也没有挤垮过其他作业。顺带一提现在很多Agent执行重算前都会看一眼集群水位这个习惯就是从这次事故里长出来的。5.4 常见问题速查表把这几类高频问题整理成一个速查表方便团队在新Agent接入或异常排查时快速对照症状可能原因排查思路对应解法样本量骤降上游表分区失败、字段改名、业务流量下降先看曝光量是否同步下降再看样本层任务日志质量Agent多维判断特征大面积缺失上游字段被删除、加工任务失败查元数据变更记录和特征注册中心特征加工Agent自动适配离线AUC与线上不一致特征口径不一致、样本穿越对比线上线下特征分布、检查特征时间戳口径对齐Agent语义校验Agent误触发重算基线漂移误判、资源竞争查看Agent决策日志和集群资源水位资源预算模块约束这几个案例不是孤立的它们都指向同一个教训Agent的每一步自主决策都必须有明确的上下文、校验条件和资源约束。少了任何一道自主就会变成失控。6. 一点个人体会和扩展思路做这个重构我最大的体会是Agentic数据生产体系的价值不在于它“用了AI”而在于它把数据生产的管理模式从“人对系统负责”变成了“系统对系统负责”。但这句话有另一半——系统对系统负责的前提是人已经把边界、权限、审计都设计好了。所以Agent化的过程真正考验的不是写Agent的技术而是对数据链路本身的理解深度。给想尝试的同学一个建议不要一上来就搞一个庞大的全知全能Agent。从最小闭环开始选一个你最痛、判断逻辑最清晰的环节比如质量告警自动诊断先做成“感知-决策-执行-复盘”的闭环跑顺了再扩展。一步到位的基本上都会在灰度阶段被真实业务打回去重做。另外有一件事我还在继续做把Agent的经验沉淀从“记录日志”升级成“结构化知识”。现在每个Agent都有一个独立的经验库存放历史事件、处置动作和结果评估。下一步的想法是让这些经验库之间能互相参考做到质量Agent遇到一个没见过的问题时可以去翻特征Agent的经验库。这个方向如果跑通Agent体系就会从“自动化系统”真正变成“会生长的体系”。到那时候再说什么“数据涅槃”我才觉得名副其实。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。