ARTICLE DETAIL

资讯详情

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

Spring AI 流式 Token 全为 0?一行 streamUsage 配置彻底解决

Spring AI 流式 Token 全为 0?一行 streamUsage 配置彻底解决 Spring AI 流式 Token 全为 0一行 streamUsage 配置彻底解决【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai用 Spring AI 的 ChatClient 做流式对话发现 usage 里 token 数量全是 0本文拆解 Spring AI 流式 Token 统计全为零的成因并用一行 streamUsage 配置解决。改完立即可见 promptTokens、completionTokens成本核算不再靠猜。踩坑现场两种模式共用一套监控代码结果却完全不同。你在控制台跑 .call()打印出 totalTokens157一切正常。换成 .stream() 做流式输出。再读 usagepromptTokens、completionTokens 全是 0像调了个免费接口。先别怀疑模型本身是服务器没把“发票”发过来。一行配置救活关键是把“流里带用量”这件事显式告诉服务器。ChatClient client ChatClient.builder(chatModel) .defaultOptions(OpenAiChatOptions.builder() .streamUsage(true) .build()) .build(); client.prompt(你好).stream().chatResponse() .doOnNext(r - System.out.println(r.getMetadata().getUsage()));这一行的作用服务器发完所有文本分块后会额外追加一帧完整的 token 统计。模式Token 可见性典型适用场景.call() 非流式响应里直接带完整 usage批量处理、离线任务.stream() 未配 streamUsage用量依赖供应商默认值常见全 0纯展示型流式输出.stream() streamUsage尾部帧带完整 usage可稳定取值需要成本核算的流式对话源码视角配置 streamUsage 之后请求体里只多了一个字段。它就是 OpenAI API 的 stream_options.include_usage。随后服务端每个 SSE 分块只带文本 delta。整条流结束时才附加完整 usage。像快递分多个包裹最后一单里夹着发票。查看 OpenAiChatModel 源码合并逻辑里能看到一行 chunk.usage().ifPresent(builder::usage)。它专门捞的就是这一帧尾部数据。OpenAiChatOptions 中streamUsage 就是写进 StreamOptions 的 includeUsage。仓库当前版本未设置 StreamOptions 时默认 includeUsage 为 true。但部分供应商和早期版本默认不发显式配置最稳妥。避坑清单 usage 只在最后一帧读第一个 chunk 永远是 0⚠️ 忘了 defaultOptions选项不会带进请求用量照旧全 0 不是每个供应商都支持 stream_options行为以各家文档为准 不同 provider 的选项类不同别照搬 OpenAiChatOptions场景选型速查先按业务目标定模式再谈怎么拿 token 数。业务场景推荐模式一句话理由客服对话.stream() streamUsage用户看着字往外蹦成本也能对上账批量文本生成.call() 非流式一次性拿完整用量核算最简单成本对账.call() 非流式流式中断可能丢掉尾部用量帧数据不完整流式换速度账目要数据发票一开口服务器就得给。各模型实际行为以你所用版本的官方文档为准。【免费下载链接】spring-aiAn Application Framework for AI Engineering项目地址: https://gitcode.com/GitHub_Trending/spr/spring-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表