跳到主要内容

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

查看所有标签

没人构建的“从支持工单到评估案例”流水线

· 阅读需 11 分钟
Tian Pan
Software Engineer

每个运行 AI 功能的团队其实都正坐拥着他们所能拥有的最高信号评估数据集,但他们却没在利用它。这个数据集就在 Zendesk、Intercom、Freshdesk、Help Scout,或者任何支持团队工作的队列中。在那里提交的工单描述了模型在付费客户面前表现出的确切失败模式——语气错误、工具调用错误、违反政策、幻觉出的功能、上下文泄露。每一个都是由经历过失败的用户手写的、带有标注的负面案例,通常还免费附带了复现步骤和情绪标注。

与此同时,评估套件(Eval Suite)则存在于 Git 中。它是由半年前设置它的工程师手写的,从那时起可能只累积了大约五十个案例。“评估套件覆盖的内容”与“生产环境中实际出现的问题”之间的交集就像一张韦恩图,重叠的部分只有细细的一条,而两边则是互不相干的巨大圆圈。

随时间波动的质量偏移:为什么你的 AI 功能在东部时间上午 10 点表现不同

· 阅读需 11 分钟
Tian Pan
Software Engineer

太平洋时间凌晨 2 点,你的评估套件(eval suite)在平静的提供商环境下全绿通过。上线前一晚 11 点,QA 进行了冒烟测试。功能正式发布。到了周二上午 10 点(东部时间),你的 p95 延迟比你签字认可的仪表盘高出了 40%,你的智能体(agent)在一个包含六步的计划中丢掉了最后一个工具调用,而你的支持信箱塞满了听起来如出一辙的工单:“今天早上 AI 表现很奇怪。” 谁都没错。模型也没错。错的是评估集 —— 它从未见过饱和的提供商环境,因此对于当队列深度翻倍、截止时间预算(deadline budget)崩溃时功能会如何表现,它无法给出任何参考建议。

提供商负载不仅仅是一个伴随质量副作用的延迟问题。它是你的模型和智能体循环接收到的输入的一种分布偏移(distribution shift),而你所信任的每一个质量信号,都是建立在这个分布中错误的那一截之上的。解决办法不是换一个更快的区域或更好的模型。解决办法是停止假装你的评估框架是在与你用户相同的世界中进行采样。

工具 Schema 演进陷阱:当一个可选参数改变了你 Planner 的先验分布

· 阅读需 11 分钟
Tian Pan
Software Engineer

在某个周二,一个全新的可选参数被添加到了工具描述中。这个改动很小——在 diff 中只有六行代码,没有破坏性的签名变更,没有更新调用者,也没有触及任何评估用例。PR 描述写着“为现有搜索工具添加了可选的 language 过滤器支持”。两名评审员批准了,随后上线。

一周后,成本仪表板显示,搜索工具的调用频率比之前的基准线增加了 18%。受影响的 agent 延迟也以大致相同的比例攀升。没人能指出哪一个评估用例失败了。新参数在使用时表现正常;在不使用时,也无关紧要。然而,planner 显然改变了它对何时使用该工具的看法——而评估套件(用于衡量工具的“正确性”)对于工具“频率”的变化却无话可说。

你的 PRD 只是一个未经测试的 Prompt —— 直到你对其进行评测

· 阅读需 10 分钟
Tian Pan
Software Engineer

打开过去六个月内发布的任何 AI 功能的系统提示词(System Prompt),将其与授权该功能的 PRD 并排阅读。你会发现这两个文档在互相争吵。PRD 写道:“助手应该是提供帮助且专业的,避免胡编乱造,如果无法回答则体面地拒绝。”系统提示词则写道:“你是一个 AI 助手。保持简洁。如果不确定,说‘我不知道’。绝不捏造事实。”PRD 占了一整页。提示词只有九行。它们之间的鸿沟就是你本季度发布的所有行为 Bug 的所在地。

这种便利的虚构说法认为,提示词只是 PRD 的“实现细节”。实际关系恰恰相反。提示词是模型执行的契约;而 PRD 是由一个从未编译过它的作者用模型听不懂的语言编写的契约草案。每一个 AI 功能的 PRD 都是一个未经测试的提示词。那些承认这一点并在签字确认前通过评估(Eval)运行 PRD 的团队,发布的功能会少一个上线后产生意外的根源。

