跳到主要内容

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

查看所有标签

为什么你的语音智能体显得很没礼貌:话轮转换是你从未记录过的延迟预算

· 阅读需 12 分钟
Tian Pan
Software Engineer

当你第一次发布语音智能体(voice agent)时,你会听到两个相同的抱怨:“它打断了我”和“它感觉很不礼貌”。这两者其实是同一个 Bug。智能体并不是真的没礼貌——它只是在运行一个你从未明确记录过的延迟预算(latency budget)。聊天机器人那种“在输入完成后响应”的直觉,在语音场景下会产生一种挫败感:就像在和一个人聊天,他总是打断你的话,又在不该沉默的时候突然安静。

人类在对话中的轮换(turn-taking)通常发生在约 100 到 300 毫秒的窗口内,这在所有已测量的语言中都是一致的。中位数 200ms 的说话者间隙不是一个目标,而是一个人类校准的基准。任何更慢的反应都会被解读为困惑,任何更快的反应都会被解读为打断。如果语音智能体没有明确模拟这种节奏,每一轮对话都会掉进这两个坑里的其中一个。

解决方案不是用更快的模型,而是承认语音 AI 是一个软实时系统(soft real-time system),其预算由人类对话的物理特性决定,并在发布前记录下这个预算。

为什么 AI 生成的注释腐烂得比代码还快

· 阅读需 12 分钟
Tian Pan
Software Engineer

当智能体(agent)在同一个 diff 中编写函数和注释时,该注释并不是文档。它是代码在编写时的转述,由同一个模型从同一个上下文中生成。当代码第一次发生变动时,它就会悄然出错。函数被重构,参数类型改变,或者添加了提前返回(early-return),但注释却保持不变。到下个季度,注释所编码的规范已不再与代码匹配,而下一位读者会因为注释更易读而选择相信它。

这是一个古老的失效模式 —— 人类修改代码,注释保持陈旧 —— 但智能体从三个维度同时加速了这一进程。注释量增加了,因为智能体无论是否需要,都会给每个函数添加文档块(doc block)。注释的语法非常完美,所以审阅者不会将其标记为低质量。而且,注释用与代码实际执行不同的术语来转述代码,因此它们看起来像文档,但实际上编码了第二套规范,这套规范独立于第一套规范而漂移。

辩论多样性坍塌:当三个智能体投出 3-0 只因它们读过同样的互联网

· 阅读需 13 分钟
Tian Pan
Software Engineer

架构图上写着“三个前沿模型集成、辩论与对齐、多数投票”。追踪记录显示,所有三个智能体在第一轮就达成了一致,并又花了两个回合礼貌地互相转述。评估结果显示比单次调用高出 0.4 分。账单显示成本是 4.2 倍。在这其中的某个环节,有人判定这个委员会运作良好。

多智能体辩论被宣传为一种获取分歧驱动推理的方法:三个大脑相互争论,以获得比其中任何一个单独达到的更好的答案。但这取决于智能体是否真的存在分歧。在重叠的网络语料库上训练、针对重叠的偏好数据集进行指令微调、并针对重叠的安全分类法进行对齐的前沿 LLM,其共享的先验知识远比架构图所承认的要多。在经过一轮“让我们达成一致”之后,你观察到的并不是三种观点向真理汇聚——而是来自同一个分布的三个样本向它们原本就相距不远的众数汇聚。

这种模式在最近的文献中有一个名字:当一个集成的投票分歧率趋于零且与问题难度无关时,你就遇到了辩论多样性崩塌(debate diversity collapse)。委员会仍在投票。但投票已不再携带任何信息。

Prompt 迭代中的“局部最大值”陷阱:如何判断你调错了地方

· 阅读需 12 分钟
Tian Pan
Software Engineer

在一个严肃的 LLM 项目进行到第六周时,总会有那么一个时刻,Prompt 迭代日志开始变得像一本心理治疗日志。每一次微调都是在用一种失败模式交换另一种。增加一个更严格的 “do not”(不要)条款,模型在以前能处理的情况下就开始回避。放软语气,另一类幻觉又回来了。评测得分板在三四个点的范围内徘徊,拒绝突破。有人说,“让我再试一次重新排序,”于是又是半天时间烟消云散。

这就是局部最优陷阱(local-maximum trap)。团队正在爬山,但这山头已经到顶了。残忍的是,这座山是真的——每一次 Prompt 的改动确实会在某些案例子集上产生可衡量的变化,而这正是让每个人持续微调的信号。被忽略的是:上方的天花板根本不是 Prompt 的天花板。

采纳率是一个虚荣指标:你的 Copilot ROI 隐藏在敲击键盘后的 90 秒里

