跳到主要内容

10 篇博文 含有标签「tracing」

查看所有标签

流式响应追踪模式鸿沟:为什么你的 APM 在 LLM 延迟上撒了谎

· 阅读需 12 分钟
Tian Pan
Software Engineer

凌晨 02:14,报警器响了:客户反馈助手在回答长问题时“话说到一半就卡住了”。你打开追踪(trace)。LLM 调用的 span 显示为 8.4 秒 —— 绿色,在 SLO 范围内,没有错误属性,结束原因(finish reason)为 stop。仪表板上该端点的 p95 延迟聚合组件显示为 9.1s,与过去一个月的情况完全一致。根据 APM 显示的所有信号,该请求都成功了。

用户看到前 200 毫秒表现完美,接下来的四秒钟生成了一个连贯的段落,然后眼睁睁看着同样的三句话片段在剩下的四秒钟里不断重复,直到连接结束。这种卡住的内容循环(stuck content loop)是真实的故障,但追踪系统对此一无所知 —— 因为追踪系统是为“返回即结束”的系统设计的,而不是为了这种行为表现为生成过程中产生的中间状态之墙的系统。

解读智能体堆栈跟踪:在模型、工具与 Harness 之间定位故障

· 阅读需 11 分钟
Tian Pan
Software Engineer

用户报告 Agent 给出了错误答案。你打开 Trace。模型的推理过程看起来没问题。工具调用全部返回 200 OK。Harness 日志显示没有重试、没有截断、没有异常。然而,答案就是错的。于是你花了接下来的两个小时,将三个具有不同格式、不同时钟的独立日志流缝合在一起,最终发现某个工具针对特定的查询形状静默返回了 {"result": null},模型将这个 null 合理化为一个听起来合乎逻辑的事实,而 Harness 则愉快地将这个幻觉转发给了用户。这三个层级中的任何一个都没有单独记录任何警报。故障发生在连接处。

这是生产级 Agent 系统中最主要的故障模式,而大多数团队都在使用单层工具进行调试。模型团队归咎于工具。工具团队归咎于模型。平台团队归咎于 Harness。每个人都部分正确,因为 Agent 故障几乎从来不是单一组件的 Bug —— 它是三个组件之间的失配,而每个组件都在不同的“步骤”心理模型上运行。在你的 Trace 基础设施反映这一现实之前,你将不断为披着不同外衣的同类事故买单。

智能体可识别性:当 Trace 无法分辨哪个智能体执行了哪些操作时

· 阅读需 12 分钟
Tian Pan
Software Engineer

用户报告说助手在上午 9:47 给了他们一个错误答案。你打开 Trace。这里有 340 个 Span。它们几乎都被命名为 agent.runllm.invoketool.call。有些有父节点,有些是兄弟节点。其中三个进行了重试,一个重试后被取消了。没有一个能告诉你错误的输出是来自 Planner、Worker、Critic、Reflection 过程,还是在 Critic 标记后 Worker 的第二次重试。

在接下来的一个小时里,你根据截图中的 UUID 前缀搜索日志行,比对 Slack 通知的时间戳,并根据 Trace 查看器中的缩进模式在脑海中重建 Agent 拓扑。最终,你猜想第三次 Worker 调用使用的模型别名在昨晚被静默切换到了另一个快照。但你无法仅凭 Trace 证明这一点。

Agent 正常运行,Trace 完整无缺。杂乱无章的 Trace 团(Hairball)本身就是 Bug。

30 秒都去哪了:APM 无法察觉的 Agent 步骤内部延迟归因

· 阅读需 13 分钟
Tian Pan
Software Engineer

仪表盘显示 p95 的 agent.run = 28s。用户反馈该功能感觉已经挂了。值班工程师打开 Trace(追踪),看到一个没有任何值得调查的子节点的“肥大”长条,然后开始盲猜。当有人重建出足够的心理模型,搞清楚瓶颈到底是模型、检索器,还是某个没人添加 Span 的工具调用时,故障已经变成了积压的任务单,而用户早已放弃了。

这就是 2026 年 Agent 运营核心的失败模式:传统的 APM 将 Agent 步骤视为一个黑盒,而“Agent 延迟”并不是一个单一指标——它是七个指标的总和,这些指标根据 Agent 在该轮次中的决策,以不同的方式分解实际用时 (Wall-clock time)。如果一个团队不暴露这七个数字,他们交付的功能虽然大家都能感觉到慢,但谁也无法修复。

AI 可观测性泄露:你的追踪堆栈正成为数据外泄的出口

· 阅读需 13 分钟
Tian Pan
Software Engineer

我最近接触的一个安全团队发现,他们的 prompt(提示词)和 response(响应)字段被完整地发送到了一个第三方 SaaS 日志后端,而他们从未与该厂商签署过《数据处理协议》(DPA)。这些字段包含客户的医疗摘要、支持人员误粘贴的 Stripe 私钥,以及某人要求内部助手总结的机密收购备忘录全文。Payload 中没有任何内容经过加密,也没有进行任何脱敏处理。数据保留期长达 400 天。这一集成是由一位初衷良好的工程师在黑客松期间通过 pip install 厂商的 SDK、填入 API 密钥后直接上线的。

