Titan Chat

Amazon Titan 基础模型 (FMs) 通过完全托管的 API 为客户提供广泛的高性能图像、多模式嵌入和文本模型选择。 Amazon Titan 模型由 AWS 创建并在大型数据集上进行预训练,使其成为强大的通用模型,旨在支持各种用例,同时还支持负责任地使用 AI。按原样使用它们或使用您自己的数据私下自定义它们。

AWS Llama 2 模型页面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'
}

启用 Titan Chat

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

export SPRING_AI_BEDROCK_TITAN_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.titan.chat 前缀的属性,可让您配置 Titan Chat 客户端的实现。
属性 描述 默认值
spring.ai.bedrock.titan.chat.enable 启用Bedrock Titan 对话客户端。默认禁用 false
spring.ai.bedrock.titan.chat.model 要使用的型号 ID。请参阅 TitanChatBedrockApi#TitanChatModel了解支持的模型。 amazon.titan-text-lite-v1
spring.ai.bedrock.titan.chat.options.temperature 控制输出的随机性。值的范围可以超过 [0.0,1.0] 0.7
spring.ai.bedrock.titan.chat.options.topP 采样时要考虑的令牌的最大累积概率。 AWS Bedrock default
spring.ai.bedrock.titan.chat.options.stopSequences 配置生成器可识别的最多四个序列。在停止序列之后,生成器停止生成更多令牌。返回的文本不包含停止序列。 AWS Bedrock default
spring.ai.bedrock.titan.chat.options.maxTokenCount 指定在生成的响应中使用的最大令牌数。请注意,模型可能会在达到此最大值之前停止。该参数仅指定要生成的令牌的绝对最大数量。为了获得最佳性能,我们建议限制为 4,000 个令牌。 AWS Bedrock default

查看 TitanChatBedrockApi#TitanChatModel 以获取其他模型 ID。支持的值为:amazon.titan-text-lite-v1amazon.titan-text-express-v1。模型 ID 值也可以在 AWS Bedrock 文档中找到基本模型 ID。

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

聊天选项

BedrockTitanChatOptions 提供了模型配置,例如:temperature、topK、topP 等。

启动时,可以使用BedrockTitanChatClient(api, options) 构造函数或 spring.ai.bedrock.titan.chat.options.*属性配置默认选项。

在运行时,您可以通过向调用添加新的、特定于请求的选项来覆盖默认选项Prompt。例如,要覆盖特定请求的默认温度:

ChatResponse response = chatClient.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        BedrockTitanChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));

提示: 除了特定于模型的 BedrockTitanChatOptions 之外,您还可以使用通过 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.titan.chat.enabled=true
spring.ai.bedrock.titan.chat.options.temperature=0.8

提示: 将 regions, access-keysecret-key 替换为您的 AWS 凭证。

这将创建一个可以注入到您的类中的 BedrockTitanChatClient 实现。下面是一个@Controller使用聊天客户端生成文本的简单类的示例。

@RestController
public class ChatController {

    private final BedrockTitanChatClient chatClient;

    @Autowired
    public ChatController(BedrockTitanChatClient 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);
    }
}

手动配置

BedrockTitanChatClient 实现 ChatClientStreamingChatClient, 并使用 轻量级 Api 客户端连接到 Bedrock Titanic 服务。

添加 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'
}

接下来, 创建一个 BedrockTitanChatClient 并将其用于文本生成:

TitanChatBedrockApi titanApi = new TitanChatBedrockApi(
    TitanChatModel.TITAN_TEXT_EXPRESS_V1.id(),
    EnvironmentVariableCredentialsProvider.create(),
    Region.US_EAST_1.id(), new ObjectMapper());

BedrockTitanChatClient chatClient = new BedrockTitanChatClient(titanApi,
    BedrockTitanChatOptions.builder()
        .withTemperature(0.6f)
        .withTopP(0.8f)
        .withMaxTokenCount(100)
    .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."));

轻量级 TitanChatBedrockApi 客户端

TitanChatBedrockApi 提供了基于 AWS Bedrock Bedrock Titan 模型的轻量级Java 客户端。

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

TitanChatBedrockApi 支持 amazon.titan-text-lite-v1amazon.titan-text-express-v1 模型的同步(e.g. chatCompletion())和流式 (e.g. chatCompletionStream()) 请求。

以下是如何以编程方式使用 api 的简单片段:

TitanChatBedrockApi titanBedrockApi = new TitanChatBedrockApi(TitanChatCompletionModel.TITAN_TEXT_EXPRESS_V1.id(),
        Region.EU_CENTRAL_1.id());

TitanChatRequest titanChatRequest = TitanChatRequest.builder("Give me the names of 3 famous pirates?")
    .withTemperature(0.5f)
    .withTopP(0.9f)
    .withMaxTokenCount(100)
    .withStopSequences(List.of("|"))
    .build();

TitanChatResponse response = titanBedrockApi.chatCompletion(titanChatRequest);

Flux<TitanChatResponseChunk> response = titanBedrockApi.chatCompletionStream(titanChatRequest);

List<TitanChatResponseChunk> results = response.collectList().block();

请关注 TitanChatBedrockApi 的 JavaDoc 以获取更多信息。

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