>Java >java지도 시간 >손쉬운 AI 모델 통합: AI 모델 구축 및 평가(Spring Boot 및 Hugging Face)

손쉬운 AI 모델 통합: AI 모델 구축 및 평가(Spring Boot 및 Hugging Face)

Susan Sarandon
Susan Sarandon원래의
2025-01-03 12:17:39639검색

AI 혁명이 도래했으며, 그에 따라 텍스트를 생성하고, 시각적 자료를 생성하고, 복잡한 문제를 해결할 수 있는 강력한 모델 목록이 계속 늘어나고 있습니다. 하지만 현실을 직시하자면, 옵션이 너무 많아서 어떤 모델이 프로젝트에 가장 적합한지 파악하는 것이 부담스러울 수 있습니다. 이러한 모델을 신속하게 테스트하고 결과를 실제 확인하고 생산 시스템에 통합할 모델을 결정할 수 있는 방법이 있다면 어떨까요?

Hugging Face의 추론 API를 입력하세요. 최첨단 AI 모델을 탐색하고 활용하는 지름길입니다. 플러그 앤 플레이 솔루션을 제공하여 모델 설정, 호스팅 또는 교육의 번거로움을 제거합니다. 새로운 기능을 브레인스토밍하거나 모델의 기능을 평가할 때 Hugging Face를 사용하면 AI 통합이 그 어느 때보다 간단해집니다.

이 블로그에서는 AI 모델을 손쉽게 테스트하고 평가할 수 있는 Spring Boot를 사용하여 경량 백엔드 애플리케이션을 구축하는 과정을 안내해 드리겠습니다. 기대할 수 있는 사항은 다음과 같습니다.


? 당신이 배울 내용

  • AI 모델 액세스: Hugging Face의 Inference API를 사용하여 모델을 탐색하고 테스트하는 방법을 알아보세요.
  • 백엔드 구축: 이러한 모델과 상호 작용할 Spring Boot 애플리케이션을 생성하세요.
  • 테스트 모델: 샘플 프롬프트를 사용하여 텍스트 및 이미지 생성을 위한 엔드포인트를 설정하고 테스트합니다.

마지막에는 다양한 AI 모델을 테스트하고 프로젝트 요구 사항에 대한 적합성에 대해 정보를 바탕으로 결정을 내릴 수 있는 편리한 도구를 갖게 됩니다. 호기심과 구현 사이의 격차를 해소할 준비가 되었다면 시작해 보세요!


?️ 포옹 얼굴 추론 API를 사용하는 이유는 무엇인가요?

Hugging Face가 AI 통합의 판도를 바꾸는 이유는 다음과 같습니다.

  • 사용 편의성: 모델을 교육하거나 배포할 필요가 없습니다. API를 호출하기만 하면 됩니다.
  • 다양성: 텍스트 생성, 이미지 생성 등과 같은 작업을 위해 150,000개 이상의 모델에 액세스하세요.
  • 확장성: 프로토타이핑 및 프로덕션 용도로 적합합니다.

? 무엇을 만들 것인가

우리는 다음과 같은 기능을 갖춘 Spring Boot 애플리케이션인 QuickAI를 구축할 것입니다.

  1. 텍스트 생성: 프롬프트를 기반으로 창의적인 콘텐츠를 만듭니다.
  2. 이미지 생성: 텍스트 설명을 시각적 자료로 변환합니다.
  3. API 문서 제공: Swagger를 사용하여 API를 테스트하고 상호 작용합니다.

? 시작하기

1단계: Hugging Face에 가입하세요

huggingface.co로 가서 아직 계정이 없다면 계정을 만드세요.

2단계: API 키 받기

계정 설정으로 이동하여 API 키를 생성하세요. 이 키를 사용하면 Spring Boot 애플리케이션이 Hugging Face의 Inference API와 상호 작용할 수 있습니다.

3단계: 모델 탐색

Hugging Face 모델 허브를 확인하여 귀하에게 필요한 모델을 찾으세요. 이 튜토리얼에서는 다음을 사용합니다.

  • 텍스트 생성 모델(예: HuggingFaceH4/zephyr-7b-beta).
  • 이미지 생성 모델(예: Stabilityai/stable-diffusion-xl-base-1.0)

?️ 스프링 부트 프로젝트 설정

1단계: 새 Spring Boot 프로젝트 생성

Spring Initializr를 사용하여 다음 종속성으로 프로젝트를 설정하세요.

  • Spring WebFlux: 반응형, 비차단 API 호출용.
  • 롬복: 상용구 코드를 줄입니다.
  • Swagger: API 문서용.

2단계: 포옹하는 얼굴 구성 추가

application.properties 파일에 Hugging Face API 키와 모델 URL을 추가하세요.

huggingface.text.api.url=https://api-inference.huggingface.co/models/your-text-model
huggingface.api.key=your-api-key-here
huggingface.image.api.url=https://api-inference.huggingface.co/models/your-image-model

? 다음은 무엇입니까?

코드를 자세히 살펴보고 텍스트 및 이미지 생성을 위한 서비스를 구축해 보겠습니다. 계속 지켜봐주세요!

1. 텍스트 생성 서비스:

