Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AI를 통한 해설 수정 #43

Merged
merged 13 commits into from
Nov 8, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: ChatGpt Api 배치 생성 API 구현
starwook committed Nov 8, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit cadb88e7f67d9282f6eaabab6b0d81811a2c12de
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.server.computerscience.chatbot.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import com.server.computerscience.chatbot.dto.request.ChatGptBatchRequestDto;
import com.server.computerscience.chatbot.dto.response.ChatGptBatchResponseDto;
import com.server.computerscience.chatbot.dto.response.ChatGptFileUploadResponseDto;
import com.server.computerscience.chatbot.service.implement.ChatGptService;
import com.server.computerscience.question.common.dto.request.RequestQuestionCommandDto;
import com.server.computerscience.question.common.service.ExternalQuestionService;

import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;

@Controller
@Api(tags = {"AI 문제 수정 - ADMIN"})
@RequestMapping("/admin")
@RequiredArgsConstructor
public class ExternalQuestionController {

private final ExternalQuestionService externalQuestionService;

private final ChatGptService chatGptService;

@PostMapping("/question/update/chat-gpt")
public ResponseEntity<ChatGptFileUploadResponseDto> updateQuestionToChatGpt(
@RequestBody RequestQuestionCommandDto requestQuestionCommandDto
) {
return ResponseEntity.ok(externalQuestionService.sendQuestionToExternal(requestQuestionCommandDto));
}

@PostMapping("/update/batch")
public ResponseEntity<ChatGptBatchResponseDto> createBatchToChatGpt(
@RequestBody ChatGptBatchRequestDto requestBatchDto
) {
return ResponseEntity.ok(chatGptService.sendBatchMessage(requestBatchDto));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.server.computerscience.chatbot.dto.request;

import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@ToString
public class ChatGptBatchRequestDto {
@JsonProperty("input_file_id")
private String inputFileId;

@JsonProperty("endpoint")
private String endpoint;

@JsonProperty("completion_window")
private String completionWindow;

public static ChatGptBatchRequestDto from(String inputFileId, String endpoint, String completionWindow) {
return ChatGptBatchRequestDto.builder()
.inputFileId(inputFileId)
.endpoint(endpoint)
.completionWindow(completionWindow)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.server.computerscience.chatbot.dto.response;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Getter
@NoArgsConstructor
@ToString
public class ChatGptBatchResponseDto {
private String id;
private String object;
private String endpoint;
private String errors;
private String inputFileId;
private String completionWindow;
private String status;
private String outputFileId;
private String errorFileId;
private Long createdAt;
private Long inProgressAt;
private Long expiresAt;
private Long finalizingAt;
private Long completedAt;
private Long failedAt;
private Long expiredAt;
private Long cancellingAt;
private Long cancelledAt;
private RequestCounts requestCounts;
private Object metadata;

@Getter
@NoArgsConstructor
@ToString
public static class RequestCounts {
private int total;
private int completed;
private int failed;
}
}
Original file line number Diff line number Diff line change
@@ -13,9 +13,11 @@
import org.springframework.util.MultiValueMap;

import com.server.computerscience.chatbot.config.RestTemplateService;
import com.server.computerscience.chatbot.dto.request.ChatGptBatchRequestDto;
import com.server.computerscience.chatbot.dto.request.ChatGptRequestFileUploadDto;
import com.server.computerscience.chatbot.dto.request.ChatGptRestRequestDto;
import com.server.computerscience.chatbot.dto.request.ChatMessageDto;
import com.server.computerscience.chatbot.dto.response.ChatGptBatchResponseDto;
import com.server.computerscience.chatbot.dto.response.ChatGptFileUploadResponseDto;
import com.server.computerscience.chatbot.dto.response.ChatGptResponseDto;

@@ -27,16 +29,17 @@ public class ChatGptService {
@Value("${openai.secret-key}")
private String secretKey;
private final String model = "gpt-4o-mini";
private final String payingApiUrl = "https://api.openai.com/v1/chat/completions";
private final String advancedChatApiUrl = "https://api.openai.com/v1/chat/completions";
private final String fileUploadUrl = "https://api.openai.com/v1/files";
private final String batchCreateUrl = "https://api.openai.com/v1/batches";
private final RestTemplateService restTemplateService;
private final FileConvertService fileConvertService;

public String sendMessage(List<ChatMessageDto> chatMessages) {
public String sendChatMessage(List<ChatMessageDto> chatMessages) {
ChatGptRestRequestDto chatGptRestRequestDto = ChatGptRestRequestDto.from(model,
chatMessages);
ResponseEntity<ChatGptResponseDto> response = restTemplateService.sendPostRequest(
payingApiUrl,
advancedChatApiUrl,
secretKey,
MediaType.APPLICATION_JSON,
chatGptRestRequestDto,
@@ -45,7 +48,7 @@ public String sendMessage(List<ChatMessageDto> chatMessages) {
return response.getBody().getFirstChoiceContent();
}

public ChatGptFileUploadResponseDto sendBatchMessage(List<ChatMessageDto> chatMessages) {
public ChatGptFileUploadResponseDto sendFileUploadMessage(List<ChatMessageDto> chatMessages) {
ChatGptRestRequestDto chatGptRestRequestDto = ChatGptRestRequestDto.from(model, chatMessages);
ChatGptRequestFileUploadDto chatGptRequestFileUploadDto = ChatGptRequestFileUploadDto.from(
chatGptRestRequestDto,
@@ -72,4 +75,16 @@ public ChatGptFileUploadResponseDto sendBatchMessage(List<ChatMessageDto> chatMe
);
return response.getBody();
}

public ChatGptBatchResponseDto sendBatchMessage(ChatGptBatchRequestDto chatGptBatchRequestDto) {
System.out.println(chatGptBatchRequestDto);
ResponseEntity<ChatGptBatchResponseDto> response = restTemplateService.sendPostRequest(
batchCreateUrl,
secretKey,
MediaType.APPLICATION_JSON,
chatGptBatchRequestDto,
ChatGptBatchResponseDto.class
);
return response.getBody();
}
}
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ public String talkForChat(String userId, ChatBotRequestDto chatBotRequestDto) {
/**
* 챗봇에게 받은 답변 또한 이전 대화 기록에 넣는다.
*/
String answer = chatGptService.sendMessage(chatMessages);
String answer = chatGptService.sendChatMessage(chatMessages);
afterRespond(userId, answer);
return answer;
}
@@ -52,6 +52,6 @@ private void afterRespond(String userId, String answer) {

public ChatGptFileUploadResponseDto talkForBatch(List<ChatContentDto> chatMessages) {
ChatMessageDto chatMessage = ChatMessageDto.from(chatMessages, ChatRole.USER);
return chatGptService.sendBatchMessage(Collections.singletonList(chatMessage));
return chatGptService.sendFileUploadMessage(Collections.singletonList(chatMessage));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -6,6 +6,6 @@
import com.server.computerscience.question.common.dto.request.RequestQuestionCommandDto;

@Service
public interface QuestionExternalService {
public interface ExternalQuestionService {
public ChatGptFileUploadResponseDto sendQuestionToExternal(RequestQuestionCommandDto requestQuestionCommandDto);
}
Original file line number Diff line number Diff line change
@@ -9,14 +9,14 @@
import com.server.computerscience.chatbot.service.implement.ChatManageService;
import com.server.computerscience.question.common.domain.Question;
import com.server.computerscience.question.common.dto.request.RequestQuestionCommandDto;
import com.server.computerscience.question.common.service.QuestionExternalService;
import com.server.computerscience.question.common.service.ExternalQuestionService;
import com.server.computerscience.question.common.service.QuestionSelectorService;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class QuestionChatGptExternalService implements QuestionExternalService {
public class ExternalSenderQuestion implements ExternalQuestionService {
private final QuestionSelectorService questionSelectorService;
private final QuestionToChatGptContentMapper questionToChatGptContentMapper;
private final ChatManageService chatManageService;