使用Spring AI的ChatResponseMetadata获取Anthropic API响应头中的速率限制信息
[LOADING...]
1. 概述
Spring AI 的 ChatResponseMetadata 类公开了与聊天响应相关的元数据,包括模型信息以及其他与响应相关的详细信息。根据提供商和可用元数据的不同,这些信息还可能包含速率限制详情。
在本教程中,我们将探讨如何通过 Spring AI 访问 Anthropic 返回的速率限制元数据。同时,我们还将研究 getLimit() 方法如何公开这些信息。
2. Maven 依赖
首先,我们搭建一个简单的 Spring Boot AI 应用,并在 pom.xml 中添加 spring-boot-starter-web 和 spring-ai-starter-model-anthropic 依赖:
spring-boot-starter-web 依赖提供 Spring MVC,并为我们的应用配置内嵌 Web 服务器。接下来,spring-ai-starter-model-anthropic 依赖将 Anthropic 的聊天模型与 Spring AI 集成。它允许我们通过 Spring AI 抽象与这些模型进行交互。
3. 获取速率限制元数据
首先,我们在 application.properties 文件中配置 Anthropic 模型:
这里,我们从 ANTHROPIC_API_KEY 环境变量中加载 Anthropic API 密钥。然后,我们指定要使用的模型,并设置模型在响应中可以生成的最大 token 数。在这个例子中,我们使用的是 claude-sonnet-5-5 模型。
3.1. MetadataResponse Record
接下来,我们定义一个 Java record 来表示应用返回的响应:
在上面的代码中,我们为返回给客户端的数据提供了结构化表示,例如模型名称、速率限制信息、token 使用情况以及生成的输出。
3.2. 控制器类
接下来,我们创建一个控制器类,并注入 ChatClient 以初始化 ChatClient:
在 ChatClient 初始化完成后,我们添加一个用于生成短篇故事的端点。同时,该端点还会返回相关的模型元数据、速率限制和 token 使用情况:
这里,我们使用 ChatClient 将用户提示发送到配置好的 Anthropic 模型,并获取生成的 ChatResponse。然后,我们调用 getMetadata() 方法访问响应元数据。在元数据中,getRateLimit() 会返回一个 RateLimit 对象,其中包含提供商报告的请求限制和 token 限制。
我们还调用 getUsage() 来获取 token 使用信息,并从响应中提取生成的文本。最后,我们用这些值填充 MetadataResponse record,使端点能够在返回生成故事的同时,返回可用的速率限制和使用信息。
3.3. GET 请求
接下来,我们向 /story-gen 发起 GET 请求以查看响应:
在上面的输出中,请求限制为 10000,在本次请求之后还剩 9999 次请求。与 token 相关的字段显示了报告的 token 预算以及 token 限制重置前的时间。promptTokens 和 completionTokens 字段分别表示处理提示和生成响应所使用的 token 数。
4. 结论
在本文中,我们学习了如何使用 ChatResponseMetadata 类获取 Anthropic 聊天响应的速率限制元数据。我们通过 getRateLimit() 方法访问了 RateLimit 对象,并探讨了如何获取请求限制、剩余请求数、token 限制以及 token 使用信息。
示例的完整源代码可在 GitHub 上获取。
本文最初发表于 Baeldung。