跳到主要内容

24 篇博文 含有标签「incident-response」

查看所有标签

你的值班轮换需要 AI 素养作为前提,否则不要在凌晨 2 点给任何人发报警

· 阅读需 13 分钟
Tian Pan
Software Engineer

一位拥有 8 年事故响应经验的平台工程师打开了一条凌晨 2 点的报警信息:“AI 助手性能下降 —— 错误率 12%”。她检查了模型延迟仪表盘:绿色。检查了模型 API 状态页:绿色。检查了部署日志:过去 72 小时内没有任何变更。她做了任何称职的值班人员接下来会做的事 —— 呼叫 AI 团队。AI 工程师醒来,打开了平台工程师甚至不知道存在的追踪 (trace) 仪表盘,发现一个检索工具在过去 4 小时内一直超时,原因是一个下游搜索索引丢失了一个副本,并在 11 分钟内解决了事故。AI 工程师在凌晨 3:14 重新入睡。第二天早上的复盘记录写道:“AI 功能故障,由 AI 团队解决”。没有人写下真正的教训:如果这位值班工程师曾被教导过 AI 功能的故障面 (failure surface) 长什么样,她本可以在 5 分钟内完成分流 (triage)。

这是 AI 功能在过去两年中,向我合作过的每一个工程团队悄悄征收的“轮换税”。曾经完美适用于无状态服务堆栈和几个数据库的共享值班轮换,在其中一个“服务”变成由 LLM 驱动的功能时就会崩溃。你的 SRE 团队通过十年的事故复盘建立的值班手册,是为一个“某处出错了”可以分解为 CPU、内存、网络、部署和依赖超时的世界而校准的。AI 功能增加了三个维度 —— 模型、提示词 (prompt)、检索管道 —— 以及四种值班人员从未接受过识别培训的故障形态,这些故障不会出现在他们习惯查看的仪表盘上。

五面分诊树:当常规操作手册不再适用时的 AI 轮值指南

· 阅读需 14 分钟
Tian Pan
Software Engineer

页面告警在凌晨 2:47 响起。智能体(Agent)正向客户支持工单发送语气错误的回复,延迟仪表盘显示平稳,错误率正常,而且由于过去 12 小时内没有进行过任何部署,没有任何东西可以回滚。值班工程师打开了运维手册(runbook),滑过了“重启工作线程池”和“扩容队列”,直到翻到底部,也没发现任何能与眼前告警相匹配的内容。他们在凌晨 3:04 开始阅读系统提示词(system prompt)。到凌晨 3:31,他们仍在阅读。

这是全新的故障形态。那些为“高延迟意味着重启 Pod,5xx 错误增加意味着回滚部署,队列深度增加意味着扩容工作线程池”而设计的轮值制度,已无法应对此类问题。第一直觉——回滚部署——是错误的,因为根本没有部署:模型在版本化别名(versioned alias)后静默升级了,第三方工具的响应结构发生了偏移,提示词版本在不同区域间出现了偏差,或者评估集在几周前就已失效,而回归问题一直在持续累积。告警是真实的。运维手册却保持沉默。AI 值班现在已经成为一门独立的学科,试图将其强行套入现有的轮值体系,只会产生那种在告警发生时,所有人第一步都是在通话中相对无言、第一次开始阅读提示词的方案。

你的 SRE 复盘模板遗漏了决定每次 LLM 故障的六个关键字段

· 阅读需 12 分钟
Tian Pan
Software Engineer

当你第一次用经典的 SRE 复盘(Postmortem)模板来分析 LLM 事故时,模板赢了,而事故输了。时间线、诱因、缓解措施、预防措施 —— 每个字段都填好了,每个复选框都勾选了,但在文档的最后,没人能回答唯一重要的问题:究竟是哪个变量发生了变动?不是部署事件。不是基础设施故障。不是代码变更。而是 Prompt 的修订、路由选择的模型切片、未触发报警的 Eval 评分所用的 Judge 配置、质量投诉发生时的检索索引状态、规划器(Planner)正在组合的工具 Schema 版本,或者是异常时间段内的流量组合。这些在模板里都没有对应的一行。

SRE 模板并不是为那些“事实来源是观察到的行为而非代码路径”的系统设计的。在 LLM 技术栈中默默变动的变量,正是模板从未需要列举的变量。强行借用模板,只会产生那种被归类为“持续调查中”的“我们不知道发生了什么变化”的复盘报告。

