import streamlit as st
from openai import OpenAI

st.set_page_config(page_title="OpenAI 챗봇", page_icon="🤖")
st.title("🤖 OpenAI 챗봇 (Streamlit)")

# 세션 상태에 메시지와 API 키 저장
if "messages" not in st.session_state:
    st.session_state["messages"] = [
        {"role": "system", "content": "당신은 친절한 AI 비서입니다."}
    ]
if "api_key" not in st.session_state:
    st.session_state["api_key"] = ""

# API 키 입력
api_key = st.text_input("OpenAI API Key", type="password", value=st.session_state["api_key"])
if api_key:
    st.session_state["api_key"] = api_key

# 대화 입력 폼
with st.form("chat_form", clear_on_submit=True):
    user_input = st.text_input("메시지를 입력하세요:", "")
    submitted = st.form_submit_button("전송")

if submitted and user_input and st.session_state["api_key"]:
    st.session_state["messages"].append({"role": "user", "content": user_input})
    try:
        client = OpenAI(api_key=st.session_state["api_key"])
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=st.session_state["messages"],
            max_tokens=200,
            temperature=0.7
        )
        ai_reply = response.choices[0].message.content.strip()
        st.session_state["messages"].append({"role": "assistant", "content": ai_reply})
    except Exception as e:
        st.error(f"OpenAI API 오류: {e}")

# 대화 내용 출력
for msg in st.session_state["messages"]:
    if msg["role"] == "user":
        st.markdown(f"**🙋‍♂️ 나:** {msg['content']}")
    elif msg["role"] == "assistant":
        st.markdown(f"**🤖 AI:** {msg['content']}") 

코드 주요 부분 설명

  1. 라이브러리 임포트
import streamlit as st
from openai import OpenAI
  1. 페이지 설정
st.set_page_config(page_title="OpenAI 챗봇", page_icon="🤖")
st.title("🤖 OpenAI 챗봇 (Streamlit)")
  1. 세션 상태 초기화
if "messages" not in st.session_state:
    st.session_state["messages"] = [
        {"role": "system", "content": "당신은 친절한 AI 비서입니다."}
    ]
if "api_key" not in st.session_state:
    st.session_state["api_key"] = ""