@Service
public class LLMService {
    private final WebClient webClient;
    private static final Logger logger = LoggerFactory.getLogger(LLMService.class);

    // Constructor to initialize WebClient with Hugging Face API URL and API key
    public LLMService(@Value("${huggingface.text.api.url}") String apiUrl,
                      @Value("${huggingface.api.key}") String apiKey) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl) // Set the base URL for the API
                .defaultHeader("Authorization", "Bearer " + apiKey) // Add API key to the header
                .build();
    }

    // Method to generate text using Hugging Face's Inference API
    public Mono<String> generateText(String prompt) {
        // Validate the input prompt
        if (prompt == null || prompt.trim().isEmpty()) {
            return Mono.error(new IllegalArgumentException("Prompt must not be null or empty"));
        }

        // Create the request body with the prompt
        Map<String, String> body = Collections.singletonMap("inputs", prompt);

        // Make a POST request to the Hugging Face API
        return webClient.post()
                .bodyValue(body) 
                .retrieve() 
                .bodyToMono(String.class) 
                .doOnSuccess(response -> logger.info("Response received: {}", response)) // Log successful responses
                .doOnError(error -> logger.error("Error during API call", error)) // Log errors
                .retryWhen(Retry.backoff(3, Duration.ofMillis(500))) // Retry on failure with exponential backoff
                .timeout(Duration.ofSeconds(5)) // Set a timeout for the API call
                .onErrorResume(error -> Mono.just("Fallback response due to error: " + error.getMessage())); // Provide a fallback response on error
    }
}

2. 이미지 생성 서비스:

@Service
public class ImageGenerationService {

    private static final Logger logger = LoggerFactory.getLogger(ImageGenerationService.class);
    private final WebClient webClient;

    public ImageGenerationService(@Value("${huggingface.image.api.url}") String apiUrl,
                                  @Value("${huggingface.api.key}") String apiKey) {
        this.webClient = WebClient.builder()
                .baseUrl(apiUrl)
                .defaultHeader("Authorization", "Bearer " + apiKey)
                .build();
    }

    public Mono<byte[]> generateImage(String prompt) {
        if (prompt == null || prompt.trim().isEmpty()) {
            return Mono.error(new IllegalArgumentException("Prompt must not be null or empty"));
        }

        Map<String, String> body = Collections.singletonMap("inputs", prompt);

        return webClient.post()
                .bodyValue(body)
                .retrieve()
                .bodyToMono(byte[].class) / Convert the response to a Mono<byte[]> (image bytes)
                .timeout(Duration.ofSeconds(10)) // Timeout after 10 seconds
                .retryWhen(Retry.backoff(3, Duration.ofMillis(500))) // Retry logic
                .doOnSuccess(response -> logger.info("Image generated successfully for prompt: {}", prompt))
                .doOnError(error -> logger.error("Error generating image for prompt: {}", prompt, error))
                .onErrorResume(WebClientResponseException.class, ex -> {
                    logger.error("HTTP error during image generation: {}", ex.getMessage(), ex);
                    return Mono.error(new RuntimeException("Error generating image: " + ex.getMessage()));
                })
                .onErrorResume(TimeoutException.class, ex -> {
                    logger.error("Timeout while generating image for prompt: {}", prompt);
                    return Mono.error(new RuntimeException("Request timed out"));
                });
    }
}

예시 프롬프트와 그 결과: ?

1. 텍스트 기반 엔드포인트:

Effortless AI Model Integration: Build and Evaluate AI Models (Spring Boot and Hugging Face)

2. 이미지 기반 엔드포인트:

Effortless AI Model Integration: Build and Evaluate AI Models (Spring Boot and Hugging Face)

? 프로젝트 살펴보기

들어갈 준비가 되셨나요? QuickAI GitHub 저장소를 확인하여 전체 코드를 보고 따라해 보세요. 유용하다고 생각되면 ⭐를 부여하세요.

보너스?

이 프로젝트를 더 진행하고 싶으신가요?

  • 프런트엔드 앱 구축에 도움이 될 API 문서용 Swagger UI를 구성했습니다.
  • 좋아하는 프런트엔드 프레임워크(예: React, Angular 또는 일반 HTML/CSS/Vanilla JS)를 사용하여 간단한 프런트엔드 앱을 구축하세요.

? 축하합니다. 여기까지 오셨습니다.

이제 Hugging Face를 사용하는 방법을 아셨나요?:

  1. 애플리케이션에서 AI 모델을 빠르게 사용하려면
  2. 텍스트 생성: 프롬프트에서 창의적인 콘텐츠를 만듭니다.
  3. 이미지 생성: 텍스트 설명을 시각적 자료로 변환합니다.

? 연결하자!

LinkedIn에서 저를 찾아 공동 작업을 하거나 제안 사항이 있으면 Portfolio는 GitHub에서 저의 다른 프로젝트도 살펴보세요.

질문이나 제안 사항이 있으면 아래에 댓글을 남겨주시면 기꺼이 답변해 드리겠습니다.

즐거운 코딩하세요! ?

위 내용은 손쉬운 AI 모델 통합: AI 모델 구축 및 평가(Spring Boot 및 Hugging Face)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.