https://platform.openai.com/docs/api-reference
OpenAI 사이트에 가입하고 결제한 후 API 호출 시 사용할 API KEY를 발급받았다.
키는 최초 발급 때만 원본을 확인하고 복사할 수 있다. 창을 닫으면 복사못함. 그래서 새로 만듦

OpenAI 에서 제공하는 모델은 아래와 같은데 모델명을 클릭하면 세부 버전을 확인할 수 있다.
내가 사용한 것은 GPT-3.5-turbo
시험 삼아 GPT-3.5의 다른 버전인 text-davinci-003 을 사용해봤는데 문장력은 turbo와 비슷한듯 하나
생성 속도가 너무 느렸다. turbo가 약 7초를 소요한다면 davinci는 24초나 잡아먹었다.

예시 )
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Hello!"}]
}'
사용언어는 PHP로 CURL 방식을 사용하여 API 를 호출했다.
예시를 보면 body에 담을 데이터 중 'messages'는 객체를 담고있다.
PHP 에선 클래스 만든 후에나 객체를 사용할 수 있는데 리액트를 가지고 놀다 넘어와서
아무 생각 없이 {}를 쓰고 아무것도 뜨지 않는 화면을 한참 노려봤다.
이런 바보멍청이도 돈 벌어먹고 산다.
$API_KEY = '사이트에서 발급받은 API KEY';
// 접속할 URL, 사용하는 모델마다 URL 다름
$url = 'https://api.openai.com/v1/chat/completions';
$headers = [
'Authorization: Bearer ' . $API_KEY,
'Content-Type: application/json'
];
// 배열로 만든 후 객체화
$system = ['role' => 'system', 'content' => 'GPT에게 내릴 명령'];
$system = (object) $system;
$user = ['role' => 'user', 'content' => '재생성될 문장'];
$user = (object) $user;
$data = [
'model' => 'gpt-3.5-turbo',
'messages' => [$system, $user],
'max_tokens' => 150,
'temperature' => 0.7,
'frequency_penalty' => 0,
'presence_penalty' => 0,
"top_p" => 1,
'n' => 1,
'stop' => ['\n'],
];
'model' => 'gpt-3.5-turbo'
- 내가 사용할 GPT 모델명이다.
'messages' => [ { 'role' : 'user', 'content' : '메세지'} ]
chatGPT에게 요청할 메세지로 role, content 라는 두가지 속성을 필요로 한다.
[ content ]
GPT에게 전달하고 싶은 메세지를 적는다.
[ role ]
'user', 'system', 'assistant' 이 3가지 값 중 하나를 넣을 수 있는데 함께 보내는 메세제가 어떤 역할을 할지 정해주는 것 같다.
🙍♀️ 'user'는 사용자를 의미해서 chatGPT와 챗을 하던 것처럼 대화를 하거나 직접적으로 명령을 하는 문장과 함께 보내주면 된다.
ex) { 'role' : 'user', 'content' : '여름은 어떤 계절이야?' }
답변 )
"여름은 일반적으로 6월부터 8월까지 3개월간 지속되는 계절입니다.
이 계절에는 일반적으로 따뜻한 날씨와 긴 주간이 특징입니다. 해변이나 수영장에 가서 물놀이를 즐기거나 야외 활동을 즐기기에 좋은 계절이기도 합니다."
💻 'system'은 대화의 흐름을 잡아주는 역할로 답변을 어떤 형식으로 작성할지 내가 지정할 수 있다.
ex) { 'role' : 'system', 'content' : '보고서 형식으로 작성' }
답변 )
보고서 제목: 여름에 관한 분석
1. 서론
여름은 한 해 중 가장 더운 계절로, 많은 사람들이 물놀이나 해외 여행을 즐기는 계절입니다. 이 보고서에서는 여름에 대한 자세한 분석을 통해 그 특징과 효과를 알아보고자 합니다.
2. 여름의 특징
여름은 일반적으로 높은 기온과 습도, 긴 낮과 짧은 밤을 특징으로 합니다. ... ...
{ 'role' : 'user' , 'content' : '여름은 어떤 계절인지 보고서 형식으로 작성해줘.' }
이렇게 하나로도 비슷한 답을 얻을 수 있긴 한데 나중에 수정이 용이하려면 구분해놓는게 좋을 것 같다.
'max_tokens' => 150
- 최대 토큰을 지정한다. 글자 수 제한과 같다.
'temperature' => 0.7
- 1과 가까울 수록 주제에 대한 다양한 답변을 주고 0과 가까울 수록 일관성이 있는 답변을 생성한다는데 값이 너무 높으면
엉뚱한 답을 할 수도 있으니 적절한 조절이 필요하다.
'frequency_penalty' => 0
- 똑같은 대답을 하지 않도록 설정한다. -2.0~ 2.0 사이로 설정할 수 있다.
모델이 기존 텍스트를 참고하여 똑같은 대답을 하는 빈도수
'presence_penalty' => 0
- GPT가 새로운 주제에 대해 떠들 가능성을 설정하는 옵션이라고 이해했다.
0으로 해야 딴소리 안하는 듯?
// CURL 셋팅
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //요청 URL 'https://api.openai.com/v1/chat/completions'
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //호출 결과값을 문자열로 반환하여 변수에 저장할 수 있게 됨
curl_setopt($ch, CURLOPT_POST, 1); // POST로 전송 ~
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); // POST로 보낼 나의 데이터 ~
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // 헤더 설정
$response = curl_exec($ch); // 호출 결과값
OpenAI 플랫폼 - API Reference 페이지 내 호출결과 예시 복사해 왔음
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-3.5-turbo-0613",
"usage": {
"prompt_tokens": 13,
"completion_tokens": 7,
"total_tokens": 20
},
"choices": [
{
"message": {
"role": "assistant",
"content": "\n\nThis is a test!"
},
"finish_reason": "stop",
"index": 0
}
]
}
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
$decoded_response = json_decode($response, true);
if (isset($decoded_response['choices'])) { // 위 결과를 살펴보면 choices 내에 내가 바라는 값이 담겨져있다!
$answer = $decoded_response['choices'][0]['message']['content'];
return $answer; // 문장만 return!
} else {
return 'error.';
}
}
curl_close($ch);
위 코드들을 정리해서 하나의 함수로 만든 후 함수들을 모아놓은 php 파일에 따로 저장하고 필요할 때마다 함수를 호출해서 쓰고 있다.
ChatGPT를 내 사이트로 연결하기? 여타 다른 오픈 API 호출 할때와 크게 다를 것 없었다.
공식 문서만 봐도 충분히 해결할 수 있는 문제였는데 성격 급해서 구글링부터 했다가 조금 헤매긴 했다.
+PlayGround 에서 옵션들을 셋팅하고 테스트해 보고 호출코드 짜기
https://platform.openai.com/playground