跳到主要内容

299 篇博文 含有标签「observability」

查看所有标签

你的 AI 功能忘记计入的 SIEM 账单

· 阅读需 12 分钟
Tian Pan
Software Engineer

这里的数学逻辑很简单,但没人去算。在 AI 时代之前,单个用户操作(例如“总结这张工单”或“发送这封邮件”)只会产生一行应用程序日志。而在 AI 时代之后,同样的操作会产生一条请求日志、一个 LLM 调用追踪、代理调用的每个工具的工具调用 span、它读取的每个数据块的检索 span、一条响应日志,如果你采样进行离线评分,还会产生一条评估日志。一次用户点击的扇出(fan-out)现在会在你的可观测性流水线中产生 30 到 50 条记录,这还是在重试、子代理以及会让一切翻倍的规划器-执行器(planner-executor)拆分出现之前。

你在第一季度发布了一个 AI 功能。到了第二季度,你的安全总监拿着一份比上一个周期高出 4 倍的 Splunk 续订合同走进预算审查会议。AI 团队的人都不在现场。接下来的对话——关于谁来承担这笔费用、为什么威胁检测规则失效了,以及是否真的必须对每次对话进行法律保留(legal hold)——是你在设计阶段就应该进行但没有进行的对话,因为这笔成本没有出现在 LLM 的发票上。它出现在下游,出现在一个 AI 团队从未登录过的工具中。

为什么每周会话记录审查优于你的 AI 仪表板

· 阅读需 14 分钟
Tian Pan
Software Engineer

在你的 AI 团队中,被低估最严重的资产是每周一小时,由三个人坐在房间里阅读你的产品实际对用户说了什么。不是综合评分。不是移动平均值。不是仪表盘。而是实际的对话记录。逐字逐句的输出。模型悄然形成的懒散措辞。你的分类体系中未涵盖的意图。用户尝试了三次,用三种不同的方式表达需求,而你的评估准则(eval rubric)却将这三次对话都评为“满意”。

将这一小时制度化的团队,能够建立起仪表盘永远无法呈现的 AI 功能心理模型。跳过这一步的团队,会根据看起来不错的指标发布六个月的产品,然后在下一次季度业务回顾(QBR)中发现,在无人察觉时,中位数体验已经漂移到了令人遗憾的境地。

Brownout 模式:当你的 LLM 供应商响应迟缓而非宕机时

· 阅读需 12 分钟
Tian Pan
Software Engineer

凌晨 3 点因为宕机而把你吵醒的告警其实是简单的。供应商返回了 40 分钟的 503 错误,你的回退机制生效了,运维手册(runbook)启动了,复盘报告(post-mortem)几乎可以自动完成。而那些没有吵醒你的告警——那些在所有仪表盘都显示绿色的情况下,让你的支持队列在 6 小时内堆满的告警——才是渐变故障(brownout)。供应商的 API 仍然有响应。状态页依然显示“运行正常(operational)”。你的 p99 延迟已悄然从 2.1 秒漂移到 14 秒,错误率从 0.1% 上升到 4%,而唯一察觉到的人是那些已经流失的用户。

供应商的可用性并不是非黑即白的二元状态。大多数团队编写的回退逻辑——“如果供应商宕机,则切换到备用方案”——本质上是用一个只有两种状态的状态机去应对一个连续变量,当供应商处于“惨淡运行”而非“彻底宕机”的状态时,这种机制根本不会触发。为渐变故障(brownouts)而设计是一个与处理宕机完全不同的设计问题,我所见过的几乎每一个生产环境中的 Agent 调度框架在发布时都没有解决这个问题。

评估集腐化:为什么评估分数在上升,而用户满意度在下降

· 阅读需 11 分钟
Tian Pan
Software Engineer

评估分数连续两个季度呈上升趋势。仪表盘是一片绿色,回归测试套件自三月以来从未标记过真实的失败,团队交付 prompt 更改的速度也变快了,因为评估(eval)给出了清晰的通过/失败答案。与此同时,用户反馈的质量正在下滑。NPS 下降了 4 分,支持队列里堆满了没人标记过的失败模式,产品负责人开始质疑:如果客户这么生气,为什么评估结果看起来却这么好?

评估集没有撒谎。它正在回答六个月前它被构建时要回答的问题,针对的是发布周存在的流量分布。产品已经发生了偏移。用户群体已经发生了偏移。发布时团队未预见到的长尾用例现在占了流量的三分之一。评估集仍在衡量第一周的世界,而团队正在用昨天的产品对今天的模型求平均值。

这就是评估集腐化(eval set rot)。它是现代 AI 工程中最隐蔽的失败模式之一,而且随着评估集的变大而变得更糟,因为维护它的人将“更多用例”误认为是“更好的覆盖”。

