본문 바로가기

개인프로젝트/RandB

[Red&Blue] spring에 chatGPT테스트(Spring AI)

문제 상황

 

 

작성자가 GPT버튼을 눌러 토론이 끝난 게시물을 일정한 형식의 한 문단으로 정리해주는 기능을 사용하기 위해서는 스프링에 GPT를 사용할 수 있어야 한다.

 

여러가지 방법중 간결한 방법인 SpringAI를 사용하는 방법으로 결정하고 테스트 코드를 작성하였다.

 

요구 사항

  1. gpt 스프링에 적용
  2. api 동작원리 파악

필요  사항

 

build.gradle 추가

 

repositories {
    mavenCentral() // 일반적으로 사용하는 Maven 중앙 저장소, 대부분의 의존성을 여기서 가져옴
    maven { url 'https://repo.spring.io/snapshot' } // Spring 프로젝트의 스냅샷 버전 저장소 추가, 주로 최신 기능 테스트 시 사용
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web' // 웹 애플리케이션을 개발할 때 필요한 기본적인 웹 기능 (Spring MVC, Tomcat) 제공
    testImplementation 'org.springframework.boot:spring-boot-starter-test' // JUnit, Mockito 등의 테스트 라이브러리를 포함한 테스트 환경 제공
    
    // Spring AI 관련 라이브러리 추가
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-SNAPSHOT' 
    // OpenAI (ChatGPT 등)를 활용하기 위한 Spring Boot Starter. OpenAI API 호출과 관련된 설정 및 기능을 제공
    
    implementation 'org.springframework.ai:spring-ai-vertex-ai-gemini-spring-boot-starter:1.0.0-SNAPSHOT' 
    // Google Cloud Vertex AI (Gemini 모델)를 활용하기 위한 Spring Boot Starter. Vertex AI API 호출과 관련된 설정 및 기능을 제공
}

스냅샷(Snapshot)은 소프트웨어 개발에서 아직 정식으로 릴리스되지 않은 개발 버전을 의미한다. 정식 릴리스 전에 버그 수정, 새로운 기능 추가, 성능 향상 등을 테스트하기 위해 배포되는 버전으로, 개발 중인 상태에서 임시로 릴리스되는 버전이라고 볼 수 있다.

 

application.yml 추가

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

    vertex:
      ai:
        gemini:
          project-id: {프로젝트 ID}
          location: {조직명 (예시)No organization}

 

 

chatgpt spring ai를 사용하기 위해서는 api-key가 필요

(1) openai api-key 발급하러 가기

(2) Create new secret key를 클릭하여 api-key 발급하기, 복사

 

gemini spring ai를 사용하기 위해서는 프로젝트ID와 조직명이 필요

(1) 구글 클라우드 플랫폼 접속

(2) 프로젝트 선택 > 새 프로젝트 > 만들기 클릭해서 프로젝트 생성하기

(3) 해당 프로젝트 ID 복사

 

코드 설명

@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;
    }
}


 

오늘 만난 금쪽이 에러

 

1. 모델 변경과 key값 설정

모델 버전을 yml에 명시하고 openAI에서 발급한 key와 사용량 확인key를 구분하여 key값을 이해

 

 

2. 결제 필요

429에러와 함께 토큰 사용량 제한메세지를 확인하고 API사용에 대한 요금결제 후 진행