跳到主要内容

89 篇博文 含有标签「llm-ops」

查看所有标签

当你的智能体具有自愈能力时,MTBF 已死

· 阅读需 11 分钟
Tian Pan
Software Engineer

我上个季度交流过的一个团队,他们的所有仪表盘都显示绿色。工具错误率稳定在 0.3%。端到端成功率为 98%。SLO 预算几乎没动过。但他们的 Token 支出却是预计的四倍,而且没人能解释原因。当他们最终对每个 Trace 的重试深度进行埋点时,情况发生了反转:成功请求的中值实际上进行了 2.7 次工具调用,而不是架构图里承诺的 1.0 次。智能体(Agent)并没有失败。它是在同一个 Span 内部不断失败又不断恢复,而成功率指标根本无法体现这一点。

这是传统可靠性词汇无法涵盖的智能体可靠性部分。MTBF(平均故障间隔时间)假设故障是断续的、可观测的事件,你可以在两次故障之间进行计数。你测量间隔,计算平均值,并在间隔缩短时发出警报。这对于硬盘、网络和确定性服务都很有效。但对于那些在单个用户可见的操作内部进行重试、重定向、降级并静默恢复的系统来说,它失效了。

静默量化:为什么你今天付费的模型不再是上个季度购买的那个

· 阅读需 12 分钟
Tian Pan
Software Engineer

你账单上的模型名称与上季度完全一致。API 响应中的版本字符串也没有改变。模型卡片和定价页面看起来也一模一样。然而,你的评估得分却下降了 0.5 分,拒绝模式以你提示词中未要求的方式发生了偏移,上周二还收到了几起客户投诉,称输出结果“感觉不一样”。你调试了代码,却一无所获。代码没变。权重变了。

静默量化(Silent quantization)是你合同约定的模型与供应商实际交付的模型之间的差距。之所以发生这种情况,是因为推理经济学持续收紧——每一美元的 GPU 算力在本季度必须承载比上季度更多的请求——而消化这种压力的最廉价方式,就是在更廉价的精度层级上重新托管同一个模型。FP16 变成了 FP8。在某些路由中,FP8 变成了 FP4。混合精度分片被替换进来。版本字符串没有变动,因为版本字符串从来都不是精度合约,而是一份营销合约。

为什么 Token 预测在上线后会发生偏移 —— 以及如何在财务发现前捕捉到异常峰值

· 阅读需 12 分钟
Tian Pan
Software Engineer

发布前的成本模型通常是一张精美的电子表格。它假设通过代表性的提示词(Prompt)运行模拟流量,并在测试过的缓存命中率和干净的工具调用路径下运行。但发布后的现实是,一旦功能真正开始运作,这些假设都将不复存在。模拟流量未涵盖的意图恰恰是用户最常使用的。工程团队没收到会议通知的营销活动所带来的流量,最终落在了路由树中成本最高的分支上。在第三周,使用量超过中位数 40 倍的重度用户群体才会开始出现。

这类问题在全行业内已屡见不鲜:调查显示,约 80% 的企业对 AI 成本的预测偏差超过 25%,并报告在成功发布后的几个月内,成本通常会增加 5 到 10 倍。这些数字中关键的细节是“成功”二字。失败的 AI 功能才能维持在预算内。成本偏差是由功能的成功运行驱动的,而不是因为团队做错了什么。这使得它成为一个规划产物(planning artifact)问题,而不是工程问题 —— 而大多数团队依赖的规划产物,即每月账单,其实是最糟糕的检测器。

双钟问题:当模型供应商的迭代节奏打乱你的路线图

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 产品上有两个正在走动的时钟,且它们并不同步。模型厂商的更新节奏大约是季度性的——2026 年 2 月发布 Claude Opus 4.6,3 月发布 GPT-5.4,4 月发布 Claude Opus 4.7,一周后发布 GPT-5.5。而你的产品路线图在 1 月份就已经确定,直到 7 月才会再次评估。在这期间,你花了 8 个工程周构建的功能可能变成了一个单行 API 参数,而团队中没有人有一套流程来察觉这一点。

