-
[5월 3주차-5/21]📈 GPT + Streamlit + yfinance로 주식 정보 챗봇 만들기Why Not SW CAMP 5기/수업 기록 2025. 5. 21. 11:49
✨ 목표
자연어로 “애플 주가 알려줘”라고 입력하면,
GPT가 스스로 종목을 파악하고, yfinance 데이터를 가져와 보여주는
AI 주식 상담 챗봇을 만드는 프로젝트입니다.
📁 프로젝트 구조
📦 stock_chatbot_project/ ├── gpt_functions.py # yfinance 기반 기능 정의 (시간, 주가, 추천 등) ├── stock_info_streaming.py # Streamlit 앱 실행 및 GPT와 통합 처리 ├── yfinance.py # yfinance 기본 테스트 코드 (연습용) └── .env # OpenAI API 키 저장
1. yfinance.py — 주식 데이터 확인용 연습 코드
import yfinance as yf msft = yf.Ticker("MSFT") print(msft.info) # 기업 정보 print(msft.history(period="5d")) # 최근 5일간 주가 print(msft.recommendations) # 애널리스트 추천
yfinance는 야후 파이낸스 데이터를 가져오는 강력한 파이썬 라이브러리예요.
2. gpt_functions.py — GPT가 사용할 함수들 정의
이 파일에서는 GPT가 사용할 도구(Functions)를 정의하고,
각 도구에서 실행할 함수도 직접 구현합니다.✅ 주요 함수
- get_current_time(timezone) — 현재 시간 반환
- get_yf_stock_info(ticker) — 종목의 기업 정보 반환
- get_yf_stock_history(ticker, period) — 주가 이력 반환
- get_yf_stock_recommendations(ticker) — 추천 정보 반환
def get_yf_stock_history(ticker: str, period: str): stock = yf.Ticker(ticker) history = stock.history(period=period) history_md = history.to_markdown() return history_md
✅ GPT Tool 형식 등록
tools = [ { "type": "function", "function": { "name": "get_yf_stock_history", "description": "...", "parameters": { "type": "object", "properties": { "ticker": {"type": "string", ...}, "period": {"type": "string", ...} }, "required": ["ticker", "period"] } } }, ... ]
이런 식으로 GPT가 사용할 수 있는 도구 목록을 JSON 형식으로 등록해줍니다.
이제 GPT가 대화 중 필요한 정보를 스스로 함수 호출로 요청할 수 있게 됩니다!
3. stock_info_streaming.py — 챗봇 실행 (Streamlit + GPT 연동)
✅ 기본 UI 구성
st.title("💬 Chatbot")
✅ 메시지 저장소
if "messages" not in st.session_state: st.session_state["messages"] = [ {"role": "system", "content": "너는 사용자를 도와주는 상담사야."} ]
✅ 사용자 입력 처리
if user_input := st.chat_input(): st.session_state.messages.append({"role": "user", "content": user_input})
✅ GPT 응답 스트리밍 함수
def get_ai_response(messages, tools=None, stream=True): response = client.chat.completions.create( model="gpt-4o", stream=stream, messages=messages, tools=tools, ) ...
GPT가 응답을 스트리밍 방식으로 한 줄씩 보내줄 수 있게 구성되어 있어요.
중간중간 멈추지 않고 부드럽게 답변이 출력됩니다.
4. 🎯 핵심 로직 — 도구 호출 & 함수 실행
🔍 GPT가 도구를 요청할 경우
GPT는 다음과 같이 툴을 호출합니다:
{ "function": { "name": "get_yf_stock_history", "arguments": "{\"ticker\": \"AAPL\", \"period\": \"5d\"}" } }
이걸 받아서 실제 Python 함수로 실행해주는 파트가 아래 코드예요.
if tool_calls: for tool_call in tool_calls: tool_name = tool_call["function"]["name"] arguments = json.loads(tool_call["function"]["arguments"]) if tool_name == "get_yf_stock_history": func_result = get_yf_stock_history( ticker=arguments["ticker"], period=arguments["period"] ) ...
🧠 실행 결과를 GPT에게 다시 넘겨줌
st.session_state.messages.append({ "role": "function", "tool_call_id": tool_call_id, "name": tool_name, "content": func_result, }) st.session_state.messages.append({ "role": "system", "content": "이제 주어진 결과를 바탕으로 답변할 차례다." })
- GPT가 주식 정보를 가져오도록 요청
- Streamlit에서 해당 함수 실행
- 결과를 다시 GPT에게 넘김
- GPT가 그걸 바탕으로 최종 사용자용 응답 생성!
📌 마무리
기술 역할
yfinance 야후 파이낸스 데이터 수집 GPT-4o 자연어 처리 + 도구 호출 Streamlit 대화형 웹 UI 'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[5월 4주차-5/26]손글씨 인식부터 배경 제거까지, OCR 기반 이미지 처리 앱 만들기! (1) 2025.05.26 [5월 3주차-5/22]🧠 LangChain과 GPT-4o를 활용한 대화형 AI 시스템 구축 실습 (2) 2025.05.22 [5월 3주차-5/20(2)]🎙️ Whisper + GPT-4로 회의록 자동 생성 시스템 만들기 (요약부터 교정, 워드 저장까지) (1) 2025.05.20 [5월 3주차-5/20(1)]AI 기반 문서 요약 및 회의록 자동화 시스템 (1) 2025.05.20 [5월 1주차-5/9]🌍 Streamlit으로 만드는 CO2 배출량 대시보드 (2) 2025.05.09