얼마 전 열린 KotlinConf'2023 영상 자막을 번역하려고 ChatGPT를 썼는데 너무 많고 오래 걸려서 짜증이나서 혹시 api로 ChatGPT를 호출해서 쓸 수 있는 방법없나 찾아보니 있었다.
이제부터 호출하는 방법을 하나하나 알아보자.
1. openAI 가입
ChatGPT를 가입한 거랑은 별개로 가입을 해야한다.
위 사이트에 접속해서 오른쪽 상단에 Sign up을 눌러서 가입 화면으로 가자.
회원가입 화면이다. 나는 Google 아이디로 가입했다.
2. API Key 발급
로그인하면 오른쪽 상단에 profile이 생기는데 그걸 누른 후 View API keys 클릭
Create new secret ket 클릭
(기존 생성한 거를 지우려니 1개는 무조건 있어야 한다고 안 지워진다 ㅠㅠ..)
Input에 secret key 이름을 쓰고 Create secret key 클릭
secret key가 만들어졌다. 오른쪽에 복사 버튼 클릭하고 Done 클릭
창을 닫으면 secret key를 다신 볼 수 없으므로 복사해서 어디 잘 넣어두자.
분실하면 그냥 지우고 다시 만들면 되긴하니 너무 걱정말자.
3. api 호출하러 가보자으!!!
우리가 사용할 api는 Chat api다. 아래 링크들로 들어가면 API 소개와 사용법이 나온다.
(놀라웠던 건 openAI가 정말 많은 api를 제공해준다. 시간나면 다 써보고싶다.)
api는 당연하게도 무료는 아니다 기본 5$를 주는데 자세한 건 맨 마지막에 다루겠다.
api 소개
api 사용법
POST https://api.openai.com/v1/chat/completions를 호출하면 된다.
호출 request는 example을 보자.
헤더에 content-type하고 authrization(아까 발급받은 api key)을 꼭 넣어줘야 한다.
왼쪽에 보면 Request body라고 써져있는데 그 아래보면 어떤 필드들이 있는지 설명이 나와있다.
model | string (Required) |
사용할 모델의 ID입니다. 어떤 모델이 챗 API와 호환되는지에 대한 자세한 정보는 모델 엔드포인트 호환성 표를 참조하십시오. 사용 가능 model: gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301 |
message.role | string (Required) |
chatGPT가 어떤 관점에서 메세지를 작성하지 정해주는 역할 예를 들어, 대화가 "헬스케어" 분야에서 진행된다면, "role" 매개변수를 "의사"로 설정하면 인공지능은 의사의 관점에서 대화를 이해하고 대답할 수 있습니다. 반면에 "환자"로 설정하면 환자의 관점에서 대화를 이해하고 대답할 수 있습니다. |
message.content | string (Required) |
질문 내용 |
message.name | string | 질문한 사람의 이름 알파벳, 숫자, _만 가능하고 최대 64글자까지 가능 |
temperature | number (default: 1) |
0과 2 사이에서 어떤 샘플링 온도를 사용할지는, 0.8과 같은 높은 값은 출력물을 더 무작위로 만들고, 0.2와 같은 낮은 값은 보다 집중적이고 결정론적으로 만듭니다. 일반적으로 우리는 이 중 하나를 수정하는 것을 권장합니다. top_p와 함께 사용하지 마십시오. 높으면 창의적인 답변이 나오고 낮으면 집중적인 답변이 나온다. |
top_p | number (default: 1) |
온도를 사용하여 샘플링하는 대신, Nucleus 샘플링이라는 대안이 있습니다. 이 방법은 모델이 top_p 확률 질량을 가진 토큰들의 결과를 고려합니다. 따라서 0.1은 확률 질량의 상위 10%를 구성하는 토큰들만 고려됩니다. 일반적으로 우리는 이 중 하나를 수정하는 것을 권장합니다. 그러나 둘 다 수정하면 안됩니다. |
n | integer (default: 1) |
각 입력 메시지에 대해 생성할 채팅 완성 선택지의 수 |
stream | boolean (default: false) |
긴 답변일수록 응답 속도가 떨어지는데 답변이 완성될 때까지 기다리지 않고 그때그때 server-sent event 방식으로 응답 값을 받을 때 사용하는 옵션이다. 링크를 타고 가면 설명이 나와있다. |
stop | string or array (default: null) |
응답 메세지에 들어가면 중지시킬 단어 최대 4개까지 가능 예를 들어, "stupid"라는 단어를 만나면 생성을 멈춘다. |
max_tokens | integer | 채팅 완성에서 생성할 최대 토큰 수는 모델의 컨텍스트 길이에 의해 제한됩니다. 입력 토큰과 생성된 토큰의 총 길이도 이와 같은 제한을 받습니다. 응답 토큰 수 |
presence_penalty | number (default: 0) |
-2.0에서 2.0 사이의 숫자입니다. 양수 값은 지금까지의 텍스트에 새로운 토큰이 나타나는 경우 해당 토큰을 벌점으로 처리하여 모델이 새로운 주제에 대해 이야기할 가능성을 높입니다. 정확도를 높힐 때 사용하는 걸로 보인다. |
frequency_penalty | number (default: 0) |
-2.0에서 2.0 사이의 숫자입니다. 양수 값은 지금까지의 텍스트에서 해당 토큰의 빈도수를 기반으로 새로운 토큰을 벌점으로 처리하여 모델이 같은 문장을 그대로 반복하는 가능성을 줄입니다. presence_penatly와 같은 역할인데 빈도수를 기반으로 한다. |
logit_bias | map (default: null) |
완성 결과에 지정된 토큰이 나타날 확률을 수정합니다. -100에서 100까지의 관련된 편향 값을 가진 토큰(토크나이저에서 지정된 토큰 ID로 지정)을 매핑하는 json 개체를 허용합니다. 수학적으로는, 샘플링 이전에 모델에 의해 생성된 로짓에 편향이 추가됩니다. 정확한 효과는 모델에 따라 다르지만, -1과 1 사이의 값은 선택 확률을 감소 또는 증가시키며, -100 또는 100과 같은 값은 해당 토큰의 제외 또는 배제적 선택을 결과로 가져옵니다. 결과에 포함되었으면 하는 단어에 값을 줄 수 있다. 예) {"effortguy": 40, "youtube": -100} |
user | string | 사용자를 나타내는 고유 식별자로, OpenAI가 남용을 모니터링하고 감지하는 데 도움이 될 수 있습니다. |
curl로 호출했다.
curl --location 'https://api.openai.com/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {API_KEY}' \
--header 'Cookie: _cfuvid=UiaGbsbpda71T1yc9Fj_4mQfaHJXJO3NnvxJ5yViX38-1681827328571-0-604800000' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "chatgpt가 뭐야?"
}
]
}'
결과
{
"id": "chatcmpl-76gQZpwIfZHib0OHwAsNJ5kkHd6rl",
"object": "chat.completion",
"created": 1681827415,
"model": "gpt-3.5-turbo-0301",
"usage": {
"prompt_tokens": 16,
"completion_tokens": 119,
"total_tokens": 135
},
"choices": [
{
"message": {
"role": "assistant",
"content": "저는 OpenAI의 언어 모델 중 하나인 GPT-3를 기반으로, 인공지능 챗봇 서비스를 제공하는 프로그램입니다. 사용자들과 자연스러운 대화를 나눌 수 있도록 고안되었습니다. 저와 대화를 하면서 원하는 정보를 얻거나, 상담이나 질문에 대한 답변을 받을 수 있습니다."
},
"finish_reason": "stop",
"index": 0
}
]
}
4. 라이브러리는 없나?
공식적으로 제공해주는 라이브러리는 Python, Node.js 밖에 없다.
그럼 다른 언어들은 어떻게 하나? 다행히도 일반인들이 만든 라이브러리 중 OpenAI가 검토한 언어별 라이브러리를 공유해준다.
https://platform.openai.com/docs/libraries/community-libraries
OpenAI는 이러한 프로젝트의 정확성이나 보안성을 검증하지 않습니다. 본인 책임 하에 사용해주시기 바랍니다! 라는 문구가 있다. 조심해서 잘 쓰자!
5. api 가격 정책
openai의 api는 당연하게도 무료가 아니다.
아래 링크를 클릭하면 각 api의 가격 정책이 나온다.
GPT-4와 GPT-3.5 모델의 사용료가 다르다.
사이트에선 gpt-3.5-turbo가 퍼모먼스가 좋고 가격도 저렴해서 사용하는 걸 추천한다.
1000개의 토큰당 0.002$다. 오늘 환율로 원화로 바꾸면 2.64원이다.
내가 테스트해보니 한번 api 콜할 때 토큰 수가 1000개가 안 넘어도 0.002$로 계산한다.
저렴한 거 같기도 하고 아닌 거 같기도 하고... 그냥 ChatGPT Plus 결제해놓은 거 써야겠...
6. 사용량, 기본 금액 확인
고맙게도 기본 금액으로 5$를 준다. 3달까지 유지되니 그 안에 다 써버리자.
우측 상단 profile 클릭 -> Manage account 클릭하면 현재 사용량과 사용 금액이 나온다.
댓글