Anthropic 3 聊天模型
Anthropic Claude 是一系列基础 AI 模型,可用于各种应用。开发者和企业可以利用其 API 访问,直接在 Anthropic 的 AI 基础设施 之上进行构建。
Spring AI 支持 Anthropic Messaging API,用于同步和流式文本生成。
Anthropic 的 Claude 模型也可通过 Amazon Bedrock Converse 获得。Spring AI 也提供了专门的 Amazon Bedrock Converse Anthropic 客户端实现。 |
先决条件
您需要在 Anthropic 门户上创建一个 API 密钥。在 Anthropic API 控制面板 上创建一个帐户,然后在 获取 API 密钥 页面上生成 API 密钥。Spring AI 项目定义了一个名为 spring.ai.anthropic.api-key
的配置属性,您应将其设置为从 anthropic.com 获取的 API Key
的值。导出环境变量是设置该配置属性的一种方法。
export SPRING_AI_ANTHROPIC_API_KEY=<INSERT KEY HERE>
自动配置
Spring AI 自动配置、Starter 模块的构件名称发生了重大变化。请参考 升级注意事项 获取更多信息。 |
Spring AI 为 Anthropic 聊天客户端提供了 Spring Boot 自动配置。要启用它,请将以下依赖项添加到您的项目 Maven pom.xml
或 Gradle build.gradle
文件中:
-
Maven
-
Gradle
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-anthropic</artifactId>
</dependency>
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-anthropic'
}
请参考 依赖管理 部分将 Spring AI BOM 添加到您的构建文件中。 |
聊天属性
重试属性
前缀 spring.ai.retry
用作属性前缀,允许您配置 Anthropic 聊天模型的重试机制。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.retry.max-attempts |
最大重试次数。 |
10 |
spring.ai.retry.backoff.initial-interval |
指数退避策略的初始等待时长。 |
2 秒。 |
spring.ai.retry.backoff.multiplier |
退避间隔乘数。 |
5 |
spring.ai.retry.backoff.max-interval |
最大退避时长。 |
3 分钟。 |
spring.ai.retry.on-client-errors |
如果为 false,则抛出 NonTransientAiException,并且不对 |
false |
spring.ai.retry.exclude-on-http-codes |
不应触发重试的 HTTP 状态码列表(例如,抛出 NonTransientAiException)。 |
空 |
spring.ai.retry.on-http-codes |
应触发重试的 HTTP 状态码列表(例如,抛出 TransientAiException)。 |
空 |
当前,重试策略不适用于流式 API。 |
连接属性
前缀 spring.ai.anthropic
用作属性前缀,允许您连接到 Anthropic。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.anthropic.base-url |
连接的 URL |
|
spring.ai.anthropic.version |
Anthropic API 版本 |
2023-06-01 |
spring.ai.anthropic.api-key |
API 密钥 |
- |
spring.ai.anthropic.beta-version |
启用新/实验性功能。如果设置为 |
|
配置属性
聊天自动配置的启用和禁用现在通过前缀为 要启用,将 spring.ai.model.chat=anthropic (默认启用) 要禁用,将 spring.ai.model.chat=none (或任何不匹配 anthropic 的值) 进行此更改是为了允许配置多个模型。 |
前缀 spring.ai.anthropic.chat
是属性前缀,允许您为 Anthropic 配置聊天模型实现。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.anthropic.chat.enabled(已移除且不再有效) |
启用 Anthropic 聊天模型。 |
true |
spring.ai.model.chat |
启用 Anthropic 聊天模型。 |
anthropic |
spring.ai.anthropic.chat.options.model |
要使用的 Anthropic 聊天模型。支持: |
|
spring.ai.anthropic.chat.options.temperature |
用于控制生成完成内容表观创造性的采样温度。值越高,输出越随机;值越低,结果越集中和确定。不建议在同一完成请求中同时修改 temperature 和 top_p,因为这两个设置的相互作用难以预测。 |
0.8 |
spring.ai.anthropic.chat.options.max-tokens |
在聊天完成中生成的最大 token 数。输入 token 和生成 token 的总长度受模型上下文长度限制。 |
500 |
spring.ai.anthropic.chat.options.stop-sequence |
会导致模型停止生成的自定义文本序列。我们的模型通常会在自然完成其回合时停止,这将导致响应的 stop_reason 为 "end_turn"。如果您希望模型在遇到自定义文本字符串时停止生成,可以使用 stop_sequences 参数。如果模型遇到其中一个自定义序列,响应的 stop_reason 值将为 "stop_sequence",并且响应的 stop_sequence 值将包含匹配的停止序列。 |
- |
spring.ai.anthropic.chat.options.top-p |
使用核采样。在核采样中,我们按概率递减的顺序计算每个后续 token 的所有选项的累积分布,并在达到 top_p 指定的特定概率时截断。您应该只更改 temperature 或 top_p 中的一个,而不是同时更改两者。仅推荐用于高级用例。通常只需要使用 temperature。 |
- |
spring.ai.anthropic.chat.options.top-k |
仅从每个后续 token 的前 K 个选项中进行采样。用于去除“长尾”低概率响应。在此了解更多技术细节。仅推荐用于高级用例。通常只需要使用 temperature。 |
- |
spring.ai.anthropic.chat.options.toolNames |
要在一个提示请求中启用工具调用的工具列表,通过其名称标识。具有这些名称的工具必须存在于 toolCallbacks 注册表中。 |
- |
spring.ai.anthropic.chat.options.toolCallbacks |
要向 ChatModel 注册的工具回调。 |
- |
spring.ai.anthropic.chat.options.internal-tool-execution-enabled |
如果为 false,Spring AI 将不会在内部处理工具调用,而是将它们代理给客户端。然后由客户端负责处理工具调用,将其分派给适当的函数并返回结果。如果为 true(默认值),Spring AI 将在内部处理函数调用。仅适用于支持函数调用的聊天模型。 |
true |
(已弃用 - 由 |
要在一个提示请求中启用函数调用的函数列表,通过其名称标识。具有这些名称的函数必须存在于 functionCallbacks 注册表中。 |
- |
(已弃用 - 由 |
要向 ChatModel 注册的工具函数回调。 |
- |
(已弃用 - 由 negated |
如果为 true,Spring AI 将不会在内部处理函数调用,而是将它们代理给客户端。然后由客户端负责处理函数调用,将其分派给适当的函数并返回结果。如果为 false(默认值),Spring AI 将在内部处理函数调用。仅适用于支持函数调用的聊天模型。 |
false |
spring.ai.anthropic.chat.options.http-headers |
要添加到聊天完成请求中的可选 HTTP 头。 |
- |
所有带有 spring.ai.anthropic.chat.options 前缀的属性都可以在运行时通过向 Prompt 调用添加特定于请求的 运行时选项 来覆盖。 |
运行时选项
AnthropicChatOptions.java 提供了模型配置,例如要使用的模型、温度、最大 token 数等。
启动时,可以使用 AnthropicChatModel(api, options)
构造函数或 spring.ai.anthropic.chat.options.*
属性配置默认选项。
运行时,您可以通过向 Prompt
调用添加新的、特定于请求的选项来覆盖默认选项。例如,为一个特定请求覆盖默认模型和温度:
ChatResponse response = chatModel.call(
new Prompt(
"Generate the names of 5 famous pirates.",
AnthropicChatOptions.builder()
.model("claude-3-7-sonnet-latest")
.temperature(0.4)
.build()
));
除了模型特定的 AnthropicChatOptions,您还可以使用可移植的 ChatOptions 实例,通过 ChatOptionsBuilder#builder() 创建。 |
工具/函数调用
您可以向 AnthropicChatModel
注册自定义 Java 工具,并让 Anthropic Claude 模型智能地选择输出一个包含调用一个或多个已注册函数所需的参数的 JSON 对象。这是一种将 LLM 能力与外部工具和 API 连接起来的强大技术。阅读更多关于 Anthropic 函数调用 的信息。
多模态
多模态是指模型同时理解和处理来自各种来源信息的能力,包括文本、PDF、图像、数据格式。
图像
目前,Anthropic Claude 3 支持图像的 base64
源类型,以及 image/jpeg
、image/png
、image/gif
和 image/webp
媒体类型。更多信息请查看 Vision guide。Anthropic Claude 3.5 Sonnet 还支持 application/pdf
文件的 pdf
源类型。
Spring AI 的 Message
接口通过引入 Media 类型来支持多模态 AI 模型。此类型包含消息中媒体附件的数据和信息,使用 Spring 的 org.springframework.util.MimeType
和一个用于原始媒体数据的 java.lang.Object
。
以下是一个从 AnthropicChatModelIT.java 提取的简单代码示例,演示了用户文本与图像的组合。
var imageData = new ClassPathResource("/multimodal.test.png");
var userMessage = new UserMessage("Explain what do you see on this picture?",
List.of(new Media(MimeTypeUtils.IMAGE_PNG, this.imageData)));
ChatResponse response = chatModel.call(new Prompt(List.of(this.userMessage)));
logger.info(response.getResult().getOutput().getContent());
它接受 multimodal.test.png
图像作为输入

以及文本消息 "Explain what do you see on this picture?",并生成类似以下内容的响应:
The image shows a close-up view of a wire fruit basket containing several pieces of fruit. ...
从 Sonnet 3.5 开始,提供 PDF 支持(测试版)。使用 application/pdf
媒体类型将 PDF 文件附加到消息中:
var pdfData = new ClassPathResource("/spring-ai-reference-overview.pdf");
var userMessage = new UserMessage(
"You are a very professional document summarization specialist. Please summarize the given document.",
List.of(new Media(new MimeType("application", "pdf"), pdfData)));
var response = this.chatModel.call(new Prompt(List.of(userMessage)));
示例控制器
创建 一个新的 Spring Boot 项目,并将 spring-ai-starter-model-anthropic
添加到您的 pom (或 gradle) 依赖项中。
在 src/main/resources
目录下添加一个 application.properties
文件,以启用和配置 Anthropic 聊天模型:
spring.ai.anthropic.api-key=YOUR_API_KEY
spring.ai.anthropic.chat.options.model=claude-3-5-sonnet-latest
spring.ai.anthropic.chat.options.temperature=0.7
spring.ai.anthropic.chat.options.max-tokens=450
用您的 Anthropic 凭据替换 api-key 。 |
这将创建一个 AnthropicChatModel
实现,您可以将其注入到您的类中。这是一个简单的 @Controller
类的示例,它使用聊天模型进行文本生成。
@RestController
public class ChatController {
private final AnthropicChatModel chatModel;
@Autowired
public ChatController(AnthropicChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", this.chatModel.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return this.chatModel.stream(prompt);
}
}
手动配置
AnthropicChatModel 实现了 ChatModel
和 StreamingChatModel
接口,并使用 低级 AnthropicApi 客户端 连接到 Anthropic 服务。
将 spring-ai-anthropic
依赖项添加到您的项目 Maven pom.xml
文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-anthropic</artifactId>
</dependency>
或者添加到您的 Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-anthropic'
}
请参考 依赖管理 部分将 Spring AI BOM 添加到您的构建文件中。 |
接下来,创建一个 AnthropicChatModel
并将其用于文本生成:
var anthropicApi = new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));
var chatModel = new AnthropicChatModel(this.anthropicApi,
AnthropicChatOptions.builder()
.model("claude-3-opus-20240229")
.temperature(0.4)
.maxTokens(200)
.build());
ChatResponse response = this.chatModel.call(
new Prompt("Generate the names of 5 famous pirates."));
// Or with streaming responses
Flux<ChatResponse> response = this.chatModel.stream(
new Prompt("Generate the names of 5 famous pirates."));
AnthropicChatOptions
提供聊天请求的配置信息。AnthropicChatOptions.Builder
是流式选项构建器。
低级 AnthropicApi 客户端
AnthropicApi 是 Anthropic Message API 的轻量级 Java 客户端。
以下类图展示了 AnthropicApi
聊天接口和构建块:


以下是一个如何通过编程方式使用 API 的简单片段:
AnthropicApi anthropicApi =
new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));
AnthropicMessage chatCompletionMessage = new AnthropicMessage(
List.of(new ContentBlock("Tell me a Joke?")), Role.USER);
// Sync request
ResponseEntity<ChatCompletionResponse> response = this.anthropicApi
.chatCompletionEntity(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
List.of(this.chatCompletionMessage), null, 100, 0.8, false));
// Streaming request
Flux<StreamResponse> response = this.anthropicApi
.chatCompletionStream(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
List.of(this.chatCompletionMessage), null, 100, 0.8, true));
请查阅 AnthropicApi.java 的 JavaDoc 以获取更多信息。
低级 API 示例
-
AnthropicApiIT.java 测试提供了一些使用该轻量级库的通用示例。