Spring/[P] AI 챗봇 기반 맞춤형 레시피 서비스

[SpringBoot/ChatGPT] ChatGPT API (4) 일반 대화 - 메세지 반환

alsruds 2024. 2. 27. 00:30

 

 

백엔드에서 ChatGPT 가 보낸 응답 메세지를 받아 프론트엔드로 전송해 봅시다~

 

1. Service : ChatGPT 응답 메세지 반환받기
2. DTO : ChatGPT → 백 & 백 → 프론트 서버로 전송할 메세지 데이터 세팅

 


 

[ Service ]

🤖 ChatGPT 에서 백엔드 서버로 전송하는 응답 메세지 처리

 

0. ChatGPT 로 메세지 전송

2024.02.26 - [Spring/[Project] AI 챗봇 기반 맞춤형 레시피 서비스] - [SpringBoot/ChatGPT] ChatGPT API (3) 일반 대화 - 메세지 전송

 

[SpringBoot/ChatGPT] ChatGPT API (3) 일반 대화 - 메세지 전송

SpringBoot 를 이용하는 백엔드 서버에서 ChatGPT 로 메세지를 전송해 봅시다 ~ 1. Configuration : ChatGPT 설정 정보 + 데이터 전송 시 필요한 데이터 세팅 2. Controller : 프론트 서버 요청 동작 처리 3. Service :

alsrudalsrudalsrud.tistory.com

 

1. 응답 메세지 처리

@Service
@RequiredArgsConstructor
@Transactional
@Slf4j
public class ChatGptServiceImpl implements ChatGptService {

    private static RestTemplate restTemplate = new RestTemplate();

    // ChatGPT API 응답 반환 받기
    @Transactional
    public ChatGptResponseDTO getResponse(HttpEntity<ChatGptRequestDTO> chatGptRequestDTOHttpEntity) {
        // 답변 길어질 시 Timeout Error : 1분 설정 60sec * 10000ms
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(60000);
        requestFactory.setReadTimeout(60 * 1000);
        restTemplate.setRequestFactory(requestFactory);

        ResponseEntity<ChatGptResponseDTO> responseEntity = restTemplate.postForEntity(
                ChatGptConfig.URL,
                chatGptRequestDTOHttpEntity,
                ChatGptResponseDTO.class
        );
        return responseEntity.getBody();
    }

    // ChatGPT API 요청하기 - 일반 대화
    @Override
    public ChatGptResponseDTO askQuestion(String question) {
        // ChatGPT API 사용 시 지켜야 할 DTO 맞추기
        ...

        // 응답 반환
        return this.getResponse(
                this.buildHttpEntity(
                        new ChatGptRequestDTO(messages, ChatGptConfig.MODEL)
                )
        );
    }
}

 

 

[ DTO ]

🤖 반환하는 메세지 데이터 세팅

 

1. ChatGPT → 백엔드

@Getter
@NoArgsConstructor
public class ChatGptResponseDTO implements Serializable {

   private String id;
   private String object;
   private LocalDate created;
   private String model;
   private List<Choice> choices;

   @Getter
   @Setter
   public static class Choice {
      private ChatGptMessageDto message;
      @JsonProperty("finish_reason")
      private String finishReason;
      private int index;
   }
}

 

2. 백엔드 → 프론트엔드

public class UserChatGptResponseDTO {

    @Builder
    @Getter
    @NoArgsConstructor
    @AllArgsConstructor
    public static class UserGptResponseDTO{
        private String gptResponse;
    }
}

 

테스트 성공 화면