Anthropic Chat

Anthropic 的 Claude 是一款基于 Anthropic训练研究的 有用、诚实且无害的人工智能助手。

Claude 模型具有以下高级特征:

  • 200k tokens上下文窗口:Claude 拥有 200,000 个tokens容量,非常适合处理技术文档、代码库和文学作品等应用程序中的大量信息。

  • 支持的任务:Claude 的多功能性涵盖总结、问答、趋势预测和文档比较等任务,支持从对话到内容生成的广泛应用。

  • AI 安全功能:基于 Anthropic 的安全研究,Claude 在交互中优先考虑乐于助人、诚实和无害,降低品牌风险并确保负责任的 AI 行为。

AWS Bedrock Anthropic 模型页面Amazon Bedrock 用户指南包含有关如何使用 AWS 托管模型的详细信息。

先决条件

请参阅 Amazon Bedrock 上的 Spring AI 文档 以设置 API 访问。

添加存储库和 BOM

Spring AI 工件发布在 Spring MilestoneSnapshot 存储库中。请参阅存储库部分将这些存储库添加到您的构建系统中。

为了帮助进行依赖管理,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'
}

启用 Anthropic Chat

默认情况下,Anthropic 模型是禁用的.
可以设置 spring.ai.bedrock.anthropic.chat.enabled 属性为 true,启用模型.
导出环境变量是设置此配置属性的一种方法:

export SPRING_AI_BEDROCK_ANTHROPIC_CHAT_ENABLED=true

Chat 属性

spring.ai.bedrock.aws 前缀的属性,是用于配置与 AWS Bedrock 的连接。
属性 描述 默认值
spring.ai.bedrock.aws.region AWS region to use. us-east-1
spring.ai.bedrock.aws.access-key AWS access key. -
spring.ai.bedrock.aws.secret-key AWS secret key. -
spring.ai.bedrock.anthropic.chat 前缀的属性,可让您配置 Claude Chat 客户端的实现。
属性 描述 默认值
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 default
spring.ai.bedrock.anthropic.chat.options.topK 指定生成器用于生成下一个标记的标记选择数量。 AWS Bedrock default
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 个tokens。 500

查看AnthropicChatModel以获取其他模型 ID。支持的值为:anthropic.claude-instant-v1, anthropic.claude-v2anthropic.claude-v2:1。模型 ID 值也可以在 AWS Bedrock 文档中找到基本模型 ID。

*提示: *所有 spring.ai.bedrock.anthropic.chat.options 前缀的属性, 可以在运行期间通过添加特定请求参数到 Prompt 调用 实现覆盖.

聊天选项

AnthropicChatOptions.java 提供了模型配置,例如:temperature、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()
    ));

提示: 除了特定于模型的 AnthropicChatOptions 之外,您还可以使用通过 ChatOptionsBuilder#builder() 创建的可移植 ChatOptions 实例。

Sample Controller (自动配置)

创建 一个新的 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

提示: 将 regions, access-keysecret-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 = "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);
    }
}

手动配置

BedrockAnthropicChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 Api 客户端连接到 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'
}

接下来, 创建一个 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("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 提供了基于 AWS Bedrock Anthropic Claude 模型的轻量级Java 客户端。

以下类图说明了 AnthropicChatBedrockApi 接口和构建块:

AnthropicChatBedrockApi 支持 anthropic.claude-instant-v1, anthropic.claude-v2anthropic.claude-v2:1 模型的同步(e.g. chatCompletion())和流式 (e.g. 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();

请关注 AnthropicChatBedrockApi.java 的 JavaDoc 以获取更多信息。

作者:Jeebiz  创建时间:2024-04-05 23:39
最后编辑:Jeebiz  更新时间:2024-07-06 19:00