PostgresML 임베딩
PostgresML 임베딩
Spring AI는 PostgresML 텍스트 임베딩 모델을 지원해요. 임베딩은 텍스트의 숫자 표현으로, 단어와 문장을 숫자 배열인 벡터로 나타내요. 이 글에서는 PostgresML 임베딩 모델의 자동 설정, 런타임 옵션, 그리고 수동 구성까지 알아볼게요.
출처: 문서
본문
Spring AI는 PostgresML 텍스트 임베딩 모델을 지원해요.
임베딩은 텍스트의 숫자 표현이에요. 단어와 문장을 벡터(숫자 배열)로 나타내는 데 사용돼요. 임베딩은 거리 측정으로 숫자 벡터의 유사도를 비교해 유사한 텍스트 조각을 찾는 데 사용되거나, 대부분의 알고리즘은 텍스트를 직접 사용할 수 없으므로 다른 머신러닝 모델의 입력 피처로 사용될 수 있어요.
PostgresML에서 텍스트로부터 임베딩을 생성하는 데 많은 사전 훈련 LLM을 사용할 수 있어요. Hugging Face에서 사용 가능한 모든 모델을 찾아 최상의 솔루션을 고를 수 있어요.
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를 참고해주세요. |
|---|
Spring AI는 PostgresML Embedding Model에 대한 Spring Boot 자동 설정을 제공해요. 활성화하려면 프로젝트의 Maven pom.xml 파일에 다음 의존성을 추가하세요:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-postgresml-embedding</artifactId>
</dependency>
또는 Gradle build.gradle 빌드 파일에 추가할 수도 있어요:
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-postgresml-embedding'
}
| __ | 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
PostgresMlEmbeddingModel을 구성하려면 spring.ai.postgresml.embedding.* 프로퍼티를 사용하세요. links
Embedding Properties
| __ | 임베딩 자동 설정의 활성화/비활성화는 이제 프리픽스 spring.ai.model.embedding이 붙은 최상위 프로퍼티로 설정해요. 활성화하려면 spring.ai.model.embedding=postgresml (기본값으로 활성화됨). 비활성화하려면 spring.ai.model.embedding=none (또는 postgresml과 일치하지 않는 어떤 값). 이 변경은 여러 모델의 설정을 허용하기 위한 것이에요. |
|---|
프리픽스 spring.ai.postgresml.embedding은 PostgresML 임베딩의 EmbeddingModel 구현을 구성하는 프로퍼티 프리픽스예요.
| Property | Description | Default |
|---|---|---|
| spring.ai.postgresml.embedding.enabled (제거됨, 더 이상 유효하지 않음) | PostgresML 임베딩 모델 활성화. | true |
| spring.ai.model.embedding | PostgresML 임베딩 모델 활성화. | postgresml |
| spring.ai.postgresml.embedding.create-extension | 확장을 활성화하기 위해 SQL 'CREATE EXTENSION IF NOT EXISTS pgml' 실행 | false |
| spring.ai.postgresml.embedding.transformer | 임베딩에 사용할 Hugging Face transformer 모델. | distilbert-base-uncased |
| spring.ai.postgresml.embedding.kwargs | 추가 transformer 특정 옵션. | empty map |
| spring.ai.postgresml.embedding.vector-type | 임베딩에 사용할 PostgresML 벡터 타입. PG_ARRAY와 PG_VECTOR 두 옵션을 지원해요. |
PG_ARRAY |
| spring.ai.postgresml.embedding.metadata-mode | 문서 메타데이터 집계 모드 | EMBED |
| __ | spring.ai.postgresml.embedding 프리픽스가 붙은 모든 프로퍼티는 런타임에 EmbeddingRequest 호출에 요청별 Runtime Options를 추가해 재정의할 수 있어요. |
|---|
Runtime Options
PostgresMlEmbeddingOptions.java를 사용해 사용할 모델 같은 옵션으로 PostgresMlEmbeddingModel을 구성해요.
시작 시 PostgresMlEmbeddingOptions를 PostgresMlEmbeddingModel 생성자에 전달해 모든 임베딩 요청에 사용될 기본 옵션을 구성할 수 있어요.
런타임에는 EmbeddingRequest에서 PostgresMlEmbeddingOptions를 사용해 기본 옵션을 재정의할 수 있어요.
예를 들어 특정 요청의 기본 모델 이름을 재정의하려면:
EmbeddingResponse embeddingResponse = embeddingModel.call(
new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"),
PostgresMlEmbeddingOptions.builder()
.transformer("intfloat/e5-small")
.vectorType(VectorType.PG_ARRAY)
.kwargs(Map.of("device", "gpu"))
.build()));
Sample Controller
이렇게 하면 클래스에 주입할 수 있는 EmbeddingModel 구현이 생성돼요. EmbeddingModel 구현을 사용하는 간단한 @Controller 클래스 예시예요:
spring.ai.postgresml.embedding.transformer=distilbert-base-uncased
spring.ai.postgresml.embedding.vector-type=PG_ARRAY
spring.ai.postgresml.embedding.metadata-mode=EMBED
spring.ai.postgresml.embedding.kwargs.device=cpu
@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
Spring Boot 자동 설정 대신 PostgresMlEmbeddingModel을 수동으로 만들 수 있어요. 이를 위해 프로젝트의 Maven pom.xml 파일에 spring-ai-postgresml 의존성을 추가하세요:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-postgresml</artifactId>
</dependency>
또는 Gradle build.gradle 빌드 파일에 추가할 수도 있어요:
dependencies {
implementation 'org.springframework.ai:spring-ai-postgresml'
}
| __ | 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
다음으로 PostgresMlEmbeddingModel 인스턴스를 만들고 두 입력 텍스트 사이의 유사도를 계산하는 데 사용해요:
var jdbcTemplate = new JdbcTemplate(dataSource); // your posgresml data source
PostgresMlEmbeddingModel embeddingModel = new PostgresMlEmbeddingModel(this.jdbcTemplate,
PostgresMlEmbeddingOptions.builder()
.transformer("distilbert-base-uncased") // huggingface transformer model name.
.vectorType(VectorType.PG_VECTOR) //vector type in PostgreSQL.
.kwargs(Map.of("device", "cpu")) // optional arguments.
.metadataMode(MetadataMode.EMBED) // Document metadata mode.
.build());
embeddingModel.afterPropertiesSet(); // initialize the jdbc template and database.
EmbeddingResponse embeddingResponse = this.embeddingModel
.embedForResponse(List.of("Hello World", "World is big and salvation is near"));
| __ | 수동으로 만들면, 프로퍼티를 설정한 뒤 클라이언트를 사용하기 전에 afterPropertiesSet()을 호출해야 해요. PostgresMlEmbeddingModel을 @Bean으로 만드는 것이 더 편리하고(권장되며) 좋아요. 그러면 afterPropertiesSet()을 수동으로 호출할 필요가 없어요: |
|---|
@Bean
public EmbeddingModel embeddingModel(JdbcTemplate jdbcTemplate) {
return new PostgresMlEmbeddingModel(jdbcTemplate,
PostgresMlEmbeddingOptions.builder()
....
.build());
}