跳到主要内容

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

查看所有标签

AI 招聘评分标准的问题:为什么你的面试流程选错了工程师

· 阅读需 9 分钟
Tian Pan
Software Engineer

当今大多数招聘 AI 工程师的团队,都在运行一套为一个根本不存在的岗位所优化的面试流程。他们筛查的是 LeetCode 刷题能力,考察候选人对 Transformer 内部机制的了解程度,并给那些能够自信地在白板上画出分布式系统的人加分。然而,这些候选人加入团队后,却在调试幻觉频发的检索流水线时束手无策,并且交付了一个在测试环境中表现完美、在生产中悄然退化的模型集成。

这不是人才问题,而是测量问题。预示 AI 工程成功的技能在传统面试循环中几乎是不可见的——而面试实际测量到的技能,与工作的真实需求相关性极低。

环境 AI 设计:当聊天界面是错误的抽象时

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数工程团队默认将 AI 功能构建为聊天界面。用户输入内容,模型做出响应。这种模式感觉很自然,因为它映射了人类的对话,而且工具链也让实现变得简单。但当你观察生产环境中的这些基于聊天的 AI 功能时,你经常会看到同样的功能失效:用户界面处于闲置状态,等待着那些太忙、太分心或根本不知道该问什么的用户。

聊天是一种“拉取”(pull)模式。由用户发起,AI 做出反应。对于任何产品中具有价值的 AI 工作的一个重要子集——监控、异常检测、工作流自动化、主动通知——“拉取”模式都是错误的形态。无论用户是否记得打开聊天窗口,这些工作都需要进行。

LLM 流水线的背压模式:为何指数退避还不够

· 阅读需 11 分钟
Tian Pan
Software Engineer

在峰值流量期间,部分 LLM 提供商的失败率超过 20%。当系统撞上这堵墙,并通过加倍等待时间和重试来应对时,你解决的是一个错误的问题。指数退避处理的是单次调用的韧性,对整个系统毫无作用——无法减少浪费的 token,无法解决连接池耗尽,也无法照顾到排在刚收到 429 响应那个请求后面的 50 个请求。

冲击 LLM API 的流量模式也发生了根本性变化。2023 年到 2025 年间,100 token 以下的简单查询从占流量的 80% 骤降至约 20%,而超过 500 token 的请求则成为持续的多数。Agentic 工作流在短时间内串联 10-20 个顺序调用,产生的流量模式在传统的每分钟请求数(RPM)限速下,与 DDoS 攻击别无二致。为负载可预测的 REST API 构建的基础设施,并不是 LLM 流水线所需要的基础设施。

行为契约:编写工程师真正能测试的 AI 需求

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数在 QA 阶段夭折的 AI 项目,死因并非模型不好,而是没有人在构建之前就"好"的定义达成共识。工单里的验收标准往往写着"摘要功能应生成准确、相关的摘要"——当工程师问"准确"是什么意思时,得到的答案是"看到就知道"。这不是行为需求,这是一种期许。

问题在于团队把原本用于确定性软件的需求流程照搬到了本质上具有随机性的系统上。当你为数据库查询写 assertTrue(output.equals("Paris")) 时,测试的通过与否是完全确定的。但把同样形式的断言用在 LLM 上,得到的是一个对所有有效的同义表达都失败、对所有自信的幻觉都通过的测试。单元测试在骗你,而它所依据的规格从来就不是为"生成输出分布而非单一值"的系统设计的。

AI 功能中的冷启动问题:为何第一周总是失败

· 阅读需 12 分钟
Tian Pan
Software Engineer

你构建了一个个性化功能,将其接入应用,然后发布上线。第一周到了。系统尽职尽责地为每个新用户推送同样的几个全局热门内容——你的 AI 号称智能,却连按字母排序的列表都不如。参与度指标几乎没有变化。团队得出结论:模型需要更多调优。其实不然。模型完全按设计运行。问题在于,你要求它在没有任何可学习内容之前就开始学习。

这就是冷启动问题,它摧毁的 AI 功能比糟糕的模型多得多。

核心矛盾是循环的:行为机器学习系统需要用户交互才能产生有用的预测,但它需要产生有用的预测才能获得用户交互。某大型电商平台记录显示,冷启动影响了超过 60% 的新用户——这些用户收到了明显失准的推荐,可测量地损害了转化率。在整体指标中,这一信号几乎不可见,因为活跃用户掩盖了损失。

系统化调试 LLM 故障:给读不懂日志的工程师的实战指南

· 阅读需 14 分钟
Tian Pan
Software Engineer

一家金融科技初创公司在他们的系统提示词中添加了一个逗号。第二天,他们的发票生成机器人开始输出乱码,在有人追踪到原因之前,他们已经损失了 8,500 美元。没有抛出任何错误。没有触发任何报警。应用程序继续运行,虽然错了但很自信。

这就是在生产环境中调试 LLM 的真实样子。没有指向行号的堆栈追踪。没有你可以检查的核心转储(core dump)。系统不会崩溃——它在继续运行的同时,悄无声息地产生降级的输出。传统的调试直觉不再适用。大多数工程师的反应是随机调整提示词,直到看起来好一点,然后基于三个示例进行部署,并称其已修复。结果两周后,问题又以另一种形式浮出水面。

有一种更好的方法。LLM 的故障遵循系统性的模式,而这些模式对结构化的调查有反应。这就是这套方法论。

为什么渐进式发布对 AI 功能不起作用(以及该怎么做)

· 阅读需 11 分钟
Tian Pan
Software Engineer

