跳到主要内容

12 篇博文 含有标签「devops」

查看所有标签

AI 更新日志问题:为什么你的提示词更新正在破坏其他团队的工作

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个平台团队对他们的摘要服务的系统提示词(system prompt)进行了一行细微的调整。没有代码审查,没有迁移指南,没有版本更新——这“仅仅是一个提示词”。两周后,法律产品团队发现他们的合规自动脱敏功能一直在静默地泄露姓名。调查耗费了一个冲刺(sprint)。修复很简单。损害的是信任。

这是 AI 变更日志问题的缩影。行为现在是你系统的一等输出(first-class output),当提示词、模型、检索器或工具模式(tool schemas)发生变化时,行为也会随之改变——而这些变化都不会出现在消费方应用的 git diff 中。如果团队像对待后端部署那样对待 AI 更新,认为在 #releases 频道发一条 Slack 消息就足够了,那么他们最终会重蹈 2010 年代早期那种“我们先上线,稍后再告诉 QA”工作流的覆辙。

模型迁移类比数据库迁移:如何在不破坏生产环境的情况下安全切换 LLM 供应商

· 阅读需 12 分钟
Tian Pan
Software Engineer

当你的团队决定从 Claude 3.5 Sonnet 升级到 Claude 3.7,或者从 OpenAI 迁移到自托管的 Llama 部署时,直觉通常是将其视为一次库升级:更改 API 密钥,更新模型名称字符串,进行快速的健全性检查,然后发布。这种直觉是错误的,那些遵循这一做法的团队会在第二周的凌晨 2 点发现原因——当时客服代理开始以完全不同的格式生成响应:技术上有效,语义上却是灾难性的。

切换 LLM 提供商或模型版本在结构上与数据库模式迁移(database schema migration)完全相同。两者都涉及更改系统中应用其余部分具有隐式契约的行为。两者可能在第一天看起来没问题,但在第十天发生灾难性的失败。两者都需要双重运行(dual-running)、金丝雀发布(canary deployment)、回滚标准和迁移方案(migration playbook)——而不是修改配置后发一条 Slack 消息。

正确的 Prompt 版本管理:将 LLM 指令视为生产软件

· 阅读需 9 分钟
Tian Pan
Software Engineer

三个词。就这么多。

一个团队在现有 prompt 中添加了三个词,目的是改善"对话流畅性"——这个调整在 playground 里看起来无害。几个小时内,结构化输出错误率急剧攀升,一个创收工作流停止运作,工程师们争相还原 prompt 改动前的内容。没有版本历史,没有回滚机制,只有一条 Slack 消息,来自某个"大致记得"内容的人,以及一份与 Google 文档中过时副本的 diff。

这不是假设场景,而是几乎每个规模化交付 LLM 功能的组织都在重复经历的模式。Prompt 从应用代码中的字符串起步,经过非正式编辑演化,积累了无文档记录的微小调整,最终到达无人确信生产环境里运行着什么、也不知道为何如此表现的状态。

解决方案不是一个新工具,而是对团队一直以配置文件方式对待的东西施加工程纪律。

CI 流水线中的 AI 智能体:如何为无法单元测试的部署设置质量关口

· 阅读需 11 分钟
Tian Pan
Software Engineer

发布一个调用 LLM 的功能很容易。但要判断该功能的下一个版本是否优于生产环境中的当前版本,却相当困难。传统 CI/CD 对确定性行为提供通过/失败信号:函数要么返回正确值,要么不返回。但当函数封装了一个语言模型时,输出是概率性的——相同的输入在不同运行、不同模型版本和不同时间会产生不同输出。

大多数团队的应对方式是绕过这个问题。他们运行单元测试,对几个提示词做快速的人工检查,然后发布。这种方式在出问题之前都还能用——直到某个模型提供商悄悄更新了底层权重,或者一个看似没问题的提示词改动在孤立测试中没有异常,却在凌晨三点以生产流量规模改变了输出分布。

更好的答案并非假装 LLM 输出是确定性的,而是构建基于分布、阈值和评分标准的 CI 质量关口,而不是精确匹配。

LLM 服务商故障手册:当 AI 基础设施宕机时如何保持服务在线

· 阅读需 13 分钟
Tian Pan
Software Engineer

2024 年 12 月,OpenAI 整个平台宕机超过四个小时。一项新部署的遥测服务配置错误,导致大规模集群中的每个节点同时猛攻 Kubernetes API。DNS 崩溃,控制平面瘫痪,所有服务随之倒下。恢复耗时如此之久,部分原因在于团队缺乏他们后来所说的"破防工具"——那些在常规流程失效时可以立即调用的预建应急机制。

如果那天你正在运营一款 AI 驱动的产品,你必须在压力下快速做出决策。多服务商路由?优雅降级?缓存响应?还是只能祈祷,然后挂出一个状态页面?

这就是你应该在那个电话打来之前就已经写好的应急手册。

提供商抽象税:构建无需重写即可切换模型的 LLM 应用

· 阅读需 12 分钟
Tian Pan
Software Engineer

一家医疗初创公司从某个主流前沿模型迁移到了同一供应商提供的新版本。结果是:为了恢复功能对等(feature parity),耗费了 400+ 个工程小时。新模型每次响应生成的 token 数量是原来的五倍,抵消了预期的成本节省。它开始提供未经请求的诊断建议——这带来了合规性风险。而且它破坏了下游的所有 JSON 解析器,因为它把响应包裹在了 Markdown 代码块语法中。同一供应商,不同的模型,却是推倒重来。

