跳到主要内容

67 篇博文 含有标签「cost-optimization」

查看所有标签

AI 功能回报期:让财务团队不再质疑的 ROI 模型

· 阅读需 11 分钟
Tian Pan
Software Engineer

每个上线 AI 功能的工程团队最终都会碰到同一堵墙:财务部门要看一份证明支出合理性的表格,但你做的那份根本行不通。

问题不在于 AI 功能缺乏 ROI,而在于 AI 的经济逻辑打破了标准 ROI 模型的每一个假设——固定资本、线性成本曲线、可预期的回收时间线。把 AI 支出当作 SaaS 许可费来处理的团队,要么在上线前看到虚高的数字,要么在投产六个月后看着数字崩塌。有计划的 AI 项目(ROI 达 55%)与随意部署的项目(ROI 仅 5.9%)之间近十倍的差距,几乎完全来自于团队是否在上线之前就建立了正确的度量模型。

AI产品的暗能量:没人预算过的后台计算

· 阅读需 11 分钟
Tian Pan
Software Engineer

当你的AI功能上线时,你会制定延迟预算:模型调用需要多长时间、检索需要多长时间、完整请求的p99是多少。但你几乎可以肯定没有为那些在没有用户观察时发生的推理制定预算。

每个拥有持久化状态的AI产品都在后台运行不可见的工作。文档在上传时被预处理。长对话在会话边界处被重新摘要,以防下一个会话撑爆上下文窗口。主动建议按照没人刻意设定的计划表被生成。当有人更新模式时,嵌入向量被重新生成。这些都不会出现在你的延迟仪表盘上,通常也不在你的成本模型中,几乎从未被监控到。

这就是你AI产品的暗能量——那些解释了你的推理账单"应该是多少"与"实际是多少"之间差距的计算。

AI 流水线中的惰性评估:不到万不得已,不要调用 LLM

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数 AI 流水线(pipelines)在编写时,都好像每一个请求都值得进行一次完整的 LLM 调用。用户提交一条消息,流水线将其传递给模型,等待响应并返回——每一次都无条件地如此操作。这虽然可行,但既昂贵又缓慢,而且通常是不必要的。

实际上需要完整 LLM 推理的请求比例比大多数工程师预想的要小。关于 token 级别路由的研究表明,1.5B 和 32B 参数模型之间只有约 11% 的 token 存在差异,且只有 4.9% 的 token 是真正的“发散性”的——这意味着如果由较小的模型处理,它们会改变推理路径。生产环境中的语义缓存显示,65% 的传入流量在语义上与流水线已经回答过的内容相似。这些并不是边缘案例。它们占据了流量的大部分,而你却在为处理它们支付全额费用。

解决方法是惰性求值(lazy evaluation):在确认确实需要昂贵模型之前,不要调用它。

思考预算:扩展推理模型何时真正具备经济意义

· 阅读需 11 分钟
Tian Pan
Software Engineer

令人惊讶的是,许多 AI 团队一旦获得 o3 级别或 Claude 扩展思考模型的访问权限,就会默认对所有查询启用扩展思考。这背后的逻辑看似显而易见:更智能的推理等于更好的输出,何不始终开启?问题在于,这种逻辑没有考虑到测试时计算扩展在实践中如何运作的基本事实。扩展思考能显著提升特定类型任务的性能,在另一些任务上则会降低质量,并可能将全局推理成本推高 5-30 倍。那些从这些模型中获取最大价值的团队,将推理预算作为一个明确的决策来对待——其重要性不亚于模型选择或提示词工程。

本文阐述了任务分类体系、成本结构,以及将战略性使用思考预算的团队与仅仅为质量幻觉溢价买单的团队区分开来的路由决策框架。

预算倒置陷阱:为什么你最重要的AI功能却在用最便宜的推理模型

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队通过将更便宜的查询路由到更便宜的模型来优化AI推理成本。这听起来合理——但实际上是本末倒置的。首先被降级到廉价模型的查询,并不是那些简单的。恰恰相反,它们是复杂的查询,因为这些才是FinOps仪表盘标记出来的昂贵查询。

