티스토리 뷰

1. 구현 방법 비교

ConversationBufferMemory RunnableWithMessageHistory
대화 히스토리를 내부적으로 저장하는 메모리 객체 대화 히스토리를 외부 데이터베이스 또는 메모리 저장소에서 
단일 사용자가 지속적인 대화를 할때 여러 사용자의 대화 세션을 관리해야 할 때
대화 히스토리를 외부 데이터베이스에 저장할 필요가 없을때 대화 히스토리를 외부 데이터 베이스나 클라우드에 저장할 때
간단한 대화형 애플리케이션에서 빠르게 시작하고 싶을 때 특정 세션별로 독립적인 히스토리가 필요할 때

 

2. ConversationBufferMemroy의 사용자별 메모리 분리

from langchain.memory import ConversationBufferMemory

# 사용자별 메모리 저장소
user_memory_store = {}

# 사용자 세션 ID 기반 메모리 생성 또는 가져오기
def get_user_memory(session_id):
    if session_id not in user_memory_store:
        user_memory_store[session_id] = ConversationBufferMemory()
    return user_memory_store[session_id]

# 사용자 세션 ID
session_id = "user_123"

# 사용자 메모리 가져오기
memory = get_user_memory(session_id)

# 대화 저장
memory.save_context({"input": "What is AI?"}, {"output": "AI stands for Artificial Intelligence."})

# 히스토리 출력
print(memory.chat_memory.messages)

우선 ConversationBufferMemory로 구현해보고 RunnableWithMessageHistory로 확장해봐야겠다.

 

3. 세션이란?

- 세션(session)은 사용자와 서버 간의 상호작용을 추적하기 위한 방법이다.

- 웹 애플리케이션에서 세션은 특정 사용자가 애플리케이션에 접속한 동안의 상태를 저장하고 관리하는 역할을 한다.

- 사용자별로 고유한 세션ID를 사용해 개별 데이터를 유지

- streamlit에서 st.session_state란? 세션 상태를 유지하기 위한 데이터 저장소이다.

* streamlit은 새로고침하면 st.session_state는 유지되지 않는다!!

 

4. streamlit에서 state를 유지하는 방법

1) URL parameters사용: URL에 세션ID나 데이터를 저장하고, 페이지가 새로 로드될때 이를 다시 복원

2) streamlit-cookies-manager 라이브러리를 사용해 쿠키를 설정하여 새로고침 후에도 데이터를 유지

3) 대화 기록이나 세션 상태를 외부 데이터 베이스에 저장하고, 새로고침 시 이를 다시 로드(Redis, Firebase등)

 

5. UUID

- UUID란? Universally Unique Identifier, 범용 고유 식별자

- 무작위로 UUID를 생성하는 라이브러리 : uuid

- 전 세계적으로 고유한 식별자를 생성하기 위한 표준

- 128비트 숫자로 구성되며, 일반적으로 36문자 길이의 하이픈(-)으로 구분된 5개 블록으로 표현됨

예) 550e8400-e29b-41d4-a716-446655440000

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함