Streamlit & ChatGPT API 배포 예제

Page content

강의소개

  • 인프런에서 Streamlit 관련 강의를 진행하고 있습니다.
  • 인프런 : https://inf.run/YPniH

개요

API Key 생성

  • 아래 화면에서 View API Keys를 클릭한다.

Untitled

  • 아래 화면에서 Create new secret key 버튼을 클릭한다.

Untitled

Untitled

계정 발급 시 필수 확인 사항

  • 필자는 사업자 G메일 계정이 있고, 개인 계정이 있다.
  • 먼저 개인 계정의 사용자 대시보드 화면은 아래와 같이 나온다.
    • Free trial Usage가 활성화가 되어 있어야 한다.

Untitled

배포 전 사전 준비

  • 먼저 .gitignore 파일에 아래와 같은 텍스트를 입력 후 git push까지 진행한다.
    • 추가해야 할 텍스트는 .streamlit/ 이다.
.
.
# Pyre type checker
.pyre/
.streamlit/
  • 아래 명령어로 터미널에 입력한다.
git add .gitignore
git commit -m "your_msg"
git push
  • 이제 API키를 등록하도록 한다.
    • 프로젝트 root 에서 .streamlit/secrets.toml 파일을 생성한다.
    • [api_credentials] 는 각 사용자가 재정의 할 수 있다.
[api_credentials]
openai_key = "your_api_key"

Sample Code

  • 기본 설치 라이브러리는 아래와 같다.
    • 파일명 : requirements.txt
streamlit
openai
streamlit-chat
  • 가상환경 설정 후, 위 라이브러리들을 설치한다.
(venv) pip install -r requirements.txt
import openai
import streamlit as st 
from streamlit_chat import message

def generate_response(prompt):
    openai.api_key = st.secrets.api_credentials.openai_key
    completions = openai.Completion.create(
        engine = "text-davinci-003",
        prompt = prompt,
        max_tokens = 1024,
        n = 1,
        stop = None,
        temperature=0.5,
    )

    message = completions.choices[0].text
    return message

def get_text():
    input_text = st.text_input("You: ", "Hello, how are you?", key = "input")
    return input_text

def main():
    
    st.title('Chatbot : Streamlit + OpenAI')

    # Storing the chat
    if 'generated' not in st.session_state:
        st.session_state['generated'] = []

    if 'past' not in st.session_state:
        st.session_state['past'] = []

    user_input = get_text()

    if user_input:
        output = generate_response(user_input)
        # store the output 
        st.session_state.past.append(user_input)
        st.session_state.generated.append(output)

    if st.session_state['generated']:
        for i in range(len(st.session_state['generated'])-1, -1, -1):
            message(st.session_state["generated"][i], key=str(i))
            message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')

if __name__ == "__main__":
    main()

배포

Untitled

Untitled

  • Deploy 버튼을 누르면 아래와 같이 라이브러리를 설치한다.

Untitled

  • 정상적으로 배포가 되고, 테스트가 되는지 확인한다.

Untitled