[Spring Boot3] Spring AI를 활용한 초간단 Chat Model API 🗣️구현하기 (Gemini, ChatGPT)

송하연·2024년 6월 4일
10

스프링부트🌱

목록 보기
1/8
post-thumbnail

ChatGPT, Gemini 같은 생성형 AI를 호출할 때 직접 API URL을 호출해서 구현하는 방식보다 더 효율적으로, 더 쉽게 구현할 수는 없을까?

오늘은 Spring AI가 무엇인지 간단히 알아보고,
스프링 부트 프로젝트에서 Spring AI의 Chat Model API를 사용하는 방법에 대해 알아보자

🔗 Spring AI 관련 레퍼런스 알아보기

1️⃣ Spring AI 알아보기

1.1 Spring AI가 무엇인가?

Spring AI는 생성형 AI 애플리케이션을 개발할 수 있도록 지원하는 Spring 프레임워크의 확장으로,
쉽게 말해 생성형 AI를 Spring Boot 애플리케이션에서 쉽게 구현할 수 있도록 추상화 및 구현체를 제공하는 역할을 한다.

Spring AI는 OpenAI(ChatGPT, DALL-E 등), Vertex AI(Gemini 등), Azure OpenAI 등 여러 AI 서비스 제공자와 통합하여 활용할 수 있다.

1.2 Spring AI 특징

(1) 단순하고 간편한 통합
Spring Boot 애플리케이션에 쉽게 AI 기능을 추가하고, AI 모델과의 상호작용을 단순화

(2) 일관된 인터페이스
다양한 AI 서비스 제공자(OpenAI, Vertex AI 등)를 하나의 방식으로 사용 가능

(3) 자동 설정
최소한의 설정으로 AI 기능을 바로 활용 가능

(4) 다양한 AI 기능 지원
텍스트 생성, 대화형 AI, 텍스트-이미지 변환, 임베딩 모델 등 다양한 AI 기능을 구현 가능

2️⃣ Spring AI 설정 방법

Spring AI API 중 Chat Model API(OpenAI, Google Vertex AI)를 사용하는 방법에 대해 알아보자💡

2.1 buile.gradle 설정

먼저 buile.gradle에 spring AI관련 의존성과 Snapshot 저장소를 추가해주었다.


repositories {
    mavenCentral()
    maven {url 'https://repo.spring.io/snapshot'} //스냅샷 저장소 추가
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    
    //spring AI
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-SNAPSHOT' 
    implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini-spring-boot-starter:1.0.0-SNAPSHOT'

}

2.2 application.yml 작성

그 후 chatgpt와 gemini의 Chat Model Api를 사용하기 위해 필요한 정보들 가져와서 application.yml을 작성해주었다.

✔️chatgpt spring ai를 사용하기 위해서는 api-key가 필요
(1) openai api-key 발급하러 가기
(2) Create new secret key를 클릭하여 api-key 발급하기, 복사

✔️gemini spring ai를 사용하기 위해서는 프로젝트ID리전명이 필요
(1) 구글 클라우드 플랫폼 접속
(2) 프로젝트 선택 > 새 프로젝트 > 만들기 클릭해서 프로젝트 생성하기
(3) 해당 프로젝트 ID 복사

위에서 얻은 정보를 바탕으로 application.yml 파일 작성한다.


spring:
  ai:
    openai:
      api-key: {복사한 apikey}

    vertex:
      ai:
        gemini:
          project-id: {복사한 프로젝트 ID}
          location: {리전명 (예시)asia-northeast3}

3️⃣ 스프링부트 프로젝트에 적용하기

마지막으로 Spring AI를 적용하여 chatgptgemini 모델을 활용해서 채팅 응답을 반환하는 controller 코드를 작성해주었다.

@RequestMapping("/api")
@RestController
public class ChatController {
    private final OpenAiChatModel openAiChatModel;
    private final VertexAiGeminiChatModel vertexAiGeminiChatModel;

    public ChatController(OpenAiChatModel openAiChatModel, VertexAiGeminiChatModel vertexAiGeminiChatModel) {
        this.openAiChatModel = openAiChatModel;
        this.vertexAiGeminiChatModel = vertexAiGeminiChatModel;
    }

    @GetMapping("/chat")
    public Map<String, String> chat(@RequestBody String message) {
        Map<String, String> responses = new HashMap<>();

        String openAiResponse = openAiChatModel.call(message);
        responses.put("openai(chatGPT) 응답", openAiResponse);

        String vertexAiGeminiResponse = vertexAiGeminiChatModel.call(message);
        responses.put("vertexai(gemini) 응답", vertexAiGeminiResponse);
        return responses;
    }
}

