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

Note
Bedrock Titan Embedding 支持文本和图像嵌入。
Note
Bedrock Titan嵌入不支持批量嵌入。

[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 托管模型的详细信息。

先决条件

参考Amazon Bedrock上的Spring AI文档来设置API访问。

添加仓库和BOM

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.embedding.enabled`属性设置为`true`。导出环境变量是设置此配置属性的一种方式:

export SPRING_AI_BEDROCK_TITAN_EMBEDDING_ENABLED=true

嵌入属性

前缀`spring.ai.bedrock.aws`是用来配置与AWS Bedrock连接的属性前缀。

Property Description Default

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.embedding(在`BedrockTitanEmbeddingProperties`中定义)是配置Titan的嵌入式客户端实现的属性前缀。

属性

描述

默认值

spring.ai.bedrock.titan.embedding.enabled

启用或禁用对Titan嵌入的支持

false

spring.ai.bedrock.titan.embedding.model

使用的模型id。参见`TitanEmbeddingModel`以获取支持的模型。

amazon.titan-embed-image-v1

支持的值包括:amazon.titan-embed-image-v1amazon.titan-embed-text-v1。模型ID值也可以在 [AWS Bedrock文档中的基础模型ID部分](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids-arns.html) 找到。

样本控制器

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

在`src/main/resources`目录下添加一个`application.properties`文件,以启用和配置Titan嵌入式客户端:

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.embedding.enabled=true
Tip
regionsaccess-keysecret-key 替换为您的AWS凭证。

这将创建一个您可以注入到您的类中的`EmbeddingController`实现。这里有一个简单的`@Controller`类的示例,它使用聊天客户端进行文本生成。

@RestController
public class EmbeddingController {

private final EmbeddingClient embeddingClient;

@Autowired
    public EmbeddingController(EmbeddingClient embeddingClient) {
        this.embeddingClient = embeddingClient;
    }

'''
    @GetMapping("/ai/embedding")
    public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        EmbeddingResponse embeddingResponse = this.embeddingClient.embedForResponse(List.of(message));
        return Map.of("embedding", embeddingResponse);
    }
}
'''

手动配置

The BedrockTitanEmbeddingClient实现了`EmbeddingClient`接口,并使用[low-level-api]与Bedrock Titan服务连接。

将`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添加到您的构建文件中。

下一步,创建一个[BedrockTitanEmbeddingClient]并用它来进行文本嵌入:https://github.com/spring-projects/spring-ai/blob/main/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanEmbeddingClient.java

var titanEmbeddingApi = new TitanEmbeddingBedrockApi(
	TitanEmbeddingModel.TITAN_EMBED_IMAGE_V1.id(), Region.US_EAST_1.id());

var embeddingClient  new BedrockTitanEmbeddingClient(titanEmbeddingApi);

EmbeddingResponse embeddingResponse = embeddingClient
	.embedForResponse(List.of("Hello World")); // NOTE titan does not support batch embedding.

TitanEmbeddingBedrockApi底层客户端

[TitanEmbeddingBedrockApi]提供了一个轻量级的Java客户端,基于AWS Bedrock的[Titan Embedding模型]。

下列类图展示了 TitanEmbeddingBedrockApi 接口和构建模块:

bedrock titan embedding low level api

TitanEmbeddingBedrockApi支持`amazon.titan-embed-image-v1`和`amazon.titan-embed-image-v1`模型用于单个和批量嵌入计算。

这里是一个简单的代码片段,展示如何以编程方式使用API:

TitanEmbeddingBedrockApi titanEmbedApi = new TitanEmbeddingBedrockApi(
		TitanEmbeddingModel.TITAN_EMBED_TEXT_V1.id(), Region.US_EAST_1.id());

TitanEmbeddingRequest request = TitanEmbeddingRequest.builder()
	.withInputText("I like to eat apples.")
	.build();

TitanEmbeddingResponse response = titanEmbedApi.embedding(request);

要嵌入一张图片,你需要将其转换成 base64 格式:

TitanEmbeddingBedrockApi titanEmbedApi = new TitanEmbeddingBedrockApi(
		TitanEmbeddingModel.TITAN_EMBED_IMAGE_V1.id(), Region.US_EAST_1.id());

byte[] image = new DefaultResourceLoader()
	.getResource("classpath:/spring_framework.png")
	.getContentAsByteArray();


TitanEmbeddingRequest request = TitanEmbeddingRequest.builder()
	.withInputImage(Base64.getEncoder().encodeToString(image))
	.build();

TitanEmbeddingResponse response = titanEmbedApi.embedding(request);