使用聊天/嵌入响应使用量
概述
Spring AI 通过在 Usage 接口中引入 getNativeUsage()
方法并提供 DefaultUsage
实现,增强了其模型使用量处理功能。
这一变化简化了不同 AI 模型跟踪和报告其使用指标的方式,同时保持了整个框架的一致性。
主要变更
与 ChatModel 一起使用
以下是一个完整的示例,展示如何使用 OpenAI 的 ChatModel 跟踪使用量:
@SpringBootConfiguration
public class Configuration {
@Bean
public OpenAiApi chatCompletionApi() {
return OpenAiApi.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.build();
}
@Bean
public OpenAiChatModel openAiClient(OpenAiApi openAiApi) {
return OpenAiChatModel.builder()
.openAiApi(openAiApi)
.build();
}
}
@Service
public class ChatService {
private final OpenAiChatModel chatModel;
public ChatService(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
}
public void demonstrateUsage() {
// 创建聊天提示
Prompt prompt = new Prompt("今天天气怎么样?");
// 获取聊天响应
ChatResponse response = this.chatModel.call(prompt);
// 访问使用量信息
Usage usage = response.getMetadata().getUsage();
// 获取标准使用量指标
System.out.println("提示词令牌数: " + usage.getPromptTokens());
System.out.println("完成令牌数: " + usage.getCompletionTokens());
System.out.println("总令牌数: " + usage.getTotalTokens());
// 访问原生 OpenAI 使用数据,包含详细的令牌信息
if (usage.getNativeUsage() instanceof org.springframework.ai.openai.api.OpenAiApi.Usage) {
org.springframework.ai.openai.api.OpenAiApi.Usage nativeUsage =
(org.springframework.ai.openai.api.OpenAiApi.Usage) usage.getNativeUsage();
// 详细的提示词令牌信息
System.out.println("提示词令牌详情:");
System.out.println("- 音频令牌: " + nativeUsage.promptTokensDetails().audioTokens());
System.out.println("- 缓存令牌: " + nativeUsage.promptTokensDetails().cachedTokens());
// 详细的完成令牌信息
System.out.println("完成令牌详情:");
System.out.println("- 推理令牌: " + nativeUsage.completionTokenDetails().reasoningTokens());
System.out.println("- 接受的预测令牌: " + nativeUsage.completionTokenDetails().acceptedPredictionTokens());
System.out.println("- 音频令牌: " + nativeUsage.completionTokenDetails().audioTokens());
System.out.println("- 拒绝的预测令牌: " + nativeUsage.completionTokenDetails().rejectedPredictionTokens());
}
}
}
与 ChatClient 一起使用
如果你使用 ChatClient
,你可以通过 ChatResponse
对象访问使用量信息:
// 创建聊天提示
Prompt prompt = new Prompt("今天天气怎么样?");
// 创建聊天客户端
ChatClient chatClient = ChatClient.create(chatModel);
// 获取聊天响应
ChatResponse response = chatClient.prompt(prompt)
.call()
.chatResponse();
// 访问使用量信息
Usage usage = response.getMetadata().getUsage();