为什么在 AI Agent 出错时,你现有的可观测性栈无法救场
你的 Datadog 仪表板显示零错误。延迟正常。所有服务都返回 HTTP 200。与此同时,你的 AI agent 刚刚在错误的时区预订了一个会议,幻觉了一个客户的订单历史,并为此烧掉了 4 美元的 token。
这正是让 agent 可观测性变得异常困难的原因:你现有的指标几乎无法告诉你 agent 是否真的在正常工作。
传统的分布式追踪建立在关于软件如何失效的一系列假设之上。LLM agent 违反了所有这些假设,而“我的基础设施是健康的”与“我的 agent 做出了正确的事情”之间的差距,正是大多数调试痛苦的根源。
为什么现有的追踪方式对 Agent 失效了
微服务的分布式追踪假设请求路径是确定性的且无状态的。请求从边缘进入,遵循一个可预测的调用图,并以一组已知的结果退出。你可以设置基准延迟阈值,定义错误代码,并对偏差发出警报,因为路径是可枚举的。
Agent 打破了每一个假设。
同样的用户输入在每次调用时都可能触发不同的工具调用序列、不同的检索结果和不同的推理链。没有一个规范的路径可以用来进行对比(diff)。一个从内存中检索上下文的 agent 可能在周一执行三个步骤,在周五执行七个步骤 —— 两者都是正确的,且都返回 HTTP 200。
第二个不同点在于,agent 有两种截然不同的失败模式,而传统系统只有一种。基础设施故障 —— 超时、API 错误、连接重置 —— 的表现与普通的分布式系统故障一致,你现有的工具可以很好地处理它们。但 agent 还有 认知失败(cognitive failures):幻觉、错误的工具选择、误解的检索结果、错误的步进规划。这些永远不会体现为错误。Agent 带着 2xx 状态码自信地返回响应,你的仪表板保持绿色,但输出却是错误的。
基础设施指标因缺失而具有误导性。一个陷入推理循环的 agent,用略有不同的参数重试相同的工具调用,在毫无进展的同时烧掉你的 token 预算,这在延迟图表上看起来与健康的 agent 毫无区别。
在多 agent 系统中,情况会进一步恶化。故障发生在移交边界 —— 当不完整的上下文、陈旧的记忆或模糊的中间结果在 agent 之间传递时。没有一个单一的服务对故障负责。它是交互过程中产生的涌现属性。
核心重构是:agent 追踪是关于调试决策,而非请求路由。 可观察的人造物是 agent 做出的选择序列,而不是其调用图的形状。
