跳到主要内容

678 篇博文 含有标签「ai-engineering」

查看所有标签

闭环升级漏洞:当你的专精型智能体陷入循环路由

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个用于市场数据研究的多智能体系统在无人察觉的情况下,在四周内悄悄烧掉了 47,000 美元的推理成本。原本的每周账单仅为 127 美元。原因既不是流量激增,也不是模型升级——而是两个智能体在十一天里来回传递同一个对话,每个智能体都确信对方才是处理该请求的正确位置。没有任何报错。没有任何警报触发。一个机器人的“队列已转移”指标和另一个机器人的“任务已接收”指标都在同步增长,两边的仪表盘看起来都很健康。

这就是闭环升级漏洞 (closed-loop escalation bug)。它是两个热心的同事互相坚持“不,你来处理”的多智能体版本,只不过他们谁都不会感到厌烦并走开。你在设计时画的架构图中,每个专业智能体都拥有一块清晰的问题领域。而运行时实际执行的架构却包含了一个房间里没人能看到的路由循环。

禁用开关才是真正的产品:设计非 AI 回退路径

· 阅读需 11 分钟
Tian Pan
Software Engineer

每一个 AI 功能在发布时,都伴随着一个团队未曾预料到的时刻:必须将其关闭的时刻。在早会上,模型效果突然出现回归(Regression);一场没人告知工程团队的营销活动导致成本飙升,在 12 小时内让账单翻倍;隐私审查发现提示词上下文泄露;供应商宕机 90 分钟;合规团队在中午发出了警告,该功能必须在下班前消失。

大多数团队为此准备的“禁用开关”只是让“功能返回错误” —— 一个永远无法加载的旋转图标,或者是显示“AI 助手不可用,请稍后重试”的横幅。这比 AI 出现之前的现状要糟糕得多,而当 AI 表现下降时,用户恰恰会拿现状与你对比。以前的方案至少有一个按钮。而现在,用户只得到了一句道歉。

蒸馏是一个产品决策,而非研究产物

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个基于前沿模型的聊天功能,单次对话成本大约是 30 美分。而同功能的蒸馏版本,单次对话成本大约只有 0.3 美分。这并不是同一个产品的两种实现方式,而是两个截然不同的产品。它们有着不同的免费层级经济模型、不同的获客成本、不同的市场定位以及不同的竞争护城河。如果一个团队只是将蒸馏版本当作“更便宜的同款功能”发布,那就白费了这一招。

大多数工程组织仍将蒸馏视为研究团队的优化任务,认为是在功能“完成”后,为了挤出推理成本而对已经按前沿模型规格设计好的东西进行的后期处理。这种理解在数量级上就是错误的。Teacher 模型(教师模型)的选择、Student 模型(学生模型)的选择、用于评测 Student 的评估套件,以及 Student 最终部署的产品界面,本质上都是产品决策。它们决定了你同意放弃哪些能力、你为哪种流量形态进行设计,以及你正在开启哪种价格底线。如果把这些交给研究团队去针对 MMLU 进行优化,你最终发布的模型虽然在榜单上表现优异,但对产品本身毫无意义。

Eval-as-Code:当你的发布门禁只是某人笔记本电脑上的一个 Notebook

· 阅读需 14 分钟
Tian Pan
Software Engineer

决定一个模型是否上线生产环境的数字,是由运行在某个工程师 MacBook 上的 Jupyter Notebook 生成的。数据来源是 Slack 私聊中的一个 CSV 文件,评分则由一个没人固定版本的裁判模型完成。两周后,在工程师又动了三次 Notebook,且 API 供应商悄悄发布了一个微小的模型更新后,团队里已经没人能重现那个数字了——包括当初生成它的那个工程师。然而,那个数字就是准入闸门。它决定了 GPT-4o-mini 是否足以在客户支持流程中取代 GPT-4;它决定了新提示词模板的发布;它决定了微调模型的晋升。团队把它视为核心承重构件,却像对待便利贴一样存储它。

