链接:https://www.anthropic.com/ [Anthropic Claude]是一系列基础AI模型,可用于多种应用程序。

Claude模型具有以下高级特性。

  • 200k Token Context Window: Claude boasts a generous token capacity of 200,000, making it ideal for handling extensive information in applications like technical documentation, codebase, and literary works. 翻译成中文: 200k 令牌上下文窗口:Claude 拥有高达200,000个令牌的丰厚容量,非常适合处理技术文档、代码库和文学作品等应用中的大量信息。

  • 支持的任务:Claude的多功能性涵盖了如摘要、问答、趋势预测以及文档对比等任务,使其能够支持从对话到内容生成的广泛应用。

  • AI安全特性:基于Anthropic的安全研究,Claude在其交互中优先考虑有用性、诚实性和无害性,降低品牌风险,并确保负责任的AI行为。

"AWS Bedrock Anthropic Model PageAmazon Bedrock User Guide 包含了关于如何使用AWS托管模型的详细信息。"

Tip
Anthropic公司的Claude 2和3模型也可以直接在Anthropic自己的云平台上使用。Spring AI提供专门的Anthropic Claude客户端来访问它。

先决条件

请参阅亚马逊Bedrock上的Spring AI文档以设置API访问。

添加仓库和物料清单(BOM)

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

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

自动配置

将`spring-ai-bedrock-ai-spring-boot-starter`依赖项添加到项目的Maven `pom.xml`文件中:

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

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

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

启用人类聊天

默认情况下,Anthropic模型是禁用的。要启用它,请将`spring.ai.bedrock.anthropic3.chat.enabled`属性设置为`true`。导出环境变量是设置此配置属性的一种方法:

export SPRING_AI_BEDROCK_ANTHROPIC3_CHAT_ENABLED=true

聊天属性

前缀 spring.ai.bedrock.aws 是配置与 AWS Bedrock 连接的属性前缀。

属性

描述

默认值

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

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

-----------

spring.ai.bedrock.aws.region

使用的AWS区域。

us-east-1

spring.ai.bedrock.aws.access-key

AWS访问密钥。

-

spring.ai.bedrock.aws.secret-key

AWS密钥。

-

前缀 spring.ai.bedrock.anthropic3.chat 是配置 Claude 聊天客户端实现的属性前缀。

属性

描述

默认值

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

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

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

spring.ai.bedrock.anthropic3.chat.enable

启用基岩Anthropic聊天客户端。默认情况下处于禁用状态

false

spring.ai.bedrock.anthropic3.chat.model

使用的模型ID。支持`anthropic.claude-3-sonnet-20240229-v1:0`、anthropic.claude-3-haiku-20240307-v1:0`以及传统的`anthropic.claude-v2、`anthropic.claude-v2:1`和`anthropic.claude-instant-v1`模型,这些模型适用于同步和流式响应。

anthropic.claude-3-sonnet-20240229-v1:0

spring.ai.bedrock.anthropic3.chat.options.temperature

控制输出的随机性。数值范围是[0.0,1.0]

0.8

spring.ai.bedrock.anthropic3.chat.options.top-p

在采样时考虑的token的最大累积概率。

AWS 基岩默认值

spring.ai.bedrock.anthropic3.chat.options.top-k

指定生成器在生成下一个token时使用的token选项数量。

AWS 基岩默认值

spring.ai.bedrock.anthropic3.chat.options.stop-sequences

配置生成器识别的最多四个序列。在停止序列之后,生成器停止生成更多的token。返回的文本不包含停止序列。

10

spring.ai.bedrock.anthropic3.chat.options.anthropic-version

使用的生成器版本。

bedrock-2023-05-31

spring.ai.bedrock.anthropic3.chat.options.max-tokens

指定生成响应中使用的最大token数量。请注意,模型可能会在达到这个最大值之前停止。此参数仅指定生成的绝对最大token数量。我们建议为了获得最佳性能限制在4,000个token以内。

500

查看链接https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java中的[AnthropicChatModel]以获取其他模型ID。支持的值包括:anthropic.claude-instant-v1anthropic.claude-v2`和`anthropic.claude-v2:1。模型ID的值也可以在链接https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids-arns.html的[AWS Bedrock文档中的基本模型ID]中找到。

Tip
所有以`spring.ai.bedrock.anthropic3.chat.options`为前缀的属性可以在运行时被覆盖,方法是向`Prompt`调用添加特定于请求的运行时选项

运行时选项

The Anthropic3ChatOptions.java 文件提供了模型配置,例如温度、topK、topP等。

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

