Slack에서 ChatGPT와 함께하는 AI 챗봇 만들기 (5)

반응형

OpenAI API 사용하기

이번에는 OpenAI API를 사용하여 슬랙에서 AI와 대화할 수 있는 봇을 만들어본다. Bolt For Python API 문서를 참고하여 개발을 진행했다.

OpenAI API

OpenAI API를 사용하면 GPT-3을 사용해 볼 수 있다. 현재 ChatGPT에 사용되는 모델은 GPT-3.5라고 하고, API로 제공되는 모델은 GPT-3라고 한다. OpenAI API를 사용하려면 먼저 https://beta.openai.com/signup에서 OpenAI 계정을 만들어야 한다. 계정이 있어야 OpenAI 언어 모델에 액세스 할 수 있는 API Key를 만들 수 있다.

OpenAI에 처음 가입하면 무료 평가판으로 $18를 받을 수 있다.

만약 $18를 모두 사용했거나 $18를 받지 못했더라도 걱정할 필요가 없다. 언어 모델 API 호출 비용이 매우 저렴하다. 언어 모델 API는 토큰당 과금되는 방식이며, 1000 토큰은 약 750개 단어라고 한다.

토큰에 대한 개념이 이해가 되지 않아서 ChatGPT에게 물어보니 다음과 같은 답변을 받았다. OpenAI API 가격표에서 말하는 토큰이란 의미를 갖는 문자열의 최소 단위라고 생각하면 될 것 같다.

개인은 OpenAI API 최대 사용한도가 $120이다. 만약 이 가격도 부담된다면 나처럼 최대한도를 걸어놓자. 나는 $10 까지만 사용가능하도록 설정했다. 그리고 $5를 넘어가면 알림 이메일이 발송되도록 했다.

나는 2월부터 시작하여 OpenAI API 를 3주간 사용했지만, 2월 총 사용 금액은 겨우 $0.71 발생했다.


OpenAI API Key 발급 받기

OpenAI API에서 키를 발급하는 과정을 설명하겠다. API Key를 만들려면 다음 단계를 따른다:

https://openai.com/api/login에서 OpenAI 계정에 로그인한다.

화면 오른쪽 상단의 사용자 이름을 클릭한 다음, 드롭다운 메뉴에서 ‘View API Keys’ 를 선택한다.

[Create new secret key] 버튼을 클릭한다.

API Key가 생성되어 화면에 표시된다. OpenAI API에 액세스 하려면 이 키가 필요하므로 반드시 복사하여 안전한 곳에 보관한다. API Key는 최대 5까지 생성가능하다.


OpenAI API Playground

OpenAI API Playground에 들어가면 Open API를 테스트할 수 있다.

현재 언어 모델은 text-davinci-003이 성능이 가장 뛰어나다. Load a preset으로 프리셋을 불러오고, Temperature와 Maximun length 파라미터를 변경하면서 API를 테스트해보자.


OpenAI API Example Preset

OpenAI Examples로 이동하면, 다양한 활용 예제들을 살펴볼 수 있다.

우리는 슬랙 챗봇을 만들기 위해 아래로 스크롤해서 Chat을 클릭한다.

그리고 [Open in Playground] 버튼을 클릭한다.

그럼 선택한 Chat Example의 Prompt와 파라미터가 Playgound에 자동으로 입력된다. 여기서 [View code] 버튼을 클릭한다.

개발언어 선택 드롭박스에서 python을 선택하고 Copy를 눌러 코드를 클립보드에 복사한다.

복사된 코드의 전문은 다음과 같다.

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

start_sequence = "\nAI:"
restart_sequence = "\nHuman: "

response = openai.Completion.create(
  model="text-davinci-003",
  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: ",
  temperature=0.9,
  max_tokens=150,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0.6,
  stop=[" Human:", " AI:"]
)

OpenAI Python 라이브러리 설치하기

터미널에 아래 명령을 입력하여 가상 환경을 활성화한다.

source ./venv/bin/activate

그다음 아래 명령을 사용하여 [OpenAI Python Library](https://pypi.org/project/openai/)를 설치한다. ```bash pip install --upgrade openai ```

환경변수에 OpenAI API Key 추가하기

secret.txt 파일에 OPENAI_API_KEY를 추가한다.

OPENAI_API_KEY=여러분의 OpenAI API Key

secret.txt 위치는 ConfigurationsEnvFile 탭에서 확인할 수 있다.


슬랫 봇에 OpenAI API 연결하기

OpenAI API의 Playground에서 복사한 샘플 코드를 활용할 것이다. main.py 에 다음 코드를 추가한다.

import os  
import openai
  
openai.api_key = os.getenv("OPENAI_API_KEY")  
  
# 앱 채널의 모든 메세지를 수신
@app.event("message")
def handle_message_events(event, message, say): 
    response = openai.Completion.create(  
        model="text-davinci-003",  
        prompt=f"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: {message}",  
        temperature=0.9,  
        max_tokens=150,  
        top_p=1,  
        frequency_penalty=0,  
        presence_penalty=0.6,  
        stop=[" Human:", " AI:"]  
    )  
    print(response) # OpenAI API 응답을 콘솔에 출력. 
    say(response.choices[0].text)  

OpenAI API에서 응답받은 response 객체를 출력하면 다음과 같은 데이터를 받아온다. 우리는 choices 배열에 담여있는 첫 번째 객체의 text 값을 사용하면 된다.

이제 앱을 실행하고 슬랙에서 말을 걸어보자.

봇 응답에서 'AI: ’ 문자열을 제거하자.

say(response.choices[0].text.replace("AI: ", ""))

이제 슬랙에 나만의 인공지능 챗봇이 생겼다.

다음은 지금까지 만든 앱의 파이썬 코드 전문이다.

# Use the package we installed
from slack_bolt import App
import os
import openai

# Initializes your app with your bot token and signing secret
app = App(
    token=os.environ.get("SLACK_BOT_TOKEN"),
    signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
)

openai.api_key = os.getenv("OPENAI_API_KEY")

# 앱 채널의 모든 메세지를 수신
@app.event("message")
def say_hello(message, say):
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=f"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: {message}",
        temperature=0.9,
        max_tokens=150,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0.6,
        stop=[" Human:", " AI:"]
    )
    say(response.choices[0].text.replace("AI: ", ""))


# Start your app
if __name__ == "__main__":
    app.start(port=int(os.environ.get("PORT", 3000)))

다음에는 ngrok를 사용하지 않고 슬랙 소켓을 사용하여 봇을 만드는 방법을 알아보자.


or
[카카오페이로 후원하기] [토스페이로 후원하기]

반응형