개발자

파이썬 오류 좀 고쳐주세요 ㅠㅠ

2024년 06월 11일조회 349

import time import requests import streamlit as st API_BASE_URL = "http://localhost:8000/qna" # Fastapi로 api 생성 def request_chat_api(user_message: str) -> str: url = API_BASE_URL resp = requests.post( url, json={ "user_message": user_message, }, ) resp = resp.json() print(resp) return resp["answer"] def init_streamlit(): st.set_page_config(page_title='Dr. KHU', page_icon='🩺') if "messages" not in st.session_state: st.session_state.messages = [{"role": "assistant", "content": "안녕하세요! Dr.seo입니다🩺"}] # Initialize chat history if "messages" not in st.session_state: st.session_state.messages = [] # Display chat messages from history on app rerun for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) def chat_main(): if message := st.chat_input(""): # Add user message to chat history st.session_state.messages.append({"role": "user", "content": message}) # Display user message in chat message container with st.chat_message("user"): st.markdown(message) # Display assistant response in chat message container assistant_response = request_chat_api(message) with st.chat_message("assistant"): message_placeholder = st.empty() full_response = "" for lines in assistant_response.split("\n"): for chunk in lines.split(): full_response += chunk + " " time.sleep(0.05) # Add a blinking cursor to simulate typing message_placeholder.markdown(full_response) full_response += "\n" message_placeholder.markdown(full_response) # Add assistant response to chat history st.session_state.messages.append( {"role": "assistant", "content": full_response} ) if __name__ == "__main__": init_streamlit() chat_main() 이 코드를 실행시키면 자꾸 AttributeError: st.session_state has no attribute "messages". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization 라고 뜨네요..

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

백승윤님의 프로필 사진

와! 커리어리 QnA에서 Streamlit 질문을 만나게 되다니 이제서야 본게 괜히 죄송스럽네요. (저 Streamlit 짱 좋아합니다.) 음 제가 일단 제 로컬에서 streamlit 버전 1.35.0 로 실행해봤는데 잘 실행되는 것 같은데요? 우선 버전은 바꿔보시겠어요? 그리고 코드 안에 st.session_state에 message가 없을 때, initialize해주는 코드가 좀 중복되는 것 같은데 그 부분도 우선 수정해보시겠어요? 에러랑은 관련 없을 것 같긴합니다만..

profile picture

익명

작성자

2024년 06월 18일

감사합니다!

최용빈님의 프로필 사진

제가 작성한 코드인데 여기서 보게 될 줄은 몰랐네요,,, 세션 초기화가 중복되는 거 말고는 다른 부분은 문제 없던 걸로 기억합니다! 개선하는 작업을 하는 레포가 있으니 여기 참고해주시면 될 거 같아요 :) https://github.com/whybe-choi/advanced-rag-project/blob/main/app.py

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 06월 11일

이 코드는 Streamlit을 사용해서 챗봇 애플리케이션을 구현하려 한 것으로 보입니다. 제공된 스택 트레이스에 따르면 `st.session_state.messages` 세션 상태를 초기화하지 않았다는 Error가 발생하고 있습니다. 코드를 보시면, `st.session_state.messages`는 `init_streamlit()` 함수에서 두 번 초기화되고 있는데, 중복된 코드라 하나를 제거해야 할 것 같습니다. 그런데 문제의 원인은 이 부분이 아니라, session state 기능 이용에 있어서 문제가 있는 것 같습니다. Streamlit의 session state 기능은 0.84.1 버전부터 추가된 기능입니다. 혹시 Streamlit의 버전이 낮아서 그럴 수도 있으니 확인해보세요. Streamlit의 버전을 확인하려면, 다음과 같은 명령을 터미널에서 실행하세요: ```bash pip show streamlit ``` 버전이 0.84.1 이하일 경우, Streamlit을 업그레이드하세요: ```bash pip install --upgrade streamlit ``` 그래도 문제가 해결되지 않으면, session state 변수를 사용하기 전에 세션 상태에 관한 체크 로직이 필요합니다: ```python if "messages" not in st.session_state: st.session_state["messages"] = [] ``` 위의 코드는 `"messages"` 키가 세션 상태에 없으면 빈 리스트를 초기화하도록 하는 코드입니다. 이 방식으로 session state를 안전하게 다룰 수 있습니다. 위의 조언을 모두 적용한 후에도 문제가 계속된다면 코드의 다른 부분이나, 코드 전반적인 구조와 로직 상의 문제일 가능성이 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!