这就是 AI 观测性泄露。每个 LLM 应用团队最终都会需要追踪(tracing)——没有它,你无法调试提示词回归或非确定性的智能体(agent)循环——因此 LangSmith、Langfuse、Helicone、Phoenix、Braintrust 或厂商提供的 AI 插件最终都会进入技术栈。默认设置会捕获整个请求和响应。对于大多数生产工作负载来说,这种默认设置就是一个等待被发现的合规性违规隐患。

Agent Trace 中的采样偏差:为什么你的调试数据集在悄悄排除你最关心的失败案例

· 阅读需 11 分钟
Tian Pan
Software Engineer

你团队每个周一盯着看的调试语料库并不是生产环境的代表性样本。它具有明显的偏差,而且偏差的方向完全错误。1% 的头部采样在保留一个罕见的灾难性轨迹之前,会先保留一百次中位数请求——大多数团队只有在某种静默循环了数月的失败模式最终导致退款或停机,并试图在追踪存储(trace store)中寻找示例却一无所获时,才会发现这一点。

这并不是什么罕见的边缘情况。这是所有专为无状态 Web 服务设计、随后又被用于长时程(long-horizon)Agent 的可观测性栈的默认行为。同样的采样算法在处理 HTTP 请求追踪时表现良好,但在处理 Agent 时却会系统性地抹除那些最重要的轨迹——因为在这里,每个“请求”都是一个包含三十个步骤的计划,可能会调用数十个工具,重新生成三个子计划,并在第 27 步发生细微错误之前消耗数万个 token。

解决方法不是“增加采样”。增加采样只会让账单爆炸,而不会改变偏差——你只会得到更多已经过剩的普通数据。解决方法是改变你采样的对象,以只有在轨迹结束后才能获知的预测结果为基准。这需要抛弃基于头部的默认设置,并围绕尾部信号、异常权重以及能在 Agent 执行的长尾效应中存续的有界蓄水池(bounded reservoirs)重新构建保留层。

Agent 集群可观测性:在千并发 Agent 运行中监控而不陷入仪表盘盲区

· 阅读需 13 分钟
Tian Pan
Software Engineer

在生产环境中运行一百个 agent 感觉还可以管理。你有追踪数据,有仪表盘,知道什么时候出问题。但运行一千个并发 agent 完全是另一个问题——不是因为 agent 更复杂,而是因为你为十个 agent 建立的监控模型在你注意到之前就已经悄然失效了。

失败模式很微妙。一切看起来都很正常。你的 span 树都在。错误率很低。然后,一个导致 40% 会话输出质量下降长达六小时的提示词回归,只因为客户投诉才浮出水面——而不是被你的可观测性系统捕获。

这就是仪表盘盲区问题:单 agent 追踪在小规模下运行良好,在集群规模下则会悄然失效。以下是它发生的原因及应对之道。

你的智能体追踪在撒谎:LLM 智能体的基数、采样与 Span 层级结构

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的链路追踪仪表盘显示 Agent 为了响应用户请求发起了 8 次调用。但实际上,它发起了 47 次。你的头部采样器(Head-based sampler)静默地丢弃了其中的大部分。你保留下来的那些调用在技术上是正确的,但在因果关系上毫无用处——它们是从被父级采样器丢弃的根节点中孤立出来的子 Span。

这并不是可视化层面的 Bug。它是将专为 10 个 Span 的 HTTP 扇出设计的分布式链路追踪基础设施,强行套用到每轮对话生成数百个 Span 的系统上的必然结果。默认的 OpenTelemetry 配置系统性地低估了 Agent 的工作量,而运行这些 Agent 的团队通常直到客户抱怨链路追踪视图中显示“不存在”的延迟时,才会察觉到问题。

APM 仪表盘不会告诉你:生产环境中的 LLM 可观测性

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 Datadog 仪表板显示 99.4% 的在线率,低于 500ms 的 P95 延迟,以及 0.1% 的错误率。一切都是绿色的。与此同时,你的支持队列却充满了抱怨 AI 给出了完全错误答案的用户。你毫无头绪,因为每个请求都返回了 HTTP 200。

这是传统可观测性与你在 LLM 系统中真正需要的可观测性之间的本质区别。语言模型可能会以标准 APM 工具无法留下痕迹的方式发生故障:幻觉事实、从错误的产品版本中检索文档、在代码更改修改了系统提示词后将其忽略,或者在模型更新后对特定查询类型静默降级。在你的延迟图表上,这些看起来都一切正常。

生产环境中的 LLM 可观测性:追踪不可预测的行为

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的监控栈能告诉你关于请求率、CPU 和数据库延迟的一切。但它几乎无法告诉你你的 LLM 是否刚刚幻觉出了一个退款政策,为什么一个面向客户的智能体在回答一个简单问题时循环调用了三次工具,或者你的产品中哪个功能正每天悄悄烧掉 800 美元的 Token。

传统的可观测性是围绕确定性系统构建的。LLM 在结构上完全不同 —— 每次都是相同的输入,不同的输出。故障模式不再是 500 错误或超时;而是一个听起来自信且合理、但恰好错误的答案。成本也不再稳定可预测;当一个配置错误的 Prompt 遇到流量高峰时,成本会激增。调试也不再是“在堆栈跟踪中查找异常”;而是“重建为什么智能体在周二凌晨 2 点选择了这条工具路径”。

这正是 LLM 可观测性(Observability)所要解决的问题 —— 而这一领域在过去 18 个月里已经显著成熟。