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访问。
自动配置
将`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-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.anthropic.chat.options 为前缀的属性都可以在运行时通过在 Prompt 调用中添加一个特定于请求的 运行时选项 来覆盖。
|
运行时选项
The [AnthropicChatOptions.java](https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/AnthropicChatOptions.java) 文件提供了模型配置,例如温度、topK、topP等。
在启动时,可以使用`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 实现了 ChatClient
和 StreamingChatClient
,并使用 低级别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添加到您的构建文件中。 |
接下来,创建一个[BedrockAnthropicChatClient](https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatClient.java) 并使用它进行文本生成:
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](https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java) 提供了一个轻量级的 Java 客户端,该客户端基于 AWS Bedrock 构建,用于支持 [Anthropic Claude 模型](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html)。
以下类图展示了AnthropicChatBedrockApi接口和构建块:
客户端支持 anthropic.claude-instant-v1
、anthropic.claude-v2
和 anthropic.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();
请遵循 https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java [AnthropicChatBedrockApi.java] 的 JavaDoc 以获取更多信息。