AI 功能依赖图:当提示词修改成为静默破坏性变更时

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个团队负责摘要生成器。另一个团队负责摄取这些摘要的搜索排序器。第三个团队负责一个路由,根据排序器的置信度分数在不同的智能体人格之间进行选择。这些团队都没有共同的值班轮换,也没有人参加同一个站会,他们之间唯一的契约就是“上一个功能的输出是下一个功能的输入”。周二,摘要团队收紧了一个提示词,以修复销售演示中反馈的幻觉问题。六小时后,搜索排序器的质量骤降。到周三早上,路由开始将任务交给错误的智能体人格。复盘报告会将原因记录为“提示词变更”,但实际原因是团队的 AI 功能已经悄然组成了一个没人绘制过的有向图。

这是最常见的 AI 故障形式,它不会触发你为 AI 故障构建的任何警报。模型没有宕机。被修改功能的评估套件显示为绿色。Token 成本曲线很平稳。真正断裂的是两个功能之间的接口,你的依赖工具将其视为纯文本,因为在 API 边界它确实只是纯文本——并且将其视为惰性的,因为纯文本不携带版本、Schema 或弃用策略。

标注偏移:评估集如何逐渐无法衡量你交付的产品

· 阅读需 11 分钟
Tian Pan
Software Engineer

上个季度评分 92% 的评估集(eval set)现在评分达到了 94%,团队称之为进步。事实并非如此。该评估集中的标签是根据标注员脑海中早已模糊的准则(rubric)编写的。模型评分所针对的产品已经发生了变化。标准已经发生了变化。标注员自身的校准(calibration)也发生了变化。表面上 2% 的提升,实则是静态产物与动态产品之间无声的差距,且只要团队不更新,这种差距每周都会扩大。

标注漂移(Annotation drift)是成熟 LLM 评估方案中一种隐蔽的失效模式。它不会表现为回归(regression)——回归是简单的情况,因为数值会下降,从而触发人员调查。它表现为一个持续显示绿色的数字,而其原本衡量的内容在底层已经腐烂。已经建立了评估集、编写了准则并招募了标注员的团队面临的风险最大,因为他们信任自己构建的系统,从而停止了对基础的审计。

非对称评估经济学:为什么一个测试用例的成本比它测试的功能还要高

· 阅读需 11 分钟
Tian Pan
Software Engineer

这是一个尴尬的事实,大多数 AI 团队在发现时往往已经晚了半年:一个精心设计的评估(eval)用例所耗费的工程精力通常比它要测试的功能本身还要多。修改一次提示词(prompt)只需要一个下午。而让你确信这次修改没有破坏原有功能的评估用例,则需要领域专家进行为期两天的标注,一个与裁判提示词(judge prompt)的校准循环,以及一场关于“正确”在当前用户界面下究竟意味着什么的讨论。功能可以在一个 Sprint 内交付,而让你能够安全交付后续十个功能的评估体系则需要一个季度才能成熟。

这种不对称性并非缺陷。它是评估工作的结构性形态。标注、边缘情况的策划、裁判校准和评分标准设计都是前置的固定成本,它们不随你交付功能的多少而扩展,而是随你想要验证的不同行为(behaviors)数量而扩展。与此同时,功能开发端不断产生看似廉价的边际输出:“又一次提示词迭代”、“为智能体增加了一个工具”、“更换模型”。每一个改动看起来都很微小。但每一个改动都在无声无息地增加评估集必须覆盖的范围。

Demo 到 Dogfood 的鸿沟:为什么你的 AI 功能死在了发布幻灯片与周一早晨之间

· 阅读需 12 分钟
Tian Pan
Software Engineer

演示进行得非常完美。全场鼓掌。两周后,同样的功能出现在公司内部使用的 Slack 中,到了周三,一位高级工程师发布了截图,配文是“有人测试过这个吗?”到了周五,频道变得寂静无声 —— 并不是因为 Bug 被修复了,而是因为那些本来会指出问题的人已经放弃了,回到了旧的工作流。发布计划仍在日程表上。没有人取消它。没有人拥有取消它的政治资本。

