AI - ChatGPT API (Day 2)

API 사용 요금

  • API (Application Programming Interface : Software Application 구축하고 상호 작용하기 위한 규칙과 프로토콜의 집합
  • 개발자는 API를 사용하여 OpenAI 서버로 일련의 메시지를 보내고, 서버는 모델에서 생성된 메시지를 응답으로 반환
  • OpenAI에서 제공하는 언어 모델마다 별도의 요금 정책이 존재

GPT-4

  • 가장 우수한 성능을 가진 모델 (현재는 기본 모델)
  • GPT-4o, GPT-4o-mini 라는 모델이 새로 등장

첫 번째 GPT-4 모델

  • 최대 8,192개의 토큰 처리 가능
  • GPT-3.5의 두 배 처리 능력

두 번째 GPT-4 모델 (gpt-4-32k)

  • 최대 32,768개의 토큰 처리 가능

세 번째 GPT-4 모델 (gpt-4-turbo)

  • 유일하게 2023년 4월까지의 학습 데이터를 제공하는 모델
  • 최대 128,000개의 토큰 처리 가능
  • 가성비가 좋은 모델

ChatGPT(GPT-3.5)

  • 가장 많이 알려진 모델로, 웹에서 무료로 사용 시 활용되는 모델
  • 현재 2024년 11월 9일 기준으로는 사용하지 않고, 기본 모델이 GPT-4가 되어있음.

API 키 발급

  • API key는 외부 프로그램과 OpenAI 서버가 통신할 때 사용자가 누군지 식별하는 용도로 사용 (주민등록번호와 같은 개념)
  • 항상 보안에 주의해야 함! (요금 부과)
  • API key는 횟수에 제한 없이 재발급할 수 있으므로 키가 노출됐다면 재발급 권장

API keys 클릭

 

Create new secret key 클릭 후 키 이름 입력하고 키 생성

키가 생성되면 복사 아이콘을 클릭해 발급 받은 API 키 복사 -> 잃어버리면 다시 못 보므로 재발급해야 함 (주의!)

 

 

 

 

 

[Usage] 클릭하면 API 사용량 확인 가능

 

 

 

실습 환경 조성

  • Python 설치 (이미 존재하므로 생략함)

Python 가상 환경 만들기

  • 파이썬 가상 환경은 독립된 환경을 생성하여 프로젝트별로 패키지 버전을 분리하여 관리하는 도구

 가상 환경 생성

# python3 -m venv "가상 환경 이름" (macos : python3, window : python)
python3 -m venv pv_env

 

가상 환경 진입

# Window : 가상 환경 이름\Scripts\activate.bat
# macOS : source 가상 환경 이름/bin/activate
source py_env/bin/activate

 

가상 환경 벗어나기

(pv_env) C:\> deactivate

 

  • vscode 설치는 이미 되어있으므로 생략함
  • 구글 코랩도 이미 알고 있고, vscode로만 돌릴 예정이니 생략함

 

ChatGPT API 기본 사용 방법

  • OpenAI API에 접근할 수 있는 Client 객체 생성
import openai

client = openai.OpenAI(api_key="api key 입력") # openAI API Key 입력

 

 

질문하기 위한 기본 형식

response = client.chat.completions.create( # client.chat.completions.create : 질문 메서드
	model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "JSON 형식으로 프롬프트에 대한 응답을 해 주세요"}],
    temperature=1,
    top_p=1,
    presence_penalty=1,
    frequency_penalty=1,
    n=1,
    max_tokens=4000,
    stop=None,
    seed=None,
    response_format={"type" : "json_object"}
   )

 

  • model : 사용할 언어 모델 지정
  • message : 사용자가 입력할 프롬프트가 포함된 리스트로 가장 핵심이 되는 부분이다. 메시지를 활용하여 원하는 질문을 하고 다양한 형태의 메시지 입력을 통해 프롬프트 엔지니어링을 할 수 있음
  • temperature : text randomness와 관련된 parameter로, 온도를 높게 설정하면 모델이 생성하는 텍스트가 사람이 보기에는 예측에서 벗어나고 다양하며 창의적으로 보이는 경향을 띠고 낮게 설정하면 좀 더 전형적이고 보수적인 텍스트를 생성하는 경향을 보임. 일반적으로 온도 값은 0.5 ~ 1.5 사이의 값을 시작점으로 사용하고, 적절한 온도 값은 사용자가 어떤 작업을 하고 싶은지 어떤 프롬프트를 사용하는지에 따라 다르므로 실험적으로 찾는 것이 좋음 (범위 : 0.0 ~ 2.0, Default : 1.0)
  • top_p : 다음 단어 또는 토큰이 샘플링되는 범위 제어 (범위 : 0.0 ~ 1.0, Default : 1.0)
  • presence_penalty : 단어가 이미 생성된 텍스트에 나타난 경우 해당 단어가 등장할 가능성을 줄임. 크게 설정할 수록 새로운 주제에 대해 이야기할 가능성이 높아짐 (범위 : 0.0 ~ 2.0, Default : 1.0)
  • frequency_penalty : 모델이 동일한 단어를 반복적으로 생성하지 않도록 설정. 높게 설정하면 모델이 이미 생성한 단어를 다시 생성하는 것을 좀 더 자제하므로 다양하고 중복되지 않은 텍스트를 생성하게 유도할 수 있음. (범위 : 0.0 ~ 2.0, Default : 0)
  • n : 입력 메시지에 대해 생성할 답변의 수 (Default : 1)
  • max_tokens : 최대 토큰 수 제한. API 사용은 토큰 수에 따라 요금이 부과되므로 최대 토큰 파라미터를 통해 답변의 길이 조정 가능 (Default : 모델의 최대 토큰 수)
  • stop : 토큰 생성을 중지하는 문자. stop = ['\n', 'end of text'] 처럼 문자열 목록으로 값을 설정. None으로 설정하면 따로 중지 문자 설정을 하지 않고 답변을 끝까지 생성
  • seed : 특정 숫자 입력하면 동일한 질문에 대해 같은 답변을 받을 수 있음. (Default : None -> 매번 다른 답변)
  • respons_format : 답변을 JSON 형태로 받고 싶다면 {"type": "json_object"}를 입력. (Default : None)
  • tools, tool_choice : 질문에 대한 답변 내용을 다른 함수에 연결할 때 사용하는 Parameter.. tools는 연결하고자 하는 함수명과 함수 입력값을 지정하는 JSON 구조의 값을 입력하고, tools_choice = "auto"로 설정.. (Default : None)
