본 포스팅 시리즈에서는 최근 트랜드였던 ChatGPT에 대한 개요와 OpenAI에서 제공하는 AI 언어모델 API를 이용한 응용 사례들, OpenAI에서 제공하는 각종 모델의 특징들에 대해 안내하고 더 나아가 OpenAI에서 제공하는 AI 언어모델 API 사용법, 인공지능 모델에 목표를 부여하고 특정 방향성으로 응답하도록 하는 인공지능 튜닝방법 까지 소개할 예정입니다.
이번 포스트는 두번째 시리즈로서, 실질적인 Open AI API 사용을 위한 사전 준비 방법과 Request/Response 구성/분석 방법에 대해 소개하겠습니다.
Open AI API 사용을 위한 사전 준비 #
계정 등록 #
OpenAI 사이트에 접속해 우측 상단의 Sign up
버튼을 통해 회원가입을 진행합니다.
계정 설정 #
우측 상단의 프로필을 클릭해 뜨는 컨텍스트 메뉴에서 Manage account
메뉴를 통해 계정 관리로 접근할 수 있습니다.
Manage account
메뉴의 Settings에서 Organization setting > Organization name을 변경해 주는것이 좋습니다.
추후 모델 튜닝 시 튜닝된 모델명에 Organization name이 들어가게 됩니다.
Usage
메뉴에서 토큰의 기간 별 사용량을 추적할 수 있으며, Billing
메뉴에서 요금 충전과 자동 충전 설정이 가능합니다.
API keys
메뉴에서 API 키를 발급받고 관리할 수 있습니다.
모델 선정 #
Manage account
메뉴 > Organization - Rate limits 메뉴에서 API에서 사용가능한 모델의 목록과, 모델 별 속도 제한에 대한 정보를 확인할 수 있습니다.
Open AI API Request/Response 구성/분석 방법 #
Open AI에서 제공하는 API는 Text 처리 모델 뿐만 아니라, 이미지, 오디오 특화 모델 또한 있지만, 본 시리즈에서는 가장 기본적인 Text 처리 모델을 기준으로 소개하겠습니다.
API Test 툴 Postman을 사용해 Open AI Request / Response 구조 예시를 테스트 해보겠습니다.
사용 모델은 gpt-3.5-turbo-0613
로 이노팩토리 챗봇용으로 파인 튜닝한 모델을 사용해 보겠습니다.
Request 구성 #
먼저 API 사용을 위해 API keys
메뉴에서 발급한 API 키를 Authorization에 Bearer 토큰 타입으로 세팅하고, 헤더에 Content-Type을 application/json로 설정합니다.
다음은 Postman으로 구성한 Request body입니다.
이 중 필수 필드는 model과 messages로, 사용 모델에 따라 messages의 구성 형태가 상이 할 수 있습니다.
아래의 예제에서 사용한 이노팩토리 챗봇용으로 파인 튜닝한 모델인 gpt-3.5-turbo-0613
은 messages에 role과 content로 구성된 메시지를 담아서 사용하며, role을 달리해 모델의 방향성을 결정할 수 있는 정보를 추가 할 수 있습니다.
예를 들어, 아래의 예제에서는 system
role을 사용하여 모델에게 이노팩토리 회사 챗봇의 역할을 부여하여 사용자가 “안녕하세요” 라고 대화를 시도했을 때, 적절한 역할에 따른 답변을 하도록 조정하는 조정어를 줄 수 있습니다.
그 외에도 assistant
role을 사용하여 모델의 답변에 도움이 되는 정보를 추가할 수 있습니다.
아래는 Request body에 설정되는 속성들의 세부 내용입니다.
속성명 | 타입 | 설명 | 비고 |
---|---|---|---|
messages | array | 메시지 목록 | 필수 |
model | string | 사용할 모델의 ID | 필수 |
frequency_penalty | number or null | 동일한 말을 반복할 가능성, 빈도를 조정하는 옵션 | Defaults to 0 |
function_call | string or object | 모델이 함수를 호출하는 방법을 제어하는 옵션 | |
functions | array | 모델이 JSON 입력을 생성할 수 있는 함수 목록 | |
logit_bias | map | 특정 지정 토큰이 대답으로 사용될 가능성 조정값 | Defaults to null |
max_tokens | integer or null | 대화 시 생성할 최대 토큰 수 제한 | |
n | integer or null | 각 입력 메시지에 대한 응답 선택 개수 | Defaults to 1 |
presence_penalty | number or null | 동일한 주제를 반복할 가능성을 조정하는 옵션 | Defaults to 0 |
stop | string / array / null | API가 추가 토큰을 생성하는 것을 강제 중지하는 종료단어 | Defaults to null |
stream | boolean or null | 이전 대화를 기억하고 그 내용을 토대로 대화를 이어 나가는지에 대한 여부 | Defaults to false |
temperature | number or null | 답의 정확도와 핵심내용 집중 여부를 결정하는 수치 | Defaults to 1 |
top_p | number or null | 모델이 응답하기 위한 토큰 후보들에 할당되어있는 확률질량 제한 수치 | Defaults to 1 |
user | string | 사용자를 나타내는 고유 식별자 |
Response 구성 #
위의 내용을 토대로 요청을 보내 Response 받을 수 있습니다.
응답은 Chat Completion 객체를 반환받으며, stream 옵션이 활성화 되어있던 경우에는 Chat Completion chunk를 반환받습니다.
Open AI API 라이브러리 #
Open AI 에서는 API 사용을 위한 라이브러리를 제공하고 있으나, Python과 Node.js, Azure 라이브러리만 제공되고 있습니다.
API 응용을 위한 Java 라이브러리는 Community libraries가 공식 문서에 안내되어있습니다.
자세한 내용은 Open AI API Libraries에서 확인할 수 있습니다.
다음 포스팅에서는 Open AI API를 사용한 챗봇 만들기 예시를 통해 AI 모델의 파인 튜닝 방법과 응용법에 대해 소개하겠습니다