이미지 모델 API
이미지 모델 API (Image Model API)
Spring Image Model API는 이미지 생성에 특화된 다양한 AI Models와 상호작용하기 위한 간단하고 이식 가능한 인터페이스로 설계됐어요. 덕분에 최소한의 코드 변경으로 서로 다른 이미지 관련 모델을 전환할 수 있어요. 이 설계는 Spring의 모듈성·상호 교체성 철학과 일치해서, 개발자가 애플리케이션을 다양한 이미지 처리 AI 기능에 빠르게 적응시킬 수 있게 해줘요.
또한 입력 캡슐화를 위한 ImagePrompt, 출력 처리를 위한 ImageResponse 같은 동반 클래스 지원과 함께, Image Model API는 이미지 생성 전용 AI 모델과의 통신을 통일해요. 요청 준비와 응답 파싱의 복잡성을 관리해, 이미지 생성 기능에 대한 직접적이고 단순한 API 상호작용을 제공하죠.
Spring Image Model API는 Spring AI의 Generic Model API 위에 구축돼 이미지 특화 추상화와 구현을 제공해요.
출처: 공식문서
API 개요
이 섹션은 Spring Image Model API 인터페이스와 관련 클래스에 대한 안내를 제공해요.
Image Model
여기 ImageModel 인터페이스 정의가 있어요:
@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {
ImageResponse call(ImagePrompt request);
}
ImagePrompt
ImagePrompt는 ImageMessage 객체 목록과 선택적 모델 요청 옵션을 캡슐화하는 ModelRequest예요. 다음 목록은 생성자와 다른 유틸리티 메서드를 제외한 ImagePrompt 클래스의 축약 버전이에요:
public class ImagePrompt implements ModelRequest<List<ImageMessage>> {
private final List<ImageMessage> messages;
private ImageOptions imageModelOptions;
@Override
public List<ImageMessage> getInstructions() {...}
@Override
public ImageOptions getOptions() {...}
// constructors and utility methods omitted
}
ImageMessage
ImageMessage 클래스는 사용할 텍스트와 그 텍스트가 생성 이미지에 미치는 가중치(weight)를 캡슐화해요. 가중치를 지원하는 모델에서는 양수·음수가 될 수 있어요.
public class ImageMessage {
private String text;
private Float weight;
public String getText() {...}
public Float getWeight() {...}
// constructors and utility methods omitted
}
ImageOptions
이미지 생성 모델에 전달할 수 있는 옵션을 나타내요. ImageOptions 인터페이스는 ModelOptions 인터페이스를 확장하며, AI 모델에 전달할 수 있는 몇 가지 이식 가능한 옵션을 정의하는 데 쓰여요.
ImageOptions 인터페이스는 이렇게 정의돼요:
public interface ImageOptions extends ModelOptions {
Integer getN();
String getModel();
Integer getWidth();
Integer getHeight();
String getResponseFormat(); // openai - url or base64 : stability ai byte[] or base64
}
추가로, 모델별 ImageModel 구현은 각자 AI 모델에 전달할 수 있는 고유 옵션을 가질 수 있어요. 예를 들어 OpenAI 이미지 생성 모델은 quality, style 같은 자체 옵션이 있어요.
이것은 개발자가 애플리케이션 시작 시 모델 특정 옵션을 쓰고, 런타임에 ImagePrompt로 덮어쓸 수 있게 하는 강력한 기능이에요.
ImageResponse
ImageResponse 클래스의 구조는 이래요:
public class ImageResponse implements ModelResponse<ImageGeneration> {
private final ImageResponseMetadata imageResponseMetadata;
private final List<ImageGeneration> imageGenerations;
@Override
public ImageGeneration getResult() {
// get the first result
}
@Override
public List<ImageGeneration> getResults() {...}
@Override
public ImageResponseMetadata getMetadata() {...}
// other methods omitted
}
ImageResponse 클래스는 AI 모델의 출력을 담는데, 각 ImageGeneration 인스턴스는 단일 프롬프트에서 나온 잠재적으로 여러 출력 중 하나를 포함해요.
ImageResponse 클래스는 AI 모델 응답에 대한 메타데이터를 담는 ImageResponseMetadata 객체도 갖고 있어요.
ImageGeneration
마지막으로 ImageGeneration 클래스는 ModelResult를 확장해 출력 응답과 이 결과에 대한 관련 메타데이터를 나타내요:
public class ImageGeneration implements ModelResult<Image> {
private ImageGenerationMetadata imageGenerationMetadata;
private Image image;
@Override
public Image getOutput() {...}
@Override
public ImageGenerationMetadata getMetadata() {...}
// other methods omitted
}
사용 가능한 구현
ImageModel 구현은 다음 모델 공급자에 대해 제공돼요:
더 알아보기
- 이미지 입력을 함께 처리하는 멀티모달 → Multimodality API
- 오디오·이미지·텍스트 전반의 모델 API → Audio API
- 이미지 생성 관측 → Observability