반응형

ChatGPT 의 API 를 연결하려면 우선 로그인을 해야한다. 로그인을 하고 나서 Documentation 탭에 들어간다. API Reference 항목에서 Authentication 항목을 클릭하면 글 내용 중 볼드 처리된 API Keys 가 보이는데 이를 클릭하면 API Key 를 생성할 수 있다.

 

 

키가 발급되고 나면 팝업창이 뜨는데 전체 키를 보여주며 닫으면 다시 볼 수 없으니 복사를 잘 해놓자.

이제 적당한 폴더를 만들어

npm install openai

를 입력해 패키지를 설치하자.

 

 

https://platform.openai.com/docs/api-reference/chat/create

openAI 홈페이지에 가면 아주 잘 나와있으니 참고하면 편하다.

api.js 파일을 만들어 다음과 같이 입력한다.

const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createChatCompletion({
  model: "gpt-3.5-turbo",
  messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);

위의 코드를 실행하면 다음과 같은 response를 받을 수 있다.

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\\n\\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

Request Body 를 더 자세피 살펴보면

  • model(Required) : api 에 사용되는 모델
  • message(Required) : 전송할 메시지
  • temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
  • top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
  • n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
  • stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=[
        {'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
    ],
    temperature=0,
    stream=True  # again, we set stream=True
)

위의 request 를 보내고

for chunk in response:
    chunk_time = time.time() - start_time  # calculate the time delay of the chunk
    collected_chunks.append(chunk)  # save the event response
    chunk_message = chunk['choices'][0]['delta']  # extract the message
    collected_messages.append(chunk_message)  # save the message
    print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}")

다음과 같이 response 를 확인한다면

Message received 0.10 seconds after request: {
  "role": "assistant"
}
Message received 0.10 seconds after request: {
  "content": "\\n\\n"
}
Message received 0.10 seconds after request: {
  "content": "1"
}
Message received 0.11 seconds after request: {
  "content": ","
}
Message received 0.12 seconds after request: {
  "content": " "
}
Message received 0.13 seconds after request: {
  "content": "2"
}
...
Message received 0.13 seconds after request: {
  "content": "100"
}

과 같은 출력을 할 수 있다.

  • stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
  • max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
  • presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
  • frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
  • logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
  • user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.npm install openaiapi.js 파일을 만들어 다음과 같이 입력한다.위의 코드를 실행하면 다음과 같은 response를 받을 수 있다.Request Body 를 더 자세피 살펴보면
    • model : api 에 사용되는 모델
    • message : 전송할 메시지
    • temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
    • top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
    • n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
    • stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=[
            {'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
        ],
        temperature=0,
        stream=True  # again, we set stream=True
    )
    
    위의 request 를 보내고다음과 같이 response 를 확인한다면과 같은 출력을 할 수 있다.
    • stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
    • max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
    • presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
    • frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
    • logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
    • user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.
  • Message received 0.10 seconds after request: { "role": "assistant" }
  • Message received 0.10 seconds after request: { "content": "\\n\\n" }
  • Message received 0.10 seconds after request: { "content": "1" }
  • Message received 0.11 seconds after request: { "content": "," }
  • Message received 0.12 seconds after request: { "content": " " }
  • Message received 0.13 seconds after request: { "content": "2" }
  • ...
  • Message received 0.13 seconds after request: { "content": "100" }
반응형

+ Recent posts