跳到主要内容

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

查看所有标签

AI 驱动型 API 的行为 SLA:为非确定性输出编写协议

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的支付服务拥有 99.9% 的可用性 SLA。请求要么成功,要么以文档记录的错误代码失败。当出现故障时,你清楚地知道哪里出了问题。

现在,想象你发布了一个封装了 LLM 的智能发票解析 API。在一个周一早晨,你最大的客户打来电话:“你们的 API 返回了一个有效的 JSON 对象,但在涉及外币的发票中,total_amount 字段的值差了十倍。” 你的服务返回了 HTTP 200。你的可用性仪表板显示绿色。根据每一个传统的 SLA 指标,你都没有违反任何规定。但你确实搞砸了——而且在契约语言中,你甚至找不到词汇来描述到底哪里出了错。

这就是当今大多数 AI API 部署的核心鸿沟。管理你的 API 承诺 的契约为确定性系统而写,而 LLM 并非确定性系统。

Monorepo 中的编程智能体:为什么上下文窗口与 50 个服务的代码库无法兼容

· 阅读需 10 分钟
Tian Pan
Software Engineer

这是一个静默发生的失败模式:你要求编程智能体更新身份验证服务的令牌刷新端点。智能体生成了看起来很干净的代码——自信、注释详尽且类型安全。然而,它调用了一个三层目录之上的共享库中,在三个月前就被重命名的函数签名。由于 Mock 仍然使用旧的签名,该端点的测试通过了。直到代码进入预发布环境并拉取真实的库时,错误才浮出水面。

这在抽象意义上并不是“幻觉”。模型知道那个方法——它存在于训练数据中的某个地方,或曾在上下文中简短出现过。问题在于架构:智能体从未获得过它所调用的接口的当前版本。

AI 产品中的冷启动陷阱

· 阅读需 13 分钟
Tian Pan
Software Engineer

有一种特定的失败会在 AI 功能有机会证明自己之前就将其扼杀。这看起来不像是技术故障——模型架构是合理的,评估分数也不错,功能也发布了。但采用率停滞不前,用户流失,六个月后团队悄悄降低了该功能的优先级。复盘时的诊断是:“数据不足”。

这就是冷启动陷阱。AI 功能随着参与数据的增加而改进,但用户在功能好到足以产生用处之前不会参与。这种循环依赖不是一个可以解决的数学问题——它是一个伪装成工程问题的产品设计挑战。大多数团队都带着同样的错误计划跳了进去:先收集数据,后发布机器学习。

全球化 AI 产品的文化校准:为什么翻译只解决了 10% 的问题

· 阅读需 11 分钟
Tian Pan
Software Engineer

几乎每一个全球部署的 AI 产品中都潜伏着一种隐蔽的失败模式。工程师本地化了 UI 字符串,通过翻译 API 运行模型输出,让母语者抽查几个回复,然后就发布了。该产品在技术上是多语言的,但在文化上并不称职。东京、利雅得和成都的用户收到的输出在语法上是正确的,但在文化上是错误的——这些回复表现出的不尊重、困惑或不信任,是团队在汇总指标中永远无法看到的。

研究结果是明确的:测试的每一个主要大语言模型(LLM)都反映了讲英语的新教欧洲社会的价值观。针对来自 107 个国家的代表性数据进行模型测试的研究发现,没有任何一个模型与非洲、拉丁美洲或中东地区人们建立信任、表达尊重或解决冲突的方式相契合。翻译修补了表面,但底层的校准仍然是西方化的。

数据库连接池:AI 流水线中被忽视的性能瓶颈

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 AI 功能上线了。在预发环境中,响应时间看起来还不错。一周后,生产环境开始出现神秘的 p99 尖峰——在中等负载下,延迟从 800ms 飙升至 8 秒,而 GPU 压力正常,模型没有报错,也找不到明显原因。你扩容了更多副本,没有改善。你对模型服务做了性能剖析,没有问题。你加了缓存,还是没用。

最终,有人查了数据库连接池的等待时间。从第三天起,它的利用率就已经高达 95%。

这是 AI 生产事故中最常见的一类,却鲜有人谈及——因为连接池耗尽的表现很像模型变慢。症状出现在错误的层级:你看到的是 LLM 调用延迟高,而不是数据库查询慢,所以定位问题往往需要数天,而用户一直在忍受降级的响应。

演示到生产的失败模式:为什么AI原型在真实用户到来时会崩溃

· 阅读需 11 分钟
Tian Pan
Software Engineer

30%的生成式AI项目在概念验证后被放弃。95%的企业试点没有产生任何可衡量的业务影响。Gartner预测,到2027年底,40%的智能体AI项目将被取消。这些并非底层技术的失败——而是演示与生产之间差距导致的失败。

演示到生产的失败模式是可预测、可重复的,也几乎完全可以预防的。它的发生是因为让演示看起来很棒的条件与让生产正常运行的条件系统性地不同。团队优化前者,却被后者打个措手不及。

