链接: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 Page 和 Amazon Bedrock User Guide 包含了关于如何使用AWS托管模型的详细信息。"
Tip
|
Anthropic公司的Claude 2和3模型也可以直接在Anthropic自己的云平台上使用。Spring AI提供专门的Anthropic Claude客户端来访问它。 |
先决条件
请参阅亚马逊Bedrock上的Spring AI文档以设置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'
}
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`、 |
|
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-v1
、anthropic.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
|
将 regions 、access-key 和 secret-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-v2
、anthropic.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了解更多信息。