快速结论:该问题发生在使用 ChatOpenRouter 流式输出并启用 stream_usage 时,最后一个仅包含 usage 信息的 chunk 会丢失 cost 和 cost_details 字段。优先检查流式输出的 response_metadata 是否为空,并确认你使用的 LangChain 版本是否已包含修复。
适用环境:langchain-openrouter 集成包,OpenRouter API。Issue 中通过 mock 客户端复现,未涉及具体操作系统或 Python 版本。
最快修复方案:暂无确认的一步修复方案。该问题已在 GitHub Issue 中确认,并有 contributor 提出了修复方案(在 _stream 和 _astream 中为 usage-only chunk 附加 response_metadata),但尚未合并。可优先尝试升级到包含该修复的最新版本。
注意事项:该问题是代码缺陷,不是配置错误。在官方修复发布前,如果依赖 cost 数据,建议改用非流式调用,或自行解析流式响应中的 usage-only chunk。
问题场景
使用 ChatOpenRouter 调用 OpenRouter 模型(如 openai/gpt-4o-mini)时,以流式方式生成内容并启用 stream_options={"include_usage": True}。非流式调用时,cost 和 cost_details 能正常出现在 response_metadata 中;流式调用时,这些字段会丢失。
报错原文
ChatOpenRouter drops `cost` and `cost_details` when streaming with `stream_usage` enabled
# 实际输出
streaming : False
non-streaming : True
# usage-only chunk 的元数据
usage_metadata : {'input_tokens': 10, 'output_tokens': 5, 'total_tokens': 15}
response_metadata : {}
原因分析
这是 langchain-openrouter 集成包的代码缺陷。Issue 评论中给出了详细分析:cost 和 cost_details 在三条路径中的处理不一致——非流式调用和带 choices 的流式 chunk 会正确复制到 response_metadata,但最后一个仅包含 usage 的 chunk(choices 为空列表)在 _stream 和 _astream 中被单独处理,直接构造 UsageMetadata 对象,该对象只有 token 字段,没有成本字段,导致 cost 和 cost_details 被丢弃。
环境排查
- 确认使用的 langchain-openrouter 包版本是否为最新稳定版(Issue 提交者已确认更新到最新版后问题仍然存在,说明该版本尚未修复)。
- 如果项目锁定了依赖版本,检查是否早于修复 PR 合并的版本。
- 可通过 mock 客户端(如 Issue 中的复现代码)在不消耗 API 费用的情况下复现问题,确认是否为同一缺陷。
解决步骤
- 在本地运行 Issue 中的复现代码,确认输出为
streaming: False、non-streaming: True,验证问题存在。 - 如果业务场景可接受,临时改用非流式调用(
invoke而非stream),以正常获取cost数据。 - 如果必须使用流式,可自行解析返回的 chunk:检查每个 chunk 的
choices列表,当列表为空时,直接从原始 chunk 数据中读取usage.cost和usage.cost_details。 - 关注 langchain-openrouter 仓库的 PR 和 Release 更新,在修复版本发布后升级依赖。可优先尝试关注 Issue 中 contributor 提出的修复方案是否已合并。
验证方法
运行 Issue 中的复现代码,确认流式输出中 cost 出现在 response_metadata 中(即输出变为 streaming: True)。对于临时解决方案,验证手动解析的 cost 值与非流式调用返回的值一致。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: 4 B200 GPU ,DP 4 + EP(or TP 4 + EP),Deepseek V4 Flash 0731 , simultaneously processing hundreds of text extraction tasks, outputting](https://www.chat-gpts.plus/wp-content/uploads/2026/08/52404-36d2df75-768x403.jpg)