结果是:你的合同续签工作流——那个负责敲定六位数交易的关键环节——却在一个会产生幻觉、捏造条款引用的模型上运行。而你的客户支持分类——真正低风险的入门级任务——却享受着顶级模型的待遇,仅仅因为还没有人抱怨过它。

这就是预算倒置陷阱。它的产生并非源于疏忽,而是在没有价值背景的情况下单纯施加成本压力所带来的可预见结果。

模型路由中的 20% 问题:当成本优化产生二等用户时

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的路由系统完全按照设计运行。80% 的查询流向廉价模型;20% 升级到高性能模型。延迟降低了,成本下降了 60%,领导层也很满意。然后有人按用户细分提取了数据,你发现了问题:非母语英语用户的查询升级率只有母语人士的一半,而他们的满意度评分低了 18 分。路由系统将查询复杂度信号视为中性的,但事实并非如此——它是语言熟练程度的替代指标,而你已经在几个月的时间里,系统性地向特定用户群体提供了更糟糕的产品。

这就是 20% 问题。这不是路由器的 bug。这是任何经过成本优化的路由系统在无人衡量的情况下,直到为时已晚才显现出来的涌现特性。

隐形算力税:为何你的 AI 推理账单远超用户实际所需

· 阅读需 11 分钟
Tian Pan
Software Engineer

你正在为用户从未阅读过的 Token 付费。这不是 Bug,也不是供应商的价格把戏,而是因为你的系统正按设计运行——在每次请求中触发后台推理任务。这些任务在白板上看起来很聪明,却在每次请求中烧掉了真实的预算。

这就是隐形算力税(Shadow Compute Tax):推理支出中用于推测性、过早触发或结构上保证永远不会到达用户的 AI 工作的那部分。在你的监控面板里,它几乎是隐形的——直到突然变得显眼为止,而那时它已经被默认为成本模型的一个前提假设。

何时跳过实时 LLM 推理:异步批处理流水线的生产实践

· 阅读需 10 分钟
Tian Pan
Software Engineer

某个团队此刻正看着他们的 LLM 月支出以 10 倍速度增长,而 p99 延迟徘徊在四秒左右。工程师们增加了更多重试。重试触发了速率限制。速率限制触发了回退。回退也是 LLM 调用。没有人停下来问:这个功能真的需要实时响应吗?

大多数 AI 产品团队都为"幸福路径"设计架构——用户发消息,模型响应,用户看到结果。同步调用模式是 API SDK 在第一个代码示例中演示的内容,因此它就这样上线了。但生产 LLM 工作负载中有相当大一部分与用户坐在键盘前等待毫无关系。它们是文档增强任务、内容分类流水线、向量嵌入生成、夜间摘要生成和后台质量评分。对于这些工作负载,实时推理是错误的工具——而坚持使用它所付出的代价是真实的金钱、级联故障,以及你要花费数月才能理清的运营复杂性。

作为 Cron 任务的智能体:当定时触发优于对话循环时

· 阅读需 11 分钟
Tian Pan
Software Engineer

如今,生产环境中的大多数 “智能体”(agents)其实都是套着对话界面的后台任务。它们不需要用户向其输入内容,而是需要一个触发器、一个状态文件,以及一种在不可避免的超时后恢复运行的方法。对话循环 —— 请求、工具调用、请求、工具调用,无限循环 —— 是为了演示方便而提供的功能,却悄然间成为了默认的执行模型。然而,对于大多数交付的智能体工作负载来说,这其实是一个错误的模型。

这并非一个哲学层面的决定。它直观地反映在账单上、值班告警中,以及任务的运行成功率上。对话循环会在多轮对话中保持模型会话开启,不断累积上下文,一旦链路中任何一环出错,整个过程就会中断。而调度触发则在确定的边界处启动,运行至完成或达到检查点,并在退出前将状态写入持久化存储。前者像是一通电话,而后者则是一个工作队列。将两者混为一谈,会导致一个每月 200 美元的功能在没有任何人修改提示词的情况下,变成每月 4 万美元的负担。

Agent 追踪采样:当 “记录所有内容” 耗费 8 万美元却依然漏掉性能退化时

· 阅读需 11 分钟
Tian Pan
Software Engineer