这不是一个预测问题。这些发布早有预兆——任何阅读变更日志(changelog)的人都能预见到。这是一个规划产出物(planning-artifact)的问题。路线图是为那个底层平台十年才更新一次的世界而发明的。现在的平台每季度更新一次,而这种产出物却没有跟上。

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 调度框架在发布时都没有解决这个问题。

为什么你的提示词库应该是 Monorepo,而不是 Cookbook

· 阅读需 13 分钟
Tian Pan
Software Engineer

我最近合作的一个团队有三个不同的“总结这份合同”提示词。一个存在于 Notion 页面中,法律科技小队将其复制粘贴到他们的服务里。一个存在于客户成功后端的 prompts/ 文件夹中,为了适应他们的语气偏好做了轻微修改。还有一个内联在数据团队 notebook 里的 Python 文件中,被硬编码在两个 f-string 插值之间。当 OpenAI 弃用了它们运行的所有模型时,迁移计划变成了一场 “Slack 考古” —— 必须追踪到每个所有者,重新评估每个变体,其中两个变体在生产环境中默默地出了一周的故障才被察觉。

这就是规模化后的提示词 Cookbook 的样子。对于十个提示词和一个团队来说,Cookbook 是合理的。但当提示词达到一百个、团队达到四个左右时,它们就会变得难以管理。当你运行一个 AI 组织时,你的 prompts/ 文件夹(装满 .md 文件)的表现就像 2008 年那种靠复制粘贴引入的第三方代码:每个消费者都有自己的快照,偏差(drift)是不可见的,而破坏性变更会以不可预测的方式向外扩散。

作为 Cron 任务的智能体:当定时触发优于对话循环时

· 阅读需 11 分钟
Tian Pan
Software Engineer

如今,生产环境中的大多数 “智能体”(agents)其实都是套着对话界面的后台任务。它们不需要用户向其输入内容,而是需要一个触发器、一个状态文件,以及一种在不可避免的超时后恢复运行的方法。对话循环 —— 请求、工具调用、请求、工具调用,无限循环 —— 是为了演示方便而提供的功能,却悄然间成为了默认的执行模型。然而,对于大多数交付的智能体工作负载来说,这其实是一个错误的模型。

这并非一个哲学层面的决定。它直观地反映在账单上、值班告警中,以及任务的运行成功率上。对话循环会在多轮对话中保持模型会话开启,不断累积上下文,一旦链路中任何一环出错,整个过程就会中断。而调度触发则在确定的边界处启动,运行至完成或达到检查点,并在退出前将状态写入持久化存储。前者像是一通电话,而后者则是一个工作队列。将两者混为一谈,会导致一个每月 200 美元的功能在没有任何人修改提示词的情况下,变成每月 4 万美元的负担。

Semver 的谎言:为什么 LLM 的次要更新比重大重构更容易搞垮生产环境

· 阅读需 12 分钟
Tian Pan
Software Engineer

在 AI 工程领域流传着一个隐秘的神话:模型的一次“小幅”升级——比如 claude-x.6claude-x.7,或者 gpt-y.0gpt-y.1,甚至是按日期推进的补丁级快照更新——都应该是无缝替换的。厂商发布的更新日志里谈论着推理能力的提升、更低的延迟以及更好的工具调用。版本号轻轻跳动,没有任何迹象表明这些改动会破坏现有系统。

然后更新上线了。值班频道随即被各种警报点亮:摘要生成器莫名其妙多出了一段以前没有的话;JSON 提取器开始对以前不处理的 Unicode 字符进行转义;Agent 循环在以前只需三次调用就能完成的任务上,现在却触碰到了最大步数限制。从整体上看,评估得分似乎没什么问题,但用户可见的功能却在细微之处出了错。

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

