Anthropic 聊天
Anthropic 的 Claude 是一款基于 Anthropic 在训练有益、诚实和无害 AI 系统方面研究的 AI 助手。 Claude 模型具有以下高级功能
-
20万 Token 上下文窗口: Claude 拥有 20 万个 token 的巨大容量,使其成为处理技术文档、代码库和文学作品等应用程序中大量信息的理想选择。
-
支持的任务: Claude 的多功能性涵盖了摘要、问答、趋势预测和文档比较等任务,从而支持从对话到内容生成等广泛的应用程序。
-
AI 安全功能: Claude 建立在 Anthropic 的安全研究基础之上,在交互中优先考虑帮助、诚实和无害,降低品牌风险并确保负责任的 AI 行为。
AWS Bedrock Anthropic 模型页面 和 Amazon Bedrock 用户指南 包含有关如何使用 AWS 托管模型的详细信息。
自动配置
在您的项目的Maven pom.xml
文件中添加spring-ai-bedrock-ai-spring-boot-starter
依赖项:
<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.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 |
考虑抽样时要考虑的标记的最大累积概率。 |
AWS Bedrock默认值 |
spring.ai.bedrock.anthropic.chat.options.topK |
指定生成式用于生成下一个标记的令牌选择数。 |
AWS Bedrock默认值 |
spring.ai.bedrock.anthropic.chat.options.stopSequences |
配置生成式识别的最多四个序列。在停止序列后,生成式停止生成进一步的标记。返回的文本不包含停止序列。 |
10 |
spring.ai.bedrock.anthropic.chat.options.anthropicVersion |
要使用的生成式的版本。 |
bedrock-2023-05-31 |
spring.ai.bedrock.anthropic.chat.options.maxTokensToSample |
指定生成的响应中要使用的最大标记数。请注意,模型可能在达到此最大值之前停止。此参数仅指定要生成的标记的绝对最大数。我们建议在性能最佳时限制为4,000个标记。 |
500 |
查看AnthropicChatModel以获取其他模型ID。支持的值包括:anthropic.claude-instant-v1
、anthropic.claude-v2
和anthropic.claude-v2:1
。模型ID值也可以在AWS Bedrock文档中找到基本模型ID。
所有以spring.ai.bedrock.anthropic.chat.options 为前缀的属性都可以通过将特定请求的聊天选项添加到Prompt 调用来在运行时进行覆盖。 |
聊天选项
AnthropicChatOptions.java 提供模型配置,如温度、topK、topP等。
在启动时,可以使用BedrockAnthropicChatClient(api, options)
构造函数或spring.ai.bedrock.anthropic.chat.options.*
属性配置默认选项。
在运行时,您可以通过向Prompt
调用添加新的请求特定选项来覆盖默认选项。例如,为了覆盖特定请求的默认温度:
ChatResponse response = chatClient.call(
new Prompt(
"生成5个著名海盗的名字。",
AnthropicChatOptions.builder()
.withTemperature(0.4)
.build()
));
除了模型特定的AnthropicChatOptions外,还可以使用可移植的ChatOptions实例,该实例使用ChatOptionsBuilder#builder()创建。 |
示例控制器(自动配置)
创建一个新的Spring Boot项目,并在pom(或gradle)依赖项中添加spring-ai-bedrock-ai-spring-boot-starter
。
添加application.properties
文件,在src/main/resources
目录下启用和配置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
将regions 、access-key 和secret-key 替换为您的AWS凭证。 |
这将创建一个BedrockAnthropicChatClient
实现,您可以将其注入到您的类中。以下是一个简单的@Controller
类示例,它使用聊天客户端进行文本生成。
@RestController
public class ChatController {
private final BedrockAnthropicChatClient chatClient;
@Autowired
public ChatController(BedrockAnthropicChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "讲个笑话") String message) {
return Map.of("generation", chatClient.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "讲个笑话") String message) {
Prompt prompt = new Prompt(new UserMessage(message));
return chatClient.stream(prompt);
}
}
手动配置
BedrockAnthropicChatClient实现了ChatClient
和StreamingChatClient
,并使用Low-level AnthropicChatBedrockApi Client
连接到Bedrock Anthropic服务。
将spring-ai-bedrock
依赖项添加到项目的Mavenpom.xml
文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bedrock</artifactId>
</dependency>
或者添加到Gradlebuild.gradle
文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-bedrock'
}
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。 |
接下来,创建一个BedrockAnthropicChatClient并将其用于生成文本:
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("生成5个著名海盗的名字。"));
// 或者使用流式响应
Flux<ChatResponse> response = chatClient.stream(
new Prompt("生成5个著名海盗的名字。"));
低级AnthropicChatBedrockApi客户端
AnthropicChatBedrockApi提供了一个轻量级的Java客户端,用于AWS Bedrock Anthropic Claude模型。
以下类图说明了AnthropicChatBedrockApi接口和构建块:
![AnthropicChatBedrockApi类图](https://docs.spring.io/spring-ai/reference/_images/bedrock/bedrock-anthropic-chat-api.png)
客户端支持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();
// 同步请求
AnthropicChatResponse response = anthropicChatApi.chatCompletion(request);
// 流式请求
Flux<AnthropicChatResponse> responseStream = anthropicChatApi.chatCompletionStream(request);
List<AnthropicChatResponse> responses = responseStream.collectList().block();
查看AnthropicChatBedrockApi.java的JavaDoc以获取更多信息。