这就是供应商抽象税(provider abstraction tax):它不是切换供应商的成本,而是不为此做规划所产生的累积成本。它不是一次性的迁移事件,而是一个持续的消耗——你在升级三周后发现的行为退化、无法跨模型迁移的提示词工程工作,以及因为某个供应商分别计算输入和输出 token 的速率限制而导致静默失败的重试逻辑。直接在单一供应商之上构建系统的团队会无形中积累这种债务,直到收到弃用通知或价格变动通知时,账单才会一次性结清。

模型 EOL 倒计时:将供应商 LLM 视为外部依赖项管理

· 阅读需 13 分钟
Tian Pan
Software Engineer

2026 年 1 月,OpenAI 仅提前两周通知便将若干 GPT 模型从 ChatGPT 中退役——而就在此前不久,其 CEO 刚刚在公开场合承诺在此次退役后会"提前充分通知"。对于那些已将工作流构建在这些模型之上的团队而言,这份公告无异于周五下午收到的一条页面报警。那一次 API 未受波及,但下一次未必如此。

你当前调用的每一个模型都有弃用日期。部分日期已列在供应商的文档页面上,另一些尚未宣布。操作层面的问题不是你的生产模型是否会被退役,而是你能否在问题发生前及时收到通知并从容应对,还是在用户开始遭遇故障后手忙脚乱地迁移。

Prompt 静态分析:你的 AI 系统缺失的预部署门控

· 阅读需 9 分钟
Tian Pan
Software Engineer

每个严肃的工程团队在合并代码前都会运行一次 Lint 检查。ESLint 捕获未定义的变量,Prettier 强制格式规范,Semgrep 标记安全反模式。没有人会在不先运行至少一次静态检查的情况下将 JavaScript 发布到生产环境。

现在想想你的团队在发布一次提示词变更之前会做什么。如果你的团队和大多数团队一样,答案是:在 PR 里审阅一下,用肉眼扫描,也许手动测试几个输入用例,然后合并。你生产 AI 功能的系统提示词——控制模型如何为每一位用户表现的指令集——所受到的预部署审查比一次 CSS 改动还要少。

这个差距不是一个微小的流程疏漏。一项分析了 2,000 多个开发者提示词的研究发现,超过 10% 的提示词存在提示词注入攻击的漏洞,约 4% 存在可衡量的偏见问题——而这一切都在没有人察觉的情况下部署到了生产环境。自动捕获这些问题的工具已经存在,只是大多数团队还没有把它接入流水线。

智能体凭据轮换:尚未被映射到 AI 领域的 DevOps 难题

· 阅读需 9 分钟
Tian Pan
Software Engineer

每个 DevOps 团队都有一套凭据轮换政策。大多数团队已经针对其服务、CI 流水线和数据库实现了自动化。但当你部署一个持有跨五个不同集成的 API 密钥的自主 AI Agent 时,那套轮换政策就变成了一个地雷。Agent 正在执行任务中——分拣 Bug、更新工单、发送 Slack 通知——突然它的 GitHub 令牌过期了。进程看起来很健康。日志显示没有崩溃。但无声无息地,一切都不再起作用了。

这是无人从 DevOps 映射到 AI 的凭据轮换问题。传统的轮换假设工作负载是可预测的、由人管理的,并且具有清晰的边界。自主 Agent 打破了每一个这样的假设。

智能体测试的模拟环境:构建代价为零的沙箱

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 Agent 在预发布环境中通过了每一项测试。然后它进入了生产环境,发送了 4,000 封电子邮件,向一名客户收取了两次费用,并删除了一条本不该触碰的记录。预发布测试没有错 —— 它们只是测试了错误的东西。预发布环境让 Agent 看起来很安全,因为所有它可能破坏的东西都以错误的方式被伪造了:Mock 得足以不崩溃,但也真实得足以让你误以为测试是有意义的。

这就是“模拟保真度陷阱”。这与普通的软件测试失败不同。对于确定性函数,镜像生产环境 Schema 和 API 的预发布环境通常就足够了。对于 Agent 来说,行为产生于推理、工具输出以及跨多步轨迹的累积状态之间的相互作用。如果在这些维度中的任何一个上与生产环境存在偏差,预发布环境都会产生对其实际行为过度自信的 Agent。

LLM 应用的 CI/CD:为什么部署 Prompt 与部署代码完全不同

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的代码通过一个流程发布:特性分支 (feature branch) → 合并请求 (pull request) → 自动化测试 → 预发布 (staging) → 生产环境 (production)。每一步都有门槛。如果没有通过你定义的检查,任何东西都无法到达用户手中。这种“枯燥”正是它最好的地方。

现在想象你需要更新一个系统提示词 (system prompt)。你在仪表盘中编辑字符串,点击保存,更改立即生效 —— 没有测试,没有预发布,版本控制中没有 diff,除了手动改回去之外没有回滚的方法。这就是大多数团队的运作方式,也是提示词更改成为 LLM 应用非预期生产事故主要原因的原因。

挑战不在于团队粗心大意。而在于持续交付 (continuous delivery) 的规范是为确定性系统构建的,而 LLM 并非确定性的。整个思维模型需要从头重建。

生产级 AI 系统中的提示词版本控制与变更管理

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个团队在客服提示词中增加了三个词,为了让它“更具对话感”。几小时内,结构化输出错误率激增,一条创收流水线停滞。工程师们花了将近一整天的时间调试基础设施和代码,才有人想到去检查提示词。没有版本历史。没有回滚机制。这三个词的修改是由一位产品经理直接在配置文件中内联完成的,他完全没理由认为这会有风险。

这是一个典型的生产环境提示词事故。类似的戏码在各种规模的公司中上演,其根源几乎总是一样的:提示词被视作临时配置,而不是软件。