Anthropic Claude 是一系列基础人工智能模型,可用于多种应用场景。对于开发人员和企业,您可以利用API访问权限,并直接在 Anthropic 的 AI 基础设施之上构建。

春季人工智能支持Anthropic的链接:https://docs.anthropic.com/claude/reference/messages_post[Messaging API],用于同步和流式文本生成。

Tip
Anthropic的Claude模型也可以通过Amazon Bedrock获得。Spring AI提供专门的Amazon Bedrock Anthropic客户端实现。

先决条件

您需要在Anthropic门户上创建一个API密钥。在https://console.anthropic.com/dashboard[Anthropic API仪表盘]注册一个账户,并在https://console.anthropic.com/settings/keys[获取API密钥]页面生成api密钥。Spring AI项目定义了一个名为`spring.ai.anthropic.api-key`的配置属性,您应该将其设置为从anthropic.com获得的`API Key`的值。导出一个环境变量是设置该配置属性的一种方法:

export SPRING_AI_ANTHROPIC_API_KEY=<INSERT KEY HERE>

添加仓库和BOM

Spring AI 构件发布在 Spring Milestone 和 Snapshot 仓库中。请参考 仓库 部分,将这些仓库添加到您的构建系统中。

为了帮助依赖管理,Spring AI提供了一个BOM(物料清单)以确保整个项目中使用Spring AI的版本一致。请参考依赖管理部分,将Spring AI BOM添加到您的构建系统中。

自动配置

Spring AI为Anthropic聊天客户端提供了Spring Boot自动配置。要启用它,请将以下依赖项添加到您项目的Maven `pom.xml`文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-anthropic-spring-boot-starter</artifactId>
</dependency>

或添加到你的 Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-anthropic-spring-boot-starter'
}
Tip
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。

聊天属性

重试属性

前缀 spring.ai.retry 被用作属性前缀,允许你为Anthropic Chat客户端配置重试机制。

属性

描述

默认值

------------------------------------

------------------------------------------

-------

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,并且不对`4xx`客户端错误代码进行重试

false

spring.ai.retry.exclude-on-http-codes

不触发重试的HTTP状态码列表(例如,抛出NonTransientAiException)。

Note
目前重试策略不适用于流式API。

连接属性

前缀 spring.ai.anthropic 被用作属性前缀,允许你连接到Anthropic。

属性 描述 默认值

spring.ai.anthropic.base-url

用于连接的URL地址

https://api.anthropic.com

spring.ai.anthropic.version

Anthropic API版本号

2023-06-01

spring.ai.anthropic.api-key

API密钥

-

配置属性

前缀`spring.ai.anthropic.chat`是一个属性前缀,它允许你为Anthropic的聊天客户端实现进行配置。

属性 描述 默认值

spring.ai.anthropic.chat.enabled

启用Anthropic聊天客户端。

true

spring.ai.anthropic.chat.options.model

要使用的Anthropic聊天模型。支持`claude-3-opus-20240229`、claude-3-sonnet-20240229claude-3-haiku-20240307`以及旧版本的`claude-2.1、`claude-2.0`和`claude-instant-1.2`模型。

claude-3-opus-20240229

spring.ai.anthropic.chat.options.temperature

控制生成完成度表面创造力的采样温度。较高的值将使输出更随机,而较低的值将使结果更集中和确定性。不建议同时修改温度和top_p,因为这两个设置的交互作用难以预测。

0.8

spring.ai.anthropic.chat.options.max-tokens

聊天完成中生成的最大令牌数。输入令牌和生成的令牌的总长度受模型的上下文长度限制。

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

使用核心抽样。在核心抽样中,我们计算出每个后续令牌按概率递减顺序的累积分布,并在达到top_p指定的特定概率时将其截断。您应该更改温度或top_p,但不要两者都更改。仅推荐用于高级用例。通常,你只需要使用温度。

-

spring.ai.anthropic.chat.options.top-k

仅从每一个后续令牌的前K个选项中抽样。用于消除“长尾”低概率响应。在这里了解更多技术细节。仅推荐用于高级用例。通常,你只需要使用温度。

Tip
所有以`spring.ai.anthropic.chat.options`为前缀的属性可以在运行时被覆盖,通过在`Prompt`调用中添加一个特定请求的运行时选项来实现。

运行时选项

The AnthropicChatOptions.java 文件提供了模型配置,例如使用的模型、温度、最大令牌计数等。

在启动时,可以通过`AnthropicChatClient(api, options)`构造函数或者`spring.ai.anthropic.chat.options.*`属性来配置默认选项。

在运行时,您可以通过添加新的、特定于请求的选项到`Prompt`调用中,来覆盖默认选项。例如,为了覆盖特定请求的默认模型和温度:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        AnthropicChatOptions.builder()
            .withModel("claude-2.1")
            .withTemperature(0.4)
        .build()
    ));

多模态

多模态指的是模型同时理解和处理来自不同来源的信息的能力,包括文本、图像、音频和其他数据格式。这一范式代表了人工智能模型的重大进步。