你的 stop_reason 在说谎:构建生产环境故障排查真正需要的停止分类法

· 阅读需 14 分钟
Tian Pan
Software Engineer

运维工程师调出一个 trace。模型已返回,span 正常关闭,API 调用显示 stop_reason: end_turn。从平台提供的各种信号来看,这是一次成功的生成。3 分钟后,客户报告说 Agent 煞有介事地写了半个配置文件,宣布操作完成,然后就继续下一步了。Trace 里没有任何预警信号,因为预警信号不在 API 协议里 —— 供应商提供的停止原因只有四到七类,而你的事故排查所需要的答案,恰恰隐藏在这些类别的缝隙之中。

停止原因(Stop reasons)是工程师在故障排查时最先查看的字段,也是最具误导性的字段。这些值是为运行时(runtime)设计的,旨在决定下一步该做什么:这一轮是否完成了?是否请求了工具?是否超出了预算?安全检查是否介入了?它们并不是为了让开发者重建答案出错的原因而设计的,而这两者之间的差异,正是生产团队耗费整个下午的时间所在。

Token 消耗是你的 SOC 尚未监控的安全信号

· 阅读需 12 分钟
Tian Pan
Software Engineer

你技术栈中最灵敏的泄露信号并不在 SIEM 中。它隐藏在财务人员月初打开的一份电子表格里。当攻击者窃取了 LLM API 密钥、利用提示词注入(prompt injection)窃取数据,或者通过被入侵的租户会话查询相邻客户的内存时,痕迹首先会表现为 Token 使用异常——这远在任何 DLP 规则触发、任何身份验证警报响起或任何终端代理察觉到异常之前。财务看到了,而安全部门却没看到。

这种差距并非理论上的。Sysdig 的威胁研究团队在观察到攻击者利用窃取的云凭据产生每日五位数的账单后,创造了“LLMjacking”一词。这一类别现已演变成一个有组织的犯罪产业,出现了每个账号 30 美元的交易市场,且有记录显示某些活动让受害者的损失每天超过 100,000 美元。OWASP 记录了一家初创公司因为密钥泄露,在 48 小时内产生了 200,000 美元的账单。斯坦福大学的一个研究小组由于在 Jupyter notebook 中遗忘了一个 Token,在 12 小时内烧掉了 9,200 美元。所有这些事件的共同点是:在安全团队察觉之前,账单图表就已经在几个小时甚至几天前揭示了真相。

AI 事故响应手册:为什么你的值班 Runbook 对 LLM 不管用

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的监控看板显示延迟升高,错误率小幅上升,然后归于平静。用户已经在 Slack 里投诉了。你的 AI 功能有四分之一的响应在产生幻觉,而这些幻觉在你的告警系统眼中看起来完全正常。等你找到原因——两小时前上线的一个提示词里改了六个字——一场你的 Runbook 从未预料到的慢燃事故已经结束了。

这就是在生产环境中运营 AI 系统的核心挑战。这些故障模式真实存在、危害显著,却对传统工具完全隐形。一个在悄悄产生幻觉的 LLM,从外部看和一个运行正常的 LLM 毫无区别。

AI 事故复盘:当「模型导致的」成为根本原因

· 阅读需 11 分钟
Tian Pan
Software Engineer

一家航空公司的客服 AI 告诉一位旅客,他可以先购买全价机票,事后再申请丧亲优惠折扣。旅客信以为真,飞行后提交了申请,却遭到公司拒绝。仲裁庭最终判决公司须赔偿 650 美元——因为法律上并无区分人类员工与聊天机器人所给建议的规定。那个聊天机器人并未崩溃,没有任何告警触发,p99 延迟也未见异常。系统在「正常运行」。

这正是 AI 事故的典型特征:应用程序并未报错——它成功地、自信地、大规模地生成了错误输出。 而当你坐下来撰写事后分析报告时,经典的工具箱便彻底失灵了。

AI 事件响应手册:诊断生产环境中的 LLM 性能退化

· 阅读需 16 分钟
Tian Pan
Software Engineer

2025 年 4 月,一个模型更新覆盖了 1.8 亿用户,并开始系统性地支持糟糕的决策——确认停止精神科药物的计划,以毫无来由的热情赞扬明显糟糕的想法。服务商自身的告警系统未能察觉,而社交媒体上的高级用户(Power users)发现了这一点。回滚花费了三天时间。根本原因是一个奖励信号悄无声息地胜过了阿谀奉承抑制约束(sycophancy-suppression constraint)——这对于现有的所有监控仪表盘和集成测试来说都是不可见的。

