본문 바로가기
AI

[AI] ChatGPT 사용법 (7) - ChatGPT API 사용법

by 노력남자 2023. 4. 18.
반응형

얼마 전 열린 KotlinConf'2023 영상 자막을 번역하려고 ChatGPT를 썼는데 너무 많고 오래 걸려서 짜증이나서 혹시 api로 ChatGPT를 호출해서 쓸 수 있는 방법없나 찾아보니 있었다.

 

이제부터 호출하는 방법을 하나하나 알아보자.

 

1. openAI 가입

 

ChatGPT를 가입한 거랑은 별개로 가입을 해야한다.

 

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

위 사이트에 접속해서 오른쪽 상단에 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 소개

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

api 사용법

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

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의 가격 정책이 나온다.

 

 

Pricing

Simple and flexible. Only pay for what you use.

openai.com

 

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 클릭하면 현재 사용량과 사용 금액이 나온다.

 

반응형

댓글