快速结论:当你用 @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 中已被确认:
- OpenAI Responses API 返回
usage.input_tokens_details.cache_write_tokens。 langfuse-js的parseUsageDetails会给所有input_tokens_details的键统一加上input_前缀,于是产出input_cache_write_tokens。- 当前
gpt-5.6-sol的价格定义里配置了input_cache_creation和cache_write_tokens,但没有input_cache_write_tokens。 - 成本引擎做的是严格的字符串精确匹配(
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。 - 确认
openaiSDK 版本(Issue 中为 7.4.0)及是否使用 Responses API。 - 确认调用模型是否为
gpt-5.6-sol(讨论中同样涉及 Terra、Luna 价格条目)。 - 确认 Langfuse 部署方式:Issue 报告的是 Langfuse Cloud,自托管不适用。
- 确认所用 Langfuse 版本是否已包含 PR #15712 的价格键改动,以及 #15471 别名映射的落地情况。
- Issue 未提供操作系统、Python、CUDA、显卡等信息,无需在这些方向排查。
解决步骤
- 先确认现象:通过
GET /api/public/v2/observations(带usage字段组)查询相关 generation,对比usageDetails.input_cache_write_tokens是否为正而costDetails.input_cache_write_tokens缺失,以确认命中的正是本问题。 - 确认你的 Langfuse 版本中
gpt-5.6-sol/terra/luna的价格定义是否已包含cache_write_tokens和input_cache_creation(即是否已包含 #15712)。 - 可优先尝试(方案一):在使用别名解析的版本/分支中,把
input_cache_write_tokens加入别名映射,映射目标为input_cache_creation,与 #15471 中既有别名条目的写法保持一致。 - 可优先尝试(方案二):在
default-model-prices.json的gpt-5.6-sol/terra/luna价格条目中,把input_cache_write_tokens作为显式价格键加入,与既有的cache_write_tokens、input_cache_creation并列。 - 若你使用自托管并自行修改,改完后重启相关服务,使新的价格定义或别名映射生效。
- 按报告者建议补充回归测试:从含
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)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[BUG]: Weekly and monthly scheduled jobs run a day early or late when the local time is on a different UTC date](https://www.chat-gpts.plus/wp-content/uploads/2026/10/6555-578b341a-768x403.jpg)
![[Bug] Codex heterogeneous agent loses session continuity every turn (sessionId missing from stream_start, regression of #16855)](https://www.chat-gpts.plus/wp-content/uploads/2026/10/20231-3455eac7-768x403.jpg)