这就是“评估差距”(eval gap)。五年来,业界一直在将评估视为一个方法论问题——哪种评分技术、哪种裁判模型、哪种评分标准、哪种数据集——却几乎从未将其视为一个工程问题。但是,一旦你的评估套件开始充当生产发布的守门员,它就继承了生产栈其余部分所遵循的所有要求:可重现性、版本控制、所有权、可观测性、依赖管理、延迟与可靠性预算,以及一套在构建它的工程师离职后依然能运行的流水线。大多数团队完全跳过了这一层,只有在发生重大事故后才发现它的缺失——通常是评估分数显示绿色,而用户体验却是一片红色。

评估自动化陷阱:当你的流水线偏离用户真实需求时

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的评估流水线分数在稳步上升。响应质量在持续改善。LLM 评判者(LLM judge)捕获到了更多劣质输出。仪表盘一片绿色。

与此同时,支持工单零星涌来:"助手老是给我冗长正式的回答,我只是随口问了个简单的问题。"紧接着又来了一条:"它不再主动给出下一步建议了,以前会的。"然后你们的产品经理给你看了一张图表:上个季度用户满意度下跌了 12%,而这段时间,恰恰与你自动化评估指标爬升最快的那段时期高度吻合。

这就是评估自动化陷阱。你的度量体系开始为自身的优化而服务,而非为用户真正看重的事情服务 —— 由于整个反馈循环完全自动化,没有人察觉到问题,直到伤害已经落地生产。

评估迁移税:为什么 Prompt Schema 的一次变更会毁掉 800 个测试用例

· 阅读需 13 分钟
Tian Pan
Software Engineer

我见过的每一个发布过“小规模”输出 Schema 变更的 AI 团队,都经历过同样的一周。有人在系统提示词(system prompt)中重命名了一个字段——比如将 summary 改为 tldr,或者工具目录中增加了一个必填的 confidence 参数——结果下一次 CI 运行就在 800 个与该变更毫无关系的 Eval 用例中亮起了红灯。提示词的 diff 只有 15 行。而 Eval 的 diff 却变成了一个为期四天的迁移项目,且无人规划、无人负责,也从未包含在预算之内。

这就是 Eval 迁移税(Eval Migration Tax)。这是任何路线图都没有考虑到的维护成本,它以发布延迟的形式支付,而这些延迟往往被归咎于“不稳定的测试”(flaky tests),而非真正导致它们的架构选择。大多数团队在意识到这一模式之前已经支付了数年的代价,因为每一个单独的事件看起来都像是普通的日常损耗。只有当你统计一个季度内用于迁移 Eval 的工程小时数,并发现它们超过了用于改进 Eval 本应衡量的模型行为的时间时,这种复利效应才会显现。

回退级联:为什么你的 AI 功能需要五种故障模式,而非一种

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数 AI 功能发布时只有两种状态:正常工作和彻底挂掉。模型调用成功,功能就有响应;模型调用失败,用户就会看到错误。这相当于在构建 Web 服务时没有负载均衡、没有缓存,且只有一个数据库副本——在出事之前,它在技术上是可行的。

不同之处在于,工程师在 20 世纪 90 年代就学会了数据库弹性模式,并将其深刻内化。 AI 功能的弹性仍处于通过一次次生产事故进行艰难探索的阶段。一家支付处理器在一次时长 4 小时的 AI 停机中损失了 230 万美元。一家物流公司在其路由模型宕机时,错过了 30,000 个包裹的交付窗口。这两起失败都有一个共同的根本原因:当主模型不可用时,没有可以回退的方案。

上线 AI 功能后的头 100 个工单

· 阅读需 12 分钟
Tian Pan
Software Engineer

AI 功能上线后的 Bug 数量并非质量问题。它是一个发现序列——一个非常可预测的序列,以至于你可以在发布公告发布之前,在白板上逐周、逐个工单地勾勒出来,并且在仪表盘数据跟上时,你会发现自己预测得惊人地准确。每个上线 AI 功能的团队都会经历这个序列。唯一的选择是,你是带着操作手册(runbook)去执行,还是通过一系列临时的紧急会议来应对。

我已经观察了足够多的发布,足以相信这个序列实际上与工程质量无关。它关乎信息差。发布前,团队拥有合成流量组合、精选的评测集(eval set)、理想路径的演示和董事会演示文稿。发布后,真实用户带着合成流量从未模拟过的意图蜂拥而至,市场团队开展了工程团队仅略有耳闻的营销活动,模型提供商发布了未经团队授权的更改,而隐私审查员在功能上线时正在休假。下面的序列就是当这两个世界碰撞时产生的摩擦。

