[chatGPT]. Streamlit Cloud 로 챗봇 서비스 배포하기

jongmin-oh·2023년 12월 3일
0

1. BackGround

챗봇 개발자로 일을 하다모면 비개발자분들에게 빠르게 챗봇의 성능을 보여줘야할 때가 있다. 그럴때마다, 임시방편으로 Streamlit 이나 Gradio를 사용하여 임시로 배포를 하곤 했었는데

이번에 Streamlit Cloud 라는 서비스를 알아보니,
정말 쉽게 서버를 잘 모르더라도 할 수 있어서 공유해보고자한다.

2. What is streamlit?

Streamlit은 데이터 과학 및 머신 러닝 애플리케이션을 간단하게 만들기 위한 오픈 소스 파이썬 라이브러리입니다. Streamlit을 사용하면 데이터 과학자나 엔지니어가 웹 애플리케이션을 쉽게 만들고 공유할 수 있습니다.

즉, 인공지능 개발자에게 프론트 영역을 그럴싸하고 쉽게 만들어주는 오픈 소스이다.

3. How to use?

(조코딩님 유튜브)
참고자료 : https://youtu.be/EWKbZFqiCsE?feature=shared

준비

  1. Github 계정
  2. Streamlit cloud 계정
    *가입절차는 생략하겠습니다.

Git 저장소 만들기


*주의 : gitignore 추가는 하지말고 되도록이면 기본설정으로 만드시기 바랍니다.

파일 업로드


Uploading an existing file 클릭

파일 업로드

main.py

from openai import OpenAI
import streamlit as st

instructions = """
#봇 정보
 - 너는 내담자를 위로하고 정신과 치료를 도와주는 심리상담사야
 - 너는 내담자의 고민에 깊은 고민을 하고 대답해야해
 - 너는 내담자의 고민에 충분히 공감해주고 적절한 해결책을 제시해줘야해
 - 너의 대답은 반드시 50자 이하로 해야해
 - 내담자를 부르는 호칭은 반드시 "선생님"으로 해야해

#봇 응답 예시
Q: 갑자기 우울이 밀려올 때면 나 자신이 너무 가치 없게 느껴진다.
A: 세상에 가치없는 사람은 없어요 모두 다 가치있고 소중해요 선생님도 소중한 사람이에요 그 사실을 잊지말았으면 좋겠어요 
"""

st.title("고민 상담소")
client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"])

st.image("Doctor.png", width=500)

if "openai_model" not in st.session_state:
    st.session_state["openai_model"] = "gpt-3.5-turbo"

if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

if prompt := st.chat_input("당신의 고민을 말씀해주세요"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    with st.chat_message("assistant"):
        message_placeholder = st.empty()
        full_response = ""

        messages = [
            {"role": m["role"], "content": m["content"]}
            for m in st.session_state.messages
        ]
        messages.insert(0, {"role": "system", "content": instructions})

        stream = client.chat.completions.create(
            model=st.session_state["openai_model"],
            messages=messages,
            stream=True,
        )
        for response in stream:  # pylint: disable=not-an-iterable
            full_response += response.choices[0].delta.content or ""
            message_placeholder.markdown(full_response + "▌")
        message_placeholder.markdown(full_response)
    st.session_state.messages.append({"role": "assistant", "content": full_response})

requirements.txt

openai
streamlit

Doctor.png

업로드 완료


배포(Deploy)

streamlit cloud 접속

반드시 Git 계정으로 로그인하시길 바랍니다.

New app 클릭

저장소를 방금 만들었던 저장소와 연동합니다.
Main file path 는 main.py로 바꿔줍니다.

OPENAI API KEY 등록

이 부분이 가장 까다롭습니다.
Advanced settings... 을 클릭하여

파이썬은 3.11 버전으로 바꿔줍니다.

그리고 OPENAI_API_KEY 를 toml 형식으로 넣어줍니다.
여기서 toml 형식은

키이름 = "값"

형식을 의미합니다.

[Save]하고 [Deploy] 버튼을 누르면 링크가 부여되고 해당링크로 접속하면 됩니다.

결론

이제 쉽게 외부에서 접속할 수 있는 나만의 chatGPT 웹 서비스를 streamlit cloud를 통해 빠르게 배포할 수 있습니다.

profile
스타트업에서 자연어처리 챗봇을 연구하는 머신러닝 개발자입니다.

0개의 댓글