目前,Anthropic Claude 3支持`images`的`base64`源类型,以及`image/jpeg`、image/png、`image/gif`和`image/webp`媒体类型。更多信息请查看链接:https://docs.anthropic.com/claude/docs/vision[Vision guide]。

Spring AI的`Message`接口通过引入媒体类型支持多模态AI模型。这个类型包含了消息中媒体附件的数据和信息,使用Spring的`org.springframework.util.MimeType`和一个`java.lang.Object`来表示原始媒体数据。

以下是从https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/AnthropicChatClientIT.java[AnthropicChatClientIT.java]中提取的简单代码示例,演示了将用户文本与图像结合的方式。

byte[] imageData = new ClassPathResource("/multimodal.test.png").getContentAsByteArray();

var userMessage = new UserMessage("Explain what do you see on this picture?",
        List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData)));

ChatResponse response = chatClient.call(new Prompt(List.of(userMessage)));

logger.info(response.getResult().getOutput().getContent());

它以`multimodal.test.png`图片作为输入:

多模态测试图像

附带文本消息“解释你在这张图片上看到了什么?”,并生成类似这样的回答:

图片展示了一个装有几个水果的金属线制果篮的特写视图。篮子看起来由细金属线制成,形状为圆形,带有一个抬高的手柄。

在篮子里,有几只黄色的香蕉和一对红苹果或可能是番茄。果实的鲜艳颜色与金属色调的丝网篮子形成了漂亮的对比。

照片中浅景深的应用使得前景的水果成为焦点,而向上延伸的篮子手柄略显模糊,背景中创造了一个令人愉悦的散景效果。

构图和光线赋予了这张图片一个干净、极简的美感,突显了展示在这个优雅的金属网篮中果实的自然美和新鲜感。

样本控制器

访问'''创建一个新的Spring Boot项目,并将`spring-ai-anthropic-spring-boot-starter`添加到你的pom(或gradle)依赖中。

在`src/main/resources`目录下添加一个`application.properties`文件,以启用并配置Anthropic聊天客户端:

spring.ai.anthropic.api-key=YOUR_API_KEY
spring.ai.anthropic.chat.options.model=claude-3-opus-20240229
spring.ai.anthropic.chat.options.temperature=0.7
spring.ai.anthropic.chat.options.max-tokens=450
Tip
api-key 替换为您的Anthropic凭据。

这将创建一个您可以注入到类中的 AnthropicChatClient 实现。这里有一个使用聊天客户端进行文本生成的简单 @Controller 类的例子。

@RestController
public class ChatController {

private final AnthropicChatClient chatClient;

@Autowired
    public ChatController(AnthropicChatClient chatClient) {
        this.chatClient = chatClient;
    }

@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
    return Map.of("generation", chatClient.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 chatClient.stream(prompt);
}
}

手动配置

The AnthropicChatClient 实现了 ChatClientStreamingChatClient 接口,并使用 [low-level-api] 来连接到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'
}
Tip
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。

接下来,创建一个`AnthropicChatClient`并使用它进行文本生成:

var anthropicApi = new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));

var chatClient = new AnthropicChatClient(anthropicApi,
        AnthropicChatOptions.builder()
            .withModel("claude-3-opus-20240229")
            .withTemperature(0.4)
            .withMaxTokens(200)
        .build());

ChatResponse response = chatClient.call(
    new Prompt("Generate the names of 5 famous pirates."));

// 或使用流式响应
Flux<ChatResponse> response = chatClient.stream(
    new Prompt("生成5个著名海盗的名字。"));

AnthropicChatOptions` 提供了聊天请求的配置信息。AnthropicChatOptions.Builder 是一个流利的选项构建器。

低级人工智能API客户端

'''The AnthropicApi provides is lightweight Java client for Anthropic Message API.'''

以下类图说明了`AnthropicApi`聊天接口和构建块:

AnthropicApi 聊天 API 图表

这里是一个简单的代码片段,展示了如何以编程方式使用API:

AnthropicApi anthropicApi =
    new AnthropicApi(System.getenv("ANTHROPIC_API_KEY"));

RequestMessage chatCompletionMessage = new RequestMessage(
        List.of(new MediaContent("Tell me a Joke?")), Role.USER);

// Sync request
ResponseEntity<ChatCompletion> response = anthropicApi
    .chatCompletionEntity(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
            List.of(chatCompletionMessage), null, 100, 0.8f, false));

// Streaming request
Flux<StreamResponse> response = anthropicApi
    .chatCompletionStream(new ChatCompletionRequest(AnthropicApi.ChatModel.CLAUDE_3_OPUS.getValue(),
            List.of(chatCompletionMessage), null, 100, 0.8f, true));

关注 AnthropicApi.java 的 JavaDoc 以获取更多信息。

低级别API示例

  • 链接:https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-anthropic/src/test/java/org/springframework/ai/anthropic/chat/api/AnthropicApiIT.java[AnthropicApiIT.java] 测试提供了一些如何使用轻量级库的通用示例。