실행 시 Credentials 관련 에러가 발생했을 때
원인은 구글 클라우드 플랫폼의 기본 사용자 인증 정보(ADC)를 못찾아서 발생하는 문제로 아래 링크에서 ADC(내가 쓰려고 하는 구글 플랫폼 계정)를 등록해주면 된다.
https://cloud.google.com/docs/authentication/external/set-up-adc.

4️⃣ 결과 확인하기

이제 위에 작성한 코드를 바탕으로 결과를 확인해보자

4.1 API 호출

GET | http://localhost:포트번호/api/chat

Request Body: 
{
    "message" : "Spring AI에 대해 알아?"
}

4.2 응답 결과 (Response Body)

{
    "vertexai(gemini) 응답": "네, Spring AI에 대해 알고 있습니다.\n\n**Spring AI**는 기업이 AI 솔루션을 구축하고 배포하는 데 도움이 되는 기업용 AI 플랫폼입니다. 다음과 같은 기능을 제공합니다.\n\n* **모델 개발 및 훈련:** 사용자는 데이터를 업로드하고 모델을 훈련하여 고유한 요구 사항에 맞게 조정할 수 있습니다.\n* **모델 관리:** 사용자는 모델을 배포하고 모니터링하여 성능을 최적화하고 품질을 보장할 수 있습니다.\n* **모델 배포:** Spring AI는 API, 웹 인터페이스 또는 모바일 앱을 통해 모델을 배포하는 다양한 옵션을 제공합니다.\n* **데이터 통합:** Spring AI는 다양한 데이터 소스와 통합되어 기업이 모든 데이터에 쉽게 액세스하고 사용할 수 있도록 합니다.\n* **자동화 도구:** Spring AI는 작업 자동화를 위한 사전 구축된 도구를 제공하여 효율성을 향상시킵니다.\n\n**주요 산업:**\n\nSpring AI는 다음과 같은 다양한 산업에서 사용됩니다.\n\n* 금융\n* 헬스케어\n* 제조\n* 리테일\n* 물류\n\n**장점:**\n\n* 사용하기 쉬운 플랫폼\n* 맞춤형 모델 개발 지원\n* 다양한 배포 옵션\n* 뛰어난 데이터 통합 기능\n* 작업 자동화를 위한 도구\n\n**결론:**\n\nSpring AI는 기업이 AI 솔루션을 빠르고 효율적으로 구축하고 배포하는 데 도움이 되는 강력한 플랫폼입니다. 맞춤형 모델 개발, 데이터 통합 및 자동화 기능을 갖춘 이 플랫폼은 다양한 산업에서 기업이 AI의 이점을 활용하도록 지원합니다.",
    "openai(chatGPT) 응답": "네, Spring AI는 인공 지능 기술을 활용하여 다양한 업무를 자동화하고 효율적으로 처리할 수 있도록 도와주는 솔루션입니다. 이를 통해 기업이 비즈니스 프로세스를 최적화하고 생산성을 향상할 수 있습니다.더 궁금한 점이 있으시면 더 자세히 알려드릴 수 있습니다."
}

5️⃣ 정리 : Spring AI를 활용하면 어떤 점이 좋을까?💡

오늘은 Spring AI 에 대해 알아보고 스프링 부트 프로젝트에서 Spring AI의 Chat Model API를 구현하는 방법에 대해 알아보았다.

1) AI를 자바에서도 유연하게 활용 가능
이전에는 주로 파이썬 언어를 사용하여 AI를 활용했다면 이제는 Spring Ai를 통해 Java 환경에서도 AI를 유연하게 활용 가능하다.


2) URL 호출 대비 코드의 간결성
직접 URL을 호출하여 AI 모델을 사용했을 때보다 Spring AI를 사용하는 것이 스프링의 추상화를 활용하여 간편하게 요청을 보낼 수 있고, 코드도 더 간결해서 개발 생산성을 높일 수 있다.
Gemini, ChatGpt 등 여러 AI 모델들을 통합하여 사용하기에 편리하다.


3) JSON 응답의 파싱 편의성
이전에는 JSON 응답에서 필요한 정보를 직접 추출하는 번거로움이 있었지만, Spring AI를 사용하면 정해진 결과값만 반환되어 JSON 응답을 파싱하는 과정이 생략되어 비교적 간편하다.(다만 vertexai모델은 Response에 특수 문자값이 섞여 있어 추가적인 파싱이 필요할 것 같음)

참고) Spring Camp 2024 후기

profile
개발 기록 끄적끄적✏️ #백엔드개발자

3개의 댓글

comment-user-thumbnail
2024년 8월 31일

와우 너무 좋은 블로그에요. 도움이 많이 되었습니다. 참고하신 문서나 블로그가 있으셨을까요? spring ai docs보면서 하는데 gradle 에 추가하는 부분부터 막혀서 검색하다가 찾아왔는데. 문제 바로 해결하고 갑니다.

1개의 답글