다양한 api를 활용 할 프로젝트를 구상하는 과정에서 gpt api를 사용해보고 싶었다.
https://youtu.be/HlDkuFy8xRM?feature=shared 를 참고했다.
OpenAIConfig.java
@Configuration
public class OpenAIConfig {
@Value("${openai.api.key}")
String openaiApiKey;
@Bean
public RestTemplate template(){
RestTemplate restTemplate=new RestTemplate();
restTemplate.getInterceptors().add((request, body, execution) -> {
request.getHeaders().add("Authorization", "Bearer " + openaiApiKey);
return execution.execute(request, body);
});
return restTemplate;
}
}
CustomBotController.java
@RestController
@RequestMapping("/bot")
public class CustomBotController {
@Value("${openai.model}")
private String model;
@Value(("${openai.api.url}"))
private String apiURL;
@Autowired
private RestTemplate template;
@GetMapping("/chat")
public String chat(@RequestParam("prompt") String prompt){
ChatGPTRequest request=new ChatGPTRequest(model, prompt);
ChatGptResponse chatGptResponse = template.postForObject(apiURL, request, ChatGptResponse.class);
return chatGptResponse.getChoices().get(0).getMessage().getContent();
}
}
ChatGPTRequest.java
@Data
public class ChatGPTRequest {
private String model;
private List<Message> messages;
public ChatGPTRequest(String model, String prompt) {
this.model = model;
this.messages = new ArrayList<>();
this.messages.add(new Message("user",prompt));
}
}
ChatGptResponse.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChatGptResponse {
private List<Choice> choices;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Choice {
private int index;
private Message message;
}
}
Message.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Message {
private String role;
private String content;//prompt
}