이번 주는 파이썬 시각화 도구와 대시보드 제작, 그리고 프롬프트 엔지니어링까지 학습하는 것을 목표로 하였습니다.
Seaborn, Plotly, Folium을 통해 다양한 그래프와 지도 시각화를 실습하였고, Streamlit으로 대시보드를 구성해 실제 프로젝트에 적용 가능한 형태를 만들어 보았습니다.
또한 생성형 AI 활용을 위해 프롬프트 엔지니어링과 LangChain 개념을 접하며, 투자보고서 생성 서비스 예제를 실습했습니다.
이번 주에 실습하면서 겪었던 어려움이나 궁금증의 해결 과정을 기록하였습니다
다음은 대시보드 제작 실습을 수행하면서 겪었던 어려움 입니다
다음주에 있을 2차 프로젝트를 위해 대시보드 제작 실습을 우리 서비스에 맞게 간단하게 구현을 하는 시간을 가졌습니다.
프로젝트 주제가 ’AI챗봇 기반 심리케어 서비스‘인 만큼 대시보드에서 더 나아가 openai와 연동된 채팅화면까지 구현하고 싶었는데 streamlit의 채팅기능을 GPT api와 연동해서 채팅을 구현한다는 생각을 하지 못하였습니다.
따라서 다음과 같이 같이 1차 프로젝트에서 제작했던 html 기반 프로토타입을 ngrok을 이용하여 외부링크로 걸어둔 다음 streamlit의 채팅화면에서 프로토타입을 작동할 수 있게 해두었습니다.
### 채팅 화면 구성
elif selected_menu == '채팅하기':
st.subheader('Chat - 아래의 서비스를 이용하세요!')
# user_input = st.text_input('채팅을 입력하세요')
# if st.button('전송하기', icon='📤'):
# st.write(" 당신의 입력:", user_input)
NGROK_URL = "https://5217387dab82.ngrok-free.app"
st.components.v1.iframe(src=NGROK_URL, height=760, scrolling=True)
하지만 ngrok을 이용한 채팅 ui구현은 보안과 UI 통일성, 그리고 유지보수면에서 문제점이 있다고 생각을 하였습니다
해결방안을 고민하던 중에 강사님께서 스트림릿의 자체적인 채팅 기능에서 gpt와 연동을 해주는 코드가 올라와있는 깃헙을 공유해주셨고 내용을 참고하여 채팅 ui를 완성시킬 수 있었습니다. (내 걱정고 다르게 생각보다 코드가 간단했다)
### 채팅 화면 구성
elif selected_menu == '채팅하기':
st.subheader('Chat - 아래의 서비스를 이용하세요!')
openai_api_key = st.text_input("OpenAI API Key", key="chatbot_api_key", type="password")
if "messages" not in st.session_state:
st.session_state["messages"] = [{"role": "assistant", "content": "How can I help you?"}]
for msg in st.session_state.messages:
st.chat_message(msg["role"]).write(msg["content"])
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-3.5-turbo", 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)
Streamlit의 채팅 컴포넌트를 GPT API와 연동하니, 훨씬 안정적이고 확장성 있는 채팅 환경을 구현할 수 있었고 추후 프로젝트에서 사용자의 채팅데이터를 수집하기도 더 용이하겠다는 생각을 하였습니다.
또한 현재는 api키를 직접 입력하는 방식으로 만들어 두었는데 env파일안에 api키를 넣어두고 화면에서는 키 입력 없이 작동하도록 만들 계획이다

이번 주말에는 이번 대시보드 시각화 수업에서 배운 것을 복습하면서
다음주 시각화 대시보드 프로젝트 계획을 준비할 것입니다.