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 成品發布於 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) 相依性。

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.bedrock.titan.embedding.enabled=true
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 提供基於 AWS Bedrock Titan 嵌入模型 之上的輕量級 Java 用戶端。

以下類別圖說明了 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);