· 阅读需 12 分钟
Tian Pan
Software Engineer

仪表板显示,你的工程师在上个季度采纳了 45% 的 AI 建议。管理层将其解读为“节省了开发人员 45% 的时间”,并签署了续约合同。与此同时,工程师们正在悄悄重写他们采纳内容的一半,调试另一半,并纳闷为什么他们的 Sprint 看起来还是和以前一样长。双方都在看同一个数字,但只有其中一方看对了数字。

2025 年引用次数最多的这项研究,本应单枪匹马地终结“厂商仪表板时代”。METR 衡量了经验丰富的开源维护者在有无 AI 的情况下,处理自己代码库中真实问题的表现。开发者预测 AI 会让他们提速 24%。实验结束后,他们仍然认为 AI 让他们提速了 20%。但秒表显示他们慢了 19%。故事与数据之间存在 39 个百分点的差距——而季度评审中采用的正是那个“故事”。

智能体能力悬崖:为什么你的模型升级让简单的 95% 变得完美,却让困难的 5% 成了你最糟糕的季度

· 阅读需 13 分钟
Tian Pan
Software Engineer

你上线了新模型。综合评估通过率从 91% 提升到了 96%。产品团队在全体员工大会上宣布这是一次重大胜利。六周后,可靠性团队却迎来了有史以来最糟糕的一个季度——并不是因为故障变多了,而是因为现在每一个故障都需要三名工程师花上两天时间才能解决。

这就是智能体能力悬崖 (agent capability cliff),它是生产环境 AI 中最反直觉的失败模式之一。模型升级并不会均匀地提升所有任务的表现。它们将增益集中在大部分流量上——即那些旧模型原本就能在大部分时间内处理正确的简单和中等案例——而长尾中真正困难的输入却只看到了微乎其微的改进。你的失败面缩小了,但剩下的每一次失败都是能力边界案例,这些案例旧模型也处理不了,而且简单的提示词工程 (prompt engineering) 也无法修复。

这个“悬崖”并不是新模型的缺陷。它是我们衡量模型改进的方式(混合难度评估集的平均通过率)与值班排班中实际遇到的问题(最难流量的残差集,现在已经没有了以前占据主导地位的简单故障的缓冲)之间的不匹配。

Agent 延迟预算是树而非线 —— 你一直在错误的维度进行调试

· 阅读需 14 分钟
Tian Pan
Software Engineer

用户报告“今天早上助手感觉很慢”。值班工程师调出火焰图,按持续时间降序排列工具调用,找到了最慢的一个——耗时 2.1 秒的向量搜索——将其优化到 900ms,发布修复补丁,并将事件标记为已解决。一周后,同样的投诉再次出现。向量搜索仍然是 900ms,但该查询类型的端到端延迟实际上变得更糟了。火焰图中没有任何内容能解释原因。

这就是当工程师在“线”轴上调试一棵“树”时所发生的情况。Agent 延迟不是一系列顺序步骤的瀑布——它是一个由规划调用、工具子树、并行扇出、重试和递归子 Agent 组成的嵌套树。当预算是结构化的,而工具却将其视为线性的,局部优化就会错过真正的违规点,而违规点存在于时间如何分布在各分支中,而不是任何单个调用耗时多久。你可以让每个叶子节点都变得更快,但交付的 p99 却仍在恶化。

你的 AI 产品在需要另一个模型之前,更需要一名 SRE

· 阅读需 10 分钟
Tian Pan
Software Engineer

我在陷入困境的 AI 团队中看到的最显著模式,是他们复杂的模型栈与原始的运营水平之间的差距。一个团队可能在生产环境中运行三个前沿模型,背后是自定义路由逻辑、包含八个检索阶段的 RAG 流水线,以及一个调用二十个工具的智能体。但与此同时,他们没有轮值制度、没有 SLO、没有运行手册,甚至只有一个 #incidents Slack 频道,在那里的提示词是由当时刚好醒着的某个人进行实时热修复。该产品运行在 2026 年的模型基础设施和 2012 年的运维基础设施之上,而这种差距每周都会导致另一次故障。

当问题出现时,本能反应是去拨动模型杠杆。质量下降了?试试新版本。延迟激增了?换个供应商。生产环境中出现幻觉?再加一个护栏提示词。这些都无法解决根本问题,即没有人将系统的可靠性作为一种专业规范来负责。这些团队真正需要的——通常在他们需要另一位应用科学家之前——是他们的第一位 SRE。

基准测试泄露:你的评估集是如何悄悄加入训练语料库的

· 阅读需 13 分钟
Tian Pan
Software Engineer

