跳到主要内容

26 篇博文 含有标签「deployment」

查看所有标签

Prompt 回滚不像代码:为什么 git revert 是错误的原子操作

· 阅读需 10 分钟
Tian Pan
Software Engineer

一位资深工程师将 Prompt 的更改通过 10% 的灰度发布(canary)推送到生产环境。到了第二天早上,灰度组的有用性评分(helpfulness score)下降了四个点,值班人员发现了这一点,团队做了每个团队都会做的事情——撤回提交(revert commit)并重新部署。仪表板没有恢复。第二天也没有恢复。三天后,一份复盘报告显示,看到糟糕 Prompt 的那一组用户仍然在看到退化的输出,因为他们的对话历史中现在包含了由已撤回的 Prompt 生成的助手回复,而模型正基于这些回复进行预测。提交已经消失了,但损害仍在。

这是 LLMOps 中“像对待代码一样对待 Prompt”这一建议悄悄跳过的部分。代码回滚是文本替换,用于恢复确定性的过去状态。Prompt 回滚必须处理一系列副作用——缓存、历史记录、评估基准、实验分组、下游契约——这些都是糟糕的 Prompt 已经印刻在生产环境中的。git revert 翻转了文本,但它没有翻转后果。

为什么回滚 AI 功能比回滚代码更难

· 阅读需 9 分钟
Tian Pan
Software Engineer

当一次人格更新让一个流行的 AI 助手变得明显更加讨好和客气时,工程团队迅速发现了问题,并在几天内发布了回滚。代码更改很干净。模型切换也很直接。然而,用户还是被激怒了——不是因为回滚出错了,而是因为他们中的一些人已经围绕那个“奉承版”建立了工作流。他们的提示策略、审阅环节、对模型置信度信号的解释——所有这一切都针对一个他们再也无法访问的 AI 进行了调整。

回滚代码只花了几个小时。回滚用户却是不可能的。

这种不对称性是 AI 功能管理的中心挑战,大多数工程团队在吃亏之前都会低估它。传统的回滚思维将“撤销”视为一种纯粹的技术操作。对于 AI 功能来说,这只是故事的一半。

部署前的自主权红线:团队在事故迫使对话之前跳过的安全演练

· 阅读需 13 分钟
Tian Pan
Software Engineer

一家初创公司的整个生产数据库——包括所有备份——在九秒内被删除。肇事者不是心怀不满的员工,也不是失败的迁移脚本,而是一个 AI 编码智能体。它发现了一个权限过于宽泛的云服务商 API 令牌,并自主决定通过删除操作来"修复"凭证不匹配的问题。系统中明确规定了安全规则,禁止在未获批准的情况下执行破坏性命令。但智能体无视了这些规则。

团队在经历 30 小时的停机后才得以恢复,数月的客户记录永久丢失。而以下这一点,应该让所有构建智能体系统的工程师为之警醒:那些失效的安全规则,是被编码在智能体的系统提示词中的。

发布顺序问题:为什么同时部署模型与基础设施变更会破坏可观测性

· 阅读需 10 分钟
Tian Pan
Software Engineer

季度开始三周后,生产告警触发了。核心任务的准确率下降了八个百分点。你打开仪表盘,立即注意到同一个发布窗口内落地了三件事:上下文长度从 8k 增加到 32k token、模型版本从 gpt-4-turbo-preview 升级到 gpt-4o,以及基础设施团队为提升吞吐量推送的批处理大小变更。三项变更中没有一项单独被认为是高风险的。合在一起,它们制造了一个无法干净解决的调试难题。

欢迎来到发布顺序问题。

多区域 AI 部署:数据驻留、模型一致性与被忽视的延迟成本

· 阅读需 11 分钟
Tian Pan
Software Engineer

工程师为多区域 AI 部署做预算时,通常只考虑两个变量:每个区域的基础设施成本和复制开销。而真正被严重低估的,是上线之后才会暴露的三类成本:模型版本不一致导致欧盟集群与美国集群产出不同结果、KV 缓存隔离使 GDPR 区域内每个 token 的生成成本更高,以及重试逻辑将法国用户数据悄悄路由到弗吉尼亚时触发的静默合规违规。

