1. OpenAI Key 발급
로그인 => 좌측 상단 [Personal] 클릭 => [View API keys] 클릭
https://platform.openai.com/overview
- API Key는 최초 발급받을 때 한 번만 확인할 수 있다.
2. OpenAI Sevice 생성
@Slf4j
@Service
public class OpenAIService {
private static final String API_ENDPOINT = "https://api.openai.com/v1/";
@Value("${OPEN_AI_KEY}")
private String OPEN_AI_KEY;
private final RestTemplate restTemplate = restTemplate();
public String getCompletion(String prompt) {
String url = "https://api.openai.com/v1/completions";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(OPEN_AI_KEY);
Map<String, Object> requestBody = new HashMap<>();
// 요청 질문
requestBody.put("prompt", prompt);
// 요청에 사용될 모델 설정
requestBody.put("model", "text-davinci-003");
// 완료시 생성할 최대 토큰수
requestBody.put("max_tokens", 1500);
HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers);
try {
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
return response.getBody();
} catch (RestClientException e) {
throw new OpenAIException("OpenAI API 호출 중 오류가 발생하였습니다.", e);
}
}
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add((request, body, execution) -> {
request.getHeaders().setContentType(MediaType.APPLICATION_JSON);
request.getHeaders().setBearerAuth(OPEN_AI_KEY);
return execution.execute(request, body);
});
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
public class OpenAIException extends RestClientException {
public OpenAIException(String message) {
super(message);
}
public OpenAIException(String message, Throwable cause) {
super(message, cause);
}
}
}
3. Contoller 생성
@Slf4j
@RestController
@RequestMapping("api")
public class openAIController {
@Autowired
private OpenAIService openAIService;
@GetMapping("/ai")
public ResponseEntity<?> openAiGPT(@RequestParam(required = false) String query, @RequestParam(required = false) String sort, @RequestParam(required = false) int display) {
try {
return ResponseEntity.ok().body(openAIService.getCompletion("안녕"));
} catch (HttpClientErrorException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
반응형
'Java' 카테고리의 다른 글
[Java] 람다 표현식 사용 방법 (0) | 2023.05.22 |
---|---|
[Spring Boot] Spring Batch + scheduler 사용해 일정 주기로 실행 방법 (0) | 2023.03.24 |
[Spring Boot] Security @AuthenticationPricipal 객체로 로그인 정보 받는 방법 (0) | 2023.03.21 |
[Spring Boot] Spring Data JPA에서 Pageable사용한 Pagination 및 정렬 처리 방법 (0) | 2023.03.06 |
[Spring Boot] RestTemplate/WebClient 사용한 REST API 호출 방법 (0) | 2023.02.11 |