Titan 嵌入

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

Bedrock Titan 嵌入支持文本和图像嵌入。

Bedrock Titan 嵌入不支持批量嵌入。

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

先决条件

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

添加仓库和 BOM

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

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

自动配置

Spring AI 自动配置、启动器模块的工件名称发生了重大变化。 有关更多信息,请参阅 升级说明

spring-ai-starter-model-bedrock 依赖项添加到您的项目的 Maven pom.xml 文件中:

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-model-bedrock</artifactId>
</dependency>

或添加到您的 Gradle build.gradle 构建文件中。

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-bedrock'
}

请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。

启用 Titan 嵌入支持

默认情况下,Titan 嵌入模型是禁用的。 要启用它,请在应用程序配置中将 spring.ai.model.embedding 属性设置为 bedrock-titan

spring.ai.model.embedding=bedrock-titan

或者,您可以使用 Spring 表达式语言 (SpEL) 引用环境变量:

# 在 application.yml 中
spring:
  ai:
    model:
      embedding: ${AI_MODEL_EMBEDDING}
# 在您的环境或 .env 文件中
export AI_MODEL_EMBEDDING=bedrock-titan

您还可以在启动应用程序时使用 Java 系统属性设置此属性:

java -Dspring.ai.model.embedding=bedrock-titan -jar your-application.jar

嵌入属性

前缀 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.model.embedding 的顶级属性进行配置。 要启用,spring.ai.model.embedding=bedrock-titan(默认启用) 要禁用,spring.ai.model.embedding=none(或任何不匹配 bedrock-titan 的值) 此更改是为了允许配置多个模型。

前缀 spring.ai.bedrock.titan.embedding(在 BedrockTitanEmbeddingProperties 中定义)是配置 Titan 嵌入模型实现的属性前缀。

属性

描述

默认值

spring.ai.bedrock.titan.embedding.enabled (已移除且不再有效)

启用或禁用 Titan 嵌入支持

false

spring.ai.model.embedding

启用或禁用 Titan 嵌入支持

bedrock-titan

spring.ai.bedrock.titan.embedding.model

要使用的模型 ID。请参阅 TitanEmbeddingModel 以了解支持的模型。

amazon.titan-embed-image-v1

支持的值有:amazon.titan-embed-image-v1amazon.titan-embed-text-v1amazon.titan-embed-text-v2:0。 模型 ID 值也可以在 AWS Bedrock 文档中查找,用于基础模型 ID

运行时选项

BedrockTitanEmbeddingOptions.java 提供了模型配置,例如 input-type。 在启动时,可以使用 BedrockTitanEmbeddingModel(api).withInputType(type) 方法或 spring.ai.bedrock.titan.embedding.input-type 属性配置默认选项。

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

EmbeddingResponse embeddingResponse = embeddingModel.call(
    new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
        BedrockTitanEmbeddingOptions.builder()
        	.withInputType(InputType.TEXT)
        .build()));

示例控制器

创建一个新的 Spring Boot 项目,并将 spring-ai-starter-model-bedrock 添加到您的 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.model.embedding=bedrock-titan

regionsaccess-keysecret-key 替换为您的 AWS 凭据。

这将创建一个 EmbeddingController 实现,您可以将其注入到您的类中。 这是一个简单的 @Controller 类的示例,它使用聊天模型生成文本。

@RestController
public class EmbeddingController {

    private final EmbeddingModel embeddingModel;

    @Autowired
    public EmbeddingController(EmbeddingModel embeddingModel) {
        this.embeddingModel = embeddingModel;
    }

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

手动配置

BedrockTitanEmbeddingModel 实现了 EmbeddingModel 并使用 低级 TitanEmbeddingBedrockApi 客户端 连接到 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'
}

请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。

接下来,创建一个 BedrockTitanEmbeddingModel 并将其用于文本嵌入:

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

var embeddingModel = new BedrockTitanEmbeddingModel(this.titanEmbeddingApi);

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

低级 TitanEmbeddingBedrockApi 客户端

TitanEmbeddingBedrockApi 是一个轻量级 Java 客户端,基于 AWS Bedrock Titan 嵌入模型

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

bedrock titan embedding low level api

TitanEmbeddingBedrockApi 支持 amazon.titan-embed-image-v1amazon.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 = this.titanEmbedApi.embedding(this.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(this.image))
	.build();

TitanEmbeddingResponse response = this.titanEmbedApi.embedding(this.request);