Titan 嵌入

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

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

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

先决条件

请参阅 Spring AI 关于 Amazon Bedrock 的文档,了解如何设置 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'
}
请参阅 依赖项管理 部分,将 Spring AI BOM 添加到您的构建文件。

启用 Titan 嵌入支持

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

export SPRING_AI_BEDROCK_TITAN_EMBEDDING_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.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-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-bedrock-ai-spring-boot-starter添加到您的 pom(或 gradle)依赖项。

添加一个application.properties文件,位于src/main/resources目录下,以启用和配置 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
区域访问密钥密钥替换为您的 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提供了基于 AWS Bedrock Titan 嵌入模型的轻量级 Java 客户端。

下面的类图说明了 TitanEmbeddingBedrockApi 接口和构建块

bedrock titan embedding low level api

TitanEmbeddingBedrockApi 支持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 = 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);