AI 세부 실습 10 - 대화형 챗봇과 Streamlit Chat UI

1 분 소요

대화형 챗봇과 Streamlit Chat UI

이 글은 다음 원본 실습 파일을 기준으로 정리합니다.

21_langchain_20250423_03_ConversationChain.py
21_langchain_20250423_03_ConversationChain_NewVer.py
21_streamlit_20250423_04_ChatBot.py
21_streamlit_20250423_04_ChatBot_container.py
21_streamlit_20250423_04_ChatBot_session.py
22_streamlit_20250424_01.py
22_streamlit_20250424_02_ChatBot_container.py
22_streamlit_20250424_03_ChatBot_streamlit_chat_module.py
24.langchain_20250424_04_stream_chat.py

이 실습은 한 번 묻고 끝나는 AI가 아니라, 대화 기록을 유지하는 챗봇을 만드는 내용입니다.

대화 기록이 필요한 이유

사용자가 이렇게 질문한다고 가정합니다.

톰 소여에 대해 알려줘.
그 인물의 친구는 누구야?

두 번째 질문의 “그 인물”은 앞 질문을 기억해야 이해할 수 있습니다. 그래서 챗봇에는 대화 기록이 필요합니다.

Streamlit session_state

Streamlit은 입력이 발생할 때마다 코드가 다시 실행됩니다. 대화 기록을 유지하려면 st.session_state에 저장합니다.

import streamlit as st

if "messages" not in st.session_state:
    st.session_state.messages = []

user_input = st.chat_input("질문을 입력하세요")

if user_input:
    st.session_state.messages.append({
        "role": "user",
        "content": user_input,
    })

Chat UI 출력

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.write(message["content"])

role은 보통 userassistant를 사용합니다.

스트리밍 출력

스트리밍은 답변이 완성될 때까지 기다렸다가 한 번에 보여주는 것이 아니라, 생성되는 대로 조금씩 보여주는 방식입니다.

답변 생성 중...
한 글자 또는 한 토큰씩 화면에 표시

사용자 입장에서는 AI가 실시간으로 답하는 느낌을 받습니다.

챗봇 구조

사용자 입력
-> 대화 기록에 추가
-> AI 모델 호출
-> AI 답변 저장
-> 화면에 전체 메시지 출력

RAG와 연결하면 문서 기반 챗봇이 됩니다.

정리

21-22, 24번 실습은 AI 앱의 사용자 경험을 개선하는 단계입니다. 대화 기록, Chat UI, 스트리밍을 이해하면 실제 서비스 형태의 챗봇에 가까워집니다.

댓글남기기