print(response.choices[0].message.content) # 답변 결과 텍스트
print(response.usage) # 소모한 토큰 수

total_bill = response.usage.prompt_tokens * 0.0015 / 1000 + resopnse.usage.completion_tokes * 0.002 / 1000
print("총 발생 비용 {} 원".format(total_bill * 1323.43)) # 총 얼마의 비용이 발생했는가 계산

 

역할 부여하기

  • 역할 지시 : ChatGPT가 앞으로 답변할 때 해당 역할로서 답변하라는 의미
  • 역할 지시문에 따라 답변 자체의 방향성을 바꿔버리기도 함.
  • 기존 코드에서 messages[] 안에 {"role": "system", "content": ""} 를 추가로 작성 (System : 역할 부여, user : 질문)
  • 한국어가 아니라 영어로 작성해야 더 잘 동작하는 경향이 있음.
response = client.chat.completions.create (
	model="gpt-3.5-turbo",
    messages=[
    	{"role": "system", "content": "You're a chatbot that refuses to answer and says sorry when users ask questions."},
        {"role": "user", "content": "2020년 월드시리즈에서는 누가 우승했어?"}
        ]
       )
       print(response.choices[0].message.content)

 

이전 대화를 포함하여 답변

  • 답변할 때 이전 질문과 답변을 모두 고려하여 답변
  • ChatGPT API를 이용하면 앞서 답변한 상태를 전달할 수 있음
response = client.chat.completions.create(
	model="gpt-3.5-turbo",
    messages=[
    	{"role": "user", "content": "2002년 월드컵에서 가장 화제가 되었던 나라는 어디야?"},
        {"role": "assistant", "content": "바로 예상을 뚫고 4강 진출 신화를 일으킨 한국입니다."},
        {"role": "user", "content": "그 나라가 화제가 되었던 이유를 자세하게 설명해 줘."}
        ]
    )
print(response.choices[0].message.content)

 

 

OpenAI에서 제공하는 AI 서비스

  • DALL-E : 자연어로 이미지 생성
  • Vision : 이미지를 통해 자연어 생성
  • Whisper : 음성을 텍스트로 분석

 

'Data Engineer > AI' 카테고리의 다른 글

AI - Pytorch  (5) 2024.11.14
AI - DL  (0) 2024.11.12
AI - ChatGPT API (Day 1)  (3) 2024.11.10
AI - ML  (3) 2024.11.05
ML & DL 실습  (3) 2024.10.30