账单在 3 月份寄达。仅追踪(traces)一项就花费了 8.1 万美元,而 11 月时这一数字仅为 1.2 万美元。团队在 10 月份启用了全量 Agent 追踪,理由是可见性越高越好。到了第一季度,可观测性成本的增速已经超过了推理成本——而当生产环境真正出现性能回归(regression)时,包含故障的追踪记录却被淹没在两千万个无人问津的成功 span 中。

错误并不在于决定进行埋点。错误在于将请求追踪(request-tracing)的心智模型引入了一个行为完全不像传统请求的工作负载中。

一个典型的 Web 请求会生成一个包含少量子节点的 span 树:处理器、数据库调用、缓存查找、下游服务。而一个 Agent 请求生成的树包含 5 个 LLM 调用、3 个工具调用、2 个向量查找、中间草稿(scratchpads),以及一个重新审视其中 3 个步骤的规划器。同样适用于 API 网关的采样策略——头部采样(head-sample)1%,保持其余部分的代表性——在 Agent 场景下会产生一个追踪存储库,其中中位数追踪是拥有 200 个 span 的怪物,长尾效应才是唯一关键的部分,而你发现故障的频率与你花钱的频率完全无关。

Prompt 缓存抖动:当最大租户上线导致所有人账单翻三倍时

· 阅读需 12 分钟
Tian Pan
Software Engineer

账单在月初寄到,金额是你电子表格预测的三倍。没有人推送过系统提示词(system prompt)的更改。仪表盘显示请求量持平。p95 延迟看起来很正常。每个正确任务消耗的 token 比例(token-per-correct-task ratio)也没有变化。然而,你却欠了推理供应商额外的四万美元,而可观测性技术栈中唯一暗示了原因的信号,是一个大多数团队从未设置过报警的指标:缓存命中率(cache hit rate)。它在计费周期的第二周,也就是某个周二的太平洋时间上午 9:47,从 71% 掉到了 18%。而那个时刻,正是你最大的租户的客户成功团队为两百名新用户启动了一场协调一致的入驻活动。

欢迎来到提示词缓存抖动(prompt cache thrashing)—— 这种多租户故障模式本该在十年前就被 SaaS 策略手册消除,如今却通过推理供应商的共享前缀缓存(shared prefix cache)从后门溜了回来。供应商的缓存是在你组织的流量中共享的。无论你是否愿意,你的租户都在共享这个缓存,而一个租户的前缀形态在夜间发生改变,就可能逐出(evict)所有其他租户的单位经济效益(unit economics)所依赖的前缀。对于那些没做任何改变的租户来说,账单也会激增。财务部呼叫工程部,工程部指着显示一切正常的仪表盘,因为仪表盘并没有测量出那个已经损坏的环节。

结构化输出重试循环:你被忽视的算力浪费

· 阅读需 13 分钟
Tian Pan
Software Engineer

打开你的结构化输出仪表盘。它自豪地显示着类似 “98.4% 的 Schema 合规率” 这样的数字。这就是成功率——即第一次尝试就生成有效 JSON 对象的请求比例。团队为剩下的 1.6% 构建了一个重试封装器(retry wrapper),发布上线,然后就没再管了。两个季度后,推理费用增长了 15%,而请求量仅增长了 4%。首席财务官(CFO)想要个解释。工程师们给不出解释,因为跟踪结构化输出成功率的仪表盘并不跟踪结构化输出的成本。

仪表盘隐藏的部分在于:失败路径并非只有一次重试。第一次重新提示(re-prompt)修复了缺失的 enum 字段,但引入了一个格式错误的嵌套数组。第二次重新提示修复了数组,但丢掉了一个必填键。第三次尝试终于通过了验证,但到那时,该请求已经消耗了四次完整的推理调用加上最初的生成过程,而你的单次请求 Token 计数器显示的是 总和,而不是循环过程。从计数器的角度来看,这是一个昂贵的请求。从成本线的角度来看,这是一个你从未定价的随机循环。

这篇文章将探讨该循环究竟对你的算力预算产生了什么影响,为什么你现有的观测能力(observability)无法察觉到它,以及哪些规范可以使其变得可见且可控。