使用像OpenAI的ChatGPT这样的人工智能会消耗资源,并且根据通过API向AI发出的使用和请求情况,生成AI提供者返回的指标。消耗通常是以在给定时间框架(例如每月)内所发出的请求或使用的令牌的形式,AI提供者使用这些来衡量消耗并重置限制。你的速率限制直接由你在注册AI提供者时选择的计划决定。例如,你可以通过跟随链接查看OpenAI的[速率限制](计划详情(https://openai.com/pricing#language-models)。
为了帮助你深入了解你的AI(模型)使用情况和一般使用情况,Spring AI提供了一个API来内省AI提供商在其API中返回的元数据。
春季人工智能定义了3个主要接口来检查这些指标:GenerationMetadata
、RateLimit
和 Usage
。所有这些接口都可以从由AI请求返回和启动的 ChatResponse
中以编程方式访问。
GenerationMetadata` 接口
GenerationMetadata` 接口被定义为:
interface GenerationMetadata {
default RateLimit getRateLimit() {
return RateLimit.NULL;
}
default Usage getUsage() {
return Usage.NULL;
}
}
当通过AI提供商的API发出AI请求并收到AI响应时,`GenerationMetadata`的一个实例会由Spring AI自动创建。您可以通过使用`ChatResponse`来获取AI提供商元数据的访问权。
@Service
class MyService {
ApplicationObjectType askTheAi(ServiceRequest request)
Prompt prompt = createPrompt(request);
ChatResponse response = chatClient.call(prompt);
// 处理聊天响应
GenerationMetadata metadata = response.getMetadata();
// Inspect the AI metadata returned in the chat response of the AI providers API
Long totalTokensUsedInAiPromptAndResponse = metadata.getUsage().getTotalTokens();
// 根据这些信息采取一些行动
}
}
你可能想象到,你可以使用AI来限制你自己的Spring应用程序的速率,或者以自动化、智能化和实时的方式限制`Prompt`大小,这将影响你的令牌使用情况。
至少,你可以简单地收集这些指标来监控和报告你的消耗情况。
速率限制
RateLimit` 接口提供了在进行AI请求时,AI提供商关于您的API使用情况返回的实际信息的访问。
interface RateLimit {
获取请求限制的长整数值。
获取剩余请求次数。
获取请求重置的持续时间。
获取令牌限制的数量;
获取剩余令牌数。
获取令牌重置的持续时间。
}
requestsLimit`和`requestsRemaining`让你知道根据你注册时选择的AI提供商计划,你可以在给定时间框架内总共发起多少次AI请求以及你剩余的次数余额。requestsReset`返回一个时间`Duration
,在此之前时间框架将到期并根据你选择的计划重置你的限额。
tokensLimit`、tokensRemaining
和 tokensReset
方法与请求的方法类似,但侧重于令牌限制、余额和重置。
可以从`GenerationMetadata`获取`RateLimit`实例,如下所示:
RateLimit rateLimit = generationMetadata.getRateLimit();
Long tokensRemaining = rateLimit.getTokensRemaining();
// do something interesting with the RateLimit metadata
对于像OpenAI这样的AI服务提供商,速率限制元数据通过他们的(REST)API返回,在https://platform.openai.com/docs/guides/rate-limits/rate-limits-in-headers[HTTP头部]中可以看到,该API可以通过像OkHttp这样的HTTP客户端访问。
因为这可能是一个潜在的耗费资源的操作,必须明确启用对速率限制AI元数据的收集。你可以在Spring Boot的application.properties中通过Spring AI属性来启用这个收集;例如:
# Spring Boot application.properties
spring.ai.openai.metadata.rate-limit-metrics-enabled=true
用法
如上所示,Usage
数据可以从 GenerationMetadata
对象中获得。Usage
接口定义如下:
接口使用情况 {
Long getPromptTokens();
获取代际令牌数。
default Long getTotalTokens() {
return getPromptTokens() + getGenerationTokens();
}
}
方法名是不言自明的,但告诉你AI处理`Prompt`并生成响应所需的令牌。
totalTokens` 是 promptTokens
和 generationTokens
的总和。Spring AI 默认会进行这一计算,但该信息会在 OpenAI 的 AI 响应中返回。