使用Spring AI流式调用时如何获取OpenAI剩余Tokens?
Spring AI流式调用中获取OpenAI剩余Tokens元数据
流式调用下依然可以获取OpenAI剩余Tokens的HTTP Header元数据,只是默认的聚合方式会丢失原始响应头,需要调整代码处理逻辑:
- 不要仅依赖
collectList().block()聚合结果,而是在流式处理过程中,从每个ChatResponse对象中提取关联的ClientResponse,进而获取HTTP头信息。 - OpenAI的剩余Tokens对应HTTP头字段为
x-ratelimit-remaining-tokens,可通过ClientResponse的headers方法提取。
调整后的Kotlin代码示例
chatClient.prompt() .stream() .chatResponse() .doOnNext { chatResponse -> // 获取原始客户端响应 val clientResponse = chatResponse.clientResponse // 提取剩余Tokens头信息 val remainingTokens = clientResponse.headers().firstHeader("x-ratelimit-remaining-tokens") // 按需处理该值,比如日志记录、业务存储等 println("当前剩余Tokens: $remainingTokens") } .collectList() .block()
额外说明
OpenAI流式响应的每个数据块携带的响应头是一致的,因此只需提取一次即可,无需重复处理所有响应块。如果后续OpenAI调整头字段名称,需要对应修改提取的字段名。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

