Agent 流水线的分布式追踪:为什么你的 APM 工具形同虚设
你的 Datadog 仪表盘一片绿色。Jaeger 链路看起来干净整洁。P99 延迟符合 SLA。而你的 Agent 流水线正在悄无声息地因重试死循环每天烧掉 4000 美元,却没有触发任何一条报错。
传统 APM 工具是为微服务设计的——确定性路径、有界载荷、可预测的扇出。Agent 流水线打破了所有这些假设。执行路径在运行时才能确定。工具调用深度变化剧烈。一次"请求"可能跨数分钟产生数十次 LLM 调用。而当出了问题,失败模式通常不是异常——而是一个悄然膨胀成本和延迟、却返回看似正常输出的静默重试级联。
结果是一代工程师在盲目飞行,信任着那些衡量错误事物的仪表盘。
为什么标准 Trace/Span 模型会失效
经典分布式追踪之所以有效,是因为服务具有稳定的契约。一个 POST /api/orders 请求总是经过相同的三个服务,顺序不变。你预先定义 schema,对偏差设置告警,然后万事大吉。
Agent 流水线不是这样运作的。一次用户查询会触发一个计划-执行-观察循环,其中迭代次数、调用的工具集、分支决策全部由模型在运行时自主决定。你无法对一个静态调用图进行插桩,因为根本不存在静态调用图。
Agent 工作负载的若干特性会击穿 Span 构建时的假设:
非确定性控制流。 相同的输入在不同的运行中会产生不同的执行链路。周二成功的工具调用可能在周三超时,触发三次重试和一条在预生产测试中从未存在过的降级分支。
无界载荷大小。 在多轮工作流中,上下文会不断累积。一个有 10 步、系统提示 4000 个 token、平均工具输出 500 个 token 的 Agent,仅仅因为上下文传递,在最后一次 LLM 调用时就已携带超过 40000 个输入 token——这还不算任何输出生成。传统 Span 假设载荷有界。
无错误传播的嵌套重试。 这是最危险的失败模式。工具返回一个瞬态错误。Agent 以相同方式重试。同样的错误,同样的重试,再来三次。没有任何异常抛给调用方。用户看到的是 45 秒延迟而不是 15 秒,LLM 账单增加了三倍——但你的错误率仪表盘依然是零。
循环检测盲区。 当 Agent 进入循环——反复以相同参数调用同一工具——标准链路只会显示莫名其妙的延迟增长。经典追踪里没有"此 Span 是同一操作第 N 次重试"的内置概念。
