跳到主要内容

区分优秀AI工程师与普通工程师的思维模型转变

· 阅读需 11 分钟
Tian Pan
Software Engineer

在AI工作中遇到困难的工程师,最常见的问题不是缺乏技术知识,而是他们一直在问错误的问题。他们想知道的是:"这能用吗?"但他们真正应该问的是:"这个系统的失败率是多少,这个失败率对于这个使用场景来说是否可以接受?"

这一转变——从二元正确性转向可接受的失败率——是有经验的AI工程师思考问题的核心差异。听起来简单,其实不然。由此延伸的一切都是不同的:你如何调试、如何测试、如何部署、监控什么、以什么为信心基础。没有完成这一转变的工程师会一直在与工具对抗并且不断失败。

确定性陷阱

传统软件工程师被训练追求确定性。一个函数要么返回正确答案,要么不返回。Bug是可重现的。给定相同输入,得到相同输出。测试要么通过要么失败。思维模型是:找出问题所在的代码行,修复它,完成。

这整套框架在AI系统中完全失效。当你用非零温度对同一个提示词运行两次LLM时,你会得到不同的输出。当你在测试中得到50个成功响应,然后在生产环境中看到一个奇怪的失败时,没有堆栈跟踪指向某行代码。这个"bug"可能无法重现。这个失败可能只在特定的上下文长度、用户措辞和之前对话状态的组合下出现,而这种组合在你的测试集中从未见过。

优秀的确定性工程师遇到AI系统时,会立即尝试应用同样的思维模型。他们试图枚举边界情况,而不是考虑长尾分布。他们试图"修复"行为,而不是描述失败率并决定是否可接受。他们通过测试直到看到足够多的成功来建立信心——而不是通过测量输出的分布。

结果:他们不断被生产故障所惊讶。每一个错误输出都感觉像是如果测试再多一点就能发现的问题。他们没有意识到,在概率性系统中,更多测试不是正确的做法——更好地测量才是。

概率性系统有长尾,而非边界情况

这是关键区别。确定性软件有边界情况——代码行为异常的输入。边界情况可以被完全枚举、测试和修复。概率性软件有长尾——输入分布中输出分布以你无法预测的方式偏移的区域,这些偏移在部署前无法完全预料。

在概率性系统中,你无法通过枚举来保证安全。你无法写出足够的测试用例来覆盖"用户可能输入的每一件事"。你可以做的是:

  • 从真实输入分布中采样,并测量代表性切片上的失败率
  • 定义阈值:"我们在金融查询上的幻觉率必须保持在3%以下"
  • 在生产环境中持续监控这些指标
  • 将降级视为调查信号,而不是立即修复的bug

这就是为什么有经验的AI工程师会尽早建立评估基础设施。这不是可有可无的。这是他们拥有的唯一仪器。传统软件工程师的"它正确吗?"直觉被替换为"我关心的失败模式的精确率/召回率是多少,我的错误预算是多少?"

Anaconda团队构建Python调试助手时,发现评估驱动的开发将成功率从接近零提升到了各任务类型的63-100%。改进不是来自更好的提示词,而是最终有了一个系统能够测量真正失败的地方和原因。

开始调试前需要掌握的故障分类法

当LLM输出错误时,根本原因只有几种。有经验的AI工程师已经将这些内化为一个心理分类法,可以立即缩小搜索空间。没有这个分类法,调试就变成了猜测。

检索失败。 模型在上下文中没有它需要的信息。当上下文不足时,它可能会产生听起来自信的错误答案,因为这就是它的做法。修复:改进检索,添加相关上下文,或对低上下文查询实现弃权。

提示词敏感性。 模型的输出根据措辞高度可变。请求措辞的小改动会产生截然不同的行为。修复:系统地测试提示词变体;思维链等结构化提示格式可以显著降低这种方差。

分布偏移。 模型在与当前看到的不同的分布上进行了优化。这是静默的——系统继续运行并产生自信的输出,而准确性在下降。修复:针对生产流量的持续评估,而不仅仅是离线测试集。

上下文衰减。 在多轮对话中,对话早期建立的约束和指令随着上下文填充而"被遗忘"。修复:明确的状态管理、在后续轮次中强化关键约束,或战略性地总结和压缩上下文。

指令遵循失败。 模型理解了请求但未能遵循系统提示中的指令。通常与规则冲突或争夺注意力的长系统提示相关。修复:审查你的提示词是否有矛盾的规则;尽可能分解成更简单的子任务。

当出现失败时,有经验的AI工程师会快速浏览这个分类法。每种情况的修复方法完全不同。将它们都视为"模型错了,让我调整提示词"是浪费数周时间的业余做法。

分布偏移意识是大多数团队跳过的技能

分布偏移是即使具有良好评估覆盖率的团队也会遭遇的故障模式。原因如下:你可以在精心策划的评估集上有95%的成功率,同时在评估集无法代表的特定生产流量切片上严重降级。

这种情况经常发生。一个团队构建客户支持代理,并对历史支持工单进行广泛测试。生产流量偏向他们推出的新产品线,词汇和问题类型不同。评估指标看起来很好。用户满意度下降。没有人在三周内发现这个问题。