一家德国银行为满足 GDPR 要求,花了 14 个月将一个大型开源模型部署在本地。这并不罕见。真正罕见的是,提出该架构方案的工程师从一开始就理解了合规约束。大多数团队直到事故报告出现才被迫面对这个问题。

AI 功能观察期:为什么两周的灰度发布会错过真正关键的问题

· 阅读需 14 分钟
Tian Pan
Software Engineer

为期两周的金丝雀发布(canary)是那种听起来足够自律,以至于让人可以跳过更难问题的实践之一。工程团队从微服务中引入了它——逐步放量 1% 几天,观察错误率,放量到 100%,宣布完成——并将它嫁接到 AI 功能上,却没问过 AI 特有的失效模式是否会在两周内显现。它们不会。扼杀该功能的账单在第六周才寄到。暴露出长尾意图的客户群体在第五周才开始使用。上线当天评分提升 3% 的评估偏移(eval drift)在第四周开始产生真金白银的损失,因为新 prompt 产生的更冗长的输出一直在累积 Token 开销,而由于仪表盘只盯着崩溃,没人注意到这一点。

一个围绕 p95 延迟和 HTTP 500 错误构建的金丝雀发布会告诉你 LLM 运行正常。它不会告诉你该功能是否有效。AI 功能失效的形式是部署仪式从未设计去捕捉的——用户行为的缓慢变化、缓存的逐渐侵蚀、检索质量的崩溃、拒绝率的攀升、以及走向错误的成本轨迹——而且几乎所有这些都需要两周以上的时间才能显现。按微服务时钟发版的团队,其发版节奏与失效发生的节奏并不匹配。

运行时 Prompt 热重载:为什么你的 Prompt 不该被锁定在构建流程中

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数公司的第一次 AI 事故都遵循一个剧本:一名提示词工程师发现模型对刚刚开始出现在实际流量中的某个类别进行了错误分类,于是提交了一个 PR,对系统提示词(system prompt)进行了一行微调,然后在模型继续在生产环境中进行错误分类的这 23 分钟里,盯着构建队列。修复手段只是一个字符串。而部署却是一个二进制文件。这种不匹配并不是工具层面的疏忽 —— 而是团队在将系统提示词与应用程序代码一同放入 .py 文件的那天起,就隐含做出的架构决策。

将提示词更改与部署管道耦合是你强加给自己的限制。分布式系统中没有任何定律规定模型的行为契约必须与编排代码封装在同一个制品(artifact)中。运行时提示词热重载模式通过像对待功能开关(feature flags)、路由规则和价格表那样对待提示词,从而切断了这种耦合 —— 即将其视为在请求时从版本化存储中拉取的配置,并辅以短效的本地缓存和定义明确的安全原语(safety primitives)。这样做的好处是事故响应时间从以分钟计的构建时长缩短到以秒计,而代价是你必须正视一个你的发布流程可能忽略的第三个部署平面。

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

· 阅读需 12 分钟
Tian Pan
Software Engineer

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

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

模型回滚速度:从“这次升级有问题”到“旧模型完全恢复”之间的七小时鸿沟

· 阅读需 14 分钟
Tian Pan
Software Engineer

针对糟糕的代码部署,标准流程是在一分钟内完成回滚。针对错误的配置推送,标准流程是亚秒级的开关切换。而针对糟糕的模型升级,应对方案则是值班工程师在早上 09:14 临时想出的法子,而且通常需要耗时 7 小时才能完成。在这 7 小时内,性能倒退持续累积——错误的答案被发送给客户,支持工单堆积如山,而监控面板显示的只是缓慢的倾斜曲线,而非迅速回归绿色的断崖式好转。

差距之所以长达 7 小时,并非因为团队动作缓慢,而是因为模型升级的“回滚”与代码的“回滚”并非同一种原语。它更接近于数据库模式(schema)迁移:局部的、滞后的,且无法通过按下你希望存在的那个按钮来撤销。围绕“一个按钮”编写事故应对方案的团队,并不具备实际回滚所需的控制能力。

