跳到主要内容

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

查看所有标签

覆盖率幻觉:为什么 AI 生成的测试会继承代码的盲点

· 阅读需 10 分钟
Tian Pan
Software Engineer

一位小团队工程师花了三个月将测试生成委托给 AI。代码覆盖率从 47% 跃升至 72%,再到 98%。每次 PR 都返回绿色。然后生产环境崩了。用户注册中的竞态条件因数据库复制延迟导致重复邮箱。优惠码接口在代码无效时返回 null 而非零,导致支付计算对 4700 名客户静默出错。最终损失:4.7 万美元退款和 66 小时工程时间。测试并没有遗漏几个边界情况——它们覆盖了所写的代码,而非所部署的系统。

这就是覆盖率幻觉。随着 AI 辅助开发成为默认选项,落入这个陷阱正变得越来越容易。

思维链的两种失败模式,无人谈及

· 阅读需 10 分钟
Tian Pan
Software Engineer

思维链提示(Chain-of-thought prompting)本是为了解决语言模型的黑箱问题。展示推理过程,验证每个步骤,理解模型如何得出结论。这个想法直觉上是对的——而这恰恰是问题所在。它感觉太显然正确了,以至于从业者将可见推理链部署到生产系统中,却没有追问一个更难的问题:如果展示推理过程反而让事情变得更糟,该怎么办?

2024年至2026年间的研究已开始系统性地记录这种"更糟"究竟是什么样子。可见推理链导致了两种截然不同的失败模式,在生产环境出现问题之前往往被忽视。第一种是用户侧问题:中间推理步骤会在用户看到最终答案之前,将其锚定于可能错误的结论。第二种是系统层问题:推理追踪制造了审计追踪的假象,而作为模型实际决策过程的解释,它从根本上是不可靠的。

副驾驶陷阱:为什么全自动驾驶交付更快但失败更惨

· 阅读需 11 分钟
Tian Pan
Software Engineer

AI 功能在生产环境中夭折有一种典型的模式:它们最初是作为副驾驶 (copilot) 启动的,然后被晋升为自动驾驶 (autopilot)。这种晋升的原因显而易见——降低成本、扩大规模、减少人力——而且这些理由在演示阶段听起来非常充分。随后,边缘情况 (edge cases) 开始积累。面向用户的推荐变成了面向用户的决策。建议变成了行动。当第一次系统性失败降临时,工程团队才发现,最初设计中预设的容错假设从未被重新评估过。

这就是“副驾驶陷阱”:针对自动化频谱的某一个层级构建 AI 功能,然后在没有重建该层级所需的故障模型的情况下,将其强行提升到更高层级。

复制粘贴传染病:AI 辅助开发如何传播架构反模式

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的代码库中有三种不同方式实现的身份验证逻辑,而且团队中没人在写过其中任何一种。通过 git blame 快速查看,发现这三个文件都出自同一位工程师之手,但去问那位工程师,他们会告诉你他们只是接受了 AI 的建议,而且看起来“没问题”。这种反模式的蔓延并不是因为有人偷懒,而是因为一个对你现有认证模块毫无记忆的 AI 模型,在每次有人打开新文件寻求帮助时,都生成了看起来合理的实现。

这就是“复制粘贴传染病” (copy-paste contagion),它在结构上与你已知如何应对的经典复制粘贴问题完全不同。

动态系统提示词组装:请求时可组合的 AI 行为

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队一开始都用一个单一的、庞大的系统提示词。在演示时效果不错。然后产品不断增长:你添加了付费用户层级、企业客户的合规模式、模型可以调用的新工具,以及增长团队想要 A/B 测试的功能开关实验。所有这些都被塞进同一个提示词里。六个月后,你有了 4000 个词的指令,没有人能完全理解,编辑某个部分时行为会不可预测地改变,而调试过程不过是"改点什么看看会发生什么"。

大多数团队会转向可组合的、动态组装的系统提示词——在请求时从模块化组件构建提示词,而不是维护一个静态文本文件。这是一个合理的架构直觉,但实现的复杂度比看起来要大得多。可组合提示词引入了一类静态提示词根本不存在的新型故障模式。

专业知识悬崖:AI 编码智能体为何在成熟代码库中失效

· 阅读需 9 分钟
Tian Pan
Software Engineer

2025 年的一项对照实验让有经验的开发者使用了 AI 编码工具,并测量他们是否变得更快。开发者们预测效率会提升 24%。研究结束后,他们报告自己大约快了 20%。而客观测量显示,他们实际上慢了 19%