人工审核队列是你的 P0 SLA:当 HITL 成为瓶颈时

· 阅读需 13 分钟
Tian Pan
Software Engineer

第一次事故很少表现为系统宕机。它通常是来自客户成功团队的一条 Slack 消息:“嘿,我们还好吗?在过去的一小时里,有五个客户升级了工单,这些工单在‘待审核’状态下已经躺了超过一天了。”你检查了模型延迟仪表盘。绿色。你检查了智能体(Agent)的成功率。绿色。你检查了单次调用成本图表。健康。你监测到的一切指标都正常。出故障的是一个你的监控栈根本不知道其存在的队列,负责该队列的人员其日历不在你的容量规划器的读取范围内,而管理它的 SLA(服务等级协议)甚至从未被书写下来。

那个队列就是你的人机回圈(human-in-the-loop, HITL)升级路径。你在三个月前为了“安全起见”添加了它——当智能体在极少数情况下置信度较低或操作风险较高时,它会将案例移交给人工审核员。上线之初,它每天可能只处理十几个条目。运维团队在处理其他任务的间隙就能搞定它们。它曾是一个兜底方案,而不是一个系统。如今,它正在处理数千个条目,解决时间的中位数翻了三倍,排队等待的客户正在悄无声息地流失。HITL 路径本身并没有失效。它只是不再被当作生产环境来对待了。

LLM 作为验证器的反模式:为什么你的 AI 质量门禁存在盲点

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 AI 功能上线时带有一个质量门禁:每个回复都会经过一个 GPT-4 提示词,根据帮助性、准确性和语气进行评分。绿色分值不会触发报警。仪表盘显示通过率为 97%。与此同时,你的支持工单翻了一倍。

问题出在结构上。你使用了与生成输出相同类型的系统来验证这些输出。当生成器产生一个听起来很合理的虚假事实(幻觉)时,基于相同互联网文本分布训练的评判模型会认为这个幻觉是可信的并予以通过。两个模型共享相同的盲点。你的质量门禁衡量的是置信度,而非正确性。

你遗漏订阅的模型提供商 Webhook 通知

· 阅读需 12 分钟
Tian Pan
Software Engineer

我的团队第一次发现我们依赖的模型即将退役时,是从客户那里得知的。弃用通知邮件躺在一个被三名工程师退订了的共享收件箱里。提供商的状态页上挂着横幅。Webhook 事件发射到了虚空中,因为我们从未配置过接收端。60 天的预警时间,被我们浪费成了 0 天,最终以一场停机事故和塞满“紧急迁移”同步会的日程表收场。

我交流过的大多数团队目前都处于这种状态,只是他们自己并不知道。每个主流 LLM 提供商都在悄悄构建通知层面 —— 针对故障的 Webhook、变更日志中的弃用事件、通过电子邮件发送的账户警告、账单异常提醒、区域故障转移信号 —— 而大多数团队要么禁用了这些功能,要么将其路由到了一个没人看的邮件列表。提供商一直在提前告诉你坏消息。是你选择不去听。

智能体管道中的并行陷阱:扇出为何让延迟更糟

· 阅读需 9 分钟
Tian Pan
Software Engineer

你的智能体管道很慢,于是你把任务拆分给五个并行子智能体。p50 下降了,你把它上线了。三天后,告警响了:一批用户请求超时。你挖进去发现 p99 从 4 秒涨到了 22 秒。单个智能体本身没有任何变化。超时是因为编排层在等最慢的那个——它以 1% 的概率遇到了检索抖动,但现在任何触碰全部五条路径的请求都会遇到这个概率。

这就是并行陷阱:这个模式看起来是显而易见的提速方案,实则以一种伤害真实用户更多的方式重构了延迟分布,p50 的改善远不能弥补 p99 的恶化。在生产基准测试中,单个智能体在 64% 的评估任务上能匹配甚至超过多智能体管道。并行扇出奏效的时候,确实奏效得很干净——但仅限于特定类别的问题。把扇出当作默认选项,才是错误所在。