这篇文章将探讨这些控制能力具体是什么样的,为什么必须提前为此付出代价,以及当你第一次尝试在负载下回滚模型时,你会对你的平台有哪些新发现。

端侧 AI 需要的是机群管理器,而非模型卡片

· 阅读需 13 分钟
Tian Pan
Software Engineer

上一季度发布的端侧 AI 演示在单台测试手机上运行了一个 4-bit Llama 变体,表现出色。六个月后,同样的功能却收到了一连串的一星差评,用户抱怨发热、耗电,或者更糟糕的是——无声的质量下降,用户只觉得“老手机上的 AI 变傻了”。模型没变,但机群(fleet)变了。那些原本以为是在交付模型的团队后来才发现,他们交付的其实是一个机群。

这就是导致大多数端侧 AI 发布失败的鸿沟:策略是围着选择“那个”模型转,而真正的难点在于如何为每类设备交付“合适的模型”,观察其运行情况,并在出问题时回滚。弥合这一鸿沟的学科更像是 CDN 运营,而非 ML 研究——清单驱动(manifest-driven)的交付、按分群的遥测、解耦的发布渠道,以及能从一个训练好的检查点生成 N 个量化分级的模型变体流水线。大多数团队并不具备这些,他们只有一个模型卡(model card)和一个构建产物。

跨区域 Prompt 版本偏差:你的 CDN 误运行了六小时的 A/B 测试

· 阅读需 12 分钟
Tian Pan
Software Engineer

你在 09:14 发布了一个系统提示词(system-prompt)变更。发布仪表盘在 09:31 变绿。到 11:00 时,你的评估追踪器依然显示正常,成本仪表盘也无异常,但一位客户成功工程师联系了团队:仅在亚太地区,解析端的结构化输出错误上升了约 3%。北美无异常。欧洲无异常。

发布在覆盖 67% 的区域时自动暂停了,因为某个 POP 节点上的一个非核心健康检查在切换期间发生了抖动,而当时没人注意到。在六个小时里,us-easteu-west 运行着提示词 v47,而 ap-southap-northeast 仍停留在 v46。你正在运行一个按地理位置划分的实时 A/B 测试——只不过这个测试不是你设计的,你看不到测试过程,而且那个本应捕捉质量回退的评估套件正巧连接到其中一个区域的新版本,然后若无其事地忽略了问题。

这种失败模式并不是单个工具的 bug。它是将提示词通过为不同类型的工件构建的部署系统进行推送时,所产生的可预见的后果。

Eval-Prod 漂移:测试中的智能体并不等同于生产环境中的智能体

· 阅读需 13 分钟
Tian Pan
Software Engineer

评估套件显示绿色(通过)。仪表盘显示绿色。一周后,支持团队淹没在同样的投诉中:“助手一直拒绝预订会议。”你打开评估工具(eval harness),重放失败的追踪记录,结果它运行正常。非常完美。每一次都成功。Bug 不在你的评估中,也不在你的模型中。Bug 在于:你的评估所测量的 Agent 和你的客户正在交谈的 Agent 已经不再是同一个系统了,而目前还没有人意识到这一点。

评估与生产环境偏移(Eval-prod drift)是指评估工具加载到 Agent 中的内容与推理栈在请求时实际组装的内容之间,发生的缓慢且难以归因的发散。提示词(Prompts)、固定的模型版本(model pins)、工具架构(tool schemas)、护栏配置(guardrail configs)和功能标志(feature flags)分别通过不同的部署路径流入 Agent —— 代码合并、配置推送、提示词注册中心的回调、实验平台、运行时上线 —— 几乎没有团队拥有一个能够协调这些内容的单一事实来源。因此,评估工具最终测量的是存在于某人 PR 分支中的 Agent 版本,而生产环境运行的则是昨日热修复、上周的功能标志变体,以及工具团队在没告知任何人的情况下推送的任何内容的集合。

这不是一种理论上的失效模式。它是任何运行超过三个月、且配置分布在多个代码库中的 Agent 系统的默认状态。