Titan聊天

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

AWS Bedrock Titan模型页面Amazon Bedrock用户指南提供了如何使用AWS托管模型的详细信息。

先决条件

有关设置API访问的详细信息,请参阅Amazon Bedrock的Spring AI文档

添加存储库和BOM

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

为了帮助管理依赖关系,Spring AI提供了BOM(材料清单),以确保整个项目中使用一致的Spring AI版本。请参阅依赖关系管理部分将Spring AI BOM添加到您的构建系统中。

自动配置

在您的项目的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添加到您的构建文件中。

启用Titan Chat

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

export SPRING_AI_BEDROCK_TITAN_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.titan.chat 是配置Titan聊天客户端实现的属性前缀。

属性 描述 默认

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默认

spring.ai.bedrock.titan.chat.options.stopSequences

配置最多四个序列,生成器将识别这些序列。在停止序列之后,生成器停止生成进一步的令牌。返回的文本不包含停止序列。

AWS Bedrock默认

spring.ai.bedrock.titan.chat.options.maxTokenCount

指定生成的响应中要使用的最大令牌数。请注意,模型可能在达到此最大值之前停止。此参数仅指定要生成的令牌的绝对最大数量。我们建议最大限制为4,000个令牌以获得最佳性能。

AWS Bedrock默认

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

所有以 spring.ai.bedrock.titan.chat.options为前缀的属性都可以通过在 Prompt 调用中添加特定于请求的 聊天选项 来在运行时进行覆盖。

聊天选项

BedrockTitanChatOptions.java 提供了模型配置,例如温度、topP等。

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

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

ChatResponse response = chatClient.call(
    new Prompt(
        "产生5个著名海盗的名字。",
        BedrockTitanChatOptions.builder()
            .withTemperature(0.4)
        .build()
    ));
除了模型特定的 BedrockTitanChatOptions 外,您还可以使用一个可移植的 ChatOptions 实例,该实例是使用 ChatOptionsBuilder#builder() 创建的。

示例控制器(自动配置)

创建 一个新的Spring Boot项目,并将 spring-ai-bedrock-ai-spring-boot-starter 添加到您的pom(或gradle)依赖中。

添加一个 application.properties 文件到 src/main/resources 目录下,以启用并配置Titan 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
用您的AWS凭证替换 regionsaccess-keysecret-key
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,并使用低级TitanChatBedrockApi客户端连接到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'
}
请参阅依赖管理部分,将Spring AI BOM添加到您的构建文件。

接下来,创建一个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("生成5个著名海盗的名字。"));

// 或者使用流响应
Flux<ChatResponse> response = chatClient.stream(
    new Prompt("生成5个著名海盗的名字。"));

低级TitanChatBedrockApi客户端

TitanChatBedrockApi提供了一个轻量级的Java客户端,用于AWS Bedrock Bedrock Titan models

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

bedrock titan chat low level api

客户端支持amazon.titan-text-lite-v1amazon.titan-text-express-v1型号,可用于同步(例如chatCompletion())和流式响应(例如chatCompletionStream())。

下面是一个简单的片段,展示如何以编程方式使用api:

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

TitanChatRequest titanChatRequest = TitanChatRequest.builder("给我3个著名海盗的名字?")
	.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以获取更多信息。