본문 바로가기

TIL/개인공부

[Slack] ChatGPT Slack 챗봇 만들기 (2편)

반응형

앞선 페이지에서 ChatGPT에 대한 기본적인 설정을 하였다. 이번 포스팅에서는 FastAPI를 사용하기 위한 환경을 구축해본다.

자세히는 설명하기가 너무 길어질것같고. 최대한 요약해서 설명을 해보려고한다.

 

필자는 AWS EC2환경에서 Docker 로 FastAPI를 띄우는 컨테이너를 만들었다.

먼저 app이라는 디렉토리를 생성한다.

mkdir app

그리고 해당 디렉토리 아래에 다음과같은 파일들을 옮겨놓는다.

먼저, 앞 포스팅에서 작업했던 chatgpt.py파일을 옮겨놓는다.

그다음 fastapi에서 사용하기 위한 main.py를 아래와같이 작성한다.

from fastapi import FastAPI, Request
from chatgpt import ChatGPT
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from pydantic import BaseModel
import requests
import json

app = FastAPI()
# slack bot token 넣기
slack_token = "xoxb-로 시작"

try:
    client = WebClient(token=slack_token)
except Exception as e:
    print(e)

@app.get("/")
def read_root():
    return {"Hello": "World"}


class SlackMessage(BaseModel):
    message: str

@app.post("/chatgpt/")
async def send_to_chatgpt(request: Request):
    channel_id = ""
    user_name = ""
    message = ""
    try:
        request_body = await request.body()
        for data in request_body.decode('utf-8').split("&"):
            data_info = data.split("=")
            if data_info[0] == "channel_id":
                channel_id = data_info[1]

            if data_info[0] == "user_name":
                user_name = data_info[1]

            if data_info[0] == "text":
                message = data_info[1]
        message = message.strip()

        response_gpt = ChatGPT(message)

        question_response = client.chat_postMessage(channel = channel_id, text = f"*{user_name} => Question.* " + message)
        answer_response = client.chat_postMessage(channel = channel_id, text = "*ChatGPT Answer.*" + response_gpt)
        return {"ChatGPT" : "Finished answer"}
    except Exception as e:
        print(e)

그렇다면 이제 파일구조는 다음과같이 될것이다.

  • app
    • chatgpt.py
    • main.py

그다음으로는 FastAPI를 Docker로 띄우는 작업이다. 아래는 Dockerfile에 대한 내용이다.

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8

COPY ./requirements.txt /app/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt

COPY ./app /app

requirements.txt에는 아래와같은 내용이 적혀있다.

openai
slack_sdk

위에서 작성한 Dockerfile을 아래와같은 명령어로 build해준다.

docker build --tag chatgpt_fastapi .

 

그 다음 아래와같은 명령어로 build한 이미지에 대해서 run을 진행한다. 컨테이너의 80포트는 고정이고, 앞의 외부포트만 내가 원하는 포트번호로 바꿔주면된다.

docker run -itd -p 20611:80 --name chatgpt_fastapi -v /home/ubuntu/chatgpt/app:/app  --rm chatgpt_fastapi:latest

이제 정상적으로 fastapi container가 띄워졌는지 체크해본다.

내가 띄운 주소의 /docs 경로로 접근이 되는지도 확인해본다. 해당 경로는 FastAPI의 문서페이지이다. 아래와같은 페이지가 나오면된다.

다음 포스팅에서는 내가 띄워놓은 FastAPI가 어떻게 Slack에서 사용되는지에 대해서 설명하겠다.

반응형