在运行时,您可以通过向`Prompt`调用添加新的、特定于请求的选项来覆盖默认选项。例如,要覆盖特定请求的默认温度,请执行以下操作:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        Anthropic3ChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
Tip
除了特定模型的https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/Anthropic3ChatOptions.java[AnthropicChatOptions],您还可以使用可移植的https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptions.java[ChatOptions]实例,该实例通过https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatOptionsBuilder.java[ChatOptionsBuilder#builder()]创建。

多模态

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

目前,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/anthropic3/Anthropic3ChatClientIT.java[Anthropic3ChatClientIT.java]中提取的一个简单的代码示例,展示了用户文本与图片的结合。

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

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

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

assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket");

它将`test.png`图像作为输入:

多模态测试图像

附带文字消息“解释一下你在这张图片上看到了什么?”, 并生成类似以下的回应:

图片展示了一个装有几个水果的线条果篮的特写视图。
这个篮子看起来是由细金属线组成,形成一个带有提手的圆形结构。

篮子里有一些黄色的香蕉和一些红苹果或者可能是西红柿。
这些水果的鲜亮颜色与金属色调的网状篮子形成了漂亮的对比。

照片中的浅景深将焦点坚定地放在了前景的水果上,而向上延伸的篮子手柄略有模糊,这在背景中创造了一个令人愉悦的散景效果。

构图和灯光赋予了这张图片一种简洁、极简主义的美感,突出了展示在这个优雅的铁篮里水果的自然美和新鲜度。

样本控制器

Create 一个新的 Spring Boot 项目,并将 spring-ai-bedrock-ai-spring-boot-starter 添加至你的 pom(或 gradle)依赖中。

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

spring.ai.bedrock.aws.region=eu-central-1
spring.ai.bedrock.aws.access-key=${AWS_ACCESS_KEY_ID}
spring.ai.bedrock.aws.secret-key=${AWS_SECRET_ACCESS_KEY}

spring.ai.bedrock.anthropic3.chat.enabled=true
spring.ai.bedrock.anthropic3.chat.options.temperature=0.8
spring.ai.bedrock.anthropic3.chat.options.top-k=15
Tip
regionsaccess-keysecret-key 替换为您的AWS凭证。

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

@RestController
public class ChatController {

private final BedrockAnthropic3ChatClient chatClient;

@Autowired
    public ChatController(BedrockAnthropic3ChatClient 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 BedrockAnthropic3ChatClient implements the ChatClient and StreamingChatClient and uses the [low-level-api] to connect to the Bedrock Anthropic service.

spring-ai-bedrock 依赖添加到项目的 Maven pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bedrock</artifactId>
</dependency>

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

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

接下来,创建一个https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatClient.java [BedrockAnthropic3ChatClient] 并使用它进行文本生成:

Anthropic3ChatBedrockApi anthropicApi =  new Anthropic3ChatBedrockApi(
    AnthropicChatBedrockApi.AnthropicModel.CLAUDE_V3_SONNET.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(),
    new ObjectMapper());

BedrockAnthropic3ChatClient chatClient = new BedrockAnthropic3ChatClient(anthropicApi,
    AnthropicChatOptions.builder()
        .withTemperature(0.6f)
        .withTopK(10)
        .withTopP(0.8f)
        .withMaxTokensToSample(100)
        .withAnthropicVersion(AnthropicChatBedrockApi.DEFAULT_ANTHROPIC_VERSION)
        .build());

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

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

低级人工智能3聊天底层基岩接口客户端

'''The Anthropic3ChatBedrockApi 提供的是一个轻量级的 Java 客户端,构建在 AWS Bedrock 之上,用以链接:https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html[Anthropic Claude 模型]。'''

客户端支持`anthropic.claude-3-sonnet-20240229-v1:0`、anthropic.claude-3-haiku-20240307-v1:0`以及传统的`anthropic.claude-v2anthropic.claude-v2:1`和`anthropic.claude-instant-v1`模型,适用于同步(例如`chatCompletion())和流式(例如`chatCompletionStream()`)响应。

这是一个简单的片段,说明如何以编程方式使用API:

Anthropic3ChatBedrockApi anthropicChatApi = new Anthropic3ChatBedrockApi(
   AnthropicModel.CLAUDE_V2.id(), Region.EU_CENTRAL_1.id());

AnthropicChatRequest request = AnthropicChatRequest
  .builder(String.format(Anthropic3ChatBedrockApi.PROMPT_TEMPLATE, "Name 3 famous pirates"))
  .withTemperature(0.8f)
  .withMaxTokensToSample(300)
  .withTopK(10)
  .build();

// Sync request
AnthropicChatResponse response = anthropicChatApi.chatCompletion(request);

// Streaming request
Flux<AnthropicChatResponse> responseStream = anthropicChatApi.chatCompletionStream(request);
List<AnthropicChatResponse> responses = responseStream.collectList().block();

请按照https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java[Anthropic3ChatBedrockApi.java]的JavaDoc了解更多信息。