这里的技能是:

  • 思考谁生成了你的评估数据。 如果你从历史日志中提取,它对现在流入的内容有多代表性?如果你合成生成,它是否覆盖了用户发现的真实边界情况?

  • 持续分片监控。 不只是"整体准确率是多少?"而是"关于主题X的查询、地区Y的用户、超过N轮的会话的准确率是多少?"

  • 理解偏移类型。 协变量偏移是指输入分布改变(新措辞、新话题)。概念偏移是指输入和正确输出之间的关系改变(你对"好响应"的定义演变了)。两者在日志中看起来一样,直到你分解它们。

最难的情况是新颖分布——用户询问你的系统从未设计处理的事情,方式你从未想象过。这些会产生最戏剧性的失败,并且最难被任何静态测试套件捕获。

输出方差容忍度是一个刻意的设计决策

有经验的AI工程师已经学会将输出方差视为他们主动控制的参数,而不是需要最小化的麻烦。这很微妙,但对你的构建方式影响巨大。

低方差听起来很理想。但并非总是如此。强制非常低的方差(激进的温度降低、结构化输出约束、刚性后处理)可以使你的系统更一致,但也更脆弱。拒绝处理狭窄预期范围之外的任何内容的系统,在长尾输入上会严重失败,而这些情况往往恰恰是用户最需要处理的情况。

错误位置的高方差也很糟糕——如果你在提取结构化数据而模式合规率为80%,你的管道就坏了。但如果你在生成内容初稿,方差意味着用户获得多样化、非公式化的结果,那就是一个特性。

区分优秀工程师的实践:他们按类别明确测量方差,并根据使用场景决定是否可以接受。他们不试图全局降低方差。他们选择自己的战斗。

他们也知道,如果在温暖、充分运行的测试环境中测量,方差数字会说谎。提示词缓存预热对生产中的输出一致性有巨大影响。每个请求的缓存与生产不同的暂存环境会给你提供极度乐观的方差数字。

评估优先思维:真正压缩学习曲线的实践

我交谈过的每位高级AI工程师都推荐同样的事情:在写第一个提示词之前先构建你的评估基础设施。这个建议对来自传统软件的工程师来说似乎是倒退的,因为他们习惯于先写代码后写测试。在概率性系统中,这是取得非虚假进展的唯一方法。

原因如下:没有评估基础设施,你是在靠感觉工作。你的提示词更改感觉富有成效,因为你可以挑选改进的例子。你无法判断你是让事情变得更好、更差还是只是不同。这就是为什么团队花几个月迭代提示词并感觉在取得进展,却发现用户满意度没有变化。

评估优先工作流程如下:

  1. 在开始之前定义失败是什么样子。 系统可能做的最糟糕的事是什么?什么是可以接受的?将这些写下来作为可评估的标准,而不是散文要求。

  2. 尽早构建平衡的数据集。 目标是成功案例和应该失败的案例大致相等。如果你的评估案例中95%是成功的,你对失败模式没有信号。

  3. 自动化评估循环。 即使粗略的LLM作为评判者的评估也比手动检查好。让循环足够快,可以在每次提示词更改时运行。

  4. 随时间跟踪指标,而不只是快照。 单次评估运行无法告诉你是否在改进。历史记录告诉你变更是否有帮助或正在偏移。

从一开始就采用这种方法的团队比后来才加入的团队表现更好——不是略好,而是显著更好。实际差异体现在能够知道变更是否真正有帮助,而不只是希望如此。

思维汇聚:系统,而非模型

真正有经验的AI工程师的更深层转变是,他们已经从优化模型转向优化系统。这听起来显而易见,其实不然。这几乎改变了每个设计决策。

当你在优化模型时,你专注于提示词。更好的提示词、更多的示例、精炼的指令。模型是优化单元,生产是它的评估环境。

当你在优化系统时,你将模型视为一个组件——概率性的、不透明的、从根本上超出你控制的——并围绕这些属性设计系统。你添加检索以给模型提供它无法幻想的信息。你添加结构化输出约束以减少重要的方差。你添加评估基础设施来测量模型实际在做什么。你添加监控以在其行为偏移时捕获。

模型不是要训练成正确的东西。它是一个具有已知故障概况的组件,你围绕它进行工程设计。这种重新框架解锁了使AI系统在规模上可靠的模式:分层防御、回退路径、弃权逻辑、结构化验证以及针对生产流量的持续评估。

完成这种转变的工程师不再被AI故障所惊讶。他们预测了故障概况,围绕它进行设计,并建立了在现实偏离设计时能够捕获的仪器。这就是区分他们与其他人的地方。


思维模型的转变不是戏剧性的。没有人宣布他们开始概率性思考的那一刻。但回顾起来,工程师一致将其认定为一切开始清晰的转折点:调试变得更快,系统设计变得更有原则,生产可靠性变成了他们可以真正影响的事情,而不仅仅是希望的事情。

实践从思维方式中产生:在提示词之前构建评估,测量分布而非单个输出,在开始调试之前学习故障分类法,思考系统而非模型。跳过思维转变并尝试直接采用实践的工程师发现,在压力下他们会退回——确定性本能是强大而熟悉的。思维方式必须先行。

References:Let's stay in touch and Follow me for more thoughts and updates