반응형
앞선 페이지에서 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에서 사용되는지에 대해서 설명하겠다.
반응형
'TIL > 개인공부' 카테고리의 다른 글
[bash] shebang이란? (0) | 2023.02.07 |
---|---|
[Slack] ChatGPT Slack 챗봇 만들기 (3편) (0) | 2023.01.29 |
[Slack] ChatGPT Slack 챗봇 만들기 (1편) (0) | 2023.01.29 |
[Python] whl파일 생성시 setup.py install_requires 특정 파일로 install되게끔 설정하는 방법 (0) | 2022.12.08 |
[Shell Script] 인자값 이쁘게(?) 받기 (0) | 2022.11.24 |