일단은 사용하기에 앞서 몇가지 짚고 넘어가야하는 부분이 있다.
바로 API 옵션이다. 옵션이야 상당히 많지만, 좀 필수적으로 보이는 부분만 간략하게 정리하였다.
아래는 옵션 설정이다.
//* Open AI Api Url (종종 바뀌는 듯 함)
final static String OPENAI_API_URL = "https://api.openai.com/v1/completions";
//* Open AI Api Key
final static String OPENAI_API_KEY = "YOUR_API_KEY";
//* 엔진 종류 및 가격 정보 https://openai.com/pricing
final static String MODEL_NAME = "gpt-3.5-turbo-instruct";
//* 0.0에 가까울 수록 정확성이 높고, 1.0에 가까울 수록 창의성이 높습니다.
final static double TEMPERATURE = 0.2;
//* 답변'의 길이 제한에 대한 최대 Token 값을 설정하는 것을 의미함.
final static int MAX_TOKEN = 500;
[MODEL 설정]
먼저 model 설정은 chatGTP 3.5의 경우 `gpt-3.5-turbo-instruct`로 통일되는 듯 하다.
위와 같이 종료 날짜가 존재한다. 다른 3.5 모델들을 종료하면서 `gpt-3.5-turbo-instruct` 가격을 확 낮췄다.
[TEMPERATURE 설정]
- Temperature는 0.0~1.0 사이에서 설정이 가능하다.
- 0.0에 가까울 수록 정확성이 높고, 1.0에 가까울 수록 창의성이 높다.
[MAX_TOKEN 설정]
- '답변'의 길이 제한에 대한 최대 Token 값을 설정하는 것을 의미함.
- 가격은 gpt-3.5-turbo-instruct 엔진 기준으로 $0.0015(약 한화 2원) / 1000 Tokens
- 영어는 1음절당 1 Token, 한글은 1음절당 2~3 Token (예시, START = 1.25 Token, 시작 = 4 Token)
- 왠만큼 써도 굉장히 저렴하다. 개발 중에는 아무리 써도 100원을 넘기는 것 조차 힘듦..
자 이제 위 설정을 토대로 예제 소스를 구성해보자.
//* Open AI Api Url (종종 바뀌는 듯 함)
final static String OPENAI_API_URL = "https://api.openai.com/v1/completions";
//* Open AI Api Key
final static String OPENAI_API_KEY = "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";
//* 엔진 종류 및 가격 정보 https://openai.com/pricing
final static String MODEL_NAME = "gpt-3.5-turbo-instruct";
//* 0.0에 가까울 수록 정확성이 높고, 1.0에 가까울 수록 창의성이 높습니다.
final static double TEMPERATURE = 0.2;
//* 답변'의 길이 제한에 대한 최대 Token 값을 설정하는 것을 의미함.
final static int MAX_TOKEN = 500;
public static void main(String[] args) {
String PROMPT = "안녕, ChatGPT.";
String returnAiStr = openai_api_completions_worker(OPENAI_API_URL, OPENAI_API_KEY, MODEL_NAME, TEMPERATURE, MAX_TOKEN, PROMPT);
System.out.println(returnAiStr);
}
/** ChatGPT : OpenAI 워커를 구현한다. */
private static String openai_api_completions_worker(String openaiApiUrl, String openaiApiKey, String model, double temperature, int maxToken, String prompt){
try{
// URL 및 연결 설정
URL url = new URL(openaiApiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer " + openaiApiKey);
connection.setDoOutput(true);
// API에 보낼 데이터 설정
String requestData = "{" +
"\"prompt\": \"" + prompt + "\", " +
"\"model\": \""+ model +"\", " +
"\"temperature\": "+temperature+", " +
"\"max_tokens\": "+maxToken+ "}";
try (OutputStream os = connection.getOutputStream()) {
byte[] input = requestData.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
String returnStr = "";
if(connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// 응답 받기
try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) {
StringBuilder response = new StringBuilder();
String responseLine;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
returnStr = response.toString();
//System.out.println("API 응답: " + response.toString());
} catch (Exception e) {
return "[에러] " + e;
}
connection.disconnect();
return returnStr;
} else {
return "응답코드 : " +connection.getResponseCode();
}
} catch (Exception e) {
return "[에러] " + e;
}
}
위 내용의 소스코드를 실행하면 아래 내용과 같이 결과가 Return된다.
{"id": "cmpl-8cOUsn3eIX5Nwy1gd9zmEk1wlWWaf","object": "text_completion","created": 1704161322,"model": "gpt-3.5-turbo-instruct","choices": [{"text": " 나는 인공지능 챗봇이야. 너의 말을 듣고 대답해줄게. 무엇을 도와줄까?","index": 0,"logprobs": null,"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 45,"total_tokens": 54}}
Process finished with exit code 0
여기서 중요한 내용은 choices 속의 내용과 usage 속의 내용이다.
choices 속의 text가 바로 ChatGPT의 결과이다.
usage 속의 prompt_tokens는 명령어에 사용된 토큰 수
completion_tokens는 답변에 사용된 토큰 수이다.
total_tokens는 prompt_tokens + completion_tokens 이다.
max_token을 설정하여 최대 completion_tokens이 500이 넘지 않도록 구성하였음.
결과적으로 "안녕, ChatGPT."라고 prompt를 요청하였을 때,
" 나는 인공지능 챗봇이야. 너의 말을 듣고 대답해줄게. 무엇을 도와줄까?" 라고 응답하였다.
이제 이 정보를 입맛에 맞게 가공하면 된다.
'ChatGPT' 카테고리의 다른 글
OpenAI API 가격 파악. (OpenAI API 요금 분석) (0) | 2023.09.18 |
---|
댓글