[AI & IT 지식카드] Streamlit 챗봇 앱으로 배우는 기본 문법
- AI Product Owner/AI & IT 지식 카드
- 2026. 4. 3. 16:58
Streamlit 챗봇 앱으로 배우는 기본 문법
안녕하세요! 저는 간단한 Streamlit 앱을 만들면서 기본적인 구조와 문법을 배울 수 있씁니다. 이 포스트는 파이썬 초보자분들이 비슷한 앱을 만들면서 공부할 수 있도록 자세히 설명하겠습니다.
왜 이 코드를 골랐나?
저는 직장인의 마음을 위로하는 챗봇 앱을 만들고 싶었어요. OpenAI의 GPT 모델을 사용해서 AI 상담사가 되어주는 앱이죠. 이 코드는 Streamlit이라는 웹 앱 프레임워크를 사용해서 간단하게 만들 수 있었어요. 코드를 보면서 파이썬의 기본 개념들을 하나씩 배웠습니다.
전체 코드 보기
먼저, 전체 코드를 보여드릴게요. 이건 streamlit_basic.py 파일의 내용입니다.
import streamlit as st
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
# (0) 사이드바에서 api_key 입력하는 부분
with st.sidebar:
openai_api_key = os.getenv('OPENAI_API_KEY')
# openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password")
"[Get an OpenAI API key](https://platform.openai.com/account/api-keys)"
"[View the source code](https://github.com/streamlit/llm-examples/blob/main/Chatbot.py)"
"[](https://codespaces.new/streamlit/llm-examples?quickstart=1)"
st.title("💬 Chatbot")
# (1) st.session_state에 "messages"가 없으면 초기값을 설정
if "messages" not in st.session_state:
st.session_state["messages"] = [
{"role": "system", "content": "당신은 전세계적으로 유명한 심리 상담가이자 치료사입니다. 직장인의 우울함, 번아웃, 스트레스를 전문으로 다루며, 공감과 지혜로 위로하고 실용적인 조언을 제공합니다. 로저스나 프랭클 같은 위대한 심리학자들의 전통을 이어받아, 인간의 내면을 이해하고 성장으로 이끌어줍니다. 응답은 따뜻하고 전문적이며, 한국어로 하세요."},
{"role": "assistant", "content": "오늘 하루도 고생했어요. 오늘 하루는 어땠나요?"}
]
# (2) 대화 기록을 출력
for msg in st.session_state.messages:
if msg["role"] != "system":
st.chat_message(msg["role"]).write(msg["content"])
# (3) 사용자 입력을 받아 대화 기록에 추가하고 AI 응답을 생성
if prompt := st.chat_input():
if not openai_api_key:
st.info("Please add your OpenAI API key to continue.")
st.stop()
client = OpenAI(api_key=openai_api_key)
st.session_state.messages.append({"role": "user", "content": prompt})
st.chat_message("user").write(prompt)
response = client.chat.completions.create(model="gpt-4o", messages=st.session_state.messages)
msg = response.choices[0].message.content
st.session_state.messages.append({"role": "assistant", "content": msg})
st.chat_message("assistant").write(msg)
이 코드가 40줄도 안 되지만, 파이썬의 핵심 개념들이 많이 들어 있어요. 하나씩 뜯어보겠습니다.
1. import 문: 외부 도구 가져오기
파이썬에서 다른 라이브러리나 모듈을 사용하려면 import를 사용합니다. 이 코드의 첫 부분을 보세요:
import streamlit as st
from openai import OpenAI
from dotenv import load_dotenv
import os
import streamlit as st: Streamlit 라이브러리를 가져와서st라는 별명으로 사용합니다. 이렇게 하면 코드가 짧아져요.from openai import OpenAI: OpenAI 라이브러리에서OpenAI클래스만 가져옵니다.from dotenv import load_dotenv: 환경 변수 파일(.env)을 로드하는 함수를 가져옵니다.import os: 운영체제 관련 기능을 제공하는 표준 라이브러리입니다.
초보자로서 처음에 헷갈렸던 점은, 이 라이브러리들을 설치해야 한다는 거예요. pip install streamlit openai python-dotenv 명령어로 설치했어요.
2. 환경 변수 로드: 보안 설정
load_dotenv()
이 줄은 .env 파일에서 환경 변수를 로드합니다. API 키 같은 민감한 정보를 코드에 직접 쓰지 않고 파일에 저장해서 불러오는 거예요. 보안에 중요합니다!
3. 조건문과 변수: if문의 기본
# (0) 사이드바에서 api_key 입력하는 부분
with st.sidebar:
openai_api_key = os.getenv('OPENAI_API_KEY')
# openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password")
"[Get an OpenAI API key](https://platform.openai.com/account/api-keys)"
"[View the source code](https://github.com/streamlit/llm-examples/blob/main/Chatbot.py)"
"[](https://codespaces.new/streamlit/llm-examples?quickstart=1)"
여기서 os.getenv('OPENAI_API_KEY')는 환경 변수에서 API 키를 가져옵니다. 만약 키가 없으면 None이 됩니다.
Streamlit의 with st.sidebar:는 사이드바를 만드는 문법입니다. 이 안의 코드가 사이드바에 표시돼요.
4. 세션 상태 관리: 앱의 기억력
# (1) st.session_state에 "messages"가 없으면 초기값을 설정
if "messages" not in st.session_state:
st.session_state["messages"] = [
{"role": "system", "content": "당신은 전세계적으로 유명한 심리 상담가이자 치료사입니다. ..."},
{"role": "assistant", "content": "오늘 하루도 고생했어요. 오늘 하루는 어땠나요?"}
]
이 부분이 파이썬의 핵심 개념 중 하나인 조건문(if)과 리스트/딕셔너리를 보여줍니다.
if "messages" not in st.session_state: 세션 상태에 "messages" 키가 없으면 실행합니다.st.session_state["messages"]: Streamlit의 세션 상태로, 앱이 새로고침돼도 데이터를 유지합니다.- 리스트 안에 딕셔너리가 들어 있어요:
[{"role": "system", "content": "..."}]처럼요.
시스템 메시지는 AI에게 역할을 알려주는 거예요. 저희 앱에서는 상담가 역할을 부여했습니다.
5. 반복문: for 루프
# (2) 대화 기록을 출력
for msg in st.session_state.messages:
if msg["role"] != "system":
st.chat_message(msg["role"]).write(msg["content"])
for 루프의 기본입니다. messages 리스트의 각 항목을 msg로 가져와서 처리합니다.
if msg["role"] != "system": 시스템 메시지는 사용자에게 보이지 않게 합니다.st.chat_message(msg["role"]).write(msg["content"]): Streamlit으로 채팅 메시지를 표시합니다.
6. 사용자 입력과 AI 응답: 함수 호출과 객체
# (3) 사용자 입력을 받아 대화 기록에 추가하고 AI 응답을 생성
if prompt := st.chat_input():
if not openai_api_key:
st.info("Please add your OpenAI API key to continue.")
st.stop()
client = OpenAI(api_key=openai_api_key)
st.session_state.messages.append({"role": "user", "content": prompt})
st.chat_message("user").write(prompt)
response = client.chat.completions.create(model="gpt-4o", messages=st.session_state.messages)
msg = response.choices[0].message.content
st.session_state.messages.append({"role": "assistant", "content": msg})
st.chat_message("assistant").write(msg)
여기가 앱의 핵심 로직입니다.
if prompt := st.chat_input(): 새로운 파이썬 문법인 walrus operator(:=)로, 입력을 받고 바로 조건 검사합니다.if not openai_api_key: API 키가 없으면 앱을 멈춥니다.client = OpenAI(api_key=openai_api_key): OpenAI 클라이언트 객체를 만듭니다. 객체 지향 프로그래밍의 기초예요.response = client.chat.completions.create(...): API를 호출합니다. 함수 호출과 매개변수 전달을 보여줍니다.st.session_state.messages.append(...): 리스트에 새 메시지를 추가합니다.
배운 점과 느낀 점
이 코드를 분석하면서 파이썬의 기본을 많이 배웠어요:
- 변수와 데이터 타입: 문자열, 리스트, 딕셔너리
- 제어 구조: if문, for 루프
- 모듈과 라이브러리: import의 중요성
- 객체와 메서드: OpenAI 클라이언트 사용
- 보안: 환경 변수 사용
가장 어려웠던 건 Streamlit의 개념이었어요. 웹 앱을 코드 몇 줄로 만들 수 있다는 게 신기했습니다. 그리고 AI API를 연결하는 것도 처음엔 복잡했지만, 한 번 해보니 재미있었어요.
'AI Product Owner > AI & IT 지식 카드' 카테고리의 다른 글
| [AI & IT 지식카드] 펑션 콜링과 도구 호출 (0) | 2026.04.02 |
|---|---|
| [AI & IT 지식카드] OpenAI API: 챗봇 대화의 원리와 구조 (0) | 2026.04.02 |
| [AI 지식 카드] OpenClaw 브라우저 릴레이 (0) | 2026.03.11 |
| [AI 지식 카드] AI의 최종 목적지는 AGI? (0) | 2026.03.09 |
| [우디의 지식 카드] MCP | 바이브 코딩의 핵심 | AI 협업 필수 역량 (0) | 2026.01.02 |
이 글을 공유하기






