Titan 嵌入向量
提供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仓库中。请参阅工件仓库章节,将这些仓库添加到您的构建系统中。
为便于依赖管理,Spring AI 提供了一个物料清单(BOM),以确保在整个项目中使用的 Spring AI 版本保持一致。请参考依赖管理章节,将 Spring AI BOM 添加到你的构建系统中。
自动配置
Spring AI 的自动配置和 starter 模块的 artifact 名称有重大变更。更多信息请参阅 升级说明。
在项目的Maven pom.xml文件中添加 spring-ai-starter-model-bedrock 依赖:
<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 Embedding 支持
默认情况下,Titan 嵌入模型处于禁用状态。要启用它,请在应用程序配置中将 spring.ai.model.embedding 属性设置为 bedrock-titan:
spring.ai.model.embedding=bedrock-titan
或者,你也可以使用 Spring 表达式语言(SpEL)来引用环境变量:
# In application.yml
spring:
ai:
model:
embedding: ${AI_MODEL_EMBEDDING}
# In your environment or .env file
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-v1、amazon.titan-embed-text-v1 和 amazon.titan-embed-text-v2:0。模型 ID 的值也可以在 AWS Bedrock 基础模型 ID 文档 中找到。
运行时选项
BedrockTitanEmbeddingOptions.java 提供了模型配置,例如 input-type。在启动时,可以通过 BedrockTitanEmbeddingOptions.builder().inputType(type).build() 方法或 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()
.inputType(InputType.TEXT)
.build()));
示例控制器
创建一个新的Spring Boot项目,并将 spring-ai-starter-model-bedrock 添加到您的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.model.embedding=bedrock-titan
:::提示
将 regions、access-key 和 secret-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 在 AWS Bedrock 的 Titan Embedding 模型之上提供了一个轻量级的 Java 客户端。
以下类图展示了 TitanEmbeddingBedrockApi 接口及其构建模块:

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 = 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);