
模型没有多用一次,监控里的缓存写入却可能被算了两遍。Langfuse 4.72修复的正是这样一个接入细节:同一条OTel记录同时带着缓存写入总数和有效期分项时,旧映射可能既保留总数,又把分项当作额外用量。对于用监控报表做成本归因的团队,先把计数口径算对,比先讨论模型降价更重要。
快速看点:此次核准的是通用gen_ai用量映射修复,不是所有4.72功能;五分钟、一小时分项属于缓存写入总量内部组成,不应重复相加;未归属余量仍保留。统计归一化变准确,不代表供应商账单或历史数据会自动改正。
一个缓存写入记录,可以同时说明“共写入多少token”和“其中多少按五分钟或一小时有效期保存”。这两层字段描述的是同一批用量的总数与拆分,不是三笔互不相干的消费。如果报表把它们直接累加,缓存使用情况、请求成本归因和项目预算分析都可能受到误导。
对应修复于10月28日合入,4.72.0在29日16时14分UTC正式发布,按北京时间已是30日零时之后。版本日期与合入日期需要分开。这也不是此前4.71的派发模型归因修复:前者回答“哪个模型被调用”,此次回答“同一批缓存写入怎样拆分计数”。
问题出现在通用OTel映射中。修复说明以Mastra相关导出器产生的属性为例:旧逻辑认识缓存写入总数,却未把有效期分项视作其内部组成,导致原始分项被额外保留下来,且没有落到对应的规范用量键。不能由这个例子推导所有SDK、所有导出器都存在同样行为。
正式标签中的测试给出了清楚的合成例子:缓存写入总数5000,其中五分钟3000、一小时1500,仍有500无法归属到这两个分项。修复后分别记录3000和1500,通用缓存写入字段只保留500余量;不是继续保留5000,再把两个分项叠上去。
另一个样例的输入总数为8756,缓存读取4842,缓存写入3910且全部属于五分钟。归一化后普通输入为4,五分钟写入为3910,通用写入余量为0,输出665另列。这些数字用于证明字段关系,不是客户真实消耗,更不是节省费用或提高吞吐的实验。
代码还把两个有效期分项转换为专用规范键,避免它们以原始属性名继续混在额外用量中。已有输入总数时,再扣除缓存读取、通用写入余量和有效期分项,得到普通输入。这里的五分钟和一小时是缓存有效期,不是工作流执行超时、任务重试窗口或API密钥寿命。
这项修复有明确适用路径。上层方法先读取显式提供的Langfuse用量对象;部分特定仪表化范围还有自己的处理逻辑,并不一定进入通用映射。所以,升级服务端后,仍应检查自己的导出器究竟发送哪些字段、采用哪条分支,不能把补丁描述为每种接入方式都重新计算。
价格模型能否识别规范键、采用哪个模型价格及费用字段,也属于后续独立环节。本轮未核准同版本另外的价格键修复,不宣称所有价格匹配已经正确。即便某个分项从未定价变成能匹配价格,也不意味着真实云账单会下降;内部估算与供应商结算不能混为一谈。
异常数据也不会被自动变成事实。实现会把减法结果限制为不小于零,但这不是完整的计量审计:如果导出器给出的分项大于总数、缺少总数,或对“输入是否包含缓存”的定义不同,零值并不能证明上游记录正确。团队仍需核对字段契约和数据质量,而不是只看报表不再出现负数。
实施验收可以保留一组可控样例,分别覆盖只有总数、单一有效期、两种有效期并存、存在未归属余量和显式用量覆盖,再比较原始span与归一化结果。随后检查价格模型的键、币种和适用条件,并与可取得的实际用量记录核对。这是建议的验证链路,不是本站已经完成的生产审计。
本站读取了该修复的两个文件差异、正式标签中的完整相关映射方法与新增参数化测试,没有运行上游测试或连接客户数据。公开变更没有在本文核验范围内承诺历史记录自动回填,也没有证明所有旧报表都已更正。升级后的新数据与既有记录,应分开检查。
企业AI的成本治理,首先是数据治理。总量与分项不重复、未归属部分不被悄悄吞掉、价格估算与真实结算分开,才有可靠的优化起点。这个补丁的价值在于修正一段可检查的映射关系,而不是凭一次版本升级就宣布账单更低、历史更准。