多步 Agent 的延迟预算:为什么 P50 会说谎,而 P99 才是用户的真实感受

· 阅读需 12 分钟
Tian Pan
Software Engineer

仪表盘显示智能体很快。P50 停留在 1.2 秒,团队开会庆祝,然后放弃率却在持续攀升。没有人关注用户真正体验到的那个图表。

!["https://opengraph-image.blockeden.xyz/api/og-tianpan-co?title=%E5%A4%9A%E6%AD%A5%E6%99%BA%E8%83%BD%E4%BD%93%E7%9A%84%E5%BB%B6%E8%BF%9F%E9%A2%84%E7%AE%97%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%20P50%20%E4%BC%9A%E8%AF%B4%E8%B0%8E%EF%BC%8C%E8%80%8C%20P99%20%E6%89%8D%E6%98%AF%E7%94%A8%E6%88%B7%E7%9A%84%E7%9C%9F%E5%AE%9E%E6%84%9F%E5%8F%97"]

这是生产环境中多步智能体可靠的失效模式:中位数是你能够达到的指标,而尾部延迟才是你用户感受到的指标。随着你在流水线上不断增加子调用,这两者之间的差距会呈非线性增长。一个包含四个步骤的智能体,即使每一步在“中位数表现”上都很快,其 P99 通常也会比任何单步操作糟糕 6 到 8 倍。用户体验到的不是中位数,而是他们那次特定请求中最慢的一步。

如果你的团队优化了错误的分位线,你交付的系统将拥有出色的基准测试表现和精美的演示效果,但在你从未监测的长尾场景中,用户正不断流失。

智能体事件取证:在需要之前即刻捕获

· 阅读需 12 分钟
Tian Pan
Software Engineer

周二,客户给支持团队发了一张截图。他们的账户显示六天前有一笔他们从未要求的退款。你的 CRO 转发了这张截图,并问了一个问题:“这是怎么产生的?”你知道是智能体(agent)干的——审计日志显示 actor: refund-agent-v3。但自那以后,提示词(prompt)已经修改了四次。由于财务部门为了追求 12% 的成本削减而更换了供应商,模型 ID 在上周四进行了轮换。系统提示词是根据三个检索到的文档生成的模板,而检索索引在周一重新进行了索引。对话历史被运行时(runtime)裁剪,以适应更小的上下文窗口。

你可以告诉 CRO 是智能体做的。你无法告诉他们为什么。这种差距——即知道发生了某个操作与能够重建导致该操作的输入之间的差距——是大多数智能体团队在工程团队之外的人提出真正的取证问题时发现的。

你的 Agent 发布说明只是在列出文件,但集成商需要的是行为差异(Behavior Diffs)。

· 阅读需 14 分钟
Tian Pan
Software Engineer

一个平台团队在周三下午发布了他们的每周智能体 (agent) 版本。内部更新日志写得很尽职:三次系统提示词 (system-prompt) 提交,模型别名从 -0815 快照升级到 -1019,四处工具描述修改,新的评估准则 (eval-rubric) 权重,以及更新后的检索器索引。到了周五,支持队列里出现了 18 个工单,平台团队中没人能把这些工单与变更对应起来。工单 2 和 7 说 “机器人突然拒绝总结私有仓库”。工单 11 说 “输出中的每个代码块现在都带有语言标签,我们的下游解析器因此崩溃了”。工单 15 说 “在长输入下工具 X 的调用频率翻了一番,我们触及了速率限制”。

这些工单没有一个提到更新日志中的任何一行。平台团队的发布说明是一份文件移动清单。集成方的工单是一份行为变更清单。这两份文档互不交集,而信任就在这个鸿沟中流失。

Agent 追踪采样:当 “记录所有内容” 耗费 8 万美元却依然漏掉性能退化时

· 阅读需 11 分钟
Tian Pan
Software Engineer

账单在 3 月份寄达。仅追踪(traces)一项就花费了 8.1 万美元,而 11 月时这一数字仅为 1.2 万美元。团队在 10 月份启用了全量 Agent 追踪,理由是可见性越高越好。到了第一季度,可观测性成本的增速已经超过了推理成本——而当生产环境真正出现性能回归(regression)时,包含故障的追踪记录却被淹没在两千万个无人问津的成功 span 中。

错误并不在于决定进行埋点。错误在于将请求追踪(request-tracing)的心智模型引入了一个行为完全不像传统请求的工作负载中。

一个典型的 Web 请求会生成一个包含少量子节点的 span 树:处理器、数据库调用、缓存查找、下游服务。而一个 Agent 请求生成的树包含 5 个 LLM 调用、3 个工具调用、2 个向量查找、中间草稿(scratchpads),以及一个重新审视其中 3 个步骤的规划器。同样适用于 API 网关的采样策略——头部采样(head-sample)1%,保持其余部分的代表性——在 Agent 场景下会产生一个追踪存储库,其中中位数追踪是拥有 200 个 span 的怪物,长尾效应才是唯一关键的部分,而你发现故障的频率与你花钱的频率完全无关。

