Titan 嵌入

提供 Bedrock Titan 嵌入模型。Amazon Titan 基礎模型 (FM) 透過完全託管的 API 為客戶提供多種高效能影像、多模態嵌入和文字模型選擇。Amazon Titan 模型由 AWS 建立,並在大型資料集上預訓練,使其成為功能強大的通用模型,旨在支援各種用例,同時支援負責任地使用 AI。可以直接使用它們,也可以使用自己的資料私下定製它們。

Bedrock Titan 嵌入支援文字和影像嵌入。
Bedrock Titan 嵌入不支援批次嵌入。

AWS Bedrock Titan 模型頁面和 Amazon Bedrock 使用者指南包含有關如何使用 AWS 託管模型的詳細資訊。

先決條件

請參閱關於 Amazon Bedrock 的 Spring AI 文件,瞭解如何設定 API 訪問。

新增倉庫和 BOM

Spring AI 工件釋出在 Maven Central 和 Spring Snapshot 倉庫中。請參閱倉庫部分,瞭解如何將這些倉庫新增到您的構建系統中。

為了幫助進行依賴管理,Spring AI 提供了一個 BOM(物料清單),以確保在整個專案中使用一致版本的 Spring AI。請參閱依賴管理部分,瞭解如何將 Spring AI BOM 新增到您的構建系統中。

自動配置

Spring AI 自動配置、starter 模組的工件名稱發生了重大變化。請參閱升級說明,瞭解更多資訊。

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。匯出環境變數是設定此配置屬性的一種方法

export SPRING_AI_MODEL_EMBEDDING=bedrock-titan

嵌入屬性

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