인공지능-기계학습/OpenAI

ChatGPT API 사용법 기초2: Chatting Application

The Yellow Lion King 2023. 12. 3. 12:53
반응형

ChatGPT의 API를 사용하면 직접 만든 앱/어플리케이션에서 ChatGPT가 대답하는 것 처럼 개발할 수 있습니다.
이번 내용은 이것을 위한 기본적인 흐름과 코드 내용을 배워 보는 것 입니다. 그래서 사용자가 질문을 입력하면 ChatGPT가 대답하는 대화하는 어플리케이션 프로그램을 만드는 것 입니다.

 

사전 준비 사항

ChatGPT API 사용을 위해서는 먼저 OpenAI에 가입이 되어 있어야 하고 API사용을 위한 [0.1]API Key를 발급 받아야 합니다. API Key란, API를 호출할 때 허가 받은(Credit이 설정되어있는) 사람이 호출하는 것인지 아닌지를 확인하기 위해서 미리 만들어진 텍스트를 말합니다. 'sk-'로 시작하며 예를 들면 다음과 같습니다.

sk-ABCDEFGHIJ1234567890ABCDEFGHIJ1234567890ABCDEFGH

 
개발 환경으로는 Google 의 CoLab을 이용할 예정이며 언어는 파이썬을 사용하겠습니다. Colab은 Google에서 제공하는 온라인 무료/유료 주피터 노트북 서비스입니다. 크롬 브라우저 사용을 권장하고요. 크롬에서 구글 로그인 후 여기를 클릭하시면 [0.2]새로운 노트북 파일을 만들 수 있습니다. 또는 여기 https://colab.google/ 를 통해 New notebook 버튼을 클릭합니다. 그러면 아래와 같은 온라인 주피터 노트북이 열립니다.

 

더보기

여기서 잠깐 : 노트북 기본 사용법

사용방법은 연결하고 작성하고 실행하는 것 입니다.

연결

오른쪽 위에 있는 연결 버튼을 클릭해서 화면에 보이는 프로그램과 실제 파이썬을 실행시킬 프로그램을 연결합니다. 일반 주피터 노트북에서는 이 실행 프로그램을 커널이라는 용어를 사용하는데 Colab에서는 실행 프로그램(커널)의 연결 뿐만아니라 실행된느 하드웨어 서버도 선택하여 연결 할 수 있습니다. 

작성

가운데 부분에 있는 박스 영역을 쎌이라고 말합니다. 쎌을 한번 클릭하면 작성모드로 변하고 작성모드에서 클릭하면 선택 모드로 바뀝니다. 작성 모드에서 실행하려는 파이썬 코드 내용을 입력하여 프로그램을 작성합니다.

실행 

실행 시키고자하는 프로그램이 작성된 쎌을 선택하고 Shift와 Enter를 같이 누르면 쎌의 내용이 실행됩니다. 또는 쎌의 왼쪽에 보이는 삼각형 버튼을 클릭하면 코드나 텍스트를 입력할 수 있습니다. 

 
이렇게 해서 여러분도 온라인 파이썬 개발 환경을 가지게 되셨습니다.
 
QuickStart 에서도 나오지만 API 사용을 위해서 크게 3단계로 진행합니다. 1. 파이썬을 설정하고, 2. API Key를 사용할 수 있게 설정한 뒤에, 3. 필요한 프로그램에서 API Key와 필요한 함수를 호출하여(프로그램을 작성하여) ChatGPT의 기능을 사용할 수 있습니다.

 

1. 파이썬 설정

가장 먼저 할일은 파이썬을 설정 하는 것 입니다. 그런데 우리는 CoLab을 사용할 예정이어서 별도로 파이썬을 설치할 필요가 없습니다.  로컬 PC에서 해보고 싶으신 분은 이전 포스팅 또는 OpenAI -> Docs -> Quickstart의 파이썬 설치/설정 부분을 참고해주세요.
CoLab을 사용할 경우 파이썬 설치는 필요 없지만 필요한 라이브러리는 설치해 주어야 합니다. 물론 CoLab이 ML/AI 개발에 필요한 많은 라이브러리를 설치된 상태로 제공되기 때문에 sci-kit learn 같은 라이브러리는 import만 해서 사용할 수 있습니다. 그러나 openai는 기본 설치가 되어있지 않기 때문에 직접 설치해 주어야 합니다. [1.1]아래의 명령어로 설치할 수 있습니다.

!pip install openai
더보기

(명령어의 제일 앞에 !가 있는 이유는 Colab 주피터 노트북의 쎌에서 shell 명령을 실행하기 위해서는 명령어 제일 앞에 !를 붙여 줘야 합니다.  즉, 로컬 PC 터미널이나 명령창에서 실행되기를 원하는 명령어의 경우에는 제일 앞에 !(느낌표)가 필요 합니다.) 이러한 방법으로 라이브러리를 설치할 수 있습니다. 

 

다른 필요한 라이브러리와 함께 사용하기 위해서 설치된 버전을 조정해주어야 할 경우가 있습니다. 이런 경우 이미 설치된 라이브러리의 삭제가 필요한 데 이때는 아래의 명령어를 사용합니다.

!pip uninstall 라이브러리이름

 

 

2. API Key 설정

