发现自 PR #17 的 macOS 真机审计(审计者 KiritoStar / Codex agent,报告全文见该 PR 描述)。状态:待修复。影响 /cost 显示与性能门断言的可信度。
问题
stepfun_api(OpenAI 兼容协议)流式响应下,usage 被逐块重复累加:真实最小请求对照显示服务端末条 usage 为 prompt=16 / completion=28(累计式,末块重复 28),供应商总量 16/28/44,而 ChatOpenAI 聚合得到 208/180/388。冻结的 langchain_openai/chat_models/base.py 的 _convert_chunk_to_generation_chunk 为每个 chunk 生成 usage_metadata,agent/deep_loop.py:1215-1217 将聚合结果交给 stream.add_usage。
实测后果:性能测试 tests/agent/test_perf_baseline.py:154 聚合 input_tokens=574422 > 50000 断言失败(该数值不能当作实际计费 token)。
修复方向 [判断]
在明确 provider 协议后,把累计式 usage 规范化为增量再累加;需覆盖 stream / non-stream、重复末块、工具轮次、重试场景。不要全局把所有 provider 的 usage 改成取最后一项,也不要直接放宽性能阈值。
备注
非流式路径未受影响;智谱(Anthropic 协议)行为待验证。审计者已在 PR 中保留透明代理只记录 usage 的复现脚本(usage_probe.py/.json,位于 PR #17 证据附件)。
优先级 P2,建议尽早(来自审计报告 P2-N7)。
发现自 PR #17 的 macOS 真机审计(审计者 KiritoStar / Codex agent,报告全文见该 PR 描述)。状态:待修复。影响
/cost显示与性能门断言的可信度。问题
stepfun_api(OpenAI 兼容协议)流式响应下,usage 被逐块重复累加:真实最小请求对照显示服务端末条 usage 为 prompt=16 / completion=28(累计式,末块重复 28),供应商总量 16/28/44,而ChatOpenAI聚合得到 208/180/388。冻结的langchain_openai/chat_models/base.py的_convert_chunk_to_generation_chunk为每个 chunk 生成 usage_metadata,agent/deep_loop.py:1215-1217将聚合结果交给stream.add_usage。实测后果:性能测试
tests/agent/test_perf_baseline.py:154聚合 input_tokens=574422 > 50000 断言失败(该数值不能当作实际计费 token)。修复方向 [判断]
在明确 provider 协议后,把累计式 usage 规范化为增量再累加;需覆盖 stream / non-stream、重复末块、工具轮次、重试场景。不要全局把所有 provider 的 usage 改成取最后一项,也不要直接放宽性能阈值。
备注
非流式路径未受影响;智谱(Anthropic 协议)行为待验证。审计者已在 PR 中保留透明代理只记录 usage 的复现脚本(usage_probe.py/.json,位于 PR #17 证据附件)。
优先级 P2,建议尽早(来自审计报告 P2-N7)。