跳到主要内容

Titan 嵌入

DeepSeek V3 中英对照 Titan Titan Embeddings

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

备注

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

备注

Bedrock Titan Embedding 不支持批量嵌入。

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

前提条件

请参阅 Spring AI 关于 Amazon Bedrock 的文档 以设置 API 访问。

添加仓库和 BOM

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

为了帮助管理依赖项,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>
xml

或者到你的 Gradle build.gradle 构建文件中。

dependencies {
implementation 'org.springframework.ai:spring-ai-bedrock-ai-spring-boot-starter'
}
gradle
提示

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

启用 Titan Embedding 支持

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

export SPRING_AI_BEDROCK_TITAN_EMBEDDING_ENABLED=true
shell

嵌入属性

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

属性描述默认值
spring.ai.bedrock.aws.region使用的 AWS 区域。us-east-1
spring.ai.bedrock.aws.access-keyAWS 访问密钥。-
spring.ai.bedrock.aws.secret-keyAWS 秘密密钥。-

前缀 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 调用添加新的、特定于请求的选项来覆盖默认选项。例如,要为特定请求覆盖默认的 temperature 参数:

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

示例控制器

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

src/main/resources 目录下添加一个 application.properties 文件,以启用并配置 Titan Embedding 模型:

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
none
提示

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);
}
}
java

手动配置

BedrockTitanEmbeddingModel 实现了 EmbeddingModel 接口,并使用 Low-level TitanEmbeddingBedrockApi Client 连接到 Bedrock Titan 服务。

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

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

或到你的 Gradle build.gradle 构建文件中。

dependencies {
implementation 'org.springframework.ai:spring-ai-bedrock'
}
gradle
提示

请参考 依赖管理 部分,将 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.
java

低级 TitanEmbeddingBedrockApi 客户端

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

以下类图展示了 TitanEmbeddingBedrockApi 接口及其构建模块:

bedrock titan embedding 低级 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);
java

要将图像嵌入,你需要将其转换为 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);
java