这并不是一个关于 AI 过度炒作的故事。这是一个关于隐性知识的故事——那种存在于每个成熟代码库中、仅靠阅读代码无法恢复的、无文档记录的"为什么"。AI 智能体在全新系统中生产效率出奇地高,正是因为那里几乎没有隐性知识可以违反。它们在成熟代码库中退步,原因完全相同。

反馈溯源鸿沟:为什么你的训练信号可能并非你所采集的原始数据

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队在反馈采集端的检测体系都非常完善。点击“踩”的操作会被记录,星级评分会流入仪表板,人工标注任务会将每一组偏好对写入表格。数据摄入过程干净、带有时间戳且可查询。

在采集到反馈与下一次模型更新之间所发生的一切,对大多数团队来说都是一个黑盒。

数据被过滤。某些标注的权重被调高。稀有类别被上采样。近重复项被删除。提示词模板的更改导致上个月的标签与本月的不一致,但合并依然在进行。当信号到达奖励模型或微调任务时,它已经通过了 6 个转换步骤,没有审计追踪,没有版本锚定,也无法将退化的模型权重溯源到流水线中特定的损坏点。

这就是反馈溯源鸿沟(Feedback Provenance Gap):团队知道反馈从何处进入系统,但不知道它在塑造模型行为之前变成了什么。

LLM 中的图推理缺陷:为那些令序列训练模型困惑的关系任务构建脚手架

· 阅读需 10 分钟
Tian Pan
Software Engineer

AI 系统设计中一个常见的错误是要求语言模型像阅读文档一样对图(graph)进行推理。模型会生成一个自信且流利的答案。但这个答案会以一种看起来正确的方式出错——它会列出真实的节点,引用看似合理的路径,并描述几乎存在的关系。接着你会发现,你的组织架构遍历幻觉出了越级经理,你的依赖项解析忽略了超过十个节点的图中的循环,而你的三跳知识图谱查询在第二步时的错误率就达到了 60%。

这不是提示词(prompt)质量的问题。这是一个架构问题,你可以在编写任何提示词之前就诊断出它。

隐形的交接:为什么生产环境中的 AI 故障集中在组件边界上

· 阅读需 10 分钟
Tian Pan
Software Engineer

当你的 AI 功能输出错误答案时,第一个问题总是:“是模型的问题吗?”大多数工程师会进行模型评估,运行几个测试提示词,并得出模型看起来没问题的结论。他们通常是对的。模型没问题。故障发生在其他地方——在你的组件相互通信的那些无形接缝处。

这一结论的证据是一致的。对生产环境 RAG 部署的分析显示,73% 的故障是检索故障,而不是生成故障。在多智能体系统中,最常见的故障模式是消息顺序冲突、状态同步间隙和 schema 不匹配——这些都不会出现在任何单组件健康检查中。GPT-4 在处理复杂的提取任务时,产生无效响应的比例接近 12%,这不是因为模型坏了,而是因为模型与下游解析器之间的输出格式契约从未被强制执行。

模型背了锅,边界才是元凶。

一致性鸿沟:为什么并行 LLM 调用会相互矛盾以及如何修复它

· 阅读需 13 分钟
Tian Pan
Software Engineer

想象一个处理用户支持工单的多智能体流水线。智能体 A 读取工单历史并认为用户是一个需要进阶回复的高级用户。智能体 B 在并行的调用中读取同样的工单历史,却认为用户是一个需要分步引导的初学者。两个智能体同时完成并将输出交给组合智能体——而现在,组合智能体必须调和这两个对同一个人的根本不兼容的心理模型。

这并非罕见的极端情况。分析生产环境多智能体故障的研究发现,36.9% 的失败是由智能体间的失调引起的:冲突的输出、移交过程中的上下文丢失,以及独立得出的不兼容结论。一致性鸿沟(consistency gap)——即并行 LLM 调用对共享实体产生相互矛盾的倾向——是智能体系统中被低估最多的失效模式之一。

Provider 行为指纹:模型切换中的隐性损耗

· 阅读需 9 分钟
Tian Pan
Software Engineer

当成本飙升、模型下线通知或竞争对手的基准测试迫使你更换 Provider 时,工程团队通常会在能力基准测试上评估候选模型,并将其视为迁移计划的全部。这个过程大约能捕获一半的问题。另一半并非能力问题,而是行为问题:那些不可见的格式习惯、拒绝模式、序列化怪癖以及输出约定——你的生产代码在数月迭代中已悄悄将其内化。

能力基准告诉你新模型能否完成任务。行为指纹告诉你你的代码库能否承受这次替换。

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

· 阅读需 10 分钟
Tian Pan
Software Engineer

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

欢迎来到发布顺序问题。