灰度发布(Canary deployments)之所以有效,是因为 Bug 是二元的。代码要么崩溃,要么正常运行。你将 1% 的流量引导到新版本,观察 30 分钟的错误率和延迟,然后决定回滚或继续。系统会自动评分。一个糟糕的发布会大声宣告自己的存在。

AI 功能并非如此。一个开始生成微妙错误建议、过时推荐或听起来煞有介事的废话的语言模型,其 5xx 错误率为零。延迟保持在 SLO 范围内。灰度发布看起来是绿色的,而产品却在无声无息地辜负用户。

这不是工具问题。这是概念上的错位。渐进式发布背后的整个思维模型——确定性代码、自我评分系统、二元通过/失败——在你引入一个其正确性无法通过观察请求本身来衡量的组件时,就会崩溃。

混合自动化技术栈:规则与LLM混合使用的决策框架

· 阅读需 11 分钟
Tian Pan
Software Engineer

用LLM智能体替换所有Zapier流程和RPA脚本的团队,往往在六个月后发现了同一件事:他们用"脆弱但可审计"换来了"灵活但难以维护"。Zapier流程以可预测的方式崩溃——第14步因API变更而失败。LLM工作流则悄无声息地出错——模型悄悄地将支持工单路由到错误的队列,直到客户升级投诉才被发现。审计日志只记录着"AI决策",这用律师的话来说就是"没人知道发生了什么"。

答案不是回避在自动化中使用LLM,而是要有意识地判断哪些任务交给哪个系统,并架构好两者之间的接缝,使故障不会相互传染。

多租户 Prompt 难题:当一个系统提示词要服务多个主人时

· 阅读需 10 分钟
Tian Pan
Software Engineer

你发布了一个新的平台级防护栏 (guardrail) —— 一条防止 AI 讨论竞争对手价格的规则。它在周一早上上线。到了周三,你最大的企业客户提交了一个支持工单:他们的销售助手 (他们曾精心调整该助手,以便为采购团队比较供应商选项) 停止工作了。他们没有更改任何东西。你更改了一些东西,而其影响范围 (blast radius) 在无形中波及了他们。

这就是多租户提示词问题 (multi-tenant prompt problem)。允许客户定制的 B2B AI 产品实际上是在运行一个分层指令系统,但大多数团队并没有将其视为一个系统。他们将其视为字符串拼接:获取平台提示词,附加客户的指令,也许再附加用户偏好,然后调用 LLM。模型会处理剩下的事情。

模型并不能处理好。它会默默地挑选一个赢家,而你直到有人投诉才会发现是哪一个。

多变量回归问题:当所有因素同时改变时,如何隔离 AI 故障

· 阅读需 13 分钟
Tian Pan
Software Engineer

周一早上,一张工单传了过来:你负责的 AI 功能的用户满意度在周末下降了 18%。你打开部署日志,心里一沉。周五的发布包含了来自供应商的模型版本升级、产品团队的提示词(prompt)优化、内容审核后的检索语料库(retrieval corpus)刷新,以及因 API 字段重命名而进行的工具架构(tool schema)更新。四个变更。一次回退。完全不知道该归咎于哪个变量。

这就是多变量回归问题(multi-variable regression problem),它是生产环境 AI 系统中最难处理的一类故障。倒不是因为这种故障有多罕见——行为回退(behavioral regressions)时有发生——而是因为当团队快速迭代时,产生这种问题的条件几乎是必然的。那些看起来单独都很安全的变更堆积在一起,同时发布,最后让你在黑暗中摸索着进行调试。

Prompt 静态分析:你的 AI 系统缺失的预部署门控

· 阅读需 9 分钟
Tian Pan
Software Engineer

每个严肃的工程团队在合并代码前都会运行一次 Lint 检查。ESLint 捕获未定义的变量,Prettier 强制格式规范,Semgrep 标记安全反模式。没有人会在不先运行至少一次静态检查的情况下将 JavaScript 发布到生产环境。

现在想想你的团队在发布一次提示词变更之前会做什么。如果你的团队和大多数团队一样,答案是:在 PR 里审阅一下,用肉眼扫描,也许手动测试几个输入用例,然后合并。你生产 AI 功能的系统提示词——控制模型如何为每一位用户表现的指令集——所受到的预部署审查比一次 CSS 改动还要少。

这个差距不是一个微小的流程疏漏。一项分析了 2,000 多个开发者提示词的研究发现,超过 10% 的提示词存在提示词注入攻击的漏洞,约 4% 存在可衡量的偏见问题——而这一切都在没有人察觉的情况下部署到了生产环境。自动捕获这些问题的工具已经存在,只是大多数团队还没有把它接入流水线。

Schema 熵:为什么你的工具定义正在生产环境中腐烂

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 Agent 在 1 月份时运行良好。到了 3 月,它开始在 15% 的工具调用中失败。到了 5 月,它在另外 20% 的情况下会静默地产生错误输出。你的部署日志没有任何变化。没有人动过 Agent 的代码。工具定义看起来和六个月前一模一样——而这恰恰就是问题所在。

工具 Schema 并不需要被修改才会出错。它们所描述的服务在底层发生了变化。Enum(枚举)值增加了。后端重构使必填字段变成了可选字段。以前接受字符串的参数现在需要 ISO 8601 时间戳。Schema 文档保持冻结,而底层的 API 却在不断演进,你的 Agent 仍在自信地调用它,完全不知道契约(contract)已经发生了变化。

这就是 Schema 熵(Schema entropy):你的 Agent 接受训练时所使用的工具定义与生产环境服务实际表现出的行为之间逐渐产生的差异。它是生产环境 AI 系统中最被低估的可靠性问题之一,研究表明,工具版本控制问题约占生产环境 Agent 故障的 60%。