参数幻觉是漂移信号,而非模型 Bug

· 阅读需 11 分钟
Tian Pan
Software Engineer

工单上写着 “模型幻觉了一个用户 ID”。分拣标签是 model-quality。修复方案是在系统提示词中多加一句话。六周后,另一个工具开始幻觉日期格式,循环再次开启。一年后,提示词已经演变成一段针对整个后端的 4,000 token 的道歉信,而团队也坚信该模型在工具参数方面就是不可靠的。

模型并非不可靠。模型是一个合约一致性机器,它在阅读你提供给它的合约 —— 而你提供的合约一直在悄悄偏离线路另一端的合约。大多数生产环境中的 “参数幻觉” 并不是模型故障。它们是你的工具描述在默默失败的集成测试,之所以表现为模型输出,是因为这是技术栈中唯一能看到分歧的地方。

为什么你的偏见评估在 CI 中通过但在部署时失败

· 阅读需 11 分钟
Tian Pan
Software Engineer

公平性审计曾是发布流水线中的一个绿色对勾。合规团队在 3 月签署通过了它。支持工单从 10 月开始涌现——来自一个模型从未被评估过的国家的的一组用户,得到的答案效用远低于其他人。模型本身没有任何改变。审计对模型的判断从未出错。它错在对世界的判断。

这是一个没人愿意大声说出来的失败模式:静态偏差评估只是已经发生漂移的数据流中公平性的一个快照。评估在运行时并没有撒谎。它告诉你的是一个关于不再存在的分布的真实情况。等到支持团队积攒了足够的工单并归纳出模式时,模型对该群体的处理不公已经持续了两个季度,而审计报告已经过时一年了。

评估集也有季节性:为什么质量在报税季的第一个周一会下降

· 阅读需 13 分钟
Tian Pan
Software Engineer

在 1 月下旬的一个周一早上,仪表盘发出了第一次回归预警。支持助手的质量得分一夜之间下降了 3 分。周末没有发布 Prompt 变更。没有更换模型。评估套件——团队在 6 个月前构建的一个包含 800 行数据的精选黄金集 (gold set)——也没有任何变化。有人开了一个故障单 (incident)。

经过两天的二分定位 (bisecting) 之后,得到的答案平淡无奇且是结构性的。那是美国国税局 (IRS) 开启当年税务申报后的第一个工作周一。一半的入站查询已从“我的薪水到账了吗”变成了“我该如何申报来自支付 App 的 1099-K 表单”。在夏季采样的评估集对 1099-K 毫无头绪。模型并没有变差。是客户变了。评估标准是针对一个已经不存在的客户群进行校准的。

这种模式在每一个拥有季节性用户的产品中每季度都会重复出现——报税季的金融科技、季度末的销售工具、开学季的教育产品、退货季的电子商务、订票季的旅游产品、投保季的医疗保健。将“评估集视为固定资产”是一种舒适的抽象,但在一个无人更新的日程表上,这种做法是错误的。

你的 Gold 评估集已经发生偏移,而它的通过率正是你无法察觉的原因

· 阅读需 13 分钟
Tian Pan
Software Engineer

黄金评估集的通过率为 94%。模型在本季度已经升级了两次,提示词修改了 11 次,工具库增加了 4 个,仪表盘依然是一片绿色。然而,一名销售工程师转发了一份对话记录,显示智能体(Agent)自信地将客户引导至一个两个月前就已停用的工作流;与此同时,支持团队负责人悄悄开启了一个讨论组,询问为什么在评估流水线显示没有回归的情况下,满意度评分已经连续下滑了六周。黄金集并没有撒谎。它只是在用上个季度的产品标准来衡量这个季度的流量,而除此之外没人要求它做别的事。

这是评估系统最难察觉的一种失效模式,因为本该检测质量回归的工具本身就是误报的源头。通过率是针对集合中的项目计算的;集合中的项目是根据某个时间点的使用快照精心筛选的;用户的使用方式已经演进,但通过率依然保持“干净”。团队信任绿色的仪表盘,发布了另一个模型升级,几个月后才发现生产环境的分布与评估集所衡量的东西已经南辕北辙,而这种状态持续的时间超出了所有人的想象。

解决方法并不是提高黄金集的更新频率。更新频率是一个错误的调节旋钮;正确的旋钮是拥有第二个针对不同时间窗口校准的工具,以便在用户发现问题之前,通过两者之间的分歧来暴露漂移。这第二个工具就是影子评估(Shadow Eval)—— 一个从当前生产流量中持续重建的并行评估集,它与黄金集并行运行,其明确的任务就是与黄金集唱反调。