你最信任的基准测试极有可能正是在对你撒谎。公开评估是一个闭环:你发布测试,有人抓取它,下一代模型在抓取的数据上进行训练,于是你信任的衡量标准的分数在没人触碰底层能力的情况下提高了 10 分。测量体系保持不动,而它所测量的对象却在下方发生了偏移,“模型在这个基准测试上表现更好”与“模型在这个任务上表现更好”之间的差距每个季度都在拉大。当这种分歧明显到足以引发争论时,该评估已经发布了六次排行榜更新和三个产品路线图,而这些都假设那个数字是有意义的。

这并非一种假设性的失败模式。非公开的预 RLHF 版 GPT-4 基础模型已被证明能够逐字重现 BIG-Bench 的 canary GUID,Claude 3.5 Sonnet 也是如此,这都表明原本应该被隔离的任务数据最终进入了训练。大约 40% 的 HumanEval 样本被确定为已污染,从 GSM8K 中移除污染子集后,测得的准确率下降了约 13 分。SWE-bench Verified 目前显示有记录的数据泄漏率为 10.6%,OpenAI 在 2025 年末其内部审计发现每个主要的前沿模型都能为某些任务逐字复现金标准补丁(gold patches)后,公开停止了对其的报告。我们用来比较模型的数字正越来越多地变成关于记忆力的数字,而不是能力的数字。

对话历史是你的提示词从未承认的负担

· 阅读需 12 分钟
Tian Pan
Software Engineer

下次当用户抱怨“AI 今天变笨了”时,去看看你产品的分析数据。筛选出对话轮次超过 20 轮的会话。你会发现每次都是同样的 U 型曲线:前几轮表现良好,中间几轮表现也不错,而到了后期轮次,质量却直线下跌。提示词没变,模型也没变。变化的是,后期每一轮对话都背负着沉重的载荷:用户的拼写错误、话说到一半的废话、模型的模棱两可、后来被撤销的更正、没人重读的工具输出,以及用户在第四轮就放弃了的目标残余。你的提示词模板把这些“沉积物”当成了信号,模型也是如此。但这不应该。

对话历史并非免费的上下文。它是一种你每一轮都在付费重新发送的负债;它变得越混乱,就越会损害你向用户收费提供的答案。“聊天”这个隐喻是混乱的根源。聊天界面让用户和工程师习惯于将记录视为神圣不可侵犯的 —— 可滚动的、仅限追加的、从不重置。这种习惯被原封不动地引入了 LLM 应用中,尽管在模型处理上下文的物理机制上并没有这种依据。模型是无状态的。对话记录只是你选择不断拉长的一段字符串。你可以缩减它,而且通常你应该这样做。

演示循环偏见:你的开发流程如何悄然演变为针对“有魅力的失败”进行优化

· 阅读需 12 分钟
Tian Pan
Software Engineer

每个 AI 产品团队都会有一种特定的会议,通常发生在周四。有人共享屏幕,在 notebook 里输入一个 prompt,然后运行三四个例子。房间里的人反应热烈。大家惊叹“哇”。有人截图发到 Slack。决策就这样做出了——上线、更换模型、调整 temperature。没有人记录失败率,因为根本没人去衡量它。

这就是演示循环(demo loop),它带有一种几乎没有团队意识到的结构性偏见:它筛选的不是最佳输出,而是最“易读”的输出。几周或几个月下来,你的 prompt 不断演进,最终生成的是那些能“在会议中镇住场面”的答案——自信、流利、格式整齐、切中主题。至于它们是否正确,则是另一个变量,而你的流程并没有衡量这个变量。

其结果就是我所说的“有魅力的失败”(charismatic failure):输出结果在某些方面是错误的,但由于选择压力,你的演示循环已经被训练得会自动忽略这些错误。

“以后再加评估”的陷阱:测量债务如何产生复利效应

· 阅读需 10 分钟
Tian Pan
Software Engineer

每个在没有评估(evals)的情况下发布 AI 功能的团队都会对自己讲同样的故事:我们会以后再添加衡量标准,等到找到产品与市场契合点(PMF)之后,等到提示词(prompt)稳定之后,等到下一次发布之后。六个月后,提示词已经被四位工程师和两名产品经理修改过,其行为支撑着三个客户集成,团队发现“以后添加评估”意味着要从从未为此目的结构化过的生产日志中重建意图。本应开发新功能的季度变成了考古季度。

这不是规划错误。而是一个复利错误。为了更快发布而跳过评估的团队,正是那个将花费十二周时间从不完整的追踪(traces)中重建评估基础设施、为二月份所谓的“正确”含义争论不休、并悄悄移除没人能证明依然有效的功能的团队。追赶的成本超过了内置的成本——不是一点点,而是随着每一次未经回归检查就发布的提示词修改而倍增。