bug: @langfuse/openai emits unpriced input_cache_write_tokens for GPT-5.6

当你用 @langfuse/openai 包装 OpenAI Node SDK,并通过 Responses API 调用 GPT-5.6 系列模型(如 gpt-5.6-sol )产生缓存写入用量时,用量桶 input_cache_write_tokens 会出现在 usageDetails 中,但因

快速结论:当你用 @langfuse/openai 包装 OpenAI Node SDK,并通过 Responses API 调用 GPT-5.6 系列模型(如 gpt-5.6-sol)产生缓存写入用量时,用量桶 input_cache_write_tokens 会出现在 usageDetails 中,但因为它没有匹配到任何价格键,成本被静默从 costDetails 和 totalCost 中丢弃。优先排查 Langfuse 的 GPT-5.6 价格定义与别名映射是否覆盖 input_cache_write_tokens 这个键。

适用环境:Issue 已确认的环境为 Langfuse Cloud(自托管不适用);@langfuse/openai、@langfuse/client、@langfuse/otel、@langfuse/tracing 均为 5.10.0,openai 为 7.4.0,使用 OpenAI Responses API,模型 gpt-5.6-sol。报告者指出相同不匹配同样存在于 langfuse-js 和 langfuse 当前的 main 分支。Issue 未提供操作系统、Python、CUDA 或显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 讨论中给出的两个修复方向(均未标记为已在发布版本中合并验证):一是把 input_cache_write_tokens 加入 #15471 的别名映射(映射到 input_cache_creation);二是在 default-model-prices.json 的 gpt-5.6-sol/terra/luna 价格条目中,把 input_cache_write_tokens 作为显式价格键加入,与 #15712 已添加的 cache_write_tokens、input_cache_creation 保持一致。

注意事项:这两种修复都只在 Issue 讨论中提出,尚无已合并并发布的版本记录,属于“可优先尝试”。自托管用户修改价格定义或别名映射前应确认自己的 Langfuse 版本是否已包含 #15712 的改动;该问题影响的是成本统计的准确性,不会中断请求本身,但会让 totalCost 偏低。

问题场景

用户使用 @langfuse/openai@5.10.0 的 observeOpenAI 包装 OpenAI Node SDK(openai@7.4.0),通过 OpenAI Responses API 调用 gpt-5.6-sol,且请求产生了非零的 input_tokens_details.cache_write_tokens。随后通过 GET /api/public/v2/observations 并带上 usage 字段组查询该 generation 时,发现 usageDetails.input_cache_write_tokens 为正数,但 costDetails.input_cache_write_tokens 缺失,对应成本未计入 totalCost。

报错原文

bug: @langfuse/openai emits unpriced input_cache_write_tokens for GPT-5.6

对应的生产观测数据(已脱敏):

{
  "usagePricingTierName": "Large Context (>272K)",
  "usageDetails": {
    "input": 3,
    "input_cached_tokens": 0,
    "input_cache_write_tokens": 537807,
    "output": 71,
    "output_reasoning_tokens": 23,
    "total": 537904
  },
  "costDetails": {
    "input": 0.00003,
    "input_cached_tokens": 0,
    "output": 0.003195,
    "output_reasoning_tokens": 0.001035,
    "total": 0.00426
  }
}

原因分析

这是一个 Langfuse 内部的键名不匹配问题,原因链条在 Issue 中已被确认:

  1. OpenAI Responses API 返回 usage.input_tokens_details.cache_write_tokens。
  2. langfuse-js 的 parseUsageDetails 会给所有 input_tokens_details 的键统一加上 input_ 前缀,于是产出 input_cache_write_tokens。
  3. 当前 gpt-5.6-sol 的价格定义里配置了 input_cache_creation 和 cache_write_tokens,但没有 input_cache_write_tokens。
  4. 成本引擎做的是严格的字符串精确匹配(price.usageType === key),因此该正数用量桶匹配不到价格,被静默跳过。

维护方在评论中确认:PR #15712(8 月 3 日合并)为 GPT-5.6 Sol、Terra、Luna 添加了 1.25 倍输入价的 cache_write_tokens 和 input_cache_creation 价格键,但漏掉了 JS 包装器实际发出的 input_cache_write_tokens;而仍处于开放状态的别名解析 PR #15471 的映射表只包含 input_cache_write 和 cache_write_tokens,同样没有 input_cache_write_tokens。

环境排查

  • 确认 @langfuse/openai 版本(Issue 中为 5.10.0),以及 @langfuse/client、@langfuse/otel、@langfuse/tracing 是否同为 5.10.0。
  • 确认 openai SDK 版本(Issue 中为 7.4.0)及是否使用 Responses API。
  • 确认调用模型是否为 gpt-5.6-sol(讨论中同样涉及 Terra、Luna 价格条目)。
  • 确认 Langfuse 部署方式:Issue 报告的是 Langfuse Cloud,自托管不适用。
  • 确认所用 Langfuse 版本是否已包含 PR #15712 的价格键改动,以及 #15471 别名映射的落地情况。
  • Issue 未提供操作系统、Python、CUDA、显卡等信息,无需在这些方向排查。

解决步骤

  1. 先确认现象:通过 GET /api/public/v2/observations(带 usage 字段组)查询相关 generation,对比 usageDetails.input_cache_write_tokens 是否为正而 costDetails.input_cache_write_tokens 缺失,以确认命中的正是本问题。
  2. 确认你的 Langfuse 版本中 gpt-5.6-sol/terra/luna 的价格定义是否已包含 cache_write_tokens 和 input_cache_creation(即是否已包含 #15712)。
  3. 可优先尝试(方案一):在使用别名解析的版本/分支中,把 input_cache_write_tokens 加入别名映射,映射目标为 input_cache_creation,与 #15471 中既有别名条目的写法保持一致。
  4. 可优先尝试(方案二):在 default-model-prices.json 的 gpt-5.6-sol/terra/luna 价格条目中,把 input_cache_write_tokens 作为显式价格键加入,与既有的 cache_write_tokens、input_cache_creation 并列。
  5. 若你使用自托管并自行修改,改完后重启相关服务,使新的价格定义或别名映射生效。
  6. 按报告者建议补充回归测试:从含 input_tokens_details.cache_write_tokens 的 OpenAI Responses API usage 对象出发,经过官方 JS 包装器的归一化处理,验证产出的缓存写入桶能拿到配置的 GPT-5.6 价格。

验证方法

重新发送一次会产生 cache_write_tokens 的 gpt-5.6-sol Responses API 请求,再通过 GET /api/public/v2/observations 查询该 generation:usageDetails.input_cache_write_tokens 为正的同时,costDetails 中应出现对应的 input_cache_write_tokens 成本,且 totalCost 相应提高。按 Issue 中的口径,大上下文档(>272K)缓存写入价为 $12.50 / 百万 token,可用 token 数 × 12.50 / 1,000,000 核对金额(示例中 537,807 token 对应约 $6.7225875)。

参考来源

langfuse/langfuse #16187

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26897

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注