智能体面试准备五十四智能体线上实验与效果归因体系——上线决策科学引言为什么离线评测高分不等于线上能发B31 讲过 Agent 评测体系轨迹指标、LLM-as-Judge、benchmarkB20 讲过可观测性。但评测高分只是门票——真正决定一个智能体能不能上线的是线上实验能不能证明它比旧版好且好在哪里、坏在哪里可解释。本篇是工程实战深化的收官讲讲清智能体上线前的实验设计A/B、影子、渐进和上线后的效果归因因果分解、bad case 漏斗、上线门禁。这是大厂面试里有没有真把 Agent 跑过生产的分水岭。读完本篇你应当能说清Agent 的线上实验和普通推荐系统 A/B 有何不同、指标该怎么设计才不会骗自己、出问题时怎么归因到具体环节。普通模型上线: 输入X - 模型 - 输出Y, 可随机分流做 A/B Agent 上线: 输入X - 多步规划/工具调用/环境交互 - 输出Y 差异: 路径非确定(同输入不同轨迹)、状态有副作用(调了API/改了数据)、成本随步数变 所以: 实验设计要管轨迹和副作用, 不只管最终 Y第一节 离线到在线的鸿沟Agent 特有的三类落差1.1 分布落差离线 benchmark 是静态题集线上请求是真实、长尾、带噪的。离线答得好的 Agent线上遇到没见过的工具报错、用户乱输入可能直接崩。所以离线只能证伪差的一律不过不能证真高分不代表线上稳。1.2 路径落差Agent 同一个输入可能走出不同轨迹离线评测只采样了几条线上千奇百怪。要看成功率而非某次对不对更要看最坏轨迹会不会造成破坏。1.3 副作用落差普通模型输出文本无副作用Agent 会调接口、写库、发消息。线上实验必须隔离副作用影子模式/沙箱否则 A/B 实验本身就在制造事故。离线评测 - 线上实验 的鸿沟 分布: 静态题集 vs 真实长尾 路径: 采样轨迹 vs 全轨迹分布 副作用: 无 vs 有(必须隔离) 结论: 离线过线只是允许进实验, 不是允许全量第二节 三种线上实验形态及其在 Agent 上的特殊性2.1 A/B 实验在线分流把流量按比例分给实验组新 Agent和对照组旧版对比指标。Agent 的特殊性在于不能只看最终答案准确率还要看过程成本平均步数、工具调用次数、token 消耗和安全指标错误动作率、需人工接管的次数。一个答案略好但成本是旧版 3 倍、且多调了两次危险接口的版本不能算赢。2.2 影子模式Shadow新 Agent 在线上跑但不执行——它和实际请求一起推理、生成动作但动作不真正落地只记录它会怎么做并与真实结果对比。这是上线前最安全的验证零副作用却能拿到真实分布下的轨迹和指标。2.3 渐进发布Canary / 渐进先放 1% 流量看住指标逐档放量到 5%、20%、100%。Agent 上线尤其需要渐进因为长尾问题往往在量起来后才暴露。配合自动熔断指标越界立即回滚把事故半径控制在最小。形态副作用能看什么适用阶段A/B有需隔离/分流真实效果成本安全已较有信心要定胜负影子无真实分布下的轨迹上线前最后一道关渐进小限流内放量后的长尾表现正式上线过程第三节 指标设计别被准确率骗了3.1 四组指标缺一不可效果指标任务成功率、最终答案准确率、用户满意度过程指标平均规划步数、工具调用次数、重试次数成本指标平均 token 消耗、平均延迟TTFT/TPOT、单位请求成本安全指标错误动作率、需人工接管率、危险操作次数、越权尝试。面试常考只盯成功率有什么问题 答可能掩盖成本爆炸或安全隐患。一个成功率 95% 但每次都调危险接口、成本是旧版 5 倍的版本全量上线就是事故。3.2 指标要分层、要可归因每个指标应当能下钻到是哪类子任务拖的。例如成功率按单跳/多跳有无工具报错长尾 query分桶才能知道新版到底在哪变好、在哪变差。# 指标分桶记录示意defrecord(run):bucketf{run.hop_type}/{run.has_tool_error}/{run.is_longtail}metrics[bucket].successrun.okmetrics[bucket].costrun.token_costmetrics[bucket].safe(0ifrun.danger_actionelse1)第四节 因果归因出问题时知道坏在哪4.1 bad case 漏斗把失败按发生在哪一步建漏斗规划错检索错工具调用错结果组装错这样一次失败能定位到具体环节而不是笼统的Agent 不行。失败归因漏斗 任务失败 100 ├─ 规划阶段错 40 (子问题拆分/路由错) ├─ 检索阶段错 25 (召回不准/模态选错) ├─ 工具调用错 20 (参数错/超时/报错未处理) └─ 生成组装错 15 (幻觉/格式错)4.2 因素分解与对照用 A/B 的对照数据做因素分解实验组成功率比对照组低 5 个点是所有桶都低模型整体退化还是只在多跳长尾桶低特定能力缺口前者要回退后者可以针对性补数据或加检索。归因结论要能指导下一步动作而不是只给一个数字。4.3 可观测性支撑归因B20 讲的可观测性在这里是关键基建每一次 Agent 运行都要有完整 trace每步输入/输出/工具调用/耗时/错误信息归因才能从猜变成查日志。没有 trace 的 Agent线上出问题就是黑盒。第五节 上线门禁与回滚把发不发变成规则5.1 门禁清单上线不是拍脑袋而是一组硬性门禁效果不显著劣于对照、成本增幅在预算内、安全指标零越线、长尾桶无异常退化。任一门禁不达标即拦截。5.2 自动熔断与回滚实验跑起来后实时监控门禁指标一旦越界立即把流量切回旧版自动回滚并告警。Agent 上线尤其要快回滚因为副作用可能随时间累积如错误数据越写越多。上线决策流 离线过线 - 影子验证(零副作用看轨迹) - 渐进1% - 门禁监控 ├─ 全部门禁达标 - 逐档放量 - 100% 全量 └─ 任一越界 - 自动熔断回滚 - 归因 - 修复 - 重进实验第六节 工程骨架一个最小实验与归因框架classAgentExperiment:def__init__(self,control,treatment,gate):self.control,self.treatment,self.gatecontrol,treatment,gatedefroute(self,req):returnself.treatmentifhash(req.id)%100self.rolloutelseself.controldefevaluate(self,runs):repsummarize(runs)# 四组指标分桶ifnotself.gate.pass_(rep):# 任一门禁不达标self.rollback();self.alert(rep)# 自动回滚告警return(BLOCKED,attr_breakdown(runs))# 返回归因return(PASS,rep)这段代码把分流—评估—门禁—回滚—归因串成闭环面试里能写出来就说明你真做过上线而不只是调 prompt。第七节 五个上线实验踩坑坑一用平均成功率掩盖长尾崩坏。整体成功率只掉 1%但多跳长尾桶掉了 20%全量后投诉爆了。必须分桶看长尾桶单独设门禁。坑二影子模式忘了隔离写操作。以为不执行就安全但 Agent 还是调了带副作用的接口发消息/写库。影子必须走只读副本或沙箱写操作一律 mock。坑三A/B 两组环境不一致。实验组用了新的检索器、对照组是旧的指标差异分不清是谁的功劳。上线实验要保证除被比较的变量外其他全一致。坑四回滚不及时副作用累积。指标越界后没自动熔断Agent 继续往生产库写错数据半小时。回滚触发条件要前置、要快宁可误拦不可漏拦。坑五归因只给数字不给动作。复盘说成功率降了 5%但没人知道降在哪、怎么改。归因的终点必须是下一步具体动作回退/补数据/加检索/改规划否则等于没归因。面试速答本篇可直接背的 3 句Agent 上线实验和普通 A/B 的根本差异Agent 路径非确定、有副作用、成本随步数变所以实验必须管轨迹副作用成本安全不能只看最终答案。离线评测只能证伪不能证真上线前要过影子模式零副作用看真实分布轨迹再渐进放量配合自动熔断回滚。效果归因靠 bad case 漏斗规划/检索/工具/生成分步定位 指标分桶对照结论要能指导回退还是针对性补靠完整 trace 支撑。高频追问清单Agent 的 A/B 实验怎么保证同输入分到同组以便对照提示按请求 id 哈希分流影子模式下 Agent 不执行动作那它调用的工具要不要真打提示打只读/沙箱禁写成功率提升 2% 但成本涨 3 倍发不发你的门禁怎么设bad case 漏斗里规划错占比最高下一步具体怎么改渐进发布从 1% 到 100%每档要看多久、看哪些指标才放量没有可观测性 trace归因只能靠什么为什么这是硬伤