· 阅读需 14 分钟
Tian Pan
Software Engineer

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

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

你的 AI 功能灰度发布正沿着错误的轴线进行

· 阅读需 13 分钟
Tian Pan
Software Engineer

我上个月交流过的一个团队,在四个星期内将一项新的 Agent 功能从 1% 的用户灰度推广到了 50%。聚合质量指标保持在噪声范围内,延迟也保持在 SLA 之内。他们正在准备 100% 全量发布的备忘录时,支持队列突然“起火”了——一个拥有六工具研究工作流的客户,自 10% 灰度阶段以来就一直在接收静默损坏的输出。困难查询(Hard queries)一直存在,均匀地分布在每个分群中,被平均化到了底噪中。直到一个高频用户在大规模使用中撞上了这些问题,大家才发现。

这不是监控失败,而是灰度发布维度的失败。功能标志工具(Feature flag tooling)——包括 LaunchDarkly、Flagsmith、Unleash 和 Cloudflare-Flagship 等所有此类工具——都假设爆炸半径(blast radius)随接触到的人数成比例扩大。对于确定性软件,这在很大程度上是正确的:一个空指针异常(NullPointerException)要么影响所有人,要么谁都不影响,将其暴露给 1% 的用户会将可见的爆炸范围限制在 1%。但对于 AI 功能,爆炸半径并不在“人”这个维度上扩展,而是在“输入”维度上扩展。而几乎没有人会在输入维度上进行灰度发布。

Eval 瓶颈:你的 Eval 工程师现在就是路线图

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的 AI 路线图的瓶颈不是 GPU 容量、模型可用性或 Prompt 工程的品味。它是那一两个真正懂得如何构建能发现回归(regression)的评估(eval)的工程师的日程表。每个负责功能的产品经理都在他们的队列中。每一次模型升级都在他们的队列中。每一次群体漂移、每一次 Prompt 修改、每一个“这个评审模型(judge)是否仍然校准”的问题,最终都会进入同一个收件箱。而这位工程师在本季度已经说了三次“不,这还没准备好”,两次被否决,眼睁睁看着回归在生产环境中复合增长,现在正在更新他们的 LinkedIn。

这就是评估瓶颈,大多数组织在被咬到之前都意识不到它的存在。到 2025 年为止,显而易见的工作重点是 AI 工程师——招聘 AI 工程师、发布 AI 功能、迭代 Prompt、更换模型。到了 2026 年第一季度,吞吐量问题下移了一层。将 AI 团队人数翻倍的团队发现,增加更多功能工程师并没有让功能发布得更快,因为每个功能仍然需要一个评估(eval),而负责评估的工程师还是那个人。

评估集毒丸:当你的基准测试成为后门

· 阅读需 13 分钟
Tian Pan
Software Engineer

我认识的一个团队花了六个月的时间去追踪一个并不存在的回归 (regression)。每一次发布都通过了评估 (eval)。每一次发布都上线了。但每个季度,AI 服务群组的 NPS 都会下降一个点。最终,一名实习生在对黄金数据集 (gold dataset) 进行例行审计时发现,一名早已离职的合同标注员标注了 11% 的数据项,而这些项在团队一直试图修复的一个特定故障模式上,系统性地表现得更加宽松。评估结果显示模型正在变好。但模型并没有变好。评估结果被一个人的校准漂移悄悄地倾斜了,而没有人监督标注员,因为没有人认为标注员是一个威胁面。

这就是评估集毒丸 (eval-set poison pill)。大多数团队将他们的评估集视为一个值得信赖的产物:标签是由人类评分的,数据来自生产环境,而回归仪表盘是组织在发布时一致同意参考的唯一指标。但标注流水线是一个人类供应链,而人类供应链是可以被操纵的。如果不对评估集的输入应用供应链卫生管理,就将其视为真值 (ground truth),那么你就是在信任一个你无法辩护其来源 (provenance) 的数字。