반응형
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 : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
위의 request 를 보내고다음과 같이 response 를 확인한다면과 같은 출력을 할 수 있다.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 )
- 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" }
반응형