Is there an existing issue for this?
Current Behavior
// 强转为 DashScopeAiUsage 以获取详细的词元使用量信息
DashScopeAiUsage dashScopeAiUsage = (DashScopeAiUsage) output.tokenUsage();
if (Objects.nonNull(dashScopeAiUsage)) {
DashScopeApiSpec.TokenUsage nativeUsage = (DashScopeApiSpec.TokenUsage) dashScopeAiUsage.getNativeUsage();
// 获取输入词元的详细使用量信息
DashScopeApiSpec.InputTokenDetailed inputTokenDetailed = nativeUsage.inputTokensDetails();
// 获取输出词元的详细使用量信息
DashScopeApiSpec.OutputTokenDetailed outputTokenDetailed = nativeUsage.outputTokensDetails();
// 获取缓存词元的详细使用量信息
DashScopeApiSpec.PromptTokenDetailed cacheTokenDetailed = nativeUsage.promptTokenDetailed();
// 更新词元使用量统计
// - 输入词元统计:文本、图片、音频
if (Objects.nonNull(inputTokenDetailed)) {
inputTextTokens.set(Optional.ofNullable(inputTokenDetailed.text()).orElse(0));
inputImageTokens.set(Optional.ofNullable(inputTokenDetailed.image()).orElse(0));
inputAudioTokens.set(Optional.ofNullable(inputTokenDetailed.audio()).orElse(0));
} else {
inputTextTokens.set(Optional.ofNullable(nativeUsage.inputTokens()).orElse(0));
inputImageTokens.set(Optional.ofNullable(nativeUsage.imageTokens()).orElse(0));
inputAudioTokens.set(Optional.ofNullable(nativeUsage.audioTokens()).orElse(0));
}
// - 输出词元统计:文本、推理
if (Objects.nonNull(outputTokenDetailed)) {
outputTextTokens.set(Optional.ofNullable(outputTokenDetailed.text()).orElse(0));
outputReasoningTokens.set(Optional.ofNullable(outputTokenDetailed.image()).orElse(0));
} else {
outputTextTokens.set(Optional.ofNullable(nativeUsage.outputTokens()).orElse(0));
}
// - 缓存词元统计
if (Objects.nonNull(cacheTokenDetailed)) {
cacheTokens.set(Optional.ofNullable(cacheTokenDetailed.cachedTokens()).orElse(0));
}
// - 总词元统计:输入 + 输出
totalTokens.set(
inputTextTokens.get() + inputImageTokens.get() + inputAudioTokens.get() +
outputTextTokens.get() + outputReasoningTokens.get()
);
System.out.println(dashScopeAiUsage.getTotalTokens());
}
最后输出
inputTextTokens=45680, inputImageTokens=0, inputAudioTokens=0, outputTextTokens=0, outputReasoningTokens=147, cacheTokens=25135, totalTokens=45827
但实际阿里云百炼扣了20多万,这是为什么
Expected Behavior
No response
Steps To Reproduce
No response
Environment
Spring AI Alibaba version(s):
Debug logs
No response
Anything else?
No response
Is there an existing issue for this?
Current Behavior
// 强转为 DashScopeAiUsage 以获取详细的词元使用量信息
DashScopeAiUsage dashScopeAiUsage = (DashScopeAiUsage) output.tokenUsage();
if (Objects.nonNull(dashScopeAiUsage)) {
DashScopeApiSpec.TokenUsage nativeUsage = (DashScopeApiSpec.TokenUsage) dashScopeAiUsage.getNativeUsage();
// 获取输入词元的详细使用量信息
DashScopeApiSpec.InputTokenDetailed inputTokenDetailed = nativeUsage.inputTokensDetails();
// 获取输出词元的详细使用量信息
DashScopeApiSpec.OutputTokenDetailed outputTokenDetailed = nativeUsage.outputTokensDetails();
// 获取缓存词元的详细使用量信息
DashScopeApiSpec.PromptTokenDetailed cacheTokenDetailed = nativeUsage.promptTokenDetailed();
// 更新词元使用量统计
// - 输入词元统计:文本、图片、音频
if (Objects.nonNull(inputTokenDetailed)) {
inputTextTokens.set(Optional.ofNullable(inputTokenDetailed.text()).orElse(0));
inputImageTokens.set(Optional.ofNullable(inputTokenDetailed.image()).orElse(0));
inputAudioTokens.set(Optional.ofNullable(inputTokenDetailed.audio()).orElse(0));
} else {
inputTextTokens.set(Optional.ofNullable(nativeUsage.inputTokens()).orElse(0));
inputImageTokens.set(Optional.ofNullable(nativeUsage.imageTokens()).orElse(0));
inputAudioTokens.set(Optional.ofNullable(nativeUsage.audioTokens()).orElse(0));
}
// - 输出词元统计:文本、推理
if (Objects.nonNull(outputTokenDetailed)) {
outputTextTokens.set(Optional.ofNullable(outputTokenDetailed.text()).orElse(0));
outputReasoningTokens.set(Optional.ofNullable(outputTokenDetailed.image()).orElse(0));
} else {
outputTextTokens.set(Optional.ofNullable(nativeUsage.outputTokens()).orElse(0));
}
// - 缓存词元统计
if (Objects.nonNull(cacheTokenDetailed)) {
cacheTokens.set(Optional.ofNullable(cacheTokenDetailed.cachedTokens()).orElse(0));
}
// - 总词元统计:输入 + 输出
totalTokens.set(
inputTextTokens.get() + inputImageTokens.get() + inputAudioTokens.get() +
outputTextTokens.get() + outputReasoningTokens.get()
);
最后输出
inputTextTokens=45680, inputImageTokens=0, inputAudioTokens=0, outputTextTokens=0, outputReasoningTokens=147, cacheTokens=25135, totalTokens=45827
但实际阿里云百炼扣了20多万,这是为什么
Expected Behavior
No response
Steps To Reproduce
No response
Environment
Debug logs
No response
Anything else?
No response