废弃 API 陷阱:为何 AI 编码智能体在库更新后频频失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 编码智能体刚刚生成了一个拉取请求。代码看起来没问题,编译通过,测试也过了。你合并了它。两天后,预发布环境的 CI 流水线开始抛出 AttributeError: module 'openai' has no attribute 'ChatCompletion'。智能体使用了一年前已被废弃、并在最新主版本中彻底移除的 API 模式。

这就是废弃 API 陷阱,它坑害团队的频率远比那些聚焦 AI 代码质量的会议分享所描述的要高得多。一项对七个前沿 LLM 进行评估、覆盖 145 个 API 映射的实证研究发现,大多数模型在主流 Python 库上的 API 使用合理性(AUP)低于 30%。当被明确给出废弃上下文时,所有被测模型的废弃 API 使用率高达 70–90%。这个问题是结构性的,与特定模型或特定库无关。

Agent 流水线的分布式追踪:为什么你的 APM 工具形同虚设

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 Datadog 仪表盘一片绿色。Jaeger 链路看起来干净整洁。P99 延迟符合 SLA。而你的 Agent 流水线正在悄无声息地因重试死循环每天烧掉 4000 美元,却没有触发任何一条报错。

传统 APM 工具是为微服务设计的——确定性路径、有界载荷、可预测的扇出。Agent 流水线打破了所有这些假设。执行路径在运行时才能确定。工具调用深度变化剧烈。一次"请求"可能跨数分钟产生数十次 LLM 调用。而当出了问题,失败模式通常不是异常——而是一个悄然膨胀成本和延迟、却返回看似正常输出的静默重试级联。

结果是一代工程师在盲目飞行,信任着那些衡量错误事物的仪表盘。

文档解析是 RAG 系统的隐形天花板

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个合规承包商构建了一个 RAG 系统,旨在回答有关 400 页政策文档的问题。系统通过了内部 QA,针对单主题查询的检索表现正确。然而系统上线后,在处理涉及例外条款的任何问题时,它开始返回语气自信、结构严谨但错误百出的答案。

调试过程似曾相识:更换嵌入模型、调整相似度阈值、试验分块大小、添加重排序器。几周过去了,改进微乎其微。真正的症结在于,一个关键的例外条款在段落边界处被分割到了两个分块(chunks)中 —— 这并非由于分块策略,而是因为 PDF 提取器在误读排版时,悄无声息地将该段落一分为二。孤立来看,这两个分块都无法检索或解析。系统无法通过幻觉得到正确答案,因为正确的信息从未完整地进入索引。

这就是“提取天花板”:即当下游优化再多也无法弥补受损或缺失的输入数据时,系统所面临的瓶颈。

边缘推理决策框架:何时在本地而非云端运行 AI 模型

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数团队在做“云端 vs. 边缘”的决策时往往凭直觉:因为云端更简单,所以他们默认选择云端。直到 HIPAA 审计来袭,或者延迟 SLO 下降了 400 ms,亦或是收到了当月的账单。只有到那时,他们才会反思是否某些推理本来就应该在本地完成。

答案几乎永远不会是“全云端”或“全边缘”。大规模运行生产级 AI 的团队已经达成共识,采用了分层架构:由设备端或本地模型处理大部分请求,而云端前沿模型则负责处理小模型无法应对的情况。正确处理这种路由是一个工程决策,而不是一种直觉。

这就是进行严谨决策的决策框架。

将评估覆盖率作为生产指标:你的测试套件真的在测试用户实际行为吗?

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数 AI 团队把通过评估套件视为系统正常运行的信号。但事实并非如此——至少不全是。一个稳定得分 87% 的套件只做了一件事:告诉你系统在套件恰好覆盖的那 87% 的场景中表现良好。如果这套测试是六个月前手工整理的,基于团队能想到的示例,从未用真实流量更新过,那它正在以越来越高的置信度测量错误的东西。

这就是评估覆盖率问题。它与你的评估器是否准确无关——而是关于你测试集中的查询分布是否与用户实际发送的查询分布相匹配。当这两种分布出现偏差时,你会得到一个比评估失败更糟糕的结果:一个通过的评估,背后却是悄然劣化的产品。

事件驱动的 Agent 调度:为什么 Cron + REST 调用无法胜任循环 AI 工作负载

· 阅读需 12 分钟
Tian Pan
Software Engineer

团队调度循环 AI Agent 任务最常见的方式,也是最危险的方式:一个每隔 N 分钟触发一次 REST 调用的 Cron 条目,它启动一个 LLM 工作流,任务要么完成,要么悄无声息地失败。这个模式在预发布环境看起来没什么问题,但在生产环境中,它会制造出一类极难发现、难以恢复、难以推理的故障。

Cron 诞生于 1975 年,最初是为运维脚本设计的。它所内建的假设——运行时间短、无状态执行、触发即忘——在每一个维度上都与 LLM 工作负载的现实相悖。循环 AI Agent 任务是长时运行的、有状态的、成本高昂的,其失败方式会在多次重试中不断叠加。用 Cron 来调度它们,不只是可靠性风险,更是可见性风险:出问题时,你往往浑然不知。