Titan 임베딩
Titan 임베딩 (Titan Embeddings)
Bedrock Titan Embedding 모델을 제공해요. Amazon Titan 파운데이션 모델(FM)은 완전 관리형 API를 통해 고성능의 이미지, 멀티모달 임베딩, 텍스트 모델 선택지를 폭넓게 제공해요. 이 글에서는 Titan 임베딩 모델 활성화, 프로퍼티 설정, 그리고 이미지 임베딩까지 알아볼게요.
출처: 문서
본문
Bedrock Titan Embedding 모델을 제공해요. Amazon Titan 파운데이션 모델(FM)은 완전 관리형 API를 통해 고성능의 이미지, 멀티모달 임베딩, 그리고 텍스트 모델 선택지를 폭넓게 제공해요. Amazon Titan 모델은 AWS가 만들고 대규모 데이터셋으로 사전 훈련되어, 다양한 사용 사례를 지원하도록 만들어진 강력하고 범용적인 모델이면서도 AI의 책임 있는 사용을 지원해요. 그대로 사용하거나 자신의 데이터로 비공개 커스터마이즈할 수 있어요.
| __ | Bedrock Titan Embedding은 텍스트와 이미지 임베딩을 지원해요. |
|---|
| __ | Bedrock Titan Embedding은 배치 임베딩을 지원하지 않아요. |
|---|
AWS Bedrock Titan Model Page와 Amazon Bedrock User Guide에는 AWS 호스팅 모델 사용법에 대한 자세한 정보가 담겨 있어요.
Prerequisites
API 접근 설정은 Amazon Bedrock에 대한 Spring AI 문서를 참고하세요.
Add Repositories and BOM
Spring AI 아티팩트는 Maven Central과 Spring Snapshot 저장소에 게시돼요. 빌드 시스템에 이러한 저장소를 추가하려면 Artifact Repositories 섹션을 참고하세요.
의존성 관리를 돕기 위해 Spring AI는 프로젝트 전체에서 일관된 Spring AI 버전을 사용하도록 보장하는 BOM(bill of materials)을 제공해요. 빌드 시스템에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고하세요.
Auto-configuration
| __ | Spring AI 자동 설정과 스타터 모듈 아티팩트 이름에 큰 변경이 있었어요. 자세한 내용은 upgrade notes를 참고해주세요. |
|---|
프로젝트의 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을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
Enable Titan Embedding Support
기본적으로 Titan 임베딩 모델은 비활성화돼 있어요. 활성화하려면 애플리케이션 구성에서 spring.ai.model.embedding 프로퍼티를 bedrock-titan로 설정하세요:
spring.ai.model.embedding=bedrock-titan
또는 Spring Expression Language(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
Embedding Properties
프리픽스 spring.ai.bedrock.aws는 AWS Bedrock에 대한 연결을 구성하는 프로퍼티 프리픽스예요.
| Property | Description | Default |
|---|---|---|
| spring.ai.bedrock.aws.region | 사용할 AWS 리전. | us-east-1 |
| spring.ai.bedrock.aws.access-key | AWS access key. | - |
| spring.ai.bedrock.aws.secret-key | AWS secret key. | - |
| spring.ai.bedrock.aws.profile.name | AWS 프로필 이름. | - |
| spring.ai.bedrock.aws.profile.credentials-path | AWS 자격 증명 파일 경로. | - |
| spring.ai.bedrock.aws.profile.configuration-path | AWS config 파일 경로. | - |
| __ | 임베딩 자동 설정의 활성화/비활성화는 이제 프리픽스 spring.ai.model.embedding이 붙은 최상위 프로퍼티로 설정해요. 활성화하려면 spring.ai.model.embedding=bedrock-titan (기본값으로 활성화됨). 비활성화하려면 spring.ai.model.embedding=none (또는 bedrock-titan와 일치하지 않는 어떤 값). 이 변경은 여러 모델의 설정을 허용하기 위한 것이에요. |
|---|
프리픽스 spring.ai.bedrock.titan.embedding(BedrockTitanEmbeddingProperties에 정의)은 Titan의 임베딩 모델 구현을 구성하는 프로퍼티 프리픽스예요.
| Property | Description | Default |
|---|---|---|
| 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 문서의 base model IDs에서도 찾을 수 있어요.
Runtime Options
BedrockTitanEmbeddingOptions.java는 input-type 같은 모델 구성을 제공해요. 시작 시 기본 옵션은 BedrockTitanEmbeddingOptions.builder().inputType(type).build() 메서드나 spring.ai.bedrock.titan.embedding.input-type 프로퍼티로 구성할 수 있어요.
런타임에는 EmbeddingRequest 호출에 새 요청별 옵션을 추가해 기본 옵션을 재정의할 수 있어요. 예를 들어 특정 요청의 기본 input type을 재정의하려면:
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
BedrockTitanEmbeddingOptions.builder()
.inputType(InputType.TEXT)
.build()));
Sample Controller
새 Spring Boot 프로젝트를 만들고, pom(또는 gradle) 의존성에 spring-ai-starter-model-bedrock를 추가하세요.
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);
}
}
Manual Configuration
BedrockTitanEmbeddingModel은 EmbeddingModel을 구현하며, Bedrock Titan 서비스에 연결하기 위해 Low-level TitanEmbeddingBedrockApi 클라이언트를 사용해요.
프로젝트의 Maven pom.xml 파일에 spring-ai-bedrock 의존성을 추가하세요:
<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을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
다음으로 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.
Low-level TitanEmbeddingBedrockApi Client
TitanEmbeddingBedrockApi는 AWS Bedrock Titan Embedding models 위의 가벼운 Java 클라이언트를 제공해요.
다음 클래스 다이어그램은 TitanEmbeddingBedrockApi 인터페이스와 구성 요소를 보여줘요:
TitanEmbeddingBedrockApi는 단일 및 배치 임베딩 계산을 위해 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);