链接:https://aws.amazon.com/bedrock/titan/[Amazon Titan] 基础模型(FMs)通过一个完全托管的API,为客户提供了一系列高性能的图像、多模态嵌入和文本模型选择。Amazon Titan模型由AWS创建,并在大型数据集上进行预训练,使它们成为强大的、通用的模型,旨在支持各种用例,同时也支持AI的负责任使用。根据需要,您可以直接使用它们,或者用您自己的数据进行私人定制。

[AWS Bedrock Titan Model Page](https://aws.amazon.com/bedrock/titan/)和[Amazon Bedrock User Guide](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)上含有如何使用 AWS 托管模型的详细信息。

先决条件

请参考 亚马逊 Bedrock 上的 Spring AI 文档来设置 API 访问。

添加仓库和物料清单

Spring AI 构件在 Spring Milestone 和 Snapshot 仓库中发布。请参考 仓库节,将这些仓库添加到您的构建系统中。

为了帮助依赖管理,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'
}
Tip
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。

启用泰坦聊天

默认情况下,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](https://github.com/spring-projects/spring-ai/blob/4839a6175cd1ec89498b97d3efb6647022c3c7cb/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java#L220)了解支持的模型。

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

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

AWS Bedrock默认

请查看 https://github.com/spring-projects/spring-ai/blob/4839a6175cd1ec89498b97d3efb6647022c3c7cb/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java#L220 [TitanChatBedrockApi#TitanChatModel] 以获取其他模型ID。支持的值有:amazon.titan-text-lite-v1amazon.titan-text-express-v1。模型ID的值也可以在 https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids-arns.html [AWS Bedrock文档中的基本模型ID]找到。

Tip
所有以 spring.ai.bedrock.titan.chat.options 为前缀的属性可以在运行时被覆盖,方法是在 Prompt 调用时添加一个特定请求的 [chat-options]

运行时选项

'''The BedrockTitanChatOptions.java 提供了模型配置,例如温度、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()
    ));

样本控制器

通过访问 https://start.spring.io/ [创建] 一个新的Spring Boot项目,并将 spring-ai-bedrock-ai-spring-boot-starter 添加到你的pom(或gradle)依赖中。

在`src/main/resources`目录下添加一个`application.properties`文件,以启用和配置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
Tip
将`regions`、`access-key`和`secret-key`替换为您的AWS凭证。

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

@RestController
public class ChatController {

private final BedrockTitanChatClient chatClient;

@Autowired
public ChatController(BedrockTitanChatClient chatClient) {
    this.chatClient = chatClient;
}

java
    @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 BedrockTitanChatClient 实现了 ChatClientStreamingChatClient,并使用 [low-level-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'
}
Tip
请参考依赖管理部分,以将Spring AI BOM添加到您的构建文件中。

下一步,创建一个https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatClient.java[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客户端

'''The TitanChatBedrockApi provides is lightweight Java client on top of AWS Bedrock Bedrock Titan models.''' 提供的是一个轻量级的Java客户端,建立在AWS Bedrock的基础上,用于[Bedrock Titan 模型]。

以下类图展示了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("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 以获取更多信息。