Bedrock Anthropic 3
Anthropic Claude 是一系列基础 AI 模型,可用于各种应用程序。
Claude 模型具有以下高级特性
-
200k Token 上下文窗口:Claude 拥有 200,000 个令牌的强大容量,使其成为处理技术文档、代码库和文学作品等大量信息的理想选择。
-
支持的任务:Claude 的多功能性涵盖了摘要、问答、趋势预测和文档比较等任务,能够从对话到内容生成等广泛的应用场景中发挥作用。
-
AI 安全特性:基于 Anthropic 的安全研究,Claude 在交互中优先考虑有用性、诚实性和无害性,降低品牌风险并确保负责任的 AI 行为。
在 AWS Bedrock Anthropic 模型页面 和 Amazon Bedrock 用户指南 中包含有关如何使用 AWS 托管模型的详细信息。
Anthropic 的 Claude 2 和 3 模型也可直接在 Anthropic 自己的云平台上使用。Spring AI 提供了专用的 Anthropic Claude 客户端来访问它。 |
先决条件
请参阅 Spring AI Amazon Bedrock 文档 以设置 API 访问权限。
自动配置
将 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'
}
请参阅 依赖项管理 部分以将 Spring AI BOM 添加到您的构建文件。 |
启用 Anthropic 聊天
默认情况下,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.timeout |
要使用的 AWS 超时时间。 |
5m |
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.enabled |
启用 Bedrock Anthropic 聊天模型。默认情况下禁用。 |
false |
spring.ai.bedrock.anthropic3.chat.model |
要使用的模型 ID。支持 |
|
spring.ai.bedrock.anthropic3.chat.options.temperature |
控制输出的随机性。值范围为 [0.0,1.0]。 |
0.8 |
spring.ai.bedrock.anthropic3.chat.options.top-p |
采样时要考虑的令牌的最大累积概率。 |
AWS Bedrock 默认值 |
spring.ai.bedrock.anthropic3.chat.options.top-k |
指定生成模型用于生成下一个令牌的令牌选择数量。 |
AWS Bedrock 默认值 |
spring.ai.bedrock.anthropic3.chat.options.stop-sequences |
配置生成模型识别的最多四个序列。在停止序列之后,生成模型停止生成更多令牌。返回的文本不包含停止序列。 |
10 |
spring.ai.bedrock.anthropic3.chat.options.anthropic-version |
要使用的生成模型版本。 |
bedrock-2023-05-31 |
spring.ai.bedrock.anthropic3.chat.options.max-tokens |
指定在生成的响应中使用的令牌最大数量。请注意,模型可能会在达到此最大值之前停止。此参数仅指定要生成的令牌的绝对最大数量。我们建议将限制设置为 4,000 个令牌以获得最佳性能。 |
500 |
查看 AnthropicChatModel 以获取其他模型 ID。支持的值为:anthropic.claude-instant-v1
、anthropic.claude-v2
和 anthropic.claude-v2:1
。模型 ID 值也可在 AWS Bedrock 基本模型 ID 文档 中找到。
所有以spring.ai.bedrock.anthropic3.chat.options 为前缀的属性都可以在运行时通过向Prompt 调用添加特定于请求的运行时选项来覆盖。 |
运行时选项
该Anthropic3ChatOptions.java提供了模型配置,例如温度、topK、topP等。
在启动时,可以使用BedrockAnthropicChatModel(api, options)
构造函数或spring.ai.bedrock.anthropic3.chat.options.*
属性配置默认选项。
在运行时,可以通过向Prompt
调用添加新的、特定于请求的选项来覆盖默认选项。例如,要覆盖特定请求的默认温度
ChatResponse response = chatModel.call(
new Prompt(
"Generate the names of 5 famous pirates.",
Anthropic3ChatOptions.builder()
.withTemperature(0.4)
.build()
));
除了特定于模型的AnthropicChatOptions之外,还可以使用可移植的ChatOptions实例,该实例使用ChatOptionsBuilder#builder()创建。 |
多模态
多模态是指模型同时理解和处理来自各种来源的信息(包括文本、图像、音频和其他数据格式)的能力。这种范式代表了人工智能模型的重大进步。
目前,Anthropic Claude 3支持images
的base64
源类型,以及image/jpeg
、image/png
、image/gif
和image/webp
媒体类型。有关更多信息,请查看视觉指南。
Spring AI的Message
接口通过引入媒体类型来支持多模态AI模型。此类型包含有关消息中媒体附件的数据和信息,使用Spring的org.springframework.util.MimeType
和java.lang.Object
表示原始媒体数据。
下面是从Anthropic3ChatModelIT.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, this.imageData)));
ChatResponse response = chatModel.call(new Prompt(List.of(this.userMessage)));
assertThat(response.getResult().getOutput().getContent()).contains("bananas", "apple", "basket");
它以test.png
图像作为输入
以及文本消息“解释你在这张图片上看到了什么?”,并生成类似以下内容的响应
The image shows a close-up view of a wire fruit basket containing several pieces of fruit. The basket appears to be made of thin metal wires formed into a round shape with an elevated handle. Inside the basket, there are a few yellow bananas and a couple of red apples or possibly tomatoes. The vibrant colors of the fruit contrast nicely against the metallic tones of the wire basket. The shallow depth of field in the photograph puts the focus squarely on the fruit in the foreground, while the basket handle extending upwards is slightly blurred, creating a pleasing bokeh effect in the background. The composition and lighting give the image a clean, minimalist aesthetic that highlights the natural beauty and freshness of the fruit displayed in this elegant wire basket.
示例控制器
使用创建一个新的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.timeout=1000ms
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
将regions 、access-key 和secret-key 替换为您的AWS凭证。 |
这将创建一个BedrockAnthropicChatModel
实现,您可以将其注入到您的类中。这是一个使用聊天模型进行文本生成的简单@Controller
类的示例。
@RestController
public class ChatController {
private final BedrockAnthropic3ChatModel chatModel;
@Autowired
public ChatController(BedrockAnthropic3ChatModel 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);
}
}
手动配置
该BedrockAnthropic3ChatModel实现了ChatModel
和StreamingChatModel
,并使用低级Anthropic3ChatBedrockApi客户端连接到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'
}
请参阅 依赖项管理 部分以将 Spring AI BOM 添加到您的构建文件。 |
接下来,创建一个BedrockAnthropic3ChatModel并将其用于文本生成
Anthropic3ChatBedrockApi anthropicApi = new Anthropic3ChatBedrockApi(
AnthropicChatBedrockApi.AnthropicModel.CLAUDE_V3_SONNET.id(),
EnvironmentVariableCredentialsProvider.create(),
Region.US_EAST_1.id(),
new ObjectMapper(),
Duration.ofMillis(1000L));
BedrockAnthropic3ChatModel chatModel = new BedrockAnthropic3ChatModel(this.anthropicApi,
AnthropicChatOptions.builder()
.withTemperature(0.6)
.withTopK(10)
.withTopP(0.8)
.withMaxTokensToSample(100)
.withAnthropicVersion(AnthropicChatBedrockApi.DEFAULT_ANTHROPIC_VERSION)
.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."));
低级Anthropic3ChatBedrockApi客户端
该Anthropic3ChatBedrockApi提供了基于AWS Bedrock Anthropic Claude模型的轻量级Java客户端。
客户端支持anthropic.claude-3-opus-20240229-v1:0
、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
模型,用于同步(例如chatCompletion()
)和流式(例如chatCompletionStream()
)响应。
这是一个关于如何以编程方式使用API的简单片段
Anthropic3ChatBedrockApi anthropicChatApi = new Anthropic3ChatBedrockApi(
AnthropicModel.CLAUDE_V2.id(), Region.US_EAST_1.id(), Duration.ofMillis(1000L));
AnthropicChatRequest request = AnthropicChatRequest
.builder(String.format(Anthropic3ChatBedrockApi.PROMPT_TEMPLATE, "Name 3 famous pirates"))
.withTemperature(0.8)
.withMaxTokensToSample(300)
.withTopK(10)
.build();
// Sync request
AnthropicChatResponse response = this.anthropicChatApi.chatCompletion(this.request);
// Streaming request
Flux<AnthropicChatResponse> responseStream = this.anthropicChatApi.chatCompletionStream(this.request);
List<AnthropicChatResponse> responses = this.responseStream.collectList().block();
有关更多信息,请参阅Anthropic3ChatBedrockApi.java的Javadoc。