智能体面试准备(五十四):智能体线上实验与效果归因体系——上线决策科学

智能体面试准备(五十四):智能体线上实验与效果归因体系------上线决策科学

引言:为什么"离线评测高分"不等于"线上能发"

B31 讲过 Agent 评测体系(轨迹指标、LLM-as-Judge、benchmark),B20 讲过可观测性。但评测高分只是门票------真正决定一个智能体能不能上线的,是"线上实验能不能证明它比旧版好,且好在哪里、坏在哪里可解释"。本篇是工程实战深化的收官讲,讲清智能体上线前的实验设计(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"分桶,才能知道新版到底在哪变好、在哪变差。

复制代码
# 指标分桶记录示意
def record(run):
    bucket = f"{run.hop_type}/{run.has_tool_error}/{run.is_longtail}"
    metrics[bucket].success += run.ok
    metrics[bucket].cost   += run.token_cost
    metrics[bucket].safe   += (0 if run.danger_action else 1)

第四节 因果归因:出问题时知道"坏在哪"

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% 全量
       └─ 任一越界 -> 自动熔断回滚 -> 归因 -> 修复 -> 重进实验

第六节 工程骨架:一个最小实验与归因框架

复制代码
class AgentExperiment:
    def __init__(self, control, treatment, gate):
        self.control, self.treatment, self.gate = control, treatment, gate
    def route(self, req):
        return self.treatment if hash(req.id) % 100 < self.rollout else self.control
    def evaluate(self, runs):
        rep = summarize(runs)                       # 四组指标分桶
        if not self.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 句)

  1. Agent 上线实验和普通 A/B 的根本差异:Agent 路径非确定、有副作用、成本随步数变,所以实验必须管"轨迹+副作用+成本+安全",不能只看最终答案。
  2. 离线评测只能"证伪"不能"证真";上线前要过影子模式(零副作用看真实分布轨迹),再渐进放量,配合自动熔断回滚。
  3. 效果归因靠 bad case 漏斗(规划/检索/工具/生成分步定位)+ 指标分桶对照,结论要能指导"回退还是针对性补",靠完整 trace 支撑。

高频追问清单

  • Agent 的 A/B 实验怎么保证"同输入分到同组"以便对照?(提示:按请求 id 哈希分流)
  • 影子模式下 Agent 不执行动作,那它调用的工具要不要真打?(提示:打只读/沙箱,禁写)
  • 成功率提升 2% 但成本涨 3 倍,发不发?你的门禁怎么设?
  • bad case 漏斗里"规划错"占比最高,下一步具体怎么改?
  • 渐进发布从 1% 到 100%,每档要看多久、看哪些指标才放量?
  • 没有可观测性 trace,归因只能靠什么?为什么这是硬伤?
相关推荐
cxr8285 小时前
deepseek harness能否指挥Claude code和codex来协同开发
人工智能·智能体
ybdesire5 小时前
注入型漏洞以及agent-audit的检测原理
网络·安全·风险·智能体·ai安全
递归尽头是星辰1 天前
大模型 Agent 知识体系:Java 开发者视角下的原理、架构与选型边界
react·智能体·spring ai·java 后端·大模型 agent
key_3_feng1 天前
智能体 Loop 工程:循环架构与状态机
人工智能·loop·智能体
新知图书1 天前
11.4 基于扣子编程的实现过程(AI 数据质检工作流)
人工智能·agent·ai agent·智能体
圣殿骑士-Khtangc1 天前
DeepSeek Harness 系统架构与运行原理深度解析
智能体·编码智能体·harness
安逸sgr2 天前
AI 应用怎么评测?离线评测、人工评估和线上反馈如何结合?
人工智能·ai·大模型·agent·智能体
DogDaoDao2 天前
Magma:微软如何用一个模型打通数字与物理世界的 AI Agent
人工智能·微软·机器人·大模型·机器人模型·智能体·magma
thesky1234563 天前
智能体面试准备(四十三):具身智能体与机器人实操——从 VLA 到 Sim2Real
机器人·导航·操作·具身智能·智能体·vla·视觉语言动作