API Kye 설정이란, API Kye를 호출 할 때 같이 전송할 수 있도록 준비하는 것을 말합니다.  OpenAI 홈페이지에서 API Key를 만듭니다.
OpenAI -> API Keys 메뉴 페이지에서 Create new secret key 번튼을 눌러서 새로운 API Key를 만들 수 있습니다.

주피터 노트북의 빈 쎌에 아래의 [2.1]내용을 입력하고 Shift와 Enter를 같이 누르거나 쎌 왼쪽에 있는 삼각형을 클릭하여 쎌을 실행시킵니다.

import os
os.environ['OPENAI_API_KEY']='복사한APIKey내용'

위의 내용은 환경변수 'OPENAI_API_KEY'에 복사한APIKey내용을 설정하는 명령 입니다.
 

3. 어플리케이션 작성

자, 이제부터는 위에서 작성한 환경변수를 설정하는 프로그램과 같이 어플리케이션 로직이 들어있는 파이썬 코드를 작성하면 됩니다.
지난 포스트에서 QuickStart에 있는 코드를 실행해 보았습니다. 이번에는 OpenAI Example 에서 하나를 진행해 보겠습니다. 위의 내용 까지 작성하고 실행한 colab 노트북 쎌의 아래쪽에 새로운 쎌을 하나 만들고 [3.1]다음의 코드를 입력하고 실행합니다.

# This code is for v1 of the openai package: pypi.org/project/openai
from openai import OpenAI
client = OpenAI()

response = client.completions.create(
  model="gpt-3.5-turbo-instruct",
  prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: I'd like to cancel my subscription.\nAI:",
  temperature=0.9,
  max_tokens=64,
  top_p=1,
  presence_penalty=0.6,
  stop=[" Human:", " AI:"]
)

이 코드를 실행 시키면 prompt 내용이 chatGPT 모델에 전달되고 회신 받은 내용이 response에 저장됩니다. 전달자 중에 prompt의 내용을 한글로 변환하면 다음과 같습니다. "이어지는 내용은 AI 어시스턴트와의 대화입니다. 어시스턴트는 도움이되고, 창의적이고, 영리하며 매우 친절합니다. 사람: 안녕, 너는 누구니? AI: 나는 OpenAI에서 만든 AI입니다. 어떻게 도와드릴까요? 사람: 나는 가입을 취소하고 싶어 AI: " 
그럼이제 반환된 response 내용을 살펴 볼까요! 아래와 같이 [3.2]쎌에 response 를 입력하고 실행합니다.

출력된 내용을 살펴보니 중간에 text의 값으로 AI 어시스턴트의 회신 내용이 보입니다. " Okay, I can definitely help you with that, May I know the reason for cancellation? ......". [3.3]어시스턴트의 회신 내용만 보기위해서 아래와 같이 쎌에 입력하고 실행합니다.

response.dict()['choices'][0]['text']

지금까지 한번의 대화 턴(Turn)이 있는 하나의 질문과 대답을 보았습니다. 계속적인 대화를 위해서 아래와 같은 파이썬 코드를 작성할 수 있습니다. while 문을 통해 반복 실행하도록 했으며, if 구문을 두어서 사용자가 입력한 값이 exit이면 while 문을 빠져나가서 종료하도록 하였습니다. 사용자가 질문을 입력한 것이라면 그내용을 chatGPT에 보내서 회신을 받고 회신 받은 내용을 출력해주는 명령을 작성하였습니다. [3.4]아래 내용을 복사하여 쎌에 입력후 실행해 보세요.

while True:
  prompt = input("질문을 입력하세요: ")
  if prompt == 'exit': break
  response = client.completions.create(
    model="gpt-3.5-turbo-instruct",
    prompt=prompt,
    temperature=0.9,
    max_tokens=64,
    top_p=1,
    presence_penalty=0.6,
    stop=[" Human:", " AI:"]
  )
  print(response.dict()['choices'][0]['text'])

제가 작성하고 실행한 결과는 아래와 같습니다.

 

더보기

추가 실습 방법:

client.completions.create() 함수에 있는 전달자의 값들을 바꾸어가면서 ChatGPT의 회신 내용을 비교해 보세요. temperature는 허풍, 거짓말 등 꾸며낸 이야기의 정도를 어떻게할지 조정할 수 있습니다. 0이면 꾸며내지 말라는 것이며 1을 최대한 꾸며내라는 것입니다. 이렇게 꾸며낸 이야기를 Hallucination이라고 하여 환각의 정도를 조정할 수 있습니다. max_tokens는 입력과 출력을 합친 단어수라고 생각하시면 됩니다. 간단히 말하면 회신 내용의 길이를 조정할 수 있습니다. top_p는 회신 내용의 건수 이며, presence_penalty는 동일한 답변을 조정하는 전달자 입니다.

 
이것으로 우리가 목표했던 계속적인 대화를 하는 간단한 어플리케이션이 만들어졌습니다. 이 프로그램은 ChatGPT의 대화를 OpenAI가 제공하는 웹서비스에서 사용하는 것이 아니라 별도의 어플리케이션 프로그램에서 사용할 수 있게 했다는 의미가 있습니다. 이후에는 프롬프트 엔지니어링 기법을 이용하여 보다 잘 알아 듣는 챗봇 어플리케이션을 만들어 보겠습니다.
 
안되는 부분이나 더 궁금한 점, 또는 이상한 점 있으시면 언제든지 댓글 달아주세요.
감사합니다.
 

반응형