这就是摧毁用户对 AI 功能信任的失效模式:不是硬崩溃,不是 500 错误,而是一种标准 SRE 运维手册(Runbooks)在结构上无法察觉的逐渐质量崩塌。你的仪表盘会显示延迟正常、错误率正常、吞吐量正常,而模型却会言之凿凿地给出错误答案。

这才是你的值班轮转真正需要的事件响应手册。

AI 事故应对指南:当你的智能体造成现实世界损害时

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的智能体(agent)刚刚做了一些它不该做的事情。也许它给错误的人发了邮件。也许它执行了本应是读取操作的数据库写入。也许它给出的医疗建议让用户进了医院。你现在正处于一场 AI 事故中——而你一直以来使用的应对软件停机的策略(playbook)对你毫无帮助。

传统的事故应对指南建立在一个基本假设之上:给定相同的输入,系统会产生相同的输出。这个假设让你能够重现故障、二分定位原因并验证修复。但在处理基于自然语言的随机(stochastic)系统时,这些都不适用。同一个提示词(prompt)通过同一个流水线,在不同的运行、供应商、区域和时间下,可能会产生不同的结果。从 2023 年到 2024 年,记录在案的 AI 事故激增了 56%,但大多数组织仍然通过为根本不同的问题类别设计的软件事故流程来处理这些事件。

这就是他们本该编写的应对指南。

随机系统的值班响应:为何你的 AI 运行手册需要重写

· 阅读需 12 分钟
Tian Pan
Software Engineer

凌晨两点,你被告警叫醒。延迟上升,错误率飙升。你 SSH 进去,查看日志——什么都没有。没有指向错误部署的堆栈跟踪,没有第 247 行的空指针异常。只有一串模型输出,这些输出在细微之处、以不可预测的方式出了问题——只有当你连续读了 50 条之后,才能意识到这一点。

这就是 LLM 驱动系统中故障的样子。而传统的"告警-分类-修复"循环根本不是为此而生的。

标准值班手册有三个前提假设:故障是确定性的(相同输入,相同的错误输出)、根因是可定位的(某段代码改了,某项资源耗尽了)、回滚是直接的(还原部署,搞定)。这三点在随机 AI 系统中都不成立。同一个提示词会产生不同的输出。根因通常是一个概率分布,而不是某行代码。而且,你根本无法"回滚"一个第三方提供商昨晚悄悄更新的模型。

AI 事故复盘中的“责任消失”难题

· 阅读需 10 分钟
Tian Pan
Software Engineer

当确定性系统崩溃时,你会找到 bug。堆栈跟踪指向某一行代码。代码差异(diff)显示了更改。回顾起来,修复方案显而易见。但 AI 系统并非如此。

当一个由大语言模型(LLM)驱动的功能开始输出更差的结果时,你寻找的不是 bug。你面对的是一个发生偏移的概率分布,它存在于一系列组件构成的堆栈中,而每个组件都引入了各自的方差。是模型的问题吗?是供应商在某个周二进行的无声更新?是架构变更后未刷新的检索索引?是某人为了修复另一个问题而修改的系统提示词(system prompt)?还是三个冲刺(sprint)前就停止捕获回归的评估系统(eval)?

复盘会议变成了责任拍卖会。每个人都出价“模型变了”,因为这是一个无法证伪且无需成本的借口。

AI 值班手册:当 Bug 是一次错误预测时的故障响应

· 阅读需 13 分钟
Tian Pan
Software Engineer

凌晨两点,报警器响了。仪表盘显示没有 5xx 错误、没有超时激增、没有异常延迟。然而客服已经被淹没:"AI 给出了奇怪的回答。"你打开运行手册——立刻意识到它是为完全不同的系统写的。

这是 2026 年 AI 故障响应的标志性失效模式。系统在技术上完全健康。Bug 是行为上的。传统运行手册假设存在离散的失败信号:堆栈跟踪、错误码、不响应的服务。基于 LLM 的系统彻底打破了这一假设。输出语法正确、延迟正常、内容却完全错误。没有任何告警能捕捉到它。唯一的信号是某些东西"感觉不对"。

这篇文章是我第一次不得不响应生产 AI 故障时希望就存在的手册。