Skip to content

[BUG] Agent TokenUsage与实际百炼扣除的token不一样 #4488

Description

@AllKai

Is there an existing issue for this?

  • I have searched the existing issues

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions