泰坦嵌入

提供基岩泰坦嵌入模型。亚马逊泰坦基础模型(FMs)通过全托管API为客户提供高性能图像、多模态嵌入和文本模型的广泛选择。 亚马逊泰坦模型由AWS创建,并在大型数据集上预训练,使其成为强大且通用的模型,旨在支持多种用例,同时支持负责任地使用人工智能。 直接使用,或者用你自己的数据私下定制。spring-doc.cadn.net.cn

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

AWS Bedrock Titan 模型页面亚马逊 Bedrock 用户指南包含了如何使用 AWS 托管模型的详细信息。spring-doc.cadn.net.cn

前提条件

添加仓库和物料清单

Spring AI 产物发布于 Maven Central 和 Spring Snapshot 仓库中。 请参阅神器仓库部分,将这些仓库添加到你的构建系统中。spring-doc.cadn.net.cn

为帮助依赖管理,Spring AI 提供了物料清单(BOM),确保整个项目中使用一致版本的 Spring AI。请参考依赖管理部分,将春季AI物料清单添加到你的构建系统中。spring-doc.cadn.net.cn

自动配置

春季AI自动配置、起始模块的工件名称发生了重大变化。 更多信息请参阅升级说明spring-doc.cadn.net.cn

添加Spring-AI-入门-模型-基岩对你项目Maven的依赖pom.xml文件:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-bedrock'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

启用Titan嵌入支持

默认情况下,Titan嵌入模型是被禁用的。 要启用它,请设置spring.ai.model.embedding属性到基岩-泰坦在你的应用配置中:spring-doc.cadn.net.cn

spring.ai.model.embedding=bedrock-titan

或者,您可以使用 Spring 表达式语言(SpEL)来引用环境变量:spring-doc.cadn.net.cn

# In application.yml
spring:
  ai:
    model:
      embedding: ${AI_MODEL_EMBEDDING}
# In your environment or .env file
export AI_MODEL_EMBEDDING=bedrock-titan

启动应用程序时,你也可以用 Java 系统属性设置此属性:spring-doc.cadn.net.cn

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

嵌入性质

前缀春.ai.bedrock.aws是配置与AWS Bedrock连接的属性前缀。spring-doc.cadn.net.cn

属性 描述 默认值

spring.ai.bedrock.aws.regionspring-doc.cadn.net.cn

AWS地区的使用。spring-doc.cadn.net.cn

美国东1号spring-doc.cadn.net.cn

spring.ai.bedrock.aws.访问密钥spring-doc.cadn.net.cn

AWS 访问密钥。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

Spring.ai.bedrock.aws.秘密密钥spring-doc.cadn.net.cn

AWS 秘密密钥。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

嵌入自动配置的启用和禁用现在通过带有前缀的顶层属性配置spring.ai.model.embedding.spring-doc.cadn.net.cn

启用时,spring.ai.model.embedding=bedrock-titan(默认启用)spring-doc.cadn.net.cn

要禁用,可以使用spring.ai.model.embedding=none(或任何与bedrock-titan不匹配的值)spring-doc.cadn.net.cn

此改动旨在允许配置多个模型。spring-doc.cadn.net.cn

前缀spring.ai.bedrock.titan.embedding(定义于基岩泰坦嵌入属性)是配置Titan嵌入模型实现的属性前缀。spring-doc.cadn.net.cn

属性spring-doc.cadn.net.cn

描述spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

spring.ai.bedrock.titan.embedding.enabled(已移除且不再有效)spring-doc.cadn.net.cn

启用或禁用对Titan嵌入的支持spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

spring.ai.model.embeddingspring-doc.cadn.net.cn

启用或禁用对Titan嵌入的支持spring-doc.cadn.net.cn

基岩-泰坦spring-doc.cadn.net.cn

spring.ai.bedrock.titan.embedding.modelspring-doc.cadn.net.cn

型号ID。参见泰坦嵌入模型针对支持的型号。spring-doc.cadn.net.cn

amazon.titan-embed-image-v1spring-doc.cadn.net.cn

支持的值有:amazon.titan-embed-image-v1,amazon.titan-embed-text-v1amazon.titan-embed-text-v2:0. 模型ID值也可以在AWS Bedrock文档中找到基础模型ID的资料。spring-doc.cadn.net.cn

运行时选项

BedrockTitanEmbeddingOptions.java提供模型配置,例如输入类型. 启动时,默认选项可以配置为BedrockTitanEmbeddingOptions.builder().inputType(type).build()方法或spring.ai.bedrock.titan.embedding.input-type性能。spring-doc.cadn.net.cn

运行时,你可以通过添加新的、请求专属的选项来覆盖默认选项,嵌入请求叫。 例如,为了覆盖特定请求的默认温度:spring-doc.cadn.net.cn

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-入门-模型-基岩对你的POM(或Gradle)依赖。spring-doc.cadn.net.cn

添加一个application.properties文件,在src/主/资源目录,用于启用和配置Titan嵌入模型:spring-doc.cadn.net.cn

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
替换地区,访问密钥秘密密钥用你的AWS凭证。

这将产生EmbeddingController(嵌入式控制器)你可以把这些实现注入到你的类里。 这里有一个简单的例子@Controller使用聊天模式生成文本的课程。spring-doc.cadn.net.cn

@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 实现了嵌入模型并使用低级 TitanEmbeddingBedrockApi 客户端连接 Bedrock Titan 服务。spring-doc.cadn.net.cn

添加春艾基岩对你项目Maven的依赖pom.xml文件:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

接下来,创建一个 BedrockTitanEmbeddingModel,并用于文本嵌入:spring-doc.cadn.net.cn

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 客户端。spring-doc.cadn.net.cn

以下类图展示了 TitanEmbeddingBedrockApi 的接口和构建模块:spring-doc.cadn.net.cn

基岩泰坦嵌入低级API

TitanEmbeddingBedrockApi 支持amazon.titan-embed-image-v1amazon.titan-embed-image-v1单次和批量嵌入计算模型。spring-doc.cadn.net.cn

这里有一个简单的示例,说明如何程序化使用该 API:spring-doc.cadn.net.cn

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

要嵌入一张图片,你需要将其转换成基地64格式:spring-doc.cadn.net.cn

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