Java

[Spring Boot / Java8] OpenAI API GPT3 사용 방법

cob 2023. 3. 23. 10:18



 

1. OpenAI Key 발급

로그인 => 좌측 상단 [Personal] 클릭 => [View API keys] 클릭

https://platform.openai.com/overview

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

api key
Key 발급

  • 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());
    }
}

 

 

 

반응형