다양한 활동/대회 참가

[대회/데이콘-새싹톤🌱] pre. 챗봇 만들기 학습(1) : chatGPT API 사용 방법

토끼개발자 조르디 2024. 7. 13. 19:16

1. openai 라이브러리 설치

pip를 이용해 openai 라이브러리를 설치

!pip install openai

 

2. API Key 받아오기

2.1. OpenAI 접속 및 로그인

https://platform.openai.com/

 

2.2. API 키 생성

- 'create new secret key' 눌러 키 생성

- 키값 복사해 저장

키값 발급 페이지 화면

 

2.3. 키값 반영하기

파이썬에서 문자열로 사용

api_key = '키 값'

 

3. API 요청 보내보기

3.1. 모듈 불러오기

- OpenAI 모듈을 불러와 API 키를 적용

- 인증키 전달

from openai import OpenAI

client = OpenAI(api_key=api_key)

 

3.2. 질문 만들기

- role : 'user (유저의 질문)', 'system (챗봇의 응답)' 두가지가 올 수 있음

- content : 메세지의 실제 내용

messages = [
    {"role": "user", "content": "안녕, 만나서 반가워."}
]

 

3.3. 요청 보내기

- 사용할 모델 설정 : 아래 예시의 모델은 고성능 대화형 AI 모델

- client.chat.completions.create : OpenAI의 클라이언트 객체 client를 사용해 채팅 완료 요청을 생성하는 메서드

model = "gpt-3.5-turbo"

stream = client.chat.completions.create(
    model=model,
    messages=messages,
    stream=True,
)

 

3.4. 메세기 출력하기

각 chunk(응답의 조각)에 내용이 있는 지 확인 후, 있으면 출력

- chunk.choices[0]

: 응답의 첫번째 선택지

- chunk.choices[0].delta

: 스트리밍된 응답의 변화(delta)를 의미

: 스트리밍 방식에서는 전체 응답을 한 번에 받지 않고, 점진적으로 변화하는 내용을 받음

- chunk.choices[0].delta.content

: 스트리밍된 응답 조각의 실제 내용(content)을 나타냄

: 내용이 None이 아닌 경우(실제 텍스트 포함 경우) 그 내용을 출력

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

 

⬇️ 위의 코드 실행 결과 ⬇️

안녕하세요! 저도 만나서 반가워요. 무엇을 도와드릴까요? 

 

4. API 요청 기능 만들기

ChatGPT API를 사용하는 클래스(Class) 생성 후, 클래스에 정의한 메소드를 실행해 ChatGPT API를 실행

class GptAPI():
    def __init__(self, model, client):
        self.messages = []
        self.model = model
        self.client = client
    
    def get_message(self, prompt):
        self.messages.append({"role": "user", "content": prompt})

        stream = self.client.chat.completions.create(
            model=self.model,
            messages=self.messages,
            stream=True,
        )

        result = ''
        for chunk in stream:
            if chunk.choices[0].delta.content is not None:
                string = chunk.choices[0].delta.content
                print(string, end="")
                result = ''.join([result, string])

        self.messages.append({"role": "system", "content": result})
model = "gpt-3.5-turbo"
gpt = GptAPI(model, client)
text = '만나서 반가워!'

gpt.get_message(text)

 

⬇️ 위의 코드 실행 결과 ⬇️

반가워요! 어떻게 도와드릴까요?
gpt.messages

 

⬇️ 위의 코드 실행 결과 ⬇️

[{'role': 'user', 'content': '만나서 반가워!'}, {'role': 'system', 'content': '반가워요! 어떻게 도와드릴까요?'}]

 

text = '오늘 날씨가 너무 우중충해. 기분전환을 하고 싶은데, 저녁 메뉴 추천해줄 수 있어?' # 질문을 입력해 보세요.

gpt.get_message(text)

 

⬇️ 위의 코드 실행 결과 ⬇️

그럴 때 있죠! 기분전환을 위해 특별한 저녁 메뉴를 추천해드릴게요. 어떤 종류의 음식을 좋아하시나요? 아시아 음식이나 이탈리아 음식, 혹은 어떤 스타일의 요리를 좋아하시나요?
gpt.messages

 

⬇️ 위의 코드 실행 결과 ⬇️

[{'role': 'user', 'content': '만나서 반가워!'}, {'role': 'system', 'content': '반가워요! 어떻게 도와드릴까요?'}, {'role': 'user', 'content': '오늘 날씨가 너무 우중충해. 기분전환을 하고 싶은데, 저녁 메뉴 추천해줄 수 있어?'}, {'role': 'system', 'content': '그럴 때 있죠! 기분전환을 위해 특별한 저녁 메뉴를 추천해드릴게요. 어떤 종류의 음식을 좋아하시나요? 아시아 음식이나 이탈리아 음식, 혹은 어떤 스타일의 요리를 좋아하시나요?'}]