-
[JAVA] openAI API 이용한 chatGPT, 자바로 채팅 기능 구현하기 - V1자바 2023. 4. 21. 00:05
openai에서는 파이썬으로 코드를 제공한다.
https://platform.openai.com/docs/guides/chat
OpenAI API
An API for accessing new AI models developed by OpenAI
platform.openai.com
파이썬 코드를 자바로 그대로 옮기기만 하면 되는데
초보 개발자인 나에게는 너무도 어려웠다.
우여곡절 완성,,,
자바로 다시 코드를 구성하면 아래와 같다.
public static String chatGPT(String text) throws Exception { String url = "https://api.openai.com/v1/completions"; HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); try { con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty("Authorization", "Bearer 인증키"); JSONObject data = new JSONObject(); data.put("model", "text-davinci-003"); data.put("prompt", text); data.put("max_tokens", 4000); data.put("temperature", 1.0); con.setDoOutput(true); con.getOutputStream().write(data.toString().getBytes("UTF-8")); String output = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")).lines() .reduce((a, b) -> a + b).get(); JSONParser parser = new JSONParser(); JSONObject jObject = (JSONObject) parser.parse(output); JSONArray jArray = (JSONArray) jObject.get("choices"); JSONObject jobj = (JSONObject)jArray.get(0); String apiAnswer = (String)jobj.get("text"); con.disconnect(); return apiAnswer; } catch (Exception e) { con.getErrorStream(); throw e; } }
1)
- openAI 사이트에서 필수적으로 인증키를 받아야 한다.
2)
- model에는 원하는 모델을 넣어주면 된다.
text-davinci-003, gpt-3.5-turbo 두 개를 사용해 봤다
- text에 scanner로 받은 text를 전달해 주면 된다
- token은 api가 prompt 처리하기 전에 input을 토큰으로 분류하고 이것으로 요금이 측정된
- temperature는 text의 정규화-랜덤화 시키는 수준
2-1)
- 만약 model을 turbo로 사용하려면 prompt > messages 로 변경해야한다
그 외에도 변경 사항이 조금 더 있었다
3)
- inputstream / outputstream / 람다식 등 코드에 대한 전반적인 이해가 부족했고 다시 정리했다
4)
- 데이터를 보내고 받을 때 "UTF-8" 인코딩을 하지 않으면 한국어로 대화가 불가능하다
- 인코딩하면 한국어로 질문하고 한국어로 답변받을 수 있다
5)
- 이 부분의 코드가 지저분한 것 같아서 깔끔하게 수정하고 싶다
6)
이렇게 코드를 구성했을 때 아쉬운 점은 대화 내용을 기억하지 못한다는 점이었다
"connection open > api 호출 > connection close" 이 구조의 반복이라 session을 하나로 유지하지 못하고 있다
(참고)
https://nhj12311.tistory.com/622
https://akku-dev.tistory.com/52
728x90'자바' 카테고리의 다른 글
[JAVA] stream (0) 2023.04.23 [자바] URLConnection, HTTPURLConnection (0) 2023.04.22 인프런 예제로 공부하는 Java 100 문제풀이 Part.2 (0) 2022.12.26 인프런 예제로 공부하는 Java 100 문제풀이 Part.1 후기 (0) 2022.12.20 인프런 예제로 공부하는 Java 100 문제풀이 Part.1 (2) (0) 2022.12.20