十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Spring AI 流式模式 Token 全为 0?一行配置拿回完整用量

Spring AI 流式模式 Token 全为 0?一行配置拿回完整用量 Spring AI 流式模式 Token 全为 0一行配置拿回完整用量【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai月底做成本核算时你发现一个尴尬的事实线上走.stream()的对话token 消耗根本查不到。用 Spring AI 流式模式 获取 Token 数量promptTokens和completionTokens清一色的 0账单只能靠估。问题不大一个配置就能修好。call 有数、stream 全 0现象复现同一个 ChatClient两种调用方式的差别一眼就能看出来调用方式promptTokens / completionTokens / totalTokens.call()非流式有正常数值.stream()流式全部是 0代码没写错日志里响应也正常返回偏偏用量是空的。这不是你的 bug是流式链路的默认行为往下看两行代码就解决了。一行配置启用 streamUsage改完就能拿到数 在流式调用的请求选项上打开 usage 统计官方集成测试里就是这么写的ChatClientResponse response chatClient.prompt() .options(OpenAiChatOptions.builder() .streamUsage(true) // 关键一行流式响应携带完整 Token 用量 .build()) .stream() .chatClientResponse();注意这个开关要挂在每次请求的 options上不是在 builder 里配一次就全局生效。改完重新跑一遍Usage里的三个字段就有真实数值了成本核算链路直接接上。上图右边就是 ChatClient stream 的实际链路响应不是整包而是FluxChatClientResponse一帧一帧推出来。为什么默认不给流式传输下的统计时机问题先说结论不是 Spring AI 算不出来是流式协议里默认就没有最后一张统计表。流式响应像水流一样一块块到达每个 SSE 数据块只带增量文本。服务商的 API 里有个include_usage开关默认关闭——开着就要在流的末尾多塞一个完整的数据块不是每个团队都需要默认省掉最省心。Spring AI 只是把这个参数透传给模型。开关一开服务端会在流的尾部补一个带 usage 的数据块prompt、completion、total 一次给齐。所以那串 0本质是数据块里压根没这字段而不是统计出错。⚠️ 顺带提醒不是所有模型都支持这个开关。个别提供商在流式下根本不返回 usage这时别硬扛成本核算那条链路回退到.call()就行。两种模式怎么选三个判断标准别背流式快、非流式准这种空话直接对号入座首字延迟敏感吗用户盯着聊天窗口等回复必须.stream()文字逐字冒出来体验才对有人盯着进度条吗后台任务——离线摘要、批量打标签、报告生成——没人等首字.call()拿整包 完整用量最省事你的模型流式下给 usage 吗先拿一个小请求验证一下。不给的话核算成本就别走流式。三条里命中任何一条选择自然就定了。就这么点事一行配置打开选对模式跑起来。改完记得翻翻官方文档 Spring AI 官方文档 里流式相关的章节确认一下自家模型的支持情况。【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表