这就是从演示到内部试用(dogfooding)之间的鸿沟。MIT NANDA 计划去年对其进行了衡量,比例高达 95% —— 即在企业级生成式 AI 试点项目中,有 95% 未能产生可衡量的损益(P&L)影响,而几乎所有这些项目都有一个令人心动的演示。模型本身不是问题。演示与内部使用第一周之间的差距才是问题,每个发布过 AI 功能的团队都曾目睹过类似情形的上演。

嵌入模型迁移黑洞:向量模型升级如何悄然重写你的业务规则

· 阅读需 12 分钟
Tian Pan
Software Engineer

迁移工单只有一行:“将 Embedding 模型从 v3-small 升级到 v3-large。”新模型在公开基准测试(Benchmark)中胜出 12%。流水线代码改动只有六行 Python。团队预计需要两天的开发时间,加上一个周末就能跑完的重嵌入(Re-embedding)任务。两个月后,查重功能的误报率比更换前翻了一倍,“相关项目”栏目悄然变成了废话生成器,语义缓存的命中率更是断崖式下跌,因为在旧空间运行良好的 0.95 阈值在现在几乎匹配不到任何内容。

没人动过这些功能。没人提交过 Bug。这个在迁移计划中被归类为“基础设施”的模型切换,悄无声息地改写了每一个使用相似度得分的业务规则。

Eval 回填税:为什么每一次模型能力发布成本都超出了你的预算

· 阅读需 11 分钟
Tian Pan
Software Engineer

一名高管发了一封只有一行字的邮件:“好消息——我们在下个冲刺周增加视觉能力。”产品经理将其解读为一星期的工作量:更换模型、开放图像参数、发布。评估(Eval)团队读了同样的邮件,脑子里已经开始起草一份尚未获批的四周计划。到了周五,这种认知脱节在站会上表现为一句含糊的“我们需要做一些评估工作”,然后大家一致同意以后再解决。

这种在“我们添加了视觉能力”与“我们可以安全发布视觉能力”之间的鸿沟,就是评估补填税(Eval Backfill Tax)。每当新的模型能力落地时——多模态输入、工具使用、更长上下文、推理轨迹、电脑使用——这项工作就会悄无声息地落在评估团队身上。因为历史测试案例是在一个模型不会以这些新方式失败的体系下构建的。测试套件依然显示绿色,头条基准测试分数在上升,但生产环境的发布却暴露出了没人写过测试的失效模式。

评估总线因子:当定义“正确标准”的人离职时

· 阅读需 12 分钟
Tian Pan
Software Engineer

我最近合作的一个团队失去了一位资深机器学习工程师。两周后,每个 PR 的评估套件(eval suite)依然全绿——847 个案例全部通过,裁判一致性(judge agreement)达到 92%。六周后,一位客户发现了一个回归问题,而这个问题本该被“支持质量”桶里的第一个评估案例捕获。当团队进行调试时,没人能解释为什么要写那个案例,它本该捕获哪种失败模式,或者为什么裁判提示词(judge prompt)是按 1–4 分评分而不是二元评分。那个案例依然通过了,但它并没有测试任何有人能说清楚的东西。

这就是评估的公交车系数(eval bus factor):一种无声的失败模式。在这里,决定 AI 功能“正确”含义的人,也是策划测试用例、校准裁判模型并吸收了大脑中每一个隐含标注权衡的人。当他们离职时,评估套件虽然依然保持绿灯,但却不再能产生可靠的发布/拒绝信号——因为没有其他人能扩展它、调试不稳定的裁判,或评估新的失败模式是否属于测试集。

评测分诊队列:为什么 FIFO 会错过那些至关重要的失败

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个健康的评估集(eval set)本应是成熟的标志。但在任何一个周一,它也可能意味着排队等待的 1,000 个失败案例,而人工审核员只有 8 小时,且每个案例的处理效率大约是 50 个。这笔账很残酷:大约每 20 个失败案例中只有一个会被阅读。剩下的 19 个只能等待。至于哪 19 个在等,哪一个能被选中,完全取决于文件加载的顺序。

大多数团队将其称为“审核失败案例”。但它更像是一场按字母顺序加权的抽奖。一个影响 2% 生产流量且位于文件顶部的失败案例会得到关注。而一个影响 40% 生产流量但位于文件底部的失败案例,即便能被看上一眼,也要等到周五下午。团队在周二发布了针对小问题的修复方案,并在周四写了一份回顾(retro),纳闷为什么仪表盘上的指标毫无变化。