기타 기술

OpenAPI를 SpringBoot에 적용하기

곰돌이볼 2023. 3. 30. 15:40

OpenAPI의 API Keys 발급하기


  • OpenAPI에서 API keys 발급받기
    • Create new secret key 클릭을 통해서 API Keys 발급하기
    • 발급한 키의 Secret key값은 발급 후에 확인불가능하니 미리 키값을 복사해서 저장하기

 

OpenAI key를 환경변수에 저장하기


  • 환경변수에 복사한 key값을 저장하기

 

application.yml에 OpenAI key 적용하기


  • 발급받은 OpenAI Key를 환경변수에 저장해서 사용하기
    • GitHub에 코드가 올라왔을 때, 키가 공개되는 것을 방지
chatgpt:
  api-key: ${OPENAI_KEY}  // OpenAI key
  • 키값은 유출되면 OpenAI에서 자동으로 키를 만료시키므로 주의하기

 

build.gradle


  • 의존성 추가하기
dependencies {
	// OpenAI
	implementation 'io.github.flashvayne:chatgpt-spring-boot-starter:1.0.1'
	annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

 

코드 작성하기

  • ChatGPTController : controller
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/chatGPT")
@AllArgsConstructor
public class ChatGPTController {
    private final ChatGPTService chatGPTService;

	@PostMapping("/question")
    public ResponseEntity<ChatGpt.Res> askToChatGPT(@RequestBody ChatGpt.Req chatGpt){
        String question = chatGpt.getQuestion();
        ChatGpt.Res answer = chatGPTService.getChatGPTResponse(question);

        return new ResponseEntity<>(answer, HttpStatus.OK);
    }
}
  • ChatGpt : response & request
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

public class ChatGpt {
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Req {
        String question;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Res {
        String answer;
    }
}
  • ChatGPTService : service
import io.github.flashvayne.chatgpt.service.ChatgptService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class ChatGPTService {
    private ChatgptService chatgptService;
    
    // ChatGPT 질문 던지고 답변받기
    public ChatGpt.Res getChatGPTResponse(String question) {
        String answer = chatgptService.sendMessage(question);
        return new ChatGpt.Res(answer);
    }
}

 

 

결과


 

  • 참고자료

https://velog.io/@msung99/ChatGPT-SpringBoot-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%97%90%EC%84%9C-OpenAI-%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%B4-AI-%EC%B1%84%ED%8C%85-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0

 

[SpringBoot] 스프링부트 애플리케이션에서 OpenAI 를 적용해 AI 채팅 서비스 개발하기 (feat. davinci-003 M

요즘 가장 핫하다는 ChatGPT, 스프링부트 프로젝트에 직접 적용해보고 싶지 않나요? 🧐 한번 개발해봅시다!

velog.io