Note
Anthropic 2 Chat API 已经被弃用,并由新的 Anthropic Claude 3 Message API 替代。请在新项目中使用 Anthropic Claude 3 Message API

Anthropic’s Claude是一款基于Anthropic研究培训有益、诚实和无害的AI系统的AI助理。Claude模型具有以下高级特性

  • 200k Token Context Window: Claude拥有200,000个令牌的宽裕容量,非常适合处理技术文档、代码库和文学作品等应用中的大量信息。

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

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

[AWS Bedrock Anthropic Model Page]页面和[Amazon Bedrock User Guide]包含了如何使用AWS托管模型的详细信息。

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

先决条件

请参考亚马逊基岩上的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.anthropic.chat.enabled`属性设置为`true`。导出环境变量是设置此配置属性的一种方式:

export SPRING_AI_BEDROCK_ANTHROPIC_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.anthropic.chat`是用于配置Claude聊天客户端实现的属性前缀。

属性 描述 默认值

spring.ai.bedrock.anthropic.chat.enable

启用 Bedrock Anthropic 聊天客户端。默认禁用

false

spring.ai.bedrock.anthropic.chat.model

使用的模型ID。请查看 AnthropicChatModel 了解支持的模型。

anthropic.claude-v2

spring.ai.bedrock.anthropic.chat.options.temperature

控制输出的随机性。值可以在[0.0,1.0]范围内

0.8

spring.ai.bedrock.anthropic.chat.options.topP

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

AWS Bedrock 默认值

spring.ai.bedrock.anthropic.chat.options.topK

指定生成下一个token时,生成器可以选择的token数量。

AWS Bedrock 默认值

spring.ai.bedrock.anthropic.chat.options.stopSequences

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

10

spring.ai.bedrock.anthropic.chat.options.anthropicVersion

使用的生成器版本。

bedrock-2023-05-31

spring.ai.bedrock.anthropic.chat.options.maxTokensToSample

指定在生成响应中使用的最大token数量。请注意,模型可能在达到此最大值之前停止。此参数仅指定生成token的绝对最大数目。我们建议最多4000个token,以获得最佳性能。

请查看 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.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.anthropic.chat.options 为前缀的属性都可以在运行时通过在 Prompt 调用中添加一个特定于请求的 运行时选项 来覆盖。

运行时选项

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

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

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

样本控制器

通过https://start.spring.io/[创建]一个新的Spring Boot项目,并将`spring-ai-bedrock-ai-spring-boot-starter`添加到你的pom(或gradle)依赖中。

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

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.anthropic.chat.enabled=true
spring.ai.bedrock.anthropic.chat.options.temperature=0.8
spring.ai.bedrock.anthropic.chat.options.top-k=15
Tip
用你的AWS凭证替换`regions`、access-key`和`secret-key

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

@RestController
public class ChatController {

    private final BedrockAnthropicChatClient chatClient;

java
@Autowired
public ChatController(BedrockAnthropicChatClient 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 BedrockAnthropicChatClient 实现了 ChatClientStreamingChatClient,并使用 低级别AnthropicChatBedrockApi客户端 连接到 Bedrock Anthropic 服务。

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添加到您的构建文件中。
AnthropicChatBedrockApi anthropicApi =  new AnthropicChatBedrockApi(
    AnthropicChatBedrockApi.AnthropicModel.CLAUDE_V2.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.EU_CENTRAL_1.id(),
    new ObjectMapper());

BedrockAnthropicChatClient chatClient = new BedrockAnthropicChatClient(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."));

// Or with streaming responses
Flux<ChatResponse> response = chatClient.stream(
    new Prompt("Generate the names of 5 famous pirates."));

低级别AnthropicChatBedrockApi客户端

以下类图展示了AnthropicChatBedrockApi接口和构建块:

AnthropicChatBedrockApi 类图表

客户端支持 anthropic.claude-instant-v1anthropic.claude-v2anthropic.claude-v2:1 模型,用于同步(例如 chatCompletion())和流式(例如 chatCompletionStream())响应。

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

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

AnthropicChatRequest request = AnthropicChatRequest
  .builder